[
  {
    "path": ".gitignore",
    "content": "## Build generated\nbuild/\nDerivedData\n\n## Various settings\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n\n## Other\n*.xccheckout\n*.moved-aside\n*.xcuserstate\n*.xcscmblueprint\n\n## Obj-C/Swift specific\n*.hmap\n*.ipa\n\n# Carthage\nCarthage/Build\n"
  },
  {
    "path": "BrewMobile/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  BrewMobile\n//\n//  Created by Ágnes Vásárhelyi on 19/08/14.\n//  Copyright (c) 2014 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n                            \n    var window: UIWindow?\n    var brewDesignerNavigationController: UINavigationController!\n    var brewTabBarController: UITabBarController!\n    \n    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {\n        brewTabBarController = UITabBarController()\n        brewDesignerNavigationController = UINavigationController()\n        \n        let brewManager = BrewManager()\n        let brewViewModel = BrewViewModel(brewManager: brewManager)\n        let brewDesignerViewModel = BrewDesignerViewModel(brewManager: brewManager)\n\n        let brewViewController = BrewViewController(brewViewModel: brewViewModel)\n        let brewDesignerViewController = BrewDesignerViewController(brewDesignerViewModel: brewDesignerViewModel)\n\n        brewDesignerNavigationController.pushViewController(brewDesignerViewController, animated: false)\n\n        brewTabBarController.setViewControllers([brewViewController, brewDesignerNavigationController], animated: false)\n        \n        window = UIWindow(frame: UIScreen.mainScreen().bounds)\n        window!.rootViewController = brewTabBarController\n        window!.makeKeyAndVisible()\n\n        return true\n    }\n\n    func applicationWillResignActive(application: UIApplication) {\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    func applicationDidEnterBackground(application: UIApplication) {\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    func applicationWillEnterForeground(application: UIApplication) {\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    func applicationDidBecomeActive(application: UIApplication) {\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    func applicationWillTerminate(application: UIApplication) {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    }\n\n\n}\n\n"
  },
  {
    "path": "BrewMobile/BrewManager.swift",
    "content": "//\n//  BrewManager.swift\n//  BrewMobile\n//\n//  Created by Agnes Vasarhelyi on 03/01/15.\n//  Copyright (c) 2015 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport Foundation\nimport SwiftyJSON\nimport ReactiveCocoa\nimport Result\nimport SocketIOClientSwift\n\nlet tempChangedEvent = \"temperature_changed\"\nlet brewChangedEvent = \"brew_changed\"\nlet pwmChangedEvent = \"pwm_changed\"\nlet host = \"https://brewcore-demo.herokuapp.com/\"\n\nclass BrewManager : NSObject {\n    var syncBrewAction: Action<BrewState, NSData, NSError>!\n    var stopBrewAction: Action<Void, NSData, NSError>!\n    var socket: SocketIOClient\n    let temp = MutableProperty<Float>(0.0)\n    let brew = MutableProperty(BrewState())\n    let pwm = MutableProperty<Float>(0.0)\n\n    override init() {\n        socket = SocketIOClient(socketURL:NSURL(string: host)!)\n\n        super.init()\n\n        syncBrewAction = Action { brewState in\n            if let jsonData:AnyObject = BrewState.encode(brewState).value {\n                let requestResult = self.requestWithBody(\"api/brew\", method: \"POST\", body: JSON(jsonData))\n                if let requestResultValue = requestResult.value {\n                    return NSURLSession.sharedSession().rac_dataWithRequest(requestResultValue)\n                        .map { data, URLResponse in\n                            return data\n                        }\n                }\n            }\n            fatalError(\"jsonData is nil\")\n        }\n\n        stopBrewAction = Action { brewState in\n            if let request = self.requestWithBody(\"api/brew/stop\", method: \"PATCH\", body: \"\").value {\n                return NSURLSession.sharedSession().rac_dataWithRequest(request)\n                    .map { data, URLResponse in\n                        return data\n                    }\n            }\n            fatalError(\"request is nil\")\n        }\n    }\n\n    //Mark: HTTP\n    \n    private func requestWithBody(path: String, method: String, body: JSON) -> Result<NSMutableURLRequest, NSError> {\n        let request : NSMutableURLRequest = NSMutableURLRequest()\n\n        request.URL = NSURL(string: host + path)\n        request.HTTPMethod = method\n        if method == \"POST\" {\n            do {\n                request.HTTPBody = try body.rawData(options: .PrettyPrinted)\n            } catch let error as NSError {\n                return Result(error: error)\n            }\n        }\n        \n        return Result(request)\n    }\n    \n    // MARK: WebSocket\n    \n    func connectToHost() {\n        socket.connect()\n\n        socket.on(tempChangedEvent) { data, ack in\n            if (data.count > 0) {\n                if let temp = data[0] as? NSNumber {\n                    self.temp.value = temp.floatValue\n                }\n            }\n        }\n        \n        socket.on(brewChangedEvent) { data, ack in\n            if (data.count > 0) {\n                self.brew.value = ContentParser.parseBrewState(JSON(data[0]))\n            }\n        }\n        \n        socket.on(pwmChangedEvent) { data, ack in\n            if (data.count > 0) {\n                if let pwm = data[0] as? NSNumber {\n                    self.pwm.value = pwm.floatValue\n                }\n            }\n        }\n        \n        socket.on(\"connect\") { data, ack in\n            print(\"Connected to \\(host)\")\n        }\n\n        socket.on(\"disconnect\") { data, ack in\n            print(\"Disconnected from \\(host)\")\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "BrewMobile/ContentParser.swift",
    "content": "//\n//  ContentParser.swift\n//  BrewMobile\n//\n//  Created by Ágnes Vásárhelyi on 19/08/14.\n//  Copyright (c) 2014 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport Foundation\nimport ISO8601\nimport SwiftyJSON\nimport Result\n\n// MARK: JSONDecodable\n\nprotocol JSONDecodable {\n    static func decode(json: JSON) -> Result<Self, NSError>\n}\n\n// MARK: JSONEncodable\n\nprotocol JSONEncodable {\n    static func encode(object: Self) -> Result<AnyObject, NSError>\n}\n\ntypealias PhaseArray = [BrewPhase]\n\nclass ContentParser {\n    class func parseBrewState(brewJSON: JSON) -> BrewState {\n        return BrewState.decode(brewJSON).value!\n    }\n    \n    class func parseBrewPhase(brewPhaseJSON: JSON) -> BrewPhase {\n        return BrewPhase.decode(brewPhaseJSON).value!\n    }\n    \n    class func formatDate(dateString: String) -> String {\n        if dateString.characters.count > 0 {\n            let isoDateFormatter = ISO8601DateFormatter()\n            let formattedDate = isoDateFormatter.dateFromString(dateString)\n            let dateStringFormatter = NSDateFormatter()\n            dateStringFormatter.dateFormat = \"HH:mm\"\n            let formattedDateString = dateStringFormatter.stringFromDate(formattedDate!)\n            \n            return formattedDateString\n        }\n        return \"\"\n    }\n\n}\n"
  },
  {
    "path": "BrewMobile/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"icon58.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"iphone_spotlight@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"iphone_app_icon@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"icon180.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "BrewMobile/Images.xcassets/DesignerIcon.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"edit-disabled-2.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\",\n      \"filename\" : \"edit-disabled-1.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\",\n      \"filename\" : \"edit-disabled.png\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "BrewMobile/Images.xcassets/HopIcon.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"hops-disabled2-2.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\",\n      \"filename\" : \"hops-disabled2-1.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\",\n      \"filename\" : \"hops-disabled2.png\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "BrewMobile/Images.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"filename\" : \"splash@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"retina4\",\n      \"filename\" : \"splash-568h@2x.png\",\n      \"minimum-system-version\" : \"7.0\",\n      \"orientation\" : \"portrait\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "BrewMobile/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>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>brewfactory</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>2.0.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>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": "BrewMobile/Model/BrewPhase.swift",
    "content": "//\n//  BrewPhase.swift\n//  BrewMobile\n//\n//  Created by Ágnes Vásárhelyi on 14/09/14.\n//  Copyright (c) 2014 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\nimport Result\nimport SwiftyJSON\n\nenum State: Int {\n    case INACTIVE = 0\n    case HEATING\n    case ACTIVE\n    case FINISHED\n    \n    func stateDescription() -> String {\n        switch self {\n        case .INACTIVE:\n            return \"\"\n        case .HEATING:\n            return \"heating\"\n        case .ACTIVE:\n            return \"active\"\n        case .FINISHED:\n            return \"finished\"\n        }\n    }\n    \n    func bgColor() -> UIColor {\n        switch self {\n        case .INACTIVE:\n            return UIColor(red: 245.0 / 255.0, green:245.0 / 255.0, blue:245.0 / 255.0, alpha: 1.0)\n        case .HEATING:\n            return UIColor(red: 240.0 / 255.0,  green:173.0 / 255.0, blue:78.0 / 255.0, alpha: 1.0)\n        case .ACTIVE:\n            return UIColor(red: 66.0 / 255.0, green:139.0 / 255.0, blue:202.0 / 255.0, alpha: 1.0)\n        case .FINISHED:\n            return UIColor(red: 92.0 / 255.0, green:184.0 / 255.0, blue:92.0 / 255.0, alpha: 1.0)\n        }\n    }\n    \n}\n\n// MARK: Equatable\n\nfunc == (left: BrewPhase, right: BrewPhase) -> Bool {\n    return (left.jobEnd == right.jobEnd) && (left.min == right.min) && (left.temp == right.temp) && (left.tempReached == right.tempReached) && (left.inProgress == right.inProgress)\n}\n\nfinal class BrewPhase: Equatable, JSONDecodable, JSONEncodable {\n    var jobEnd: String\n    var min: Int\n    var temp: Float\n    var tempReached: Bool\n    var state: State\n    var inProgress: Bool\n    \n    init() {\n        jobEnd = \"\"\n        min = 0\n        temp = 0\n        tempReached = false\n        state = State.INACTIVE\n        inProgress = false\n    }\n    \n    init(jobEnd: String, min: Int, temp: Float, tempReached: Bool, inProgress: Bool) {\n        self.jobEnd = jobEnd\n        self.min = min\n        self.temp = temp\n        self.tempReached = tempReached\n        \n        self.state = { () -> State in\n            switch (inProgress, tempReached)  {\n            case (true, false):\n                return State.HEATING\n            case (true, true):\n                return State.ACTIVE\n            case (false, true):\n                return State.FINISHED\n            case (false, false):\n                fallthrough\n            default:\n                return State.INACTIVE\n            }\n        } ()\n        self.inProgress = inProgress\n    }\n    \n    // MARK: JSONDecodable\n    \n    class func decode(json: JSON) -> Result<BrewPhase, NSError> {\n        return Result(BrewPhase(\n            jobEnd: ContentParser.formatDate(json[\"jobEnd\"].stringValue),\n            min: json[\"min\"].intValue,\n            temp: json[\"temp\"].floatValue,\n            tempReached: json[\"tempReached\"].boolValue,\n            inProgress: json[\"inProgress\"].boolValue)\n        )\n    }\n    \n    // MARK: JSONEncodable\n    \n    class func encode(object: BrewPhase) -> Result<AnyObject, NSError> {\n        var phase = [String: AnyObject]()\n        \n        phase[\"min\"] = Int(object.min)\n        phase[\"temp\"] = Float(object.temp)\n\n        return Result(phase)\n    }\n    \n}\n"
  },
  {
    "path": "BrewMobile/Model/BrewState.swift",
    "content": "//\n//  BrewState.swift\n//  BrewMobile\n//\n//  Created by Ágnes Vásárhelyi on 14/09/14.\n//  Copyright (c) 2014 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport Foundation\nimport ReactiveCocoa\nimport Result\nimport SwiftyJSON\n\n// MARK: Equatable\n\nfunc == (left: BrewState, right: BrewState) -> Bool {\n    let phasesAreIdentical = { () -> Bool in\n        for i in 0...left.phases.value.count - 1 {\n            if left.phases.value[i] != right.phases.value[i] {\n                return false\n            }\n        }\n        return true\n    }()\n    \n    return (left.name.value == right.name.value) &&\n        (left.startTime.value == right.startTime.value) &&\n        phasesAreIdentical &&\n        (left.paused.value == right.paused.value) &&\n        (left.inProgress.value == right.inProgress.value)\n}\n\nfinal class BrewState: Equatable, JSONDecodable, JSONEncodable  {\n    var name: MutableProperty<String>\n    var startTime: MutableProperty<String>\n    var phases: MutableProperty<PhaseArray>\n    var paused: MutableProperty<Bool>\n    var inProgress: MutableProperty<Bool>\n    \n    init() {\n        name = MutableProperty(\"\")\n        startTime = MutableProperty(\"\")\n        phases = MutableProperty(PhaseArray())\n        paused = MutableProperty(false)\n        inProgress = MutableProperty(false)\n    }\n    \n    init(name: String, startTime: String, phases: PhaseArray, paused: Bool, inProgress: Bool) {\n        self.name = MutableProperty(name)\n        self.startTime = MutableProperty(startTime)\n        self.phases = MutableProperty(phases)\n        self.paused = MutableProperty(paused)\n        self.inProgress = MutableProperty(inProgress)\n    }\n    \n    init(name: MutableProperty<String>,\n        startTime: MutableProperty<String>,\n        phases: MutableProperty<PhaseArray>,\n        paused: Bool, inProgress: Bool) {\n        self.name = name\n        self.startTime = startTime\n        self.phases = phases\n        self.paused = MutableProperty(paused)\n        self.inProgress = MutableProperty(inProgress)\n    }\n\n    // MARK: JSONDecodable\n\n    class func decode(json: JSON) -> Result<BrewState, NSError> {\n        return Result(BrewState(\n            name: json[\"name\"].stringValue,\n            startTime: ContentParser.formatDate(json[\"startTime\"].stringValue),\n            phases: json[\"phases\"].arrayValue.map { (JSON rawPhase) -> BrewPhase in\n                return ContentParser.parseBrewPhase(rawPhase)\n            },\n            paused: json[\"paused\"].boolValue,\n            inProgress: json[\"inProgress\"].boolValue)\n        )\n    }\n\n    // MARK: JSONEncodable\n    \n    class func encode(object: BrewState) -> Result<AnyObject, NSError> {\n        var brew = [String: AnyObject]()\n       \n        brew[\"name\"] = object.name.value\n        brew[\"startTime\"] = object.startTime.value\n        \n        brew[\"phases\"] = object.phases.value.map { (BrewPhase phase) -> AnyObject in\n            return BrewPhase.encode(phase).value!\n        }\n        \n        return Result(brew)\n    }\n\n}\n"
  },
  {
    "path": "BrewMobile/RACUtils/RAC.swift",
    "content": "//\n//  RAC.swift\n//\n//  Created by Colin Eberhardt on 15/07/2014.\n//  Copyright (c) 2014 Colin Eberhardt. All rights reserved.\n//\n//  Original source can be found at:\n//  https://github.com/ColinEberhardt/ReactiveTwitterSearch/blob/master/ReactiveTwitterSearch/Util/UIKitExtensions.swift\n//\n\nimport Foundation\nimport ReactiveCocoa\nimport UIKit\n\n\n// see https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2704\nimport enum Result.NoError\npublic typealias NoError = Result.NoError\n\nstruct AssociationKey {\n    static var hidden: UInt8 = 1\n    static var date: UInt8 = 2\n    static var text: UInt8 = 3\n}\n\nfunc lazyAssociatedProperty<T: AnyObject>(host: AnyObject, key: UnsafePointer<Void>, factory: ()->T) -> T {\n    return objc_getAssociatedObject(host, key) as? T ?? {\n        let associatedProperty = factory()\n        objc_setAssociatedObject(host, key, associatedProperty, .OBJC_ASSOCIATION_RETAIN)\n        return associatedProperty\n        }()\n}\n\nfunc lazyMutableProperty<T>(host: AnyObject, key: UnsafePointer<Void>, setter: T -> (), getter: () -> T) -> MutableProperty<T> {\n    return lazyAssociatedProperty(host, key: key) {\n        let property = MutableProperty<T>(getter())\n        property.producer\n            .startWithNext {\n                newValue in\n                setter(newValue)\n            }\n        return property\n    }\n}\n\nextension UIView {\n    public var rac_hidden: MutableProperty<Bool> {\n        return lazyMutableProperty(self, key: &AssociationKey.hidden, setter: { self.hidden = $0 }, getter: { self.hidden })\n    }\n}\n\nextension UILabel {\n    public var rac_text: MutableProperty<String> {\n        return lazyMutableProperty(self, key: &AssociationKey.text, setter: { self.text = $0 }, getter: { self.text ?? \"\" })\n    }\n}\n\n\nextension UITextField {\n    func rac_textSignalProducer() -> SignalProducer<String, NoError> {\n        return self.rac_textSignal().toSignalProducer()\n            .map { $0 as! String }\n            .flatMapError { _ in SignalProducer<String, NoError>.empty }\n    }\n}\n\nextension UITextField {\n    public var rac_text: MutableProperty<String> {\n        return lazyAssociatedProperty(self, key: &AssociationKey.text) {\n            \n            self.addTarget(self, action: \"changed\", forControlEvents: UIControlEvents.EditingChanged)\n\n            let property = MutableProperty<String>(self.text ?? \"\")\n            property.producer\n                .startWithNext { newValue in\n                    self.text = newValue\n                }\n            return property\n        }\n    }\n    \n    func changed() {\n        rac_text.value = self.text!\n    }\n}\n"
  },
  {
    "path": "BrewMobile/View/BrewCell.swift",
    "content": "//\n//  BrewCell.swift\n//  BrewMobile\n//\n//  Created by Agnes Vasarhelyi on 04/01/15.\n//  Copyright (c) 2015 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport UIKit\n\nclass BrewCell: UITableViewCell {\n    @IBOutlet weak var minLabel: UILabel!\n    @IBOutlet weak var statusLabel: UILabel!\n    \n    func setTextColorForAllLabels(color: UIColor) {\n        minLabel.textColor = color\n        statusLabel.textColor = color\n    }\n}\n"
  },
  {
    "path": "BrewMobile/View/BrewCell.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6724\" systemVersion=\"14B25\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6711\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"blue\" hidesAccessoryWhenEditing=\"NO\" indentationLevel=\"1\" indentationWidth=\"0.0\" reuseIdentifier=\"BrewCell\" rowHeight=\"78\" id=\"b8g-7p-itd\" customClass=\"BrewCell\" customModule=\"BrewMobile\" customModuleProvider=\"target\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"78\"/>\n            <autoresizingMask key=\"autoresizingMask\"/>\n            <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"b8g-7p-itd\" id=\"wqs-6J-HDc\">\n                <autoresizingMask key=\"autoresizingMask\"/>\n                <subviews>\n                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" misplaced=\"YES\" text=\"\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" numberOfLines=\"2\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" preferredMaxLayoutWidth=\"291\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hVV-Lx-i2u\" userLabel=\"statusLabel\">\n                        <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"17\"/>\n                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <nil key=\"highlightedColor\"/>\n                    </label>\n                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" text=\"\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" preferredMaxLayoutWidth=\"0.0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bOB-df-e3t\" userLabel=\"minLabel\">\n                        <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"17\"/>\n                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <nil key=\"highlightedColor\"/>\n                    </label>\n                </subviews>\n                <constraints>\n                    <constraint firstItem=\"hVV-Lx-i2u\" firstAttribute=\"leading\" secondItem=\"bOB-df-e3t\" secondAttribute=\"trailing\" constant=\"5\" id=\"4b2-Ha-rDO\"/>\n                    <constraint firstItem=\"bOB-df-e3t\" firstAttribute=\"top\" secondItem=\"wqs-6J-HDc\" secondAttribute=\"top\" constant=\"28\" id=\"CTE-bi-sMy\"/>\n                    <constraint firstItem=\"hVV-Lx-i2u\" firstAttribute=\"top\" secondItem=\"wqs-6J-HDc\" secondAttribute=\"top\" constant=\"28\" id=\"Kr3-nb-dLO\"/>\n                    <constraint firstAttribute=\"trailing\" secondItem=\"hVV-Lx-i2u\" secondAttribute=\"trailing\" constant=\"8\" id=\"f0A-rt-cnw\"/>\n                    <constraint firstItem=\"bOB-df-e3t\" firstAttribute=\"leading\" secondItem=\"wqs-6J-HDc\" secondAttribute=\"leading\" constant=\"16\" id=\"lcN-dt-6Z9\"/>\n                </constraints>\n            </tableViewCellContentView>\n            <connections>\n                <outlet property=\"minLabel\" destination=\"bOB-df-e3t\" id=\"wtC-sI-XDG\"/>\n                <outlet property=\"statusLabel\" destination=\"hVV-Lx-i2u\" id=\"PZI-qE-Lhb\"/>\n            </connections>\n        </tableViewCell>\n    </objects>\n</document>\n"
  },
  {
    "path": "BrewMobile/View/BrewDesignerViewController.swift",
    "content": "//\n//  BrewDesignerViewController.swift\n//  BrewMobile\n//\n//  Created by Ágnes Vásárhelyi on 07/11/14.\n//  Copyright (c) 2014 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport UIKit\nimport ISO8601\nimport ReactiveCocoa\n\nclass BrewDesignerViewController : UIViewController, UITableViewDataSource, UITableViewDelegate, UIGestureRecognizerDelegate {\n\n    @IBOutlet weak var nameTextField: UITextField!\n    @IBOutlet weak var startTimeTextField: UITextField!\n    @IBOutlet weak var phasesTableView: UITableView!\n    @IBOutlet weak var startTimePicker: UIDatePicker!\n    @IBOutlet weak var pickerBgView: UIView!\n    @IBOutlet weak var editButton: UIButton!\n    @IBOutlet weak var syncButton: UIButton!\n    @IBOutlet weak var trashButton: UIButton!\n    @IBOutlet weak var addButton: UIButton!\n    @IBOutlet weak var tapGestureRecognizer: UITapGestureRecognizer!\n\n    let brewDesignerViewModel: BrewDesignerViewModel\n    let brewManager: BrewManager\n    \n    var cocoaActionTrash: CocoaAction!\n    var cocoaActionEdit: CocoaAction!\n    var cocoaActionAdd: CocoaAction!\n\n    let tableViewEditing = MutableProperty(false)\n\n    init(brewDesignerViewModel: BrewDesignerViewModel) {\n        self.brewDesignerViewModel = brewDesignerViewModel\n        self.brewManager = brewDesignerViewModel.brewManager\n        \n        super.init(nibName:\"BrewDesignerViewController\", bundle: nil)\n        self.tabBarItem = UITabBarItem(title: \"Designer\", image: UIImage(named: \"DesignerIcon\"), tag: 0)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        let nib = UINib(nibName: \"PhaseCell\", bundle: nil)\n        phasesTableView.registerNib(nib, forCellReuseIdentifier: \"PhaseCell\")\n        \n        let addAction = Action<Void, Void, NSError> {\n            if let navigationController = self.navigationController {\n                navigationController.pushViewController(BrewNewPhaseViewController(brewDesignerViewModel: self.brewDesignerViewModel), animated: true)\n            }\n            return SignalProducer.empty\n        }\n\n        let editAction = Action<Void, Void, NSError>(enabledIf: self.brewDesignerViewModel.hasPhases, {\n            self.phasesTableView.editing = !self.phasesTableView.editing\n            self.editButton.setTitle(self.phasesTableView.editing ? \"Done\" : \"Edit\", forState: .Normal)\n            return SignalProducer.empty\n        })\n\n        let trashAction = Action<Void, Void, NSError>(enabledIf: self.brewDesignerViewModel.hasPhases, {\n            self.brewDesignerViewModel.phases.value = PhaseArray()\n            self.nameTextField.text = \"\"\n            self.phasesTableView.reloadData()\n            \n            return SignalProducer.empty\n        })\n\n        cocoaActionTrash = CocoaAction(trashAction, input: ())\n        cocoaActionEdit = CocoaAction(editAction, input: ())\n        cocoaActionAdd = CocoaAction(addAction, input: ())\n\n        syncButton.addTarget(self.brewDesignerViewModel.cocoaActionSync, action: CocoaAction.selector, forControlEvents: .TouchUpInside)\n        trashButton.addTarget(cocoaActionTrash, action: CocoaAction.selector, forControlEvents: .TouchUpInside)\n        editButton.addTarget(cocoaActionEdit, action: CocoaAction.selector, forControlEvents: .TouchUpInside)\n        addButton.addTarget(cocoaActionAdd, action: CocoaAction.selector, forControlEvents: .TouchUpInside)\n\n        self.brewManager.syncBrewAction.errors\n            .observeOn(UIScheduler())\n            .observeNext { error in\n                UIAlertView(title: \"Error creating brew\", message: error.localizedDescription, delegate: nil, cancelButtonTitle: \"OK\").show()\n            }\n\n        self.brewDesignerViewModel.hasPhases.producer\n            .observeOn(UIScheduler())\n            .startWithNext { hasPhases in\n                if !self.phasesTableView.editing {\n                    self.phasesTableView.reloadData()\n                }\n\n                if !(hasPhases as Bool) {\n                    self.phasesTableView.editing = false\n                }\n            }\n\n        self.brewDesignerViewModel.name <~ self.nameTextField.rac_textSignalProducer()\n\n        let startTimeTextFieldSignalProducer = self.startTimeTextField.rac_signalForControlEvents(.EditingDidBegin).toSignalProducer()\n        startTimeTextFieldSignalProducer\n            .startWithNext { _ in\n                self.dismissKeyboards()\n            }\n    \n        self.pickerBgView.rac_hidden <~ startTimeTextFieldSignalProducer\n            .map { _ in false }\n            .flatMapError { _ in SignalProducer<Bool, NoError>.empty }\n\n        let pickerDateSignalProducer = self.startTimePicker.rac_signalForControlEvents(.ValueChanged).toSignalProducer()\n            .map { picker in\n                if let datePicker = picker as? UIDatePicker {\n                    return datePicker.date\n                }\n                fatalError(\"this should not happen\")\n            }\n            .flatMapError { _ in SignalProducer<NSDate, NoError>.empty }\n        \n        let nowDate = NSDate()\n        self.startTimeTextField.rac_text.value = self.formatDateToShow(nowDate)\n        self.brewDesignerViewModel.startTime.value = self.formatDateToUpdate(nowDate)\n\n        self.startTimeTextField.rac_text <~ pickerDateSignalProducer\n            .map { self.formatDateToShow($0) }\n            .flatMapError { _ in SignalProducer<String, NoError>.empty }\n\n        self.brewDesignerViewModel.startTime <~ pickerDateSignalProducer\n            .map { date in\n                return self.formatDateToUpdate(date)\n            }\n            .flatMapError { _ in SignalProducer<String, NoError>.empty }\n    }\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n    }\n\n    func dismissKeyboards() {\n        self.view.endEditing(true)\n        self.pickerBgView.hidden = true\n    }\n\n    func formatDateToShow(date: NSDate) -> String {\n        let dateFormatter = NSDateFormatter()\n        dateFormatter.dateFormat = \"YYYY.MM.dd. HH:mm\"\n        return dateFormatter.stringFromDate(date as NSDate)\n    }\n    \n    func formatDateToUpdate(date: NSDate) -> String {\n        let isoDateFormatter = ISO8601DateFormatter()\n        isoDateFormatter.defaultTimeZone = NSTimeZone.defaultTimeZone()\n        isoDateFormatter.includeTime = true\n        \n        return isoDateFormatter.stringFromDate(date)\n    }\n\n    // MARK: UITableViewDataSource\n    \n    func numberOfSectionsInTableView(tableView: UITableView) -> Int {\n        return 1\n    }\n    \n    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return self.brewDesignerViewModel.phases.value.count\n    }\n    \n    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {\n        if let cell = tableView.dequeueReusableCellWithIdentifier(\"PhaseCell\", forIndexPath: indexPath) as? PhaseCell {\n            if self.brewDesignerViewModel.phases.value.count > indexPath.row  {\n                let phase = self.brewDesignerViewModel.phases.value[indexPath.row]\n                cell.phaseLabel.text = \"\\(indexPath.row + 1). \\(phase.min) min \\(phase.temp) ˚C\"\n            }\n            return cell\n        }\n        fatalError(\"every cell must be a PhaseCell\")\n    }\n    \n    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return \"Phases\"\n    }\n    \n    func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {\n        return true\n    }\n    \n    func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {\n        return true\n    }\n    \n    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {\n        if editingStyle == UITableViewCellEditingStyle.Delete {\n            if self.brewDesignerViewModel.phases.value.count > indexPath.row {\n                var newPhases = self.brewDesignerViewModel.phases.value\n                newPhases.removeAtIndex(indexPath.row)\n                self.brewDesignerViewModel.phases.value = newPhases\n                tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)\n            }\n        }\n    }\n    \n    func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {\n        let destinationPhase = self.brewDesignerViewModel.phases.value[destinationIndexPath.row]\n\n        var newPhases = self.brewDesignerViewModel.phases.value\n        newPhases[destinationIndexPath.row] = newPhases[sourceIndexPath.row]\n        newPhases[sourceIndexPath.row] = destinationPhase\n        self.brewDesignerViewModel.phases.value = newPhases\n        tableView.reloadData()\n    }\n    \n    //MARK: UIGestureRecognizerDelegate\n\n    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {\n        if !touch.view!.isDescendantOfView(nameTextField) && !touch.view!.isDescendantOfView(pickerBgView) {\n            dismissKeyboards()\n            return false\n        }\n        return true\n    }\n    \n}\n"
  },
  {
    "path": "BrewMobile/View/BrewDesignerViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"7706\" systemVersion=\"14E46\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"7703\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"BrewDesignerViewController\" customModule=\"BrewMobile\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"addButton\" destination=\"CaM-o5-SSY\" id=\"Bbm-Lm-NTW\"/>\n                <outlet property=\"editButton\" destination=\"68X-OV-UbA\" id=\"qCX-14-j5q\"/>\n                <outlet property=\"nameTextField\" destination=\"f8R-9A-fPl\" id=\"Kk1-HL-uc0\"/>\n                <outlet property=\"phasesTableView\" destination=\"UXe-dM-kaf\" id=\"Tko-l3-4jh\"/>\n                <outlet property=\"pickerBgView\" destination=\"tcU-YS-7RG\" id=\"Bo8-J4-GIm\"/>\n                <outlet property=\"startTimePicker\" destination=\"fxA-u9-6nI\" id=\"eES-bj-56M\"/>\n                <outlet property=\"startTimeTextField\" destination=\"bis-dx-s8B\" id=\"04h-QC-sKW\"/>\n                <outlet property=\"syncButton\" destination=\"KaG-Z3-g4V\" id=\"kXG-dc-Mfp\"/>\n                <outlet property=\"tapGestureRecognizer\" destination=\"jwt-nf-kvG\" id=\"CxT-hI-u1X\"/>\n                <outlet property=\"trashButton\" destination=\"Nxx-XB-evf\" id=\"Nln-H0-xZT\"/>\n                <outlet property=\"view\" destination=\"ZQC-xj-gZE\" id=\"LP0-VA-bNp\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"ZQC-xj-gZE\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"504\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" misplaced=\"YES\" scrollEnabled=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DqD-XB-qDa\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"2\" width=\"320\" height=\"456\"/>\n                    <subviews>\n                        <view contentMode=\"scaleToFill\" misplaced=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yCN-V7-n4t\" userLabel=\"separator\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"191\" width=\"320\" height=\"1\"/>\n                            <color key=\"backgroundColor\" red=\"0.75686274509999996\" green=\"0.75686274509999996\" blue=\"0.75686274509999996\" alpha=\"0.40000000000000002\" colorSpace=\"calibratedRGB\"/>\n                            <constraints>\n                                <constraint firstAttribute=\"height\" constant=\"1\" id=\"Mej-T1-nnG\"/>\n                            </constraints>\n                        </view>\n                    </subviews>\n                    <gestureRecognizers/>\n                    <constraints>\n                        <constraint firstItem=\"yCN-V7-n4t\" firstAttribute=\"leading\" secondItem=\"DqD-XB-qDa\" secondAttribute=\"leading\" id=\"SlQ-ek-MX1\"/>\n                        <constraint firstAttribute=\"trailing\" secondItem=\"yCN-V7-n4t\" secondAttribute=\"trailing\" id=\"T6V-Ct-Qqf\"/>\n                        <constraint firstItem=\"yCN-V7-n4t\" firstAttribute=\"top\" secondItem=\"DqD-XB-qDa\" secondAttribute=\"top\" constant=\"129\" id=\"laV-Ag-WY3\"/>\n                        <constraint firstItem=\"yCN-V7-n4t\" firstAttribute=\"centerX\" secondItem=\"DqD-XB-qDa\" secondAttribute=\"centerX\" id=\"oBN-kh-LHx\"/>\n                        <constraint firstAttribute=\"bottom\" secondItem=\"yCN-V7-n4t\" secondAttribute=\"bottom\" constant=\"264\" id=\"sbZ-pM-SEq\"/>\n                    </constraints>\n                </scrollView>\n                <view contentMode=\"scaleToFill\" misplaced=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Dh1-ev-PAu\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"2\" width=\"320\" height=\"456\"/>\n                    <subviews>\n                        <view contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AxG-qN-0ml\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"23\" width=\"320\" height=\"85\"/>\n                            <subviews>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"Name\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"K3A-HV-zvz\">\n                                    <rect key=\"frame\" x=\"31\" y=\"10\" width=\"49\" height=\"21\"/>\n                                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"17\"/>\n                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"Start\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"LOT-q8-bjg\">\n                                    <rect key=\"frame\" x=\"31\" y=\"54\" width=\"40\" height=\"21\"/>\n                                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"17\"/>\n                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bis-dx-s8B\" userLabel=\"startTime\">\n                                    <rect key=\"frame\" x=\"110\" y=\"50\" width=\"202\" height=\"30\"/>\n                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                    <textInputTraits key=\"textInputTraits\"/>\n                                </textField>\n                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"f8R-9A-fPl\" userLabel=\"nameText\">\n                                    <rect key=\"frame\" x=\"110\" y=\"6\" width=\"202\" height=\"30\"/>\n                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                    <textInputTraits key=\"textInputTraits\"/>\n                                </textField>\n                                <view contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vt5-oG-P3B\" userLabel=\"separator\">\n                                    <rect key=\"frame\" x=\"29\" y=\"42\" width=\"290\" height=\"1\"/>\n                                    <color key=\"backgroundColor\" red=\"0.75686274509999996\" green=\"0.75686274509999996\" blue=\"0.75686274509999996\" alpha=\"0.40000000000000002\" colorSpace=\"calibratedRGB\"/>\n                                </view>\n                                <view contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Z1k-br-eu8\" userLabel=\"separator\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"1\"/>\n                                    <color key=\"backgroundColor\" red=\"0.75686274509999996\" green=\"0.75686274509999996\" blue=\"0.75686274509999996\" alpha=\"0.40000000000000002\" colorSpace=\"calibratedRGB\"/>\n                                </view>\n                                <view contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Kwn-Kv-JBi\" userLabel=\"separator\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"84\" width=\"320\" height=\"1\"/>\n                                    <color key=\"backgroundColor\" red=\"0.75686274509999996\" green=\"0.75686274509999996\" blue=\"0.75686274509999996\" alpha=\"0.40000000000000002\" colorSpace=\"calibratedRGB\"/>\n                                </view>\n                            </subviews>\n                            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        </view>\n                        <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" alwaysBounceVertical=\"YES\" showsHorizontalScrollIndicator=\"NO\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" allowsSelection=\"NO\" rowHeight=\"60\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UXe-dM-kaf\" userLabel=\"phasesTableView\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"131\" width=\"320\" height=\"275\"/>\n                            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            <sections/>\n                            <connections>\n                                <outlet property=\"dataSource\" destination=\"-1\" id=\"OOx-fJ-lLE\"/>\n                                <outlet property=\"delegate\" destination=\"-1\" id=\"9vh-cm-x3z\"/>\n                            </connections>\n                        </tableView>\n                    </subviews>\n                    <color key=\"backgroundColor\" red=\"0.98912292820000003\" green=\"0.98912292820000003\" blue=\"0.98912292820000003\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"410\" id=\"y6X-KX-B6k\"/>\n                    </constraints>\n                </view>\n                <view hidden=\"YES\" contentMode=\"scaleToFill\" misplaced=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"tcU-YS-7RG\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"295\" width=\"320\" height=\"162\"/>\n                    <subviews>\n                        <datePicker contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" datePickerMode=\"dateAndTime\" minuteInterval=\"1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"fxA-u9-6nI\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"-5\" width=\"320\" height=\"162\"/>\n                            <date key=\"date\" timeIntervalSinceReferenceDate=\"437082403.12645298\">\n                                <!--2014-11-07 19:46:43 +0000-->\n                            </date>\n                        </datePicker>\n                    </subviews>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"162\" id=\"l6S-ST-Qrw\"/>\n                    </constraints>\n                </view>\n                <view contentMode=\"scaleToFill\" misplaced=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Rdr-iN-Ybe\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"461\" width=\"320\" height=\"42\"/>\n                    <subviews>\n                        <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"contactAdd\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"CaM-o5-SSY\">\n                            <rect key=\"frame\" x=\"15\" y=\"10\" width=\"22\" height=\"22\"/>\n                            <state key=\"normal\">\n                                <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            </state>\n                        </button>\n                        <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"68X-OV-UbA\">\n                            <rect key=\"frame\" x=\"90\" y=\"6\" width=\"37\" height=\"30\"/>\n                            <state key=\"normal\" title=\"Edit\">\n                                <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            </state>\n                        </button>\n                        <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Nxx-XB-evf\">\n                            <rect key=\"frame\" x=\"270\" y=\"6\" width=\"37\" height=\"30\"/>\n                            <state key=\"normal\" title=\"Trash\"/>\n                        </button>\n                        <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"KaG-Z3-g4V\">\n                            <rect key=\"frame\" x=\"183\" y=\"6\" width=\"35\" height=\"30\"/>\n                            <state key=\"normal\" title=\"Sync\">\n                                <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            </state>\n                        </button>\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            <gestureRecognizers/>\n            <constraints>\n                <constraint firstItem=\"Rdr-iN-Ybe\" firstAttribute=\"top\" secondItem=\"tcU-YS-7RG\" secondAttribute=\"bottom\" constant=\"4\" id=\"6E5-xg-Kq4\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"Rdr-iN-Ybe\" secondAttribute=\"bottom\" constant=\"1\" id=\"ANv-oy-oaB\"/>\n                <constraint firstItem=\"DqD-XB-qDa\" firstAttribute=\"bottom\" secondItem=\"Dh1-ev-PAu\" secondAttribute=\"bottom\" id=\"BAQ-qz-VPO\"/>\n                <constraint firstItem=\"DqD-XB-qDa\" firstAttribute=\"trailing\" secondItem=\"Dh1-ev-PAu\" secondAttribute=\"trailing\" id=\"E4k-Jc-cdH\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"tcU-YS-7RG\" secondAttribute=\"centerX\" id=\"GZ9-Oj-Xm8\"/>\n                <constraint firstItem=\"DqD-XB-qDa\" firstAttribute=\"top\" secondItem=\"Dh1-ev-PAu\" secondAttribute=\"top\" id=\"Gap-eU-Qsv\"/>\n                <constraint firstItem=\"DqD-XB-qDa\" firstAttribute=\"leading\" secondItem=\"Dh1-ev-PAu\" secondAttribute=\"leading\" id=\"TPb-pq-fW7\"/>\n                <constraint firstItem=\"Rdr-iN-Ybe\" firstAttribute=\"top\" secondItem=\"DqD-XB-qDa\" secondAttribute=\"bottom\" constant=\"3\" id=\"WdT-ln-Jkl\"/>\n                <constraint firstItem=\"DqD-XB-qDa\" firstAttribute=\"leading\" secondItem=\"ZQC-xj-gZE\" secondAttribute=\"leading\" id=\"XCM-vM-IXY\"/>\n                <constraint firstItem=\"DqD-XB-qDa\" firstAttribute=\"leading\" secondItem=\"Rdr-iN-Ybe\" secondAttribute=\"leading\" id=\"ZxX-3b-iKW\"/>\n                <constraint firstItem=\"tcU-YS-7RG\" firstAttribute=\"leading\" secondItem=\"DqD-XB-qDa\" secondAttribute=\"leading\" id=\"bvY-tZ-DMG\"/>\n                <constraint firstItem=\"DqD-XB-qDa\" firstAttribute=\"trailing\" secondItem=\"tcU-YS-7RG\" secondAttribute=\"trailing\" id=\"mba-fH-FP9\"/>\n                <constraint firstItem=\"DqD-XB-qDa\" firstAttribute=\"trailing\" secondItem=\"Rdr-iN-Ybe\" secondAttribute=\"trailing\" id=\"y9c-dy-5t3\"/>\n                <constraint firstItem=\"DqD-XB-qDa\" firstAttribute=\"top\" secondItem=\"ZQC-xj-gZE\" secondAttribute=\"top\" constant=\"64\" id=\"yCY-EX-hN5\"/>\n            </constraints>\n            <simulatedNavigationBarMetrics key=\"simulatedTopBarMetrics\" translucent=\"NO\" prompted=\"NO\"/>\n            <simulatedScreenMetrics key=\"simulatedDestinationMetrics\" type=\"retina4\"/>\n            <connections>\n                <outletCollection property=\"gestureRecognizers\" destination=\"jwt-nf-kvG\" appends=\"YES\" id=\"w6f-LW-HtL\"/>\n            </connections>\n            <point key=\"canvasLocation\" x=\"343\" y=\"279\"/>\n        </view>\n        <tapGestureRecognizer id=\"jwt-nf-kvG\">\n            <connections>\n                <outlet property=\"delegate\" destination=\"-1\" id=\"kIz-ve-jBk\"/>\n            </connections>\n        </tapGestureRecognizer>\n    </objects>\n</document>\n"
  },
  {
    "path": "BrewMobile/View/BrewNewPhaseViewController.swift",
    "content": "//\n//  BrewNewPhaseViewController.swift\n//  BrewMobile\n//\n//  Created by Ágnes Vásárhelyi on 08/11/14.\n//  Copyright (c) 2014 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport UIKit\nimport ReactiveCocoa\n\nclass BrewNewPhaseViewController : UIViewController {\n    \n    @IBOutlet weak var minTextField: UITextField!\n    @IBOutlet weak var tempTextField: UITextField!\n    @IBOutlet weak var minStepper: UIStepper!\n    @IBOutlet weak var tempStepper: UIStepper!\n    @IBOutlet weak var addButton: UIButton!\n    @IBOutlet weak var feedbackLabel: UILabel!\n\n    let brewDesignerViewModel: BrewDesignerViewModel\n    \n    var cocoaActionAdd: CocoaAction!\n\n    init(brewDesignerViewModel: BrewDesignerViewModel) {\n        self.brewDesignerViewModel = brewDesignerViewModel\n        super.init(nibName:\"BrewNewPhaseViewController\", bundle: nil)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        let addAction = Action<Void, Void, NSError> {\n            let newPhase = BrewPhase(jobEnd:\"\", min:Int(self.minStepper.value), temp:Float(self.tempStepper.value), tempReached:false, inProgress:false)\n            var newPhases = self.brewDesignerViewModel.phases.value\n            newPhases.append(newPhase)\n            self.brewDesignerViewModel.phases.value = newPhases\n            return SignalProducer.empty\n        }\n\n        cocoaActionAdd = CocoaAction(addAction, input: ())\n        addButton.addTarget(cocoaActionAdd, action: CocoaAction.selector, forControlEvents: .TouchUpInside)\n\n        addAction.executing.producer\n            .on( next: { executing in\n                if executing {\n                    self.feedbackLabel.text = \"Phase added\"\n                    UIView.animateWithDuration(0.7, animations: { () -> Void in\n                        self.feedbackLabel.alpha = 1.0\n                        }, completion: { (Bool) -> Void in\n                            UIView.animateWithDuration(0.7, animations: { () -> Void in\n                                self.feedbackLabel.alpha = 0.0\n                                }, completion: nil)\n                    })\n                }\n            })\n            .start()\n\n        let minStepperSignalProducer = minStepper.rac_signalForControlEvents(.ValueChanged).toSignalProducer()\n            .map(self.mapStepper)\n            .flatMapError(self.catcher)\n\n        let tempStepperSignalProducer = tempStepper.rac_signalForControlEvents(.ValueChanged).toSignalProducer()\n            .map(self.mapStepper)\n            .flatMapError(self.catcher)\n        \n        let minTextSignalProducer = minTextField.rac_textSignalProducer()\n            .filter(self.nonEmptyFilter)\n            .map(self.toIntConverter)\n            .flatMapError(self.catcher)\n\n        let tempTextSignalProducer = tempTextField.rac_textSignalProducer()\n            .filter(self.nonEmptyFilter)\n            .map(self.toIntConverter)\n            .flatMapError(self.catcher)\n\n        SignalProducer(values: [minStepperSignalProducer, minTextSignalProducer])\n            .flatten(.Merge)\n            .on( next: { min in\n                self.minStepper.value = Double(Int(min))\n                self.minTextField.text = String(Int(min))\n            })\n            .start()\n        \n        SignalProducer(values: [tempStepperSignalProducer, tempTextSignalProducer])\n            .flatten(.Merge)\n            .on( next: { temp in\n                self.tempStepper.value = Double(Int(temp))\n                self.tempTextField.text = String(Int(temp))\n            })\n            .start()\n    }\n\n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n    }\n\n    \n    // MARK: helper functions\n    \n    func mapStepper(aStepper: AnyObject?) -> Int {\n        if let stepper = aStepper as? UIStepper {\n            return Int(stepper.value)\n        }\n        fatalError(\"stepper should be a UIStepper\")\n    }\n    \n    func catcher<E>(aInput: E) -> SignalProducer<Int, NoError> {\n        return SignalProducer.empty\n    }\n    \n    func nonEmptyFilter(aInput: String) -> Bool {\n        return aInput != \"\"\n    }\n    \n    func toIntConverter(aInput: String) -> Int {\n        return Int(aInput)!\n    }\n    \n}\n"
  },
  {
    "path": "BrewMobile/View/BrewNewPhaseViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6254\" systemVersion=\"14B25\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6247\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"BrewNewPhaseViewController\" customModule=\"BrewMobile\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"addButton\" destination=\"ohP-fR-VLW\" id=\"BAw-fC-gWs\"/>\n                <outlet property=\"feedbackLabel\" destination=\"02L-2z-xPc\" id=\"q2j-3d-aOP\"/>\n                <outlet property=\"minStepper\" destination=\"gPS-Ur-a4r\" id=\"5x6-Fk-QMP\"/>\n                <outlet property=\"minTextField\" destination=\"kR8-wT-QR1\" id=\"3Ij-dW-pgH\"/>\n                <outlet property=\"tempStepper\" destination=\"21a-cS-NFD\" id=\"wRL-ZT-Lmf\"/>\n                <outlet property=\"tempTextField\" destination=\"itg-rt-tF2\" id=\"Bb0-jc-4cx\"/>\n                <outlet property=\"view\" destination=\"hPt-CF-kI8\" id=\"gzh-yv-S1g\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"hPt-CF-kI8\">\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\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hQV-AR-m0T\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"92\" width=\"320\" height=\"200\"/>\n                    <subviews>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"˚C\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"6Cj-ZS-UoZ\">\n                            <rect key=\"frame\" x=\"267\" y=\"69\" width=\"19\" height=\"21\"/>\n                            <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"17\"/>\n                            <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"min\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kt6-zu-vch\">\n                            <rect key=\"frame\" x=\"99\" y=\"69\" width=\"29\" height=\"21\"/>\n                            <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"17\"/>\n                            <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                        <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"20\" textAlignment=\"center\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"itg-rt-tF2\">\n                            <rect key=\"frame\" x=\"197\" y=\"65\" width=\"62\" height=\"30\"/>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                            <textInputTraits key=\"textInputTraits\" keyboardType=\"decimalPad\"/>\n                        </textField>\n                        <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"0\" textAlignment=\"center\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kR8-wT-QR1\">\n                            <rect key=\"frame\" x=\"34\" y=\"65\" width=\"62\" height=\"30\"/>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                            <textInputTraits key=\"textInputTraits\" keyboardType=\"decimalPad\"/>\n                        </textField>\n                        <stepper opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" maximumValue=\"10000\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gPS-Ur-a4r\">\n                            <rect key=\"frame\" x=\"34\" y=\"103\" width=\"94\" height=\"29\"/>\n                        </stepper>\n                        <stepper opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"20\" maximumValue=\"10000\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"21a-cS-NFD\">\n                            <rect key=\"frame\" x=\"197\" y=\"103\" width=\"94\" height=\"29\"/>\n                        </stepper>\n                        <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ohP-fR-VLW\">\n                            <rect key=\"frame\" x=\"137\" y=\"170\" width=\"46\" height=\"30\"/>\n                            <state key=\"normal\" title=\"Add\">\n                                <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            </state>\n                        </button>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" alpha=\"0.0\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"02L-2z-xPc\">\n                            <rect key=\"frame\" x=\"31\" y=\"8\" width=\"258\" height=\"21\"/>\n                            <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"17\"/>\n                            <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\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            <gestureRecognizers/>\n            <simulatedScreenMetrics key=\"simulatedDestinationMetrics\" type=\"retina4\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "BrewMobile/View/BrewViewController.swift",
    "content": "//\n//  ViewController.swift\n//  BrewMobile\n//\n//  Created by Ágnes Vásárhelyi on 19/08/14.\n//  Copyright (c) 2014 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport UIKit\nimport SwiftyJSON\nimport ReactiveCocoa\n\nclass BrewViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {\n    \n    let brewViewModel: BrewViewModel\n    \n    @IBOutlet weak var tempLabel: UILabel!\n    @IBOutlet weak var pwmLabel: UILabel!\n    @IBOutlet weak var nameLabel: UILabel!\n    @IBOutlet weak var startTimeLabel: UILabel!\n    @IBOutlet weak var phasesTableView: UITableView!\n    @IBOutlet weak var stopButton: UIButton!\n    \n    init(brewViewModel: BrewViewModel) {\n        self.brewViewModel = brewViewModel\n        super.init(nibName:\"BrewViewController\", bundle: nil)\n        self.tabBarItem = UITabBarItem(title: \"Brew\", image: UIImage(named: \"HopIcon\"), tag: 0)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        stopButton.addTarget(self.brewViewModel.cocoaActionStop, action: CocoaAction.selector, forControlEvents: .TouchUpInside)\n\n        let nib = UINib(nibName: \"BrewCell\", bundle: nil)\n        phasesTableView.registerNib(nib, forCellReuseIdentifier: \"BrewCell\")\n\n        self.tempLabel.rac_text <~ self.brewViewModel.temp.producer\n            .map { temp in\n                return String(format:\"%.2f ˚C\", temp)\n            }\n            .flatMapError { _ in SignalProducer<String, NoError>.empty }\n        \n        self.pwmLabel.rac_text <~ self.brewViewModel.pwm.producer\n            .map { pwm in\n                return String(format:\"PWM %g %%\", pwm)\n            }\n            .flatMapError { _ in SignalProducer<String, NoError>.empty }\n        \n        self.brewViewModel.brew.producer\n            .on (next: { brewState in\n                self.phasesTableView.reloadData()\n                \n                if brewState.phases.value.count > 0 {\n                    self.nameLabel.text = \"Brewing \\(brewState.name.value) at\"\n                } else {\n                    self.nameLabel.text = \"We are not brewing :(\\nHow is it possible?\"\n                }\n                \n                self.startTimeLabel.text = brewState.phases.value.count > 0 ? \"starting \\(brewState.startTime.value)\" : \"\"\n            })\n            .start()\n    }\n    \n    func stateText(brewPhase: BrewPhase) -> String {\n        if self.brewViewModel.brew.value.paused.value {\n            return \"paused\"\n        }\n        switch brewPhase.state  {\n        case State.FINISHED:\n            return \"\\(brewPhase.state.stateDescription()) at \\(brewPhase.jobEnd)\"\n        case State.HEATING:\n            if self.brewViewModel.temp.value > brewPhase.temp { return \"cooling\" }\n            fallthrough\n        default:\n            return brewPhase.state.stateDescription()\n        }\n    }\n    \n    // MARK: UITableViewDataSource\n    \n    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return self.brewViewModel.brew.value.phases.value.count\n    }\n    \n    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCellWithIdentifier(\"BrewCell\", forIndexPath: indexPath) as! BrewCell\n        if self.brewViewModel.brew.value.phases.value.count > indexPath.row  {\n            let brewPhase = self.brewViewModel.brew.value.phases.value[indexPath.row]\n            \n            let showEnd: Bool = brewPhase.tempReached && brewPhase.inProgress\n            cell.minLabel.text = showEnd ? \"\\(brewPhase.min) mins - \\(Int(brewPhase.temp)) ˚C, ends: \\(brewPhase.jobEnd)\" : \"\\(brewPhase.min) mins - \\(Int(brewPhase.temp)) ˚C\"\n            cell.statusLabel.text = \"\\(self.stateText(brewPhase))\"\n            \n            UIView.animateWithDuration(0.3, animations: { () -> Void in\n                cell.backgroundColor = brewPhase.state.bgColor()\n                cell.setTextColorForAllLabels(brewPhase.state == State.INACTIVE ? UIColor.blackColor() : UIColor.whiteColor())\n            })\n        }\n        \n        return cell\n    }\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n    }\n    \n}\n"
  },
  {
    "path": "BrewMobile/View/BrewViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"7706\" systemVersion=\"14E46\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"7703\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"BrewViewController\" customModule=\"BrewMobile\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"nameLabel\" destination=\"Egq-fz-xuo\" id=\"1st-M7-W78\"/>\n                <outlet property=\"phasesTableView\" destination=\"fDc-9C-BHN\" id=\"ddS-r0-g0N\"/>\n                <outlet property=\"pwmLabel\" destination=\"ssE-4k-7ZS\" id=\"1qY-vv-kf6\"/>\n                <outlet property=\"startTimeLabel\" destination=\"TJ5-FP-k2J\" id=\"Pul-A4-Eee\"/>\n                <outlet property=\"stopButton\" destination=\"78v-bG-zsf\" id=\"aDZ-6o-ki8\"/>\n                <outlet property=\"tempLabel\" destination=\"R8w-X5-zxS\" id=\"ySP-OD-EV9\"/>\n                <outlet property=\"view\" destination=\"aIA-Io-OTP\" id=\"a6v-7j-rs0\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"aIA-Io-OTP\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n            <subviews>\n                <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" style=\"plain\" separatorStyle=\"default\" allowsSelection=\"NO\" rowHeight=\"78\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"fDc-9C-BHN\" userLabel=\"phasesTableView\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"121\" width=\"320\" height=\"353\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <sections/>\n                    <connections>\n                        <outlet property=\"dataSource\" destination=\"-1\" id=\"min-qr-WUQ\"/>\n                        <outlet property=\"delegate\" destination=\"-1\" id=\"Eko-ae-j5q\"/>\n                    </connections>\n                </tableView>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"2\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" preferredMaxLayoutWidth=\"0.0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Egq-fz-xuo\" userLabel=\"nameLabel\">\n                    <rect key=\"frame\" x=\"50\" y=\"35\" width=\"220\" height=\"0.0\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"35\" id=\"Yje-eS-gUy\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"20\"/>\n                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <nil key=\"highlightedColor\"/>\n                    <variation key=\"default\">\n                        <mask key=\"constraints\">\n                            <exclude reference=\"Yje-eS-gUy\"/>\n                        </mask>\n                    </variation>\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" preferredMaxLayoutWidth=\"0.0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"R8w-X5-zxS\" userLabel=\"tempLabel\">\n                    <rect key=\"frame\" x=\"30\" y=\"38\" width=\"0.0\" height=\"35\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"35\" id=\"m9X-iV-60v\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"25\"/>\n                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" preferredMaxLayoutWidth=\"0.0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ssE-4k-7ZS\" userLabel=\"pwmLabel\">\n                    <rect key=\"frame\" x=\"80\" y=\"38\" width=\"0.0\" height=\"35\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"35\" id=\"DXD-LH-Lob\"/>\n                        <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" id=\"csC-fz-P6W\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"25\"/>\n                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" preferredMaxLayoutWidth=\"0.0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TJ5-FP-k2J\" userLabel=\"startTimeLabel\">\n                    <rect key=\"frame\" x=\"160\" y=\"76\" width=\"0.0\" height=\"35\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"35\" id=\"lyO-0p-1NU\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"20\"/>\n                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <view contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Pyf-va-IwV\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"477\" width=\"320\" height=\"42\"/>\n                    <subviews>\n                        <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"78v-bG-zsf\">\n                            <rect key=\"frame\" x=\"8\" y=\"4\" width=\"46\" height=\"30\"/>\n                            <state key=\"normal\" title=\"Stop\"/>\n                        </button>\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=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstAttribute=\"bottom\" secondItem=\"fDc-9C-BHN\" secondAttribute=\"bottom\" constant=\"94\" id=\"2GS-ys-sTp\"/>\n                <constraint firstItem=\"ssE-4k-7ZS\" firstAttribute=\"centerY\" secondItem=\"R8w-X5-zxS\" secondAttribute=\"centerY\" id=\"9vn-fa-EAv\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"fDc-9C-BHN\" secondAttribute=\"centerX\" id=\"CTq-PJ-OD4\"/>\n                <constraint firstItem=\"R8w-X5-zxS\" firstAttribute=\"top\" secondItem=\"Egq-fz-xuo\" secondAttribute=\"bottom\" constant=\"3\" id=\"EsE-j3-dYN\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"TJ5-FP-k2J\" secondAttribute=\"centerX\" id=\"MKM-4H-wwb\"/>\n                <constraint firstItem=\"Egq-fz-xuo\" firstAttribute=\"top\" secondItem=\"aIA-Io-OTP\" secondAttribute=\"top\" constant=\"35\" id=\"R2Z-8a-60t\"/>\n                <constraint firstItem=\"fDc-9C-BHN\" firstAttribute=\"leading\" secondItem=\"aIA-Io-OTP\" secondAttribute=\"leading\" id=\"VaX-K7-RRV\"/>\n                <constraint firstItem=\"fDc-9C-BHN\" firstAttribute=\"top\" secondItem=\"TJ5-FP-k2J\" secondAttribute=\"bottom\" constant=\"10\" id=\"XZK-t1-9EJ\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"fDc-9C-BHN\" secondAttribute=\"trailing\" id=\"Zt3-Mu-2gl\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"Egq-fz-xuo\" secondAttribute=\"centerX\" id=\"d8y-Le-23F\"/>\n                <constraint firstItem=\"R8w-X5-zxS\" firstAttribute=\"centerX\" secondItem=\"aIA-Io-OTP\" secondAttribute=\"centerX\" id=\"fIq-xw-c76\"/>\n                <constraint firstItem=\"ssE-4k-7ZS\" firstAttribute=\"leading\" secondItem=\"R8w-X5-zxS\" secondAttribute=\"trailing\" constant=\"30\" id=\"jRY-DD-VYB\"/>\n                <constraint firstItem=\"R8w-X5-zxS\" firstAttribute=\"leading\" secondItem=\"Egq-fz-xuo\" secondAttribute=\"leading\" id=\"new-Px-2AN\"/>\n                <constraint firstItem=\"TJ5-FP-k2J\" firstAttribute=\"top\" secondItem=\"R8w-X5-zxS\" secondAttribute=\"bottom\" constant=\"3\" id=\"uai-PN-cl1\"/>\n                <constraint firstItem=\"R8w-X5-zxS\" firstAttribute=\"leading\" secondItem=\"aIA-Io-OTP\" secondAttribute=\"leading\" constant=\"50\" id=\"w4P-bk-Oa3\"/>\n            </constraints>\n            <simulatedTabBarMetrics key=\"simulatedBottomBarMetrics\"/>\n            <simulatedScreenMetrics key=\"simulatedDestinationMetrics\" type=\"retina4\"/>\n            <variation key=\"default\">\n                <mask key=\"constraints\">\n                    <exclude reference=\"fIq-xw-c76\"/>\n                </mask>\n            </variation>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "BrewMobile/View/PhaseCell.swift",
    "content": "//\n//  PhaseCell.swift\n//  BrewMobile\n//\n//  Created by Agnes Vasarhelyi on 04/01/15.\n//  Copyright (c) 2015 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport UIKit\n\nclass PhaseCell: UITableViewCell {\n    @IBOutlet weak var phaseLabel: UILabel!\n}\n"
  },
  {
    "path": "BrewMobile/View/PhaseCell.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6724\" systemVersion=\"14B25\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6711\"/>\n        <capability name=\"Constraints to layout margins\" minToolsVersion=\"6.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"blue\" hidesAccessoryWhenEditing=\"NO\" indentationLevel=\"1\" indentationWidth=\"0.0\" reuseIdentifier=\"PhaseCell\" id=\"X8E-jD-963\" customClass=\"PhaseCell\" customModule=\"BrewMobile\" customModuleProvider=\"target\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"60\"/>\n            <autoresizingMask key=\"autoresizingMask\"/>\n            <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"X8E-jD-963\" id=\"6a5-ga-qF3\">\n                <autoresizingMask key=\"autoresizingMask\"/>\n                <subviews>\n                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" preferredMaxLayoutWidth=\"0.0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"m7t-v3-OJf\" userLabel=\"minLabel\">\n                        <rect key=\"frame\" x=\"18\" y=\"16\" width=\"285\" height=\"28\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"width\" constant=\"285\" id=\"6dR-yH-ZIa\"/>\n                        </constraints>\n                        <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Light\" family=\"Helvetica Neue\" pointSize=\"17\"/>\n                        <nil key=\"highlightedColor\"/>\n                    </label>\n                </subviews>\n                <constraints>\n                    <constraint firstItem=\"m7t-v3-OJf\" firstAttribute=\"leading\" secondItem=\"6a5-ga-qF3\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"dIu-Ge-UHu\"/>\n                    <constraint firstAttribute=\"centerY\" secondItem=\"m7t-v3-OJf\" secondAttribute=\"centerY\" constant=\"-0.25\" id=\"fE7-72-edi\"/>\n                    <constraint firstAttribute=\"bottomMargin\" secondItem=\"m7t-v3-OJf\" secondAttribute=\"bottom\" constant=\"7.5\" id=\"j4b-cl-zws\"/>\n                    <constraint firstItem=\"m7t-v3-OJf\" firstAttribute=\"top\" secondItem=\"6a5-ga-qF3\" secondAttribute=\"topMargin\" constant=\"8\" id=\"sca-c3-ess\"/>\n                </constraints>\n            </tableViewCellContentView>\n            <connections>\n                <outlet property=\"phaseLabel\" destination=\"m7t-v3-OJf\" id=\"d4i-W2-sBT\"/>\n            </connections>\n            <point key=\"canvasLocation\" x=\"290\" y=\"237\"/>\n        </tableViewCell>\n    </objects>\n</document>\n"
  },
  {
    "path": "BrewMobile/ViewModel/BrewDesignerViewModel.swift",
    "content": "//\n//  BrewDesignerViewModel.swift\n//  BrewMobile\n//\n//  Created by Agnes Vasarhelyi on 01/03/15.\n//  Copyright (c) 2015 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport Foundation\nimport ReactiveCocoa\n\nclass BrewDesignerViewModel : NSObject {\n\n    let brewManager: BrewManager\n    \n    var cocoaActionSync: CocoaAction!\n\n    let phases = MutableProperty(PhaseArray())\n    \n    let name = MutableProperty(\"\")\n    let startTime = MutableProperty(\"\")\n    let brewState = MutableProperty(BrewState())\n    let hasPhases = MutableProperty(false)\n    let validName = MutableProperty(false)\n    let validBeer = MutableProperty(false)\n\n    var newState: BrewState = BrewState()\n    \n    init(brewManager: BrewManager) {\n        self.brewManager = brewManager\n        super.init()\n\n        brewState.value = (BrewState(name: name, startTime: startTime, phases: self.phases, paused: false, inProgress: false))\n\n        hasPhases <~ self.phases.producer\n            .map { $0.count > 0 }\n        validName <~ self.brewState.producer\n            .map{ $0.name.value.characters.count > 0 }\n        validBeer <~ combineLatest(hasPhases.producer, validName.producer)\n            .map { $0 && $1 }\n\n        cocoaActionSync = CocoaAction(brewManager.syncBrewAction, input: brewState.value)\n    }\n    \n}\n"
  },
  {
    "path": "BrewMobile/ViewModel/BrewViewModel.swift",
    "content": "//\n//  BrewViewModel.swift\n//  BrewMobile\n//\n//  Created by Agnes Vasarhelyi on 04/01/15.\n//  Copyright (c) 2015 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport Foundation\nimport ReactiveCocoa\n\nclass BrewViewModel : NSObject {\n    var cocoaActionStop: CocoaAction!\n    let temp = MutableProperty<Float>(0.0)\n    let brew = MutableProperty(BrewState())\n    let pwm = MutableProperty<Float>(0.0)\n\n    let brewManager: BrewManager\n\n    init(brewManager: BrewManager) {        \n        self.brewManager = brewManager\n        super.init()\n\n        self.brewManager.connectToHost()\n\n        cocoaActionStop = CocoaAction(brewManager.stopBrewAction, input: ())\n\n        temp <~ self.brewManager.temp\n        brew <~ self.brewManager.brew\n        pwm <~ self.brewManager.pwm\n    }\n\n}\n"
  },
  {
    "path": "BrewMobile.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\t0213ADD21A57E6EB0010F9E1 /* BrewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0213ADD11A57E6EB0010F9E1 /* BrewManager.swift */; };\n\t\t023A3AD21C65FC3D004AD22E /* SocketIOClientSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 023A3AD01C65FC3D004AD22E /* SocketIOClientSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t0289A94C1A626C2600BD2601 /* ContentParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0289A94B1A626C2600BD2601 /* ContentParser.swift */; };\n\t\t0289A94D1A626C2600BD2601 /* ContentParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0289A94B1A626C2600BD2601 /* ContentParser.swift */; };\n\t\t0289A9521A62B0FF00BD2601 /* RAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0289A94F1A62B0FF00BD2601 /* RAC.swift */; };\n\t\t0289A9531A62B0FF00BD2601 /* RAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0289A94F1A62B0FF00BD2601 /* RAC.swift */; };\n\t\t02BDD66B1AA19BE100E44DC3 /* BrewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6611AA19BE100E44DC3 /* BrewCell.swift */; };\n\t\t02BDD66C1AA19BE100E44DC3 /* BrewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6611AA19BE100E44DC3 /* BrewCell.swift */; };\n\t\t02BDD66D1AA19BE100E44DC3 /* BrewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02BDD6621AA19BE100E44DC3 /* BrewCell.xib */; };\n\t\t02BDD66E1AA19BE100E44DC3 /* BrewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02BDD6621AA19BE100E44DC3 /* BrewCell.xib */; };\n\t\t02BDD66F1AA19BE100E44DC3 /* BrewDesignerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6631AA19BE100E44DC3 /* BrewDesignerViewController.swift */; };\n\t\t02BDD6701AA19BE100E44DC3 /* BrewDesignerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6631AA19BE100E44DC3 /* BrewDesignerViewController.swift */; };\n\t\t02BDD6711AA19BE100E44DC3 /* BrewDesignerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02BDD6641AA19BE100E44DC3 /* BrewDesignerViewController.xib */; };\n\t\t02BDD6721AA19BE100E44DC3 /* BrewDesignerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02BDD6641AA19BE100E44DC3 /* BrewDesignerViewController.xib */; };\n\t\t02BDD6731AA19BE100E44DC3 /* BrewNewPhaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6651AA19BE100E44DC3 /* BrewNewPhaseViewController.swift */; };\n\t\t02BDD6741AA19BE100E44DC3 /* BrewNewPhaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6651AA19BE100E44DC3 /* BrewNewPhaseViewController.swift */; };\n\t\t02BDD6751AA19BE100E44DC3 /* BrewNewPhaseViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02BDD6661AA19BE100E44DC3 /* BrewNewPhaseViewController.xib */; };\n\t\t02BDD6761AA19BE100E44DC3 /* BrewNewPhaseViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02BDD6661AA19BE100E44DC3 /* BrewNewPhaseViewController.xib */; };\n\t\t02BDD6771AA19BE100E44DC3 /* BrewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6671AA19BE100E44DC3 /* BrewViewController.swift */; };\n\t\t02BDD6781AA19BE100E44DC3 /* BrewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6671AA19BE100E44DC3 /* BrewViewController.swift */; };\n\t\t02BDD6791AA19BE100E44DC3 /* BrewViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02BDD6681AA19BE100E44DC3 /* BrewViewController.xib */; };\n\t\t02BDD67A1AA19BE100E44DC3 /* BrewViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02BDD6681AA19BE100E44DC3 /* BrewViewController.xib */; };\n\t\t02BDD67B1AA19BE100E44DC3 /* PhaseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6691AA19BE100E44DC3 /* PhaseCell.swift */; };\n\t\t02BDD67C1AA19BE100E44DC3 /* PhaseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6691AA19BE100E44DC3 /* PhaseCell.swift */; };\n\t\t02BDD67D1AA19BE100E44DC3 /* PhaseCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02BDD66A1AA19BE100E44DC3 /* PhaseCell.xib */; };\n\t\t02BDD67E1AA19BE100E44DC3 /* PhaseCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02BDD66A1AA19BE100E44DC3 /* PhaseCell.xib */; };\n\t\t02BDD6841AA19C3800E44DC3 /* BrewPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6801AA19C3800E44DC3 /* BrewPhase.swift */; };\n\t\t02BDD6851AA19C3800E44DC3 /* BrewPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6801AA19C3800E44DC3 /* BrewPhase.swift */; };\n\t\t02BDD6861AA19C3800E44DC3 /* BrewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6811AA19C3800E44DC3 /* BrewState.swift */; };\n\t\t02BDD6871AA19C3800E44DC3 /* BrewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6811AA19C3800E44DC3 /* BrewState.swift */; };\n\t\t02BDD6881AA19C3800E44DC3 /* BrewViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6831AA19C3800E44DC3 /* BrewViewModel.swift */; };\n\t\t02BDD6891AA19C3800E44DC3 /* BrewViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD6831AA19C3800E44DC3 /* BrewViewModel.swift */; };\n\t\t02BDD68A1AA19C6200E44DC3 /* BrewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0213ADD11A57E6EB0010F9E1 /* BrewManager.swift */; };\n\t\t02BDD68C1AA2FF6700E44DC3 /* BrewDesignerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD68B1AA2FF6700E44DC3 /* BrewDesignerViewModel.swift */; };\n\t\t02BDD68D1AA2FF6700E44DC3 /* BrewDesignerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BDD68B1AA2FF6700E44DC3 /* BrewDesignerViewModel.swift */; };\n\t\t02C058C31B6529F7001AC3C1 /* ISO8601.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 02C058B91B652990001AC3C1 /* ISO8601.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t02C058C41B6529F7001AC3C1 /* ReactiveCocoa.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 02C058BA1B652990001AC3C1 /* ReactiveCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t02C058C51B6529F7001AC3C1 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 02C058BB1B652990001AC3C1 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t02C058C71B6529F7001AC3C1 /* SwiftyJSON.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 02C058BD1B652990001AC3C1 /* SwiftyJSON.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t692AAA8919A34C8C00224C4D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 692AAA8819A34C8C00224C4D /* AppDelegate.swift */; };\n\t\t692AAA9019A34C8C00224C4D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 692AAA8F19A34C8C00224C4D /* Images.xcassets */; };\n\t\t69A1102619CB38B900108B46 /* BrewPhaseTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69A1102519CB38B900108B46 /* BrewPhaseTestCase.swift */; };\n\t\t69A1102D19CB596700108B46 /* BrewStateTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69A1102C19CB596700108B46 /* BrewStateTestCase.swift */; };\n\t\t69EC2A8D19CC3439008108D8 /* ContentParserTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69EC2A8C19CC3439008108D8 /* ContentParserTestCase.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t692AAA9619A34C8C00224C4D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 692AAA7B19A34C8C00224C4D /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 692AAA8219A34C8C00224C4D;\n\t\t\tremoteInfo = BrewMobile;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t0213ADC81A57DB480010F9E1 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t02C058C31B6529F7001AC3C1 /* ISO8601.framework in Embed Frameworks */,\n\t\t\t\t02C058C41B6529F7001AC3C1 /* ReactiveCocoa.framework in Embed Frameworks */,\n\t\t\t\t023A3AD21C65FC3D004AD22E /* SocketIOClientSwift.framework in Embed Frameworks */,\n\t\t\t\t02C058C51B6529F7001AC3C1 /* Result.framework in Embed Frameworks */,\n\t\t\t\t02C058C71B6529F7001AC3C1 /* SwiftyJSON.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t0213ADD11A57E6EB0010F9E1 /* BrewManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrewManager.swift; sourceTree = \"<group>\"; };\n\t\t023A3AD01C65FC3D004AD22E /* SocketIOClientSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SocketIOClientSwift.framework; path = Carthage/Build/iOS/SocketIOClientSwift.framework; sourceTree = \"<group>\"; };\n\t\t0289A94B1A626C2600BD2601 /* ContentParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentParser.swift; sourceTree = \"<group>\"; };\n\t\t0289A94F1A62B0FF00BD2601 /* RAC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RAC.swift; sourceTree = \"<group>\"; };\n\t\t02BDD6611AA19BE100E44DC3 /* BrewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrewCell.swift; sourceTree = \"<group>\"; };\n\t\t02BDD6621AA19BE100E44DC3 /* BrewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BrewCell.xib; sourceTree = \"<group>\"; };\n\t\t02BDD6631AA19BE100E44DC3 /* BrewDesignerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrewDesignerViewController.swift; sourceTree = \"<group>\"; };\n\t\t02BDD6641AA19BE100E44DC3 /* BrewDesignerViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BrewDesignerViewController.xib; sourceTree = \"<group>\"; };\n\t\t02BDD6651AA19BE100E44DC3 /* BrewNewPhaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrewNewPhaseViewController.swift; sourceTree = \"<group>\"; };\n\t\t02BDD6661AA19BE100E44DC3 /* BrewNewPhaseViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BrewNewPhaseViewController.xib; sourceTree = \"<group>\"; };\n\t\t02BDD6671AA19BE100E44DC3 /* BrewViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrewViewController.swift; sourceTree = \"<group>\"; };\n\t\t02BDD6681AA19BE100E44DC3 /* BrewViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BrewViewController.xib; sourceTree = \"<group>\"; };\n\t\t02BDD6691AA19BE100E44DC3 /* PhaseCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhaseCell.swift; sourceTree = \"<group>\"; };\n\t\t02BDD66A1AA19BE100E44DC3 /* PhaseCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PhaseCell.xib; sourceTree = \"<group>\"; };\n\t\t02BDD6801AA19C3800E44DC3 /* BrewPhase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrewPhase.swift; sourceTree = \"<group>\"; };\n\t\t02BDD6811AA19C3800E44DC3 /* BrewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrewState.swift; sourceTree = \"<group>\"; };\n\t\t02BDD6831AA19C3800E44DC3 /* BrewViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrewViewModel.swift; sourceTree = \"<group>\"; };\n\t\t02BDD68B1AA2FF6700E44DC3 /* BrewDesignerViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrewDesignerViewModel.swift; sourceTree = \"<group>\"; };\n\t\t02C058B91B652990001AC3C1 /* ISO8601.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ISO8601.framework; path = Carthage/Build/iOS/ISO8601.framework; sourceTree = \"<group>\"; };\n\t\t02C058BA1B652990001AC3C1 /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveCocoa.framework; path = Carthage/Build/iOS/ReactiveCocoa.framework; sourceTree = \"<group>\"; };\n\t\t02C058BB1B652990001AC3C1 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Result.framework; path = Carthage/Build/iOS/Result.framework; sourceTree = \"<group>\"; };\n\t\t02C058BD1B652990001AC3C1 /* SwiftyJSON.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftyJSON.framework; path = Carthage/Build/iOS/SwiftyJSON.framework; sourceTree = \"<group>\"; };\n\t\t692AAA8319A34C8C00224C4D /* BrewMobile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BrewMobile.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t692AAA8719A34C8C00224C4D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t692AAA8819A34C8C00224C4D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t692AAA8F19A34C8C00224C4D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\t692AAA9519A34C8C00224C4D /* BrewMobileTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BrewMobileTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t692AAA9A19A34C8C00224C4D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t69A1102519CB38B900108B46 /* BrewPhaseTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrewPhaseTestCase.swift; sourceTree = \"<group>\"; };\n\t\t69A1102C19CB596700108B46 /* BrewStateTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrewStateTestCase.swift; sourceTree = \"<group>\"; };\n\t\t69EC2A8C19CC3439008108D8 /* ContentParserTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentParserTestCase.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t692AAA8019A34C8C00224C4D /* 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\t\t692AAA9219A34C8C00224C4D /* 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\t0289A94A1A626C0C00BD2601 /* Helpers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0289A94B1A626C2600BD2601 /* ContentParser.swift */,\n\t\t\t);\n\t\t\tname = Helpers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0289A94E1A62B0FF00BD2601 /* RACUtils */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0289A94F1A62B0FF00BD2601 /* RAC.swift */,\n\t\t\t);\n\t\t\tpath = RACUtils;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t02BDD6601AA19BE100E44DC3 /* View */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t02BDD6611AA19BE100E44DC3 /* BrewCell.swift */,\n\t\t\t\t02BDD6621AA19BE100E44DC3 /* BrewCell.xib */,\n\t\t\t\t02BDD6631AA19BE100E44DC3 /* BrewDesignerViewController.swift */,\n\t\t\t\t02BDD6641AA19BE100E44DC3 /* BrewDesignerViewController.xib */,\n\t\t\t\t02BDD6651AA19BE100E44DC3 /* BrewNewPhaseViewController.swift */,\n\t\t\t\t02BDD6661AA19BE100E44DC3 /* BrewNewPhaseViewController.xib */,\n\t\t\t\t02BDD6671AA19BE100E44DC3 /* BrewViewController.swift */,\n\t\t\t\t02BDD6681AA19BE100E44DC3 /* BrewViewController.xib */,\n\t\t\t\t02BDD6691AA19BE100E44DC3 /* PhaseCell.swift */,\n\t\t\t\t02BDD66A1AA19BE100E44DC3 /* PhaseCell.xib */,\n\t\t\t);\n\t\t\tpath = View;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t02BDD67F1AA19C3800E44DC3 /* Model */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t02BDD6801AA19C3800E44DC3 /* BrewPhase.swift */,\n\t\t\t\t02BDD6811AA19C3800E44DC3 /* BrewState.swift */,\n\t\t\t);\n\t\t\tpath = Model;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t02BDD6821AA19C3800E44DC3 /* ViewModel */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t02BDD6831AA19C3800E44DC3 /* BrewViewModel.swift */,\n\t\t\t\t02BDD68B1AA2FF6700E44DC3 /* BrewDesignerViewModel.swift */,\n\t\t\t);\n\t\t\tpath = ViewModel;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t692AAA7A19A34C8B00224C4D = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t692AAA8519A34C8C00224C4D /* BrewMobile */,\n\t\t\t\t692AAA9819A34C8C00224C4D /* BrewMobileTests */,\n\t\t\t\t692AAA8419A34C8C00224C4D /* Products */,\n\t\t\t\tF3641B66629A474A89086F3F /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t692AAA8419A34C8C00224C4D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t692AAA8319A34C8C00224C4D /* BrewMobile.app */,\n\t\t\t\t692AAA9519A34C8C00224C4D /* BrewMobileTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t692AAA8519A34C8C00224C4D /* BrewMobile */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t02BDD67F1AA19C3800E44DC3 /* Model */,\n\t\t\t\t02BDD6601AA19BE100E44DC3 /* View */,\n\t\t\t\t02BDD6821AA19C3800E44DC3 /* ViewModel */,\n\t\t\t\t0289A94A1A626C0C00BD2601 /* Helpers */,\n\t\t\t\t0289A94E1A62B0FF00BD2601 /* RACUtils */,\n\t\t\t\t0213ADD11A57E6EB0010F9E1 /* BrewManager.swift */,\n\t\t\t\t692AAA8819A34C8C00224C4D /* AppDelegate.swift */,\n\t\t\t\t692AAA8F19A34C8C00224C4D /* Images.xcassets */,\n\t\t\t\t692AAA8619A34C8C00224C4D /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = BrewMobile;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t692AAA8619A34C8C00224C4D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t692AAA8719A34C8C00224C4D /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t692AAA9819A34C8C00224C4D /* BrewMobileTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t69A1102519CB38B900108B46 /* BrewPhaseTestCase.swift */,\n\t\t\t\t69A1102C19CB596700108B46 /* BrewStateTestCase.swift */,\n\t\t\t\t69EC2A8C19CC3439008108D8 /* ContentParserTestCase.swift */,\n\t\t\t\t692AAA9919A34C8C00224C4D /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = BrewMobileTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t692AAA9919A34C8C00224C4D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t692AAA9A19A34C8C00224C4D /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF3641B66629A474A89086F3F /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t023A3AD01C65FC3D004AD22E /* SocketIOClientSwift.framework */,\n\t\t\t\t02C058B91B652990001AC3C1 /* ISO8601.framework */,\n\t\t\t\t02C058BA1B652990001AC3C1 /* ReactiveCocoa.framework */,\n\t\t\t\t02C058BB1B652990001AC3C1 /* Result.framework */,\n\t\t\t\t02C058BD1B652990001AC3C1 /* SwiftyJSON.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t692AAA8219A34C8C00224C4D /* BrewMobile */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 692AAA9F19A34C8C00224C4D /* Build configuration list for PBXNativeTarget \"BrewMobile\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t692AAA7F19A34C8C00224C4D /* Sources */,\n\t\t\t\t692AAA8019A34C8C00224C4D /* Frameworks */,\n\t\t\t\t692AAA8119A34C8C00224C4D /* Resources */,\n\t\t\t\t027E31821A52B7A700802098 /* Carthage copy frameworks */,\n\t\t\t\t0213ADC81A57DB480010F9E1 /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = BrewMobile;\n\t\t\tproductName = BrewMobile;\n\t\t\tproductReference = 692AAA8319A34C8C00224C4D /* BrewMobile.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t692AAA9419A34C8C00224C4D /* BrewMobileTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 692AAAA219A34C8C00224C4D /* Build configuration list for PBXNativeTarget \"BrewMobileTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t692AAA9119A34C8C00224C4D /* Sources */,\n\t\t\t\t692AAA9219A34C8C00224C4D /* Frameworks */,\n\t\t\t\t692AAA9319A34C8C00224C4D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t692AAA9719A34C8C00224C4D /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = BrewMobileTests;\n\t\t\tproductName = BrewMobileTests;\n\t\t\tproductReference = 692AAA9519A34C8C00224C4D /* BrewMobileTests.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\t692AAA7B19A34C8C00224C4D /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftMigration = 0700;\n\t\t\t\tLastSwiftUpdateCheck = 0700;\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t\tORGANIZATIONNAME = \"Ágnes Vásárhelyi\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t692AAA8219A34C8C00224C4D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t};\n\t\t\t\t\t692AAA9419A34C8C00224C4D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t\tTestTargetID = 692AAA8219A34C8C00224C4D;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 692AAA7E19A34C8C00224C4D /* Build configuration list for PBXProject \"BrewMobile\" */;\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 = 692AAA7A19A34C8B00224C4D;\n\t\t\tproductRefGroup = 692AAA8419A34C8C00224C4D /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t692AAA8219A34C8C00224C4D /* BrewMobile */,\n\t\t\t\t692AAA9419A34C8C00224C4D /* BrewMobileTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t692AAA8119A34C8C00224C4D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t02BDD6791AA19BE100E44DC3 /* BrewViewController.xib in Resources */,\n\t\t\t\t02BDD6711AA19BE100E44DC3 /* BrewDesignerViewController.xib in Resources */,\n\t\t\t\t02BDD6751AA19BE100E44DC3 /* BrewNewPhaseViewController.xib in Resources */,\n\t\t\t\t02BDD67D1AA19BE100E44DC3 /* PhaseCell.xib in Resources */,\n\t\t\t\t692AAA9019A34C8C00224C4D /* Images.xcassets in Resources */,\n\t\t\t\t02BDD66D1AA19BE100E44DC3 /* BrewCell.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t692AAA9319A34C8C00224C4D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t02BDD67E1AA19BE100E44DC3 /* PhaseCell.xib in Resources */,\n\t\t\t\t02BDD66E1AA19BE100E44DC3 /* BrewCell.xib in Resources */,\n\t\t\t\t02BDD6761AA19BE100E44DC3 /* BrewNewPhaseViewController.xib in Resources */,\n\t\t\t\t02BDD67A1AA19BE100E44DC3 /* BrewViewController.xib in Resources */,\n\t\t\t\t02BDD6721AA19BE100E44DC3 /* BrewDesignerViewController.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t027E31821A52B7A700802098 /* Carthage copy frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 8;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"$(SRCROOT)/Carthage/Build/iOS/SocketIOClientSwift.framework\",\n\t\t\t\t\"$(SRCROOT)/Carthage/Build/iOS/ISO8601.framework\",\n\t\t\t\t\"$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework\",\n\t\t\t\t\"$(SRCROOT)/Carthage/Build/iOS/Result.framework\",\n\t\t\t\t\"$(SRCROOT)/Carthage/Build/iOS/SwiftyJSON.framework\",\n\t\t\t);\n\t\t\tname = \"Carthage copy frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 1;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/usr/local/bin/carthage copy-frameworks\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t692AAA7F19A34C8C00224C4D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t692AAA8919A34C8C00224C4D /* AppDelegate.swift in Sources */,\n\t\t\t\t02BDD68C1AA2FF6700E44DC3 /* BrewDesignerViewModel.swift in Sources */,\n\t\t\t\t02BDD66B1AA19BE100E44DC3 /* BrewCell.swift in Sources */,\n\t\t\t\t02BDD6731AA19BE100E44DC3 /* BrewNewPhaseViewController.swift in Sources */,\n\t\t\t\t02BDD67B1AA19BE100E44DC3 /* PhaseCell.swift in Sources */,\n\t\t\t\t02BDD6881AA19C3800E44DC3 /* BrewViewModel.swift in Sources */,\n\t\t\t\t02BDD6771AA19BE100E44DC3 /* BrewViewController.swift in Sources */,\n\t\t\t\t0213ADD21A57E6EB0010F9E1 /* BrewManager.swift in Sources */,\n\t\t\t\t0289A9521A62B0FF00BD2601 /* RAC.swift in Sources */,\n\t\t\t\t02BDD66F1AA19BE100E44DC3 /* BrewDesignerViewController.swift in Sources */,\n\t\t\t\t02BDD6861AA19C3800E44DC3 /* BrewState.swift in Sources */,\n\t\t\t\t0289A94C1A626C2600BD2601 /* ContentParser.swift in Sources */,\n\t\t\t\t02BDD6841AA19C3800E44DC3 /* BrewPhase.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t692AAA9119A34C8C00224C4D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t02BDD66C1AA19BE100E44DC3 /* BrewCell.swift in Sources */,\n\t\t\t\t02BDD6741AA19BE100E44DC3 /* BrewNewPhaseViewController.swift in Sources */,\n\t\t\t\t02BDD67C1AA19BE100E44DC3 /* PhaseCell.swift in Sources */,\n\t\t\t\t02BDD6781AA19BE100E44DC3 /* BrewViewController.swift in Sources */,\n\t\t\t\t69EC2A8D19CC3439008108D8 /* ContentParserTestCase.swift in Sources */,\n\t\t\t\t0289A9531A62B0FF00BD2601 /* RAC.swift in Sources */,\n\t\t\t\t02BDD68A1AA19C6200E44DC3 /* BrewManager.swift in Sources */,\n\t\t\t\t02BDD6701AA19BE100E44DC3 /* BrewDesignerViewController.swift in Sources */,\n\t\t\t\t02BDD6891AA19C3800E44DC3 /* BrewViewModel.swift in Sources */,\n\t\t\t\t0289A94D1A626C2600BD2601 /* ContentParser.swift in Sources */,\n\t\t\t\t02BDD6871AA19C3800E44DC3 /* BrewState.swift in Sources */,\n\t\t\t\t69A1102619CB38B900108B46 /* BrewPhaseTestCase.swift in Sources */,\n\t\t\t\t02BDD6851AA19C3800E44DC3 /* BrewPhase.swift in Sources */,\n\t\t\t\t02BDD68D1AA2FF6700E44DC3 /* BrewDesignerViewModel.swift in Sources */,\n\t\t\t\t69A1102D19CB596700108B46 /* BrewStateTestCase.swift 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\t692AAA9719A34C8C00224C4D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 692AAA8219A34C8C00224C4D /* BrewMobile */;\n\t\t\ttargetProxy = 692AAA9619A34C8C00224C4D /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t692AAA9D19A34C8C00224C4D /* 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 = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 8.1;\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\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t692AAA9E19A34C8C00224C4D /* 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 = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 8.1;\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\t692AAAA019A34C8C00224C4D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/iOS\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = BrewMobile/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.brew.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t692AAAA119A34C8C00224C4D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/iOS\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = BrewMobile/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.brew.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t692AAAA319A34C8C00224C4D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/BrewMobile.app/BrewMobile\";\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\t\"$(PROJECT_DIR)/Carthage/Build/iOS\",\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\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = BrewMobileTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.brew.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t692AAAA419A34C8C00224C4D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/BrewMobile.app/BrewMobile\";\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\t\"$(PROJECT_DIR)/Carthage/Build/iOS\",\n\t\t\t\t);\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = BrewMobileTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.brew.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t692AAA7E19A34C8C00224C4D /* Build configuration list for PBXProject \"BrewMobile\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t692AAA9D19A34C8C00224C4D /* Debug */,\n\t\t\t\t692AAA9E19A34C8C00224C4D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t692AAA9F19A34C8C00224C4D /* Build configuration list for PBXNativeTarget \"BrewMobile\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t692AAAA019A34C8C00224C4D /* Debug */,\n\t\t\t\t692AAAA119A34C8C00224C4D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t692AAAA219A34C8C00224C4D /* Build configuration list for PBXNativeTarget \"BrewMobileTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t692AAAA319A34C8C00224C4D /* Debug */,\n\t\t\t\t692AAAA419A34C8C00224C4D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 692AAA7B19A34C8C00224C4D /* Project object */;\n}\n"
  },
  {
    "path": "BrewMobile.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:BrewMobile.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "BrewMobile.xcodeproj/xcshareddata/xcschemes/BrewMobile.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"692AAA8219A34C8C00224C4D\"\n               BuildableName = \"BrewMobile.app\"\n               BlueprintName = \"BrewMobile\"\n               ReferencedContainer = \"container:BrewMobile.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"692AAA9419A34C8C00224C4D\"\n               BuildableName = \"BrewMobileTests.xctest\"\n               BlueprintName = \"BrewMobileTests\"\n               ReferencedContainer = \"container:BrewMobile.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"692AAA9419A34C8C00224C4D\"\n               BuildableName = \"BrewMobileTests.xctest\"\n               BlueprintName = \"BrewMobileTests\"\n               ReferencedContainer = \"container:BrewMobile.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"692AAA8219A34C8C00224C4D\"\n            BuildableName = \"BrewMobile.app\"\n            BlueprintName = \"BrewMobile\"\n            ReferencedContainer = \"container:BrewMobile.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"692AAA8219A34C8C00224C4D\"\n            BuildableName = \"BrewMobile.app\"\n            BlueprintName = \"BrewMobile\"\n            ReferencedContainer = \"container:BrewMobile.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n         <AdditionalOption\n            key = \"NSZombieEnabled\"\n            value = \"YES\"\n            isEnabled = \"YES\">\n         </AdditionalOption>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"692AAA8219A34C8C00224C4D\"\n            BuildableName = \"BrewMobile.app\"\n            BlueprintName = \"BrewMobile\"\n            ReferencedContainer = \"container:BrewMobile.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "BrewMobile.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:BrewMobile.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "BrewMobileTests/BrewPhaseTestCase.swift",
    "content": "//\n//  BrewPhaseTestCase.swift\n//  BrewMobile\n//\n//  Created by Ágnes Vásárhelyi on 18/09/14.\n//  Copyright (c) 2014 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport UIKit\nimport XCTest\n\nclass BrewPhaseTestCase: XCTestCase {\n    var brewPhase = BrewPhase()\n   \n    override func setUp() {\n        super.setUp()\n        \n        brewPhase = BrewPhase(jobEnd: \"09:55\", min: 30, temp: 45.0, tempReached: false, inProgress: true)\n    }\n    \n    override func tearDown() {\n        super.tearDown()\n    }\n\n    func testJobEnd() {\n        XCTAssertNotNil(brewPhase.jobEnd, \"should have jobEnd\")\n        XCTAssertTrue(brewPhase.jobEnd == \"09:55\", \"expected to be equal\")\n    }\n    \n    func testMin() {\n        XCTAssertNotNil(brewPhase.min, \"should have min\")\n        XCTAssertTrue(brewPhase.min == 30, \"expected to be equal\")\n    }\n    \n    func testTemp() {\n        XCTAssertNotNil(brewPhase.temp, \"should have temp\")\n        XCTAssertTrue(brewPhase.temp == 45.0, \"expected to be equal\")\n    }\n    \n    func testTempReached() {\n        XCTAssertNotNil(brewPhase.tempReached, \"should have tempReached\")\n        XCTAssertFalse(brewPhase.tempReached, \"expected to be false\")\n    }\n    \n    func testInProgress() {\n        XCTAssertNotNil(brewPhase.inProgress, \"should have inProgress\")\n        XCTAssertTrue(brewPhase.inProgress, \"expected to be true\")\n    }\n\n}\n"
  },
  {
    "path": "BrewMobileTests/BrewStateTestCase.swift",
    "content": "//\n//  BrewStateTestCase.swift\n//  BrewMobile\n//\n//  Created by Ágnes Vásárhelyi on 18/09/14.\n//  Copyright (c) 2014 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport UIKit\nimport XCTest\n\nclass BrewStateTestCase: XCTestCase {\n    var brewState = BrewState()\n    var brewPhase = BrewPhase()\n\n    override func setUp() {\n        super.setUp()\n        \n        brewPhase = BrewPhase(jobEnd: ContentParser.formatDate(\"2014-08-03T11:55:00.000Z\"), min: 10, temp: 70, tempReached: false, inProgress: true)\n        brewState = BrewState(name: \"Very IPA\", startTime: \"10:30\", phases: [brewPhase], paused: false, inProgress: true)\n    }\n    \n    override func tearDown() {\n        super.tearDown()\n    }\n\n    func testName() {\n        XCTAssertNotNil(brewState.name.value, \"should have name\")\n        XCTAssertTrue(brewState.name.value == \"Very IPA\", \"expected to be equal\")\n    }\n    \n    func testStartTime() {\n        XCTAssertNotNil(brewState.startTime.value, \"should have startTime\")\n        XCTAssertTrue(brewState.startTime.value == \"10:30\", \"expected to be equal\")\n    }\n    \n    func testPhases() {\n        XCTAssertEqual(brewState.phases.value[0] as BrewPhase, brewPhase, \"expected to be equal\")\n    }\n    \n    func testPaused() {\n        XCTAssertNotNil(brewState.paused.value, \"should have paused\")\n        XCTAssertFalse(brewState.paused.value, \"expected to be false\")\n    }\n    \n    func testInProgress() {\n        XCTAssertNotNil(brewState.inProgress.value, \"should have inProgress\")\n        XCTAssertTrue(brewState.inProgress.value, \"expected to be true\")\n    }\n\n\n}\n"
  },
  {
    "path": "BrewMobileTests/ContentParserTestCase.swift",
    "content": "//\n//  ContentParserTestCase.swift\n//  BrewMobile\n//\n//  Created by Ágnes Vásárhelyi on 19/09/14.\n//  Copyright (c) 2014 Ágnes Vásárhelyi. All rights reserved.\n//\n\nimport UIKit\nimport XCTest\nimport SwiftyJSON\n\nclass ContentParserTestCase: XCTestCase {\n    var mockBrewState = BrewState()\n    var mockBrewPhase = BrewPhase()\n    let currentZone = NSTimeZone.defaultTimeZone()\n\n    override func setUp() {\n        super.setUp()\n        \n        NSTimeZone.setDefaultTimeZone(NSTimeZone(forSecondsFromGMT: +0))\n\n        mockBrewPhase = BrewPhase(jobEnd: ContentParser.formatDate(\"2014-08-03T11:55:00.000Z\"), min: 10, temp: 70, tempReached: false, inProgress: true)\n        mockBrewState = BrewState(name: \"Very IPA\", startTime: ContentParser.formatDate(\"2014-08-03T09:55:00.000Z\"), phases: [mockBrewPhase], paused: false, inProgress: true)\n    }\n    \n    override func tearDown() {\n        NSTimeZone.setDefaultTimeZone(currentZone)\n\n        super.tearDown()\n    }\n    \n    //MARK: Testing BrewState object parsing\n    func testParseBrewState() {\n        let brewPhaseJSON = [\"jobEnd\" : \"2014-08-03T11:55:00.000Z\", \"min\" : 10, \"temp\" : 70, \"tempReached\" : 0, \"inProgress\" : 1]\n        let brewStateJSON = [\"name\" : \"Very IPA\", \"startTime\" : \"2014-08-03T09:55:00.000Z\", \"phases\" : [brewPhaseJSON], \"paused\" : false, \"inProgress\" : true]\n        _ = ContentParser.parseBrewState(JSON(brewStateJSON))\n    }\n    \n    func testParseBrewStateWithEmptyJSON() {\n        let json = [\"name\" : NSNull(), \"startTime\" : NSNull(), \"phases\" : NSNull(), \"paused\" : NSNull(), \"inProgress\" : NSNull()]\n        _ = ContentParser.parseBrewState(JSON(json))\n    }\n    \n    func testParseBrewStateWithUnexpectedJSONStructure() {\n        let json = [\"phases\" : NSNull(), \"paused\" : NSNull(), \"inProgress\" : NSNull()]\n        _ = ContentParser.parseBrewState(JSON(json))\n    }\n    \n    //MARK: Testing BrewPhase object parsing\n    func testParseBrewPhase() {\n        let json = [\"jobEnd\" : \"2014-08-03T09:55:00.000Z\", \"min\" : \"100\", \"temp\" : \"76\", \"tempReached\" : 0, \"inProgress\" : 1]\n        _ = ContentParser.parseBrewState(JSON(json))\n    }\n    \n    func testParseBrewPhaseWithEmptyJSON() {\n        let json = [\"jobEnd\" : NSNull(), \"min\" : NSNull(), \"temp\" : NSNull(), \"tempReached\" : NSNull(), \"inProgress\" : NSNull()]\n        _ = ContentParser.parseBrewPhase(JSON(json))\n    }\n    \n    func testParseBrewPhaseWithUnexpectedJSONStructure() {\n        let json = [\"tempReached\" : 0, \"inProgress\" : 1]\n        _ = ContentParser.parseBrewPhase(JSON(json))\n    }\n\n    func testFormatDate() {\n        let originalDateString = \"2014-08-03T09:55:00.000Z\"\n        let formattedDateString = ContentParser.formatDate(originalDateString)\n        \n        XCTAssertEqual(formattedDateString, \"09:55\", \"expected to be equal\")\n    }\n\n}\n"
  },
  {
    "path": "BrewMobileTests/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Cartfile",
    "content": "github \"socketio/socket.io-client-swift\" ~> 5.3.3\ngithub \"boredzo/iso-8601-date-formatter\" \"43210ea91f5ea2baff6ba13d699af5dc267ad374\"\ngithub \"ReactiveCocoa/ReactiveCocoa\" ~> 4.0.1\ngithub \"SwiftyJSON/SwiftyJSON\" >= 2.2.1\n"
  },
  {
    "path": "Cartfile.resolved",
    "content": "github \"antitypical/Result\" \"1.0.2\"\ngithub \"SwiftyJSON/SwiftyJSON\" \"2.3.3\"\ngithub \"boredzo/iso-8601-date-formatter\" \"43210ea91f5ea2baff6ba13d699af5dc267ad374\"\ngithub \"socketio/socket.io-client-swift\" \"v5.3.3\"\ngithub \"ReactiveCocoa/ReactiveCocoa\" \"v4.0.1\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/.gitignore",
    "content": "# Xcode\nbuild/*\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\n*.xcworkspace\n!default.xcworkspace\nxcuserdata\nprofile\n*.moved-aside\n\nCarthage/Build\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/.gitmodules",
    "content": "[submodule \"Carthage/Checkouts/Nimble\"]\n\tpath = Carthage/Checkouts/Nimble\n\turl = https://github.com/Quick/Nimble.git\n[submodule \"Carthage/Checkouts/Quick\"]\n\tpath = Carthage/Checkouts/Quick\n\turl = https://github.com/Quick/Quick.git\n[submodule \"Carthage/Checkouts/xcconfigs\"]\n\tpath = Carthage/Checkouts/xcconfigs\n\turl = https://github.com/jspahrsummers/xcconfigs.git\n[submodule \"Carthage/Checkouts/Result\"]\n\tpath = Carthage/Checkouts/Result\n\turl = https://github.com/antitypical/Result.git\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/.travis.yml",
    "content": "language: objective-c\nosx_image: xcode7.1\nbefore_install: true\ninstall: true\ngit:\n  submodules: false\nscript: script/cibuild ReactiveCocoa-Mac ReactiveCocoa-iOS\nnotifications:\n  email: false\n  slack:\n    secure: C9QTry5wUG9CfeH3rm3Z19R5rDWqDO7EhHAqHDXBxT6CpGRkTPFliJexpjBYB4sroJ8CiY5ZgTI2sjRBiAdGoE5ZQkfnwSoKQhWXkwo19TnbSnufr3cKO2SZkUhBqOlZcA+mgfjZ7rm2wm7RhpCR/4z8oBXDN4/xv0U5R2fLCLE=\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/CHANGELOG.md",
    "content": "# 4.0\n\nIf you’re new to the Swift API and migrating from RAC 2, start with the [3.0 changes](#30). This section only covers the differences between `3.0` and `4.0`. \n\nJust like in `RAC 3`, because Objective-C is still in widespread use, 99% of `RAC 2.x` code will continue to work under `RAC 4.0` without any changes. That is, `RAC 2.x` primitives are still available in `RAC 4.0`.\n\n`ReactiveCocoa 4.0` targets **Xcode 7.2.x** and **Swift 2.1.x**, and it supports `iOS 8.0`, `watchOS 2.0`, `tvOS 9.0` and `OS X 10.9`.\n\n\n#### Signal operators are protocol extensions\n\nThe biggest change from `RAC 3` to `RAC 4` is that `Signal` and `SignalProducer` operators are implemented as **protocol extensions** instead of global functions. This is similar to many of the collection protocol changes in the `Swift 2` standard\nlibrary.\n\nThis enables chaining signal operators with normal dot-method calling syntax, which makes autocompleting operators a lot easier.\nPreviously the custom `|>` was required to enable chaining global functions without a mess of nested calls and parenthesis.\n\n```swift\n/// RAC 3\nsignal \n  |> filter { $0 % 2 == 0 } \n  |> map { $0 * $0 } \n  |> observe { print($0) }\n\n/// RAC 4\nsignal\n  .filter { $0 % 2 == 0 }\n  .map { $0 * $0 }\n  .observeNext { print($0) }\n```\n\nAdditionally, this means that `SignalProducer` operators are less “magic”. In RAC 3 the `Signal` operators were implicitly lifted to work on `SignalProducer` via `|>`. This was a point of confusion for some, especially when browsing the\nsource looking for these operators. Now as protocol extensions, the `SignalProducer` operators are explicitly implemented in terms of their `Signal` counterpart when available.\n\n#### Removal of `|>` custom operator\n\nAs already alluded to above, the custom `|>` operator for chaining signals has been removed. Instead standard method calling syntax is used for chaining operators.\n\n#### Event cases are no longer boxed\n\nThe improvements to associated enum values in `Swift 2` mean that `Event` case no longer need to be `Box`ed. In fact, the `Box` dependency has been removed completely from `RAC 4`.\n\n#### Replacements for the `start` and `observer` overloads\n\nThe `observe` and `start` overloads taking `next`, `error`, etc. optional function parameters have been removed. They’ve been replaced with methods taking a single function with\nthe target `Event` case — `observeNext`, `startWithNext`, and the same for `failed` and `completed`. See [#2311](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2311) and [#2318](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2318) for more details.\n\n#### Renamed `try` and `catch` operators\n\nThe `try` and `catch` operators were renamed because of the addition of the error handling keywords with the same name. They are now `attempt` and `flatMapError` respectively. Also, `tryMap` was renamed to `attemptMap` for consistency.\n\n#### `flatten` and `flatMap` are now possible for all 4 combinations of `Signal`+`SignalProducer`\n\nThis fills a gap that was missing in `RAC 3`. It’s a common pattern to have signals-of-signals or signals-of-producers.\nThe addition of `flatten` and `flatMap` over these makes it now possible to work with any combination of `Signal`s and `SignalProducer`s.\n\n#### Renamed `Event.Error` to `Event.Failed`\n\nThe `Error` case of `Event` has changed to `Failed`. This aims to help clarify the terminating nature of failure/error events and puts them in the same tense as other terminating cases (`Interrupted` and `Completed`). Likewise, some operations and parameters have been renamed (e.g. `Signal.observeError` is now `Signal.observeFailed`, `Observer.sendError` is now `Observer.sendFailed`).\n\n#### Renamed signal generic parameters\n\nThe generic parameters of `Signal`, `SignalProducer`, and other related types\nhave been renamed to `Value` and `Error` from `T` and `E` respectively. This\nis in-line with changes to the standard library to give more descriptive names\nto type parameters for increased clarity. This should have limited impact,\nonly affecting generic, custom signal/producer extensions.\n\n#### Added missing `SignalProducer` operators\n\nThere were some `Signal` operators that were missing `SignalProducer` equivalents:\n\n* `takeUntil`\n* `combineLatestWith`\n* `sampleOn`\n* `takeUntilReplacement`\n* `zipWith`\n\n#### Added new operators:\n\n* `Signal.on`.\n* `Signal.merge(signals:)`.\n* `Signal.empty`.\n* `skipUntil`.\n* `replayLazily` ([#2639](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2639)).\n\n\n#### Renamed `PropertyOf<T>` to `AnyProperty<T>`\n\nThis is in-line with changes to the standard library in `Swift 2`.\n\n#### Enhancements to `PropertyType`\n\n`MutableProperty` received 3 new methods, similar to those in `Atomic`: `modify`, `swap`, and `withValue`.\nAdditionally, all `PropertyType`s now have a `signal: Signal<T>` in addition to their existing `producer: SignalProducer<T>` property.\n\n#### Publicized `Bag` and `Atomic`\n\n`Bag` and `Atomic` are now public. These are useful when creating custom operators for RAC types.\n\n#### `SignalProducer.buffer` no longer has a default capacity\n\nIn order to force users to think about the desired capacity, this no longer defaults to `Int.max`. Prior to this change one could have inadvertently cached every value emitted by the `SignalProducer`. This needs to be specified manually now.\n\n#### Added `SignalProducer.replayLazily` for multicasting\n\nIt’s still recommended to use `SignalProducer.buffer` or `PropertyType` when buffering behavior is desired. However, when you need to compose an existing `SignalProducer` to avoid duplicate side effects, this operator is now available.\n\nThe full semantics of the operator are documented in the code, and you can see [#2639](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2639) for full details.\n\n\n# 3.0\n\nReactiveCocoa 3.0 includes the first official Swift API, which is intended to\neventually supplant the Objective-C API entirely.\n\nHowever, because migration is hard and time-consuming, and because Objective-C\nis still in widespread use, 99% of RAC 2.x code will continue to work under RAC\n3.0 without any changes.\n\nSince the 3.0 changes are entirely additive, this document will discuss how\nconcepts from the Objective-C API map to the Swift API. For a complete diff of\nall changes, see [the 3.0 pull\nrequest](https://github.com/ReactiveCocoa/ReactiveCocoa/pull/1382).\n\n**[Additions](#additions)**\n\n 1. [Parameterized types](#parameterized-types)\n 1. [Interrupted event](#interrupted-event)\n 1. [Objective-C bridging](#objective-c-bridging)\n\n**[Replacements](#replacements)**\n\n 1. [Hot signals are now Signals](#hot-signals-are-now-signals)\n 1. [Cold signals are now SignalProducers](#cold-signals-are-now-signalproducers)\n 1. [Commands are now Actions](#commands-are-now-actions)\n 1. [Flattening/merging, concatenating, and switching are now one operator](#flatteningmerging-concatenating-and-switching-are-now-one-operator)\n 1. [Using PropertyType instead of RACObserve and RAC](#using-propertytype-instead-of-racobserve-and-rac)\n 1. [Using Signal.pipe instead of RACSubject](#using-signalpipe-instead-of-racsubject)\n 1. [Using SignalProducer.buffer instead of replaying](#using-signalproducerbuffer-instead-of-replaying)\n 1. [Using startWithSignal instead of multicasting](#using-startwithsignal-instead-of-multicasting)\n\n**[Minor changes](#minor-changes)**\n\n 1. [Disposable changes](#disposable-changes)\n 1. [Scheduler changes](#scheduler-changes)\n\n## Additions\n\n### Parameterized types\n\nThanks to Swift, **it is now possible to express the type of value that a signal\ncan send. RAC also requires that the type of errors be specified.**\n\nFor example, `Signal<Int, NSError>` is a signal that may send zero or more\nintegers, and which may send an error of type `NSError`.\n\n**If it is impossible for a signal to error out, use the built-in\n[`NoError`](ReactiveCocoa/Swift/Errors.swift) type**\n(which can be referred to, but never created) to represent that\ncase—for example, `Signal<String, NoError>` is a signal that may send zero or\nmore strings, and which will _not_ send an error under any circumstances.\n\nTogether, these additions make it much simpler to reason about signal\ninteractions, and protect against several kinds of common bugs that occurred in\nObjective-C.\n\n### Interrupted event\n\nIn addition to the `Next`, `Error`, and `Completed` events that have always been\npart of RAC, version 3.0 [adds another terminating\nevent](https://github.com/ReactiveCocoa/ReactiveCocoa/pull/1735)—called\n`Interrupted`—that is used to communicate cancellation.\n\nNow, **whenever a [producer](#cold-signals-are-now-signalproducers) is disposed\nof, one final `Interrupted` event will be sent to all consumers,** giving them\na chance to react to the cancellation.\n\nSimilarly, observing a [hot signal](#hot-signals-are-now-signals) that has\nalready terminated will immediately result in an `Interrupted` event, to clearly\nindicate that no further events are possible.\n\nThis brings disposal semantics more in line with normal event delivery, where\nevents propagate downstream from producers to consumers. The result is a simpler\nmodel for reasoning about non-erroneous, yet unsuccessful, signal terminations.\n\n**Note:** Custom `Signal` and `SignalProducer` operators should handle any received\n`Interrupted` event by forwarding it to their own observers. This ensures that\ninterruption correctly propagates through the whole signal chain.\n\n### Objective-C bridging\n\n**To support interoperation between the Objective-C APIs introduced in RAC 2 and\nthe Swift APIs introduced in RAC 3, the framework offers [bridging\nfunctions](ReactiveCocoa/Swift/ObjectiveCBridging.swift)** that can convert types\nback and forth between the two.\n\nBecause the APIs are based on fundamentally different designs, the conversion is\nnot always one-to-one; however, every attempt has been made to faithfully\ntranslate the concepts between the two APIs (and languages).\n\n**Common conversions include:**\n\n* The `RACSignal.toSignalProducer` method **†**\n    * Converts `RACSignal *` to `SignalProducer<AnyObject?, NSError>`\n* The `toRACSignal()` function\n    * Converts `SignalProducer<AnyObject?, ErrorType>` to `RACSignal *`\n    * Converts `Signal<AnyObject?, ErrorType>` to `RACSignal *`\n* The `RACCommand.toAction` method **‡**\n    * Converts `RACCommand *` to `Action<AnyObject?, AnyObject?, NSError>`\n* The `toRACCommand` function **‡**\n    * Converts `Action<AnyObject?, AnyObject?, ErrorType>` to `RACCommand *`\n\n**†** It is not possible (in the general case) to convert arbitrary `RACSignal`\ninstances to `Signal`s, because any `RACSignal` subscription could potentially\ninvolve side effects. To obtain a `Signal`, use `RACSignal.toSignalProducer`\nfollowed by `SignalProducer.start`, thereby making those side effects explicit.\n\n**‡** Unfortunately, the `executing` properties of actions and commands are not\nsynchronized across the API bridge. To ensure consistency, only observe the\n`executing` property from the base object (the one passed _into_ the bridge, not\nretrieved from it), so updates occur no matter which object is used for\nexecution.\n\n## Replacements\n\n### Hot signals are now Signals\n\nIn the terminology of RAC 2, a “hot” `RACSignal` does not trigger any side effects\nwhen a `-subscribe…` method is called upon it. In other words, hot signals are\nentirely producer-driven and push-based, and consumers (subscribers) cannot have\nany effect on their lifetime.\n\nThis pattern is useful for notifying observers about events that will occur _no\nmatter what_. For example, a `loading` boolean might flip between true and false\nregardless of whether anything is observing it.\n\nConcretely, _every_ `RACSubject` is a kind of hot signal, because the events\nbeing forwarded are not determined by the number of subscribers on the subject.\n\nIn RAC 3, **“hot” signals are now solely represented by the\n[`Signal`](ReactiveCocoa/Swift/Signal.swift) class**, and “cold” signals have been\n[separated into their own type](#cold-signals-are-now-signalproducers). This\nreduces complexity by making it clear that no `Signal` object can trigger side\neffects when observed.\n\n### Cold signals are now SignalProducers\n\nIn the terminology of RAC 2, a “cold” `RACSignal` performs its work one time for\n_every_ subscription. In other words, cold signals perform side effects when\na `-subscribe…` method is called upon them, and may be able to cancel\nin-progress work if `-dispose` is called upon the returned `RACDisposable`.\n\nThis pattern is broadly useful because it minimizes unnecessary work, and\nallows operators like `take`, `retry`, `concat`, etc. to manipulate when work is\nstarted and cancelled. Cold signals are also similar to how [futures and\npromises](http://en.wikipedia.org/wiki/Futures_and_promises) work, and can be\nuseful for structuring asynchronous code (like network requests).\n\nIn RAC 3, **“cold” signals are now solely represented by the\n[`SignalProducer`](ReactiveCocoa/Swift/SignalProducer.swift) class**, which\nclearly indicates their relationship to [“hot”\nsignals](#hot-signals-are-now-signals). As the name indicates, a signal\n_producer_ is responsible for creating\na [_signal_](#hot-signals-are-now-signals) (when started), and can\nperform work as part of that process—meanwhile, the signal can have any number\nof observers without any additional side effects.\n\n### Commands are now Actions\n\nInstead of the ambiguously named `RACCommand`, the Swift API offers the\n[`Action`](ReactiveCocoa/Swift/Action.swift) type—named as such because it’s\nmainly useful in UI programming—to fulfill the same purpose.\n\nLike the rest of the Swift API, actions are\n[parameterized](#parameterized-types) by the types they use. **An action must\nindicate the type of input it accepts, the type of output it produces, and\nwhat kinds of errors can occur (if any).** This eliminates a few classes of type\nerror, and clarifies intention.\n\nActions are also intended to be simpler overall than their predecessor:\n\n * **Unlike commands, actions are not bound to or dependent upon the main\n   thread**, making it easier to reason about when they can be executed and when\n   they will generate notifications.\n * **Actions also only support serial execution**, because concurrent execution\n   was a rarely used feature of `RACCommand` that added significant complexity\n   to the interface and implementation.\n\nBecause actions are frequently used in conjunction with AppKit or UIKit, there\nis also a `CocoaAction` class that erases the type parameters of an `Action`,\nallowing it to be used from Objective-C.\n\nAs an example, an action can be wrapped and bound to `UIControl` like so:\n\n```swift\nself.cocoaAction = CocoaAction(underlyingAction)\nself.button.addTarget(self.cocoaAction, action: CocoaAction.selector, forControlEvents: UIControlEvents.TouchUpInside)\n```\n\n### Flattening/merging, concatenating, and switching are now one operator\n\nRAC 2 offers several operators for transforming a signal-of-signals into one\n`RACSignal`, including:\n\n * `-flatten`\n * `-flattenMap:`\n * `+merge:`\n * `-concat`\n * `+concat:`\n * `-switchToLatest`\n\nBecause `-flattenMap:` is the easiest to use, it was often\nincorrectly chosen even when concatenation or switching semantics are more\nappropriate.\n\n**RAC 3 distills these concepts down into just two operators, `flatten` and `flatMap`.**\nNote that these do _not_ have the same behavior as `-flatten` and `-flattenMap:`\nfrom RAC 2. Instead, both accept a “strategy” which determines how the\nproducer-of-producers should be integrated, which can be one of:\n\n * `.Merge`, which is equivalent to RAC 2’s `-flatten` or `+merge:`\n * `.Concat`, which is equivalent to `-concat` or `+concat:`\n * `.Latest`, which is equivalent to `-switchToLatest`\n\nThis reduces the API surface area, and forces callers to consciously think about\nwhich strategy is most appropriate for a given use.\n\n**For streams of exactly one value, calls to `-flattenMap:` can be replaced with\n`flatMap(.Concat)`**, which has the additional benefit of predictable behavior if\nthe input stream is refactored to have more values in the future.\n\n### Using PropertyType instead of RACObserve and RAC\n\nTo be more Swift-like, RAC 3 de-emphasizes [Key-Value Coding](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueCoding/Articles/KeyValueCoding.html) (KVC)\nand [Key-Value Observing](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html) (KVO)\nin favor of a less “magical” representation for properties.\n**The [`PropertyType` protocol and implementations](ReactiveCocoa/Swift/Property.swift)\nreplace most uses of the `RACObserve()` and `RAC()` macros.**\n\nFor example, `MutableProperty` can be used to represent a property that can be\nbound to. If changes to that property should be visible to consumers, it can\nadditionally be wrapped in `PropertyOf` (to hide the mutable bits) and exposed\npublicly.\n\n**If KVC or KVO is required by a specific API**—for example, to observe changes\nto `NSOperation.executing`—RAC 3 offers a `DynamicProperty` type that can wrap\nthose key paths. Use this class with caution, though, as it can’t offer any type\nsafety, and many APIs (especially in AppKit and UIKit) are not documented to be\nKVO-compliant.\n\n### Using Signal.pipe instead of RACSubject\n\nSince the `Signal` type, like `RACSubject`, is [always “hot”](#hot-signals-are-now-signals),\nthere is a special class method for creating a controllable signal. **The\n`Signal.pipe` method can replace the use of subjects**, and expresses intent\nbetter by separating the observing API from the sending API.\n\nTo use a pipe, set up observers on the signal as desired, then send values to\nthe sink:\n\n```swift\nlet (signal, sink) = Signal<Int, NoError>.pipe()\n\nsignal.observe(next: { value in\n    println(value)\n})\n\n// Prints each number\nsendNext(sink, 0)\nsendNext(sink, 1)\nsendNext(sink, 2)\n```\n\n### Using SignalProducer.buffer instead of replaying\n\nThe producer version of\n[`Signal.pipe`](#using-signalpipe-instead-of-racsubject),\n**the `SignalProducer.buffer` method can replace replaying** with\n`RACReplaySubject` or any of the `-replay…` methods.\n\nConceptually, `buffer` creates a (optionally bounded) queue for events, much\nlike `RACReplaySubject`, and replays those events when new `Signal`s are created\nfrom the producer.\n\nFor example, to replay the values of an existing `Signal`, it just needs to be\nfed into the write end of the buffer:\n\n```swift\nlet signal: Signal<Int, NoError>\nlet (producer, sink) = SignalProducer<Int, NoError>.buffer()\n\n// Saves observed values in the buffer\nsignal.observe(sink)\n\n// Prints each value buffered\nproducer.start(next: { value in\n    println(value)\n})\n```\n\n### Using startWithSignal instead of multicasting\n\n`RACMulticastConnection` and the `-publish` and `-multicast:` operators were\nalways poorly understood features of RAC 2. In RAC 3, thanks to the `Signal` and\n`SignalProducer` split, **the `SignalProducer.startWithSignal` method can\nreplace multicasting**.\n\n`startWithSignal` allows any number of observers to attach to the created signal\n_before_ any work is begun—therefore, the work (and any side effects) still\noccurs just once, but the values can be distributed to multiple interested\nobservers. This fulfills the same purpose of multicasting, in a much clearer and\nmore tightly-scoped way.\n\nFor example:\n\n```swift\nlet producer = timer(5, onScheduler: QueueScheduler.mainQueueScheduler).take(3)\n\n// Starts just one timer, sending the dates to two different observers as they\n// are generated.\nproducer.startWithSignal { signal, disposable in\n    signal.observe(next: { date in\n        println(date)\n    })\n\n    signal.observe(someOtherObserver)\n}\n```\n\n## Minor changes\n\n### Disposable changes\n\n[Disposables](ReactiveCocoa/Swift/Disposable.swift) haven’t changed much overall\nin RAC 3, besides the addition of a protocol and minor naming tweaks.\n\nThe biggest change to be aware of is that **setting\n`SerialDisposable.innerDisposable` will always dispose of the previous value**,\nwhich helps prevent resource leaks or logic errors from forgetting to dispose\nmanually.\n\n### Scheduler changes\n\nRAC 3 replaces the multipurpose `RACScheduler` class with two protocols,\n[`SchedulerType` and `DateSchedulerType`](ReactiveCocoa/Swift/Scheduler.swift), with multiple implementations of each.\nThis design indicates and enforces the capabilities of each scheduler using the type\nsystem.\n\nIn addition, **the `mainThreadScheduler` has been replaced with `UIScheduler` and\n`QueueScheduler.mainQueueScheduler`**. The `UIScheduler` type runs operations as\nsoon as possible on the main thread—even synchronously (if possible), thereby\nreplacing RAC 2’s `-performOnMainThread` operator—while\n`QueueScheduler.mainQueueScheduler` will always enqueue work after the current\nrun loop iteration, and can be used to schedule work at a future date.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/CONTRIBUTING.md",
    "content": "We love that you're interested in contributing to this project!\n\nTo make the process as painless as possible, we have just a couple of guidelines\nthat should make life easier for everyone involved.\n\n## Prefer Pull Requests\n\nIf you know exactly how to implement the feature being suggested or fix the bug\nbeing reported, please open a pull request instead of an issue. Pull requests are easier than\npatches or inline code blocks for discussing and merging the changes.\n\nIf you can't make the change yourself, please open an issue after making sure\nthat one isn't already logged.\n\n## Contributing Code\n\nFork this repository, make it awesomer (preferably in a branch named for the\ntopic), send a pull request!\n\nAll code contributions should match our [coding\nconventions](https://github.com/github/objective-c-conventions).\n\nThanks for contributing! :boom::camel:\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Cartfile",
    "content": "github \"antitypical/Result\" ~> 1.0.2\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Cartfile.private",
    "content": "github \"jspahrsummers/xcconfigs\" \"ec5753493605deed7358dec5f9260f503d3ed650\"\ngithub \"Quick/Quick\" ~> 0.8\ngithub \"Quick/Nimble\" ~> 3.1\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Cartfile.resolved",
    "content": "github \"Quick/Nimble\" \"v3.1.0\"\ngithub \"Quick/Quick\" \"v0.8.0\"\ngithub \"antitypical/Result\" \"1.0.2\"\ngithub \"jspahrsummers/xcconfigs\" \"ec5753493605deed7358dec5f9260f503d3ed650\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/.gitignore",
    "content": ".DS_Store\nxcuserdata/\nbuild/\n.idea\nDerivedData/\nNimble.framework.zip\n\n# Carthage\n#\n# Add this line if you want to avoid checking in source code from Carthage dependencies.\n# Carthage/Checkouts\n\nCarthage/Build\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/.travis.yml",
    "content": "osx_image: xcode7\nlanguage: objective-c\n\nenv:\n  matrix:\n    - NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 TYPE=ios\n    - NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 TYPE=osx\n\nscript: ./test $TYPE\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/CONTRIBUTING.md",
    "content": "<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n\n- [Welcome to Nimble!](#welcome-to-nimble!)\n  - [Reporting Bugs](#reporting-bugs)\n  - [Building the Project](#building-the-project)\n  - [Pull Requests](#pull-requests)\n    - [Style Conventions](#style-conventions)\n  - [Core Members](#core-members)\n    - [Code of Conduct](#code-of-conduct)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n# Welcome to Nimble!\n\nWe're building a testing framework for a new generation of Swift and\nObjective-C developers.\n\nNimble should be easy to use and easy to maintain. Let's keep things\nsimple and well-tested.\n\n**tl;dr:** If you've added a file to the project, make sure it's\nincluded in both the OS X and iOS targets.\n\n## Reporting Bugs\n\nNothing is off-limits. If you're having a problem, we want to hear about\nit.\n\n- See a crash? File an issue.\n- Code isn't compiling, but you don't know why? Sounds like you should\n  submit a new issue, bud.\n- Went to the kitchen, only to forget why you went in the first place?\n  Better submit an issue.\n\nBe sure to include in your issue:\n\n- Your Xcode version (eg - Xcode 7.0.1 7A1001)\n- Your version of Nimble (eg - v2.0.0 or git sha `20a3f3b4e63cc8d97c92c4164bf36f2a2c9a6e1b`)\n- What are the steps to reproduce this issue?\n- What platform are you using? (eg - OS X, iOS, watchOS, tvOS)\n- If the problem is on a UI Testing Bundle, Unit Testing Bundle, or some other target configuration\n- Are you using carthage or cocoapods?\n\n## Building the Project\n\n- Use `Nimble.xcodeproj` to work on Nimble.\n\n## Pull Requests\n\n- Nothing is trivial. Submit pull requests for anything: typos,\n  whitespace, you name it.\n- Not all pull requests will be merged, but all will be acknowledged. If\n  no one has provided feedback on your request, ping one of the owners\n  by name.\n- Make sure your pull request includes any necessary updates to the\n  README or other documentation.\n- Be sure the unit tests for both the OS X and iOS targets of Nimble\n  before submitting your pull request. You can run all the OS X & iOS unit\n  tests using `./test`.\n- If you've added a file to the project, make sure it's included in both\n  the OS X and iOS targets.\n- The `master` branch will always support the stable Xcode version. Other\n  branches will point to their corresponding versions they support.\n- If you're making a configuration change, make sure to edit both the xcode\n  project and the podspec file.\n\n### Style Conventions\n\n- Indent using 4 spaces.\n- Keep lines 100 characters or shorter. Break long statements into\n  shorter ones over multiple lines.\n- In Objective-C, use `#pragma mark -` to mark public, internal,\n  protocol, and superclass methods.\n\n## Core Members\n\nIf a few of your pull requests have been merged, and you'd like a\ncontrolling stake in the project, file an issue asking for write access\nto the repository.\n\n### Code of Conduct\n\nYour conduct as a core member is your own responsibility, but here are\nsome \"ground rules\":\n\n- Feel free to push whatever you want to master, and (if you have\n  ownership permissions) to create any repositories you'd like.\n\n  Ideally, however, all changes should be submitted as GitHub pull\n  requests. No one should merge their own pull request, unless no\n  other core members respond for at least a few days.\n\n  If you'd like to create a new repository, it'd be nice if you created\n  a GitHub issue and gathered some feedback first.\n\n- It'd be awesome if you could review, provide feedback on, and close\n  issues or pull requests submitted to the project. Please provide kind,\n  constructive feedback. Please don't be sarcastic or snarky.\n\n### Creating a Release\n\nThe process is relatively straight forward, but here's is a useful checklist for tagging:\n\n- Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD`\n- Run the release script: `./script/release A.B.C release-notes-file`\n- Go to [github releases](https://github.com/Quick/Nimble/releases) and mark the tagged commit as a release.\n  - Use the same release notes you created for the tag, but tweak up formatting for github.\n  - Attach the carthage release `Nimble.framework.zip` to the release.\n- Announce!\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/LICENSE.md",
    "content": "Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2014 Quick Team\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Adapters/AdapterProtocols.swift",
    "content": "import Foundation\n\n/// Protocol for the assertion handler that Nimble uses for all expectations.\npublic protocol AssertionHandler {\n    func assert(assertion: Bool, message: FailureMessage, location: SourceLocation)\n}\n\n/// Global backing interface for assertions that Nimble creates.\n/// Defaults to a private test handler that passes through to XCTest.\n///\n/// If XCTest is not available, you must assign your own assertion handler\n/// before using any matchers, otherwise Nimble will abort the program.\n///\n/// @see AssertionHandler\npublic var NimbleAssertionHandler: AssertionHandler = { () -> AssertionHandler in\n    return isXCTestAvailable() ? NimbleXCTestHandler() : NimbleXCTestUnavailableHandler()\n}()\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Adapters/AssertionDispatcher.swift",
    "content": "\n/// AssertionDispatcher allows multiple AssertionHandlers to receive\n/// assertion messages.\n///\n/// @warning Does not fully dispatch if one of the handlers raises an exception.\n///          This is possible with XCTest-based assertion handlers.\n///\npublic class AssertionDispatcher: AssertionHandler {\n    let handlers: [AssertionHandler]\n\n    public init(handlers: [AssertionHandler]) {\n        self.handlers = handlers\n    }\n\n    public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        for handler in handlers {\n            handler.assert(assertion, message: message, location: location)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Adapters/AssertionRecorder.swift",
    "content": "import Foundation\n\n/// A data structure that stores information about an assertion when\n/// AssertionRecorder is set as the Nimble assertion handler.\n///\n/// @see AssertionRecorder\n/// @see AssertionHandler\npublic struct AssertionRecord: CustomStringConvertible {\n    /// Whether the assertion succeeded or failed\n    public let success: Bool\n    /// The failure message the assertion would display on failure.\n    public let message: FailureMessage\n    /// The source location the expectation occurred on.\n    public let location: SourceLocation\n\n    public var description: String {\n        return \"AssertionRecord { success=\\(success), message='\\(message.stringValue)', location=\\(location) }\"\n    }\n}\n\n/// An AssertionHandler that silently records assertions that Nimble makes.\n/// This is useful for testing failure messages for matchers.\n///\n/// @see AssertionHandler\npublic class AssertionRecorder : AssertionHandler {\n    /// All the assertions that were captured by this recorder\n    public var assertions = [AssertionRecord]()\n\n    public init() {}\n\n    public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        assertions.append(\n            AssertionRecord(\n                success: assertion,\n                message: message,\n                location: location))\n    }\n}\n\n/// Allows you to temporarily replace the current Nimble assertion handler with\n/// the one provided for the scope of the closure.\n///\n/// Once the closure finishes, then the original Nimble assertion handler is restored.\n///\n/// @see AssertionHandler\npublic func withAssertionHandler(tempAssertionHandler: AssertionHandler, closure: () throws -> Void) {\n    let environment = NimbleEnvironment.activeInstance\n    let oldRecorder = environment.assertionHandler\n    let capturer = NMBExceptionCapture(handler: nil, finally: ({\n        environment.assertionHandler = oldRecorder\n    }))\n    environment.assertionHandler = tempAssertionHandler\n    capturer.tryBlock {\n        try! closure()\n    }\n}\n\n/// Captures expectations that occur in the given closure. Note that all\n/// expectations will still go through to the default Nimble handler.\n///\n/// This can be useful if you want to gather information about expectations\n/// that occur within a closure.\n///\n/// @param silently expectations are no longer send to the default Nimble \n///                 assertion handler when this is true. Defaults to false.\n///\n/// @see gatherFailingExpectations\npublic func gatherExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] {\n    let previousRecorder = NimbleEnvironment.activeInstance.assertionHandler\n    let recorder = AssertionRecorder()\n    let handlers: [AssertionHandler]\n\n    if silently {\n        handlers = [recorder]\n    } else {\n        handlers = [recorder, previousRecorder]\n    }\n\n    let dispatcher = AssertionDispatcher(handlers: handlers)\n    withAssertionHandler(dispatcher, closure: closure)\n    return recorder.assertions\n}\n\n/// Captures failed expectations that occur in the given closure. Note that all\n/// expectations will still go through to the default Nimble handler.\n///\n/// This can be useful if you want to gather information about failed\n/// expectations that occur within a closure.\n///\n/// @param silently expectations are no longer send to the default Nimble\n///                 assertion handler when this is true. Defaults to false.\n///\n/// @see gatherExpectations\n/// @see raiseException source for an example use case.\npublic func gatherFailingExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] {\n    let assertions = gatherExpectations(silently: silently, closure: closure)\n    return assertions.filter { assertion in\n        !assertion.success\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Adapters/NimbleEnvironment.swift",
    "content": "import Foundation\n\n/// \"Global\" state of Nimble is stored here. Only DSL functions should access / be aware of this\n/// class' existance\ninternal class NimbleEnvironment {\n    static var activeInstance: NimbleEnvironment {\n        get {\n            let env = NSThread.currentThread().threadDictionary[\"NimbleEnvironment\"]\n            if let env = env as? NimbleEnvironment {\n                return env\n            } else {\n                let newEnv = NimbleEnvironment()\n                self.activeInstance = newEnv\n                return newEnv\n            }\n        }\n        set {\n            NSThread.currentThread().threadDictionary[\"NimbleEnvironment\"] = newValue\n        }\n    }\n\n    // TODO: eventually migrate the global to this environment value\n    var assertionHandler: AssertionHandler {\n        get { return NimbleAssertionHandler }\n        set { NimbleAssertionHandler = newValue }\n    }\n    var awaiter: Awaiter\n\n    init() {\n        awaiter = Awaiter(\n            waitLock: AssertionWaitLock(),\n            asyncQueue: dispatch_get_main_queue(),\n            timeoutQueue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0))\n    }\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Adapters/NimbleXCTestHandler.swift",
    "content": "import Foundation\nimport XCTest\n\n/// Default handler for Nimble. This assertion handler passes failures along to\n/// XCTest.\npublic class NimbleXCTestHandler : AssertionHandler {\n    public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        if !assertion {\n            XCTFail(\"\\(message.stringValue)\\n\", file: location.file, line: location.line)\n        }\n    }\n}\n\n/// Alternative handler for Nimble. This assertion handler passes failures along\n/// to XCTest by attempting to reduce the failure message size.\npublic class NimbleShortXCTestHandler: AssertionHandler {\n    public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        if !assertion {\n            let msg: String\n            if let actual = message.actualValue {\n                msg = \"got: \\(actual) \\(message.postfixActual)\"\n            } else {\n                msg = \"expected \\(message.to) \\(message.postfixMessage)\"\n            }\n            XCTFail(\"\\(msg)\\n\", file: location.file, line: location.line)\n        }\n    }\n}\n\n/// Fallback handler in case XCTest is unavailable. This assertion handler will abort\n/// the program if it is invoked.\nclass NimbleXCTestUnavailableHandler : AssertionHandler {\n    func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        fatalError(\"XCTest is not available and no custom assertion handler was configured. Aborting.\")\n    }\n}\n\nfunc isXCTestAvailable() -> Bool {\n    return NSClassFromString(\"XCTestCase\") != nil\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/DSL+Wait.swift",
    "content": "import Foundation\n\nprivate enum ErrorResult {\n    case Exception(NSException)\n    case Error(ErrorType)\n    case None\n}\n\n/// Only classes, protocols, methods, properties, and subscript declarations can be\n/// bridges to Objective-C via the @objc keyword. This class encapsulates callback-style\n/// asynchronous waiting logic so that it may be called from Objective-C and Swift.\ninternal class NMBWait: NSObject {\n    internal class func until(\n        timeout timeout: NSTimeInterval,\n        file: String = __FILE__,\n        line: UInt = __LINE__,\n        action: (() -> Void) -> Void) -> Void {\n            return throwableUntil(timeout: timeout, file: file, line: line) { (done: () -> Void) throws -> Void in\n                action() { done() }\n            }\n    }\n\n    // Using a throwable closure makes this method not objc compatible.\n    internal class func throwableUntil(\n        timeout timeout: NSTimeInterval,\n        file: String = __FILE__,\n        line: UInt = __LINE__,\n        action: (() -> Void) throws -> Void) -> Void {\n            let awaiter = NimbleEnvironment.activeInstance.awaiter\n            let leeway = timeout / 2.0\n            let result = awaiter.performBlock { (done: (ErrorResult) -> Void) throws -> Void in\n                dispatch_async(dispatch_get_main_queue()) {\n                    let capture = NMBExceptionCapture(\n                        handler: ({ exception in\n                            done(.Exception(exception))\n                        }),\n                        finally: ({ })\n                    )\n                    capture.tryBlock {\n                        do {\n                            try action() {\n                                done(.None)\n                            }\n                        } catch let e {\n                            done(.Error(e))\n                        }\n                    }\n                }\n            }.timeout(timeout, forcefullyAbortTimeout: leeway).wait(\"waitUntil(...)\", file: file, line: line)\n\n            switch result {\n            case .Incomplete: internalError(\"Reached .Incomplete state for waitUntil(...).\")\n            case .BlockedRunLoop:\n                fail(blockedRunLoopErrorMessageFor(\"-waitUntil()\", leeway: leeway),\n                    file: file, line: line)\n            case .TimedOut:\n                let pluralize = (timeout == 1 ? \"\" : \"s\")\n                fail(\"Waited more than \\(timeout) second\\(pluralize)\", file: file, line: line)\n            case let .RaisedException(exception):\n                fail(\"Unexpected exception raised: \\(exception)\")\n            case let .ErrorThrown(error):\n                fail(\"Unexpected error thrown: \\(error)\")\n            case .Completed(.Exception(let exception)):\n                fail(\"Unexpected exception raised: \\(exception)\")\n            case .Completed(.Error(let error)):\n                fail(\"Unexpected error thrown: \\(error)\")\n            case .Completed(.None): // success\n                break\n            }\n    }\n\n    @objc(untilFile:line:action:)\n    internal class func until(file: String = __FILE__, line: UInt = __LINE__, action: (() -> Void) -> Void) -> Void {\n        until(timeout: 1, file: file, line: line, action: action)\n    }\n}\n\ninternal func blockedRunLoopErrorMessageFor(fnName: String, leeway: NSTimeInterval) -> String {\n    return \"\\(fnName) timed out but was unable to run the timeout handler because the main thread is unresponsive (\\(leeway) seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run.\"\n}\n\n/// Wait asynchronously until the done closure is called or the timeout has been reached.\n///\n/// @discussion\n/// Call the done() closure to indicate the waiting has completed.\n/// \n/// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function\n/// is executing. Any attempts to touch the run loop may cause non-deterministic behavior.\npublic func waitUntil(timeout timeout: NSTimeInterval = 1, file: String = __FILE__, line: UInt = __LINE__, action: (() -> Void) -> Void) -> Void {\n    NMBWait.until(timeout: timeout, file: file, line: line, action: action)\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/DSL.swift",
    "content": "import Foundation\n\n/// Make an expectation on a given actual value. The value given is lazily evaluated.\npublic func expect<T>(@autoclosure(escaping) expression: () throws -> T?, file: String = __FILE__, line: UInt = __LINE__) -> Expectation<T> {\n    return Expectation(\n        expression: Expression(\n            expression: expression,\n            location: SourceLocation(file: file, line: line),\n            isClosure: true))\n}\n\n/// Make an expectation on a given actual value. The closure is lazily invoked.\npublic func expect<T>(file: String = __FILE__, line: UInt = __LINE__, expression: () throws -> T?) -> Expectation<T> {\n    return Expectation(\n        expression: Expression(\n            expression: expression,\n            location: SourceLocation(file: file, line: line),\n            isClosure: true))\n}\n\n/// Always fails the test with a message and a specified location.\npublic func fail(message: String, location: SourceLocation) {\n    let handler = NimbleEnvironment.activeInstance.assertionHandler\n    handler.assert(false, message: FailureMessage(stringValue: message), location: location)\n}\n\n/// Always fails the test with a message.\npublic func fail(message: String, file: String = __FILE__, line: UInt = __LINE__) {\n    fail(message, location: SourceLocation(file: file, line: line))\n}\n\n/// Always fails the test.\npublic func fail(file: String = __FILE__, line: UInt = __LINE__) {\n    fail(\"fail() always fails\", file: file, line: line)\n}\n\n/// Like Swift's precondition(), but raises NSExceptions instead of sigaborts\ninternal func nimblePrecondition(\n    @autoclosure expr: () -> Bool,\n    @autoclosure _ name: () -> String,\n    @autoclosure _ message: () -> String) -> Bool {\n        let result = expr()\n        if !result {\n            let e = NSException(\n                name: name(),\n                reason: message(),\n                userInfo: nil)\n            e.raise()\n        }\n        return result\n}\n\n@noreturn\ninternal func internalError(msg: String, file: String = __FILE__, line: UInt = __LINE__) {\n    fatalError(\n        \"Nimble Bug Found: \\(msg) at \\(file):\\(line).\\n\" +\n        \"Please file a bug to Nimble: https://github.com/Quick/Nimble/issues with the \" +\n        \"code snippet that caused this error.\"\n    )\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Expectation.swift",
    "content": "import Foundation\n\ninternal func expressionMatches<T, U where U: Matcher, U.ValueType == T>(expression: Expression<T>, matcher: U, to: String, description: String?) -> (Bool, FailureMessage) {\n    let msg = FailureMessage()\n    msg.userDescription = description\n    msg.to = to\n    do {\n        let pass = try matcher.matches(expression, failureMessage: msg)\n        if msg.actualValue == \"\" {\n            msg.actualValue = \"<\\(stringify(try expression.evaluate()))>\"\n        }\n        return (pass, msg)\n    } catch let error {\n        msg.actualValue = \"an unexpected error thrown: <\\(error)>\"\n        return (false, msg)\n    }\n}\n\ninternal func expressionDoesNotMatch<T, U where U: Matcher, U.ValueType == T>(expression: Expression<T>, matcher: U, toNot: String, description: String?) -> (Bool, FailureMessage) {\n    let msg = FailureMessage()\n    msg.userDescription = description\n    msg.to = toNot\n    do {\n        let pass = try matcher.doesNotMatch(expression, failureMessage: msg)\n        if msg.actualValue == \"\" {\n            msg.actualValue = \"<\\(stringify(try expression.evaluate()))>\"\n        }\n        return (pass, msg)\n    } catch let error {\n        msg.actualValue = \"an unexpected error thrown: <\\(error)>\"\n        return (false, msg)\n    }\n}\n\npublic struct Expectation<T> {\n    let expression: Expression<T>\n\n    public func verify(pass: Bool, _ message: FailureMessage) {\n        let handler = NimbleEnvironment.activeInstance.assertionHandler\n        handler.assert(pass, message: message, location: expression.location)\n    }\n\n    /// Tests the actual value using a matcher to match.\n    public func to<U where U: Matcher, U.ValueType == T>(matcher: U, description: String? = nil) {\n        let (pass, msg) = expressionMatches(expression, matcher: matcher, to: \"to\", description: description)\n        verify(pass, msg)\n    }\n\n    /// Tests the actual value using a matcher to not match.\n    public func toNot<U where U: Matcher, U.ValueType == T>(matcher: U, description: String? = nil) {\n        let (pass, msg) = expressionDoesNotMatch(expression, matcher: matcher, toNot: \"to not\", description: description)\n        verify(pass, msg)\n    }\n\n    /// Tests the actual value using a matcher to not match.\n    ///\n    /// Alias to toNot().\n    public func notTo<U where U: Matcher, U.ValueType == T>(matcher: U, description: String? = nil) {\n        toNot(matcher, description: description)\n    }\n\n    // see:\n    // - AsyncMatcherWrapper for extension\n    // - NMBExpectation for Objective-C interface\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Expression.swift",
    "content": "import Foundation\n\n// Memoizes the given closure, only calling the passed\n// closure once; even if repeat calls to the returned closure\ninternal func memoizedClosure<T>(closure: () throws -> T) -> (Bool) throws -> T {\n    var cache: T?\n    return ({ withoutCaching in\n        if (withoutCaching || cache == nil) {\n            cache = try closure()\n        }\n        return cache!\n    })\n}\n\n/// Expression represents the closure of the value inside expect(...).\n/// Expressions are memoized by default. This makes them safe to call\n/// evaluate() multiple times without causing a re-evaluation of the underlying\n/// closure.\n///\n/// @warning Since the closure can be any code, Objective-C code may choose\n///          to raise an exception. Currently, Expression does not memoize\n///          exception raising.\n///\n/// This provides a common consumable API for matchers to utilize to allow\n/// Nimble to change internals to how the captured closure is managed.\npublic struct Expression<T> {\n    internal let _expression: (Bool) throws -> T?\n    internal let _withoutCaching: Bool\n    public let location: SourceLocation\n    public let isClosure: Bool\n\n    /// Creates a new expression struct. Normally, expect(...) will manage this\n    /// creation process. The expression is memoized.\n    ///\n    /// @param expression The closure that produces a given value.\n    /// @param location The source location that this closure originates from.\n    /// @param isClosure A bool indicating if the captured expression is a\n    ///                  closure or internally produced closure. Some matchers\n    ///                  may require closures. For example, toEventually()\n    ///                  requires an explicit closure. This gives Nimble\n    ///                  flexibility if @autoclosure behavior changes between\n    ///                  Swift versions. Nimble internals always sets this true.\n    public init(expression: () throws -> T?, location: SourceLocation, isClosure: Bool = true) {\n        self._expression = memoizedClosure(expression)\n        self.location = location\n        self._withoutCaching = false\n        self.isClosure = isClosure\n    }\n\n    /// Creates a new expression struct. Normally, expect(...) will manage this\n    /// creation process.\n    ///\n    /// @param expression The closure that produces a given value.\n    /// @param location The source location that this closure originates from.\n    /// @param withoutCaching Indicates if the struct should memoize the given\n    ///                       closure's result. Subsequent evaluate() calls will\n    ///                       not call the given closure if this is true.\n    /// @param isClosure A bool indicating if the captured expression is a\n    ///                  closure or internally produced closure. Some matchers\n    ///                  may require closures. For example, toEventually()\n    ///                  requires an explicit closure. This gives Nimble\n    ///                  flexibility if @autoclosure behavior changes between\n    ///                  Swift versions. Nimble internals always sets this true.\n    public init(memoizedExpression: (Bool) throws -> T?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true) {\n        self._expression = memoizedExpression\n        self.location = location\n        self._withoutCaching = withoutCaching\n        self.isClosure = isClosure\n    }\n\n    /// Returns a new Expression from the given expression. Identical to a map()\n    /// on this type. This should be used only to typecast the Expression's\n    /// closure value.\n    ///\n    /// The returned expression will preserve location and isClosure.\n    ///\n    /// @param block The block that can cast the current Expression value to a\n    ///              new type.\n    public func cast<U>(block: (T?) throws -> U?) -> Expression<U> {\n        return Expression<U>(expression: ({ try block(self.evaluate()) }), location: self.location, isClosure: self.isClosure)\n    }\n\n    public func evaluate() throws -> T? {\n        return try self._expression(_withoutCaching)\n    }\n\n    public func withoutCaching() -> Expression<T> {\n        return Expression(memoizedExpression: self._expression, location: location, withoutCaching: true, isClosure: isClosure)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/FailureMessage.swift",
    "content": "import Foundation\n\n/// Encapsulates the failure message that matchers can report to the end user.\n///\n/// This is shared state between Nimble and matchers that mutate this value.\npublic class FailureMessage: NSObject {\n    public var expected: String = \"expected\"\n    public var actualValue: String? = \"\" // empty string -> use default; nil -> exclude\n    public var to: String = \"to\"\n    public var postfixMessage: String = \"match\"\n    public var postfixActual: String = \"\"\n    public var userDescription: String? = nil\n\n    public var stringValue: String {\n        get {\n            if let value = _stringValueOverride {\n                return value\n            } else {\n                return computeStringValue()\n            }\n        }\n        set {\n            _stringValueOverride = newValue\n        }\n    }\n\n    internal var _stringValueOverride: String?\n\n    public override init() {\n    }\n\n    public init(stringValue: String) {\n        _stringValueOverride = stringValue\n    }\n\n    internal func stripNewlines(str: String) -> String {\n        var lines: [String] = (str as NSString).componentsSeparatedByString(\"\\n\") as [String]\n        let whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet()\n        lines = lines.map { line in line.stringByTrimmingCharactersInSet(whitespace) }\n        return lines.joinWithSeparator(\"\")\n    }\n\n    internal func computeStringValue() -> String {\n        var value = \"\\(expected) \\(to) \\(postfixMessage)\"\n        if let actualValue = actualValue {\n            value = \"\\(expected) \\(to) \\(postfixMessage), got \\(actualValue)\\(postfixActual)\"\n        }\n        value = stripNewlines(value)\n        \n        if let userDescription = userDescription {\n            return \"\\(userDescription)\\n\\(value)\"\n        }\n        \n        return value\n    }\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</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>${CURRENT_PROJECT_VERSION}</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2014 Jeff Hui. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/AllPass.swift",
    "content": "import Foundation\n\npublic func allPass<T,U where U: SequenceType, U.Generator.Element == T>\n    (passFunc: (T?) -> Bool) -> NonNilMatcherFunc<U> {\n        return allPass(\"pass a condition\", passFunc)\n}\n\npublic func allPass<T,U where U: SequenceType, U.Generator.Element == T>\n    (passName: String, _ passFunc: (T?) -> Bool) -> NonNilMatcherFunc<U> {\n        return createAllPassMatcher() {\n            expression, failureMessage in\n            failureMessage.postfixMessage = passName\n            return passFunc(try expression.evaluate())\n        }\n}\n\npublic func allPass<U,V where U: SequenceType, V: Matcher, U.Generator.Element == V.ValueType>\n    (matcher: V) -> NonNilMatcherFunc<U> {\n        return createAllPassMatcher() {\n            try matcher.matches($0, failureMessage: $1)\n        }\n}\n\nprivate func createAllPassMatcher<T,U where U: SequenceType, U.Generator.Element == T>\n    (elementEvaluator:(Expression<T>, FailureMessage) throws -> Bool) -> NonNilMatcherFunc<U> {\n        return NonNilMatcherFunc { actualExpression, failureMessage in\n            failureMessage.actualValue = nil\n            if let actualValue = try actualExpression.evaluate() {\n                for currentElement in actualValue {\n                    let exp = Expression(\n                        expression: {currentElement}, location: actualExpression.location)\n                    if try !elementEvaluator(exp, failureMessage) {\n                        failureMessage.postfixMessage =\n                            \"all \\(failureMessage.postfixMessage),\"\n                            + \" but failed first at element <\\(stringify(currentElement))>\"\n                            + \" in <\\(stringify(actualValue))>\"\n                        return false\n                    }\n                }\n                failureMessage.postfixMessage = \"all \\(failureMessage.postfixMessage)\"\n            } else {\n                failureMessage.postfixMessage = \"all pass (use beNil() to match nils)\"\n                return false\n            }\n            \n            return true\n        }\n}\n\nextension NMBObjCMatcher {\n    public class func allPassMatcher(matcher: NMBObjCMatcher) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let location = actualExpression.location\n            let actualValue = try! actualExpression.evaluate()\n            var nsObjects = [NSObject]()\n            \n            var collectionIsUsable = true\n            if let value = actualValue as? NSFastEnumeration {\n                let generator = NSFastGenerator(value)\n                while let obj:AnyObject = generator.next() {\n                    if let nsObject = obj as? NSObject {\n                        nsObjects.append(nsObject)\n                    } else {\n                        collectionIsUsable = false\n                        break\n                    }\n                }\n            } else {\n                collectionIsUsable = false\n            }\n            \n            if !collectionIsUsable {\n                failureMessage.postfixMessage =\n                  \"allPass only works with NSFastEnumeration (NSArray, NSSet, ...) of NSObjects\"\n                failureMessage.expected = \"\"\n                failureMessage.to = \"\"\n                return false\n            }\n            \n            let expr = Expression(expression: ({ nsObjects }), location: location)\n            let elementEvaluator: (Expression<NSObject>, FailureMessage) -> Bool = {\n                expression, failureMessage in\n                return matcher.matches(\n                    {try! expression.evaluate()}, failureMessage: failureMessage, location: expr.location)\n            }\n            return try! createAllPassMatcher(elementEvaluator).matches(\n                expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeAKindOf.swift",
    "content": "import Foundation\n\n// A Nimble matcher that catches attempts to use beAKindOf with non Objective-C types\npublic func beAKindOf(expectedClass: Any) -> NonNilMatcherFunc<Any> {\n    return NonNilMatcherFunc {actualExpression, failureMessage in\n        failureMessage.stringValue = \"beAKindOf only works on Objective-C types since\"\n            + \" the Swift compiler will automatically type check Swift-only types.\"\n            + \" This expectation is redundant.\"\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is an instance of the given class.\n/// @see beAnInstanceOf if you want to match against the exact class\npublic func beAKindOf(expectedClass: AnyClass) -> NonNilMatcherFunc<NSObject> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        let instance = try actualExpression.evaluate()\n        if let validInstance = instance {\n            failureMessage.actualValue = \"<\\(NSStringFromClass(validInstance.dynamicType)) instance>\"\n        } else {\n            failureMessage.actualValue = \"<nil>\"\n        }\n        failureMessage.postfixMessage = \"be a kind of \\(NSStringFromClass(expectedClass))\"\n        return instance != nil && instance!.isKindOfClass(expectedClass)\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beAKindOfMatcher(expected: AnyClass) -> NMBMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            return try! beAKindOf(expected).matches(actualExpression, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeAnInstanceOf.swift",
    "content": "import Foundation\n\n// A Nimble matcher that catches attempts to use beAnInstanceOf with non Objective-C types\npublic func beAnInstanceOf(expectedClass: Any) -> NonNilMatcherFunc<Any> {\n    return NonNilMatcherFunc {actualExpression, failureMessage in\n        failureMessage.stringValue = \"beAnInstanceOf only works on Objective-C types since\"\n            + \" the Swift compiler will automatically type check Swift-only types.\"\n            + \" This expectation is redundant.\"\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is an instance of the given class.\n/// @see beAKindOf if you want to match against subclasses\npublic func beAnInstanceOf(expectedClass: AnyClass) -> NonNilMatcherFunc<NSObject> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        let instance = try actualExpression.evaluate()\n        if let validInstance = instance {\n            failureMessage.actualValue = \"<\\(NSStringFromClass(validInstance.dynamicType)) instance>\"\n        } else {\n            failureMessage.actualValue = \"<nil>\"\n        }\n        failureMessage.postfixMessage = \"be an instance of \\(NSStringFromClass(expectedClass))\"\n        return instance != nil && instance!.isMemberOfClass(expectedClass)\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beAnInstanceOfMatcher(expected: AnyClass) -> NMBMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            return try! beAnInstanceOf(expected).matches(actualExpression, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeCloseTo.swift",
    "content": "import Foundation\n\ninternal let DefaultDelta = 0.0001\n\ninternal func isCloseTo(actualValue: NMBDoubleConvertible?, expectedValue: NMBDoubleConvertible, delta: Double, failureMessage: FailureMessage) -> Bool {\n    failureMessage.postfixMessage = \"be close to <\\(stringify(expectedValue))> (within \\(stringify(delta)))\"\n    if actualValue != nil {\n        failureMessage.actualValue = \"<\\(stringify(actualValue!))>\"\n    } else {\n        failureMessage.actualValue = \"<nil>\"\n    }\n    return actualValue != nil && abs(actualValue!.doubleValue - expectedValue.doubleValue) < delta\n}\n\n/// A Nimble matcher that succeeds when a value is close to another. This is used for floating\n/// point values which can have imprecise results when doing arithmetic on them.\n///\n/// @see equal\npublic func beCloseTo(expectedValue: Double, within delta: Double = DefaultDelta) -> NonNilMatcherFunc<Double> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage)\n    }\n}\n\n/// A Nimble matcher that succeeds when a value is close to another. This is used for floating\n/// point values which can have imprecise results when doing arithmetic on them.\n///\n/// @see equal\npublic func beCloseTo(expectedValue: NMBDoubleConvertible, within delta: Double = DefaultDelta) -> NonNilMatcherFunc<NMBDoubleConvertible> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage)\n    }\n}\n\npublic class NMBObjCBeCloseToMatcher : NSObject, NMBMatcher {\n    var _expected: NSNumber\n    var _delta: CDouble\n    init(expected: NSNumber, within: CDouble) {\n        _expected = expected\n        _delta = within\n    }\n\n    public func matches(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        let actualBlock: () -> NMBDoubleConvertible? = ({\n            return actualExpression() as? NMBDoubleConvertible\n        })\n        let expr = Expression(expression: actualBlock, location: location)\n        let matcher = beCloseTo(self._expected, within: self._delta)\n        return try! matcher.matches(expr, failureMessage: failureMessage)\n    }\n\n    public func doesNotMatch(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        let actualBlock: () -> NMBDoubleConvertible? = ({\n            return actualExpression() as? NMBDoubleConvertible\n        })\n        let expr = Expression(expression: actualBlock, location: location)\n        let matcher = beCloseTo(self._expected, within: self._delta)\n        return try! matcher.doesNotMatch(expr, failureMessage: failureMessage)\n    }\n\n    public var within: (CDouble) -> NMBObjCBeCloseToMatcher {\n        return ({ delta in\n            return NMBObjCBeCloseToMatcher(expected: self._expected, within: delta)\n        })\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beCloseToMatcher(expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToMatcher {\n        return NMBObjCBeCloseToMatcher(expected: expected, within: within)\n    }\n}\n\npublic func beCloseTo(expectedValues: [Double], within delta: Double = DefaultDelta) -> NonNilMatcherFunc <[Double]> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be close to <\\(stringify(expectedValues))> (each within \\(stringify(delta)))\"\n        if let actual = try actualExpression.evaluate() {\n            if actual.count != expectedValues.count {\n                return false\n            } else {\n                for (index, actualItem) in actual.enumerate() {\n                    if fabs(actualItem - expectedValues[index]) > delta {\n                        return false\n                    }\n                }\n                return true\n            }\n        }\n        return false\n    }\n}\n\n// MARK: - Operators\n\ninfix operator ≈ {\n    associativity none\n    precedence 130\n}\n\npublic func ≈(lhs: Expectation<[Double]>, rhs: [Double]) {\n    lhs.to(beCloseTo(rhs))\n}\n\npublic func ≈(lhs: Expectation<Double>, rhs: Double) {\n    lhs.to(beCloseTo(rhs))\n}\n\npublic func ≈(lhs: Expectation<Double>, rhs: (expected: Double, delta: Double)) {\n    lhs.to(beCloseTo(rhs.expected, within: rhs.delta))\n}\n\npublic func ==(lhs: Expectation<Double>, rhs: (expected: Double, delta: Double)) {\n    lhs.to(beCloseTo(rhs.expected, within: rhs.delta))\n}\n\n// make this higher precedence than exponents so the Doubles either end aren't pulled in\n// unexpectantly\ninfix operator ± { precedence 170 }\npublic func ±(lhs: Double, rhs: Double) -> (expected: Double, delta: Double) {\n    return (expected: lhs, delta: rhs)\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeEmpty.swift",
    "content": "import Foundation\n\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For strings, it is an empty string.\npublic func beEmpty<S: SequenceType>() -> NonNilMatcherFunc<S> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be empty\"\n        let actualSeq = try actualExpression.evaluate()\n        if actualSeq == nil {\n            return true\n        }\n        var generator = actualSeq!.generate()\n        return generator.next() == nil\n    }\n}\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For strings, it is an empty string.\npublic func beEmpty() -> NonNilMatcherFunc<String> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be empty\"\n        let actualString = try actualExpression.evaluate()\n        return actualString == nil || (actualString! as NSString).length  == 0\n    }\n}\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For NSString instances, it is an empty string.\npublic func beEmpty() -> NonNilMatcherFunc<NSString> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be empty\"\n        let actualString = try actualExpression.evaluate()\n        return actualString == nil || actualString!.length == 0\n    }\n}\n\n// Without specific overrides, beEmpty() is ambiguous for NSDictionary, NSArray,\n// etc, since they conform to SequenceType as well as NMBCollection.\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For strings, it is an empty string.\npublic func beEmpty() -> NonNilMatcherFunc<NSDictionary> {\n\treturn NonNilMatcherFunc { actualExpression, failureMessage in\n\t\tfailureMessage.postfixMessage = \"be empty\"\n\t\tlet actualDictionary = try actualExpression.evaluate()\n\t\treturn actualDictionary == nil || actualDictionary!.count == 0\n\t}\n}\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For strings, it is an empty string.\npublic func beEmpty() -> NonNilMatcherFunc<NSArray> {\n\treturn NonNilMatcherFunc { actualExpression, failureMessage in\n\t\tfailureMessage.postfixMessage = \"be empty\"\n\t\tlet actualArray = try actualExpression.evaluate()\n\t\treturn actualArray == nil || actualArray!.count == 0\n\t}\n}\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For strings, it is an empty string.\npublic func beEmpty() -> NonNilMatcherFunc<NMBCollection> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be empty\"\n        let actual = try actualExpression.evaluate()\n        return actual == nil || actual!.count == 0\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beEmptyMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let location = actualExpression.location\n            let actualValue = try! actualExpression.evaluate()\n            failureMessage.postfixMessage = \"be empty\"\n            if let value = actualValue as? NMBCollection {\n                let expr = Expression(expression: ({ value as NMBCollection }), location: location)\n                return try! beEmpty().matches(expr, failureMessage: failureMessage)\n            } else if let value = actualValue as? NSString {\n                let expr = Expression(expression: ({ value as String }), location: location)\n                return try! beEmpty().matches(expr, failureMessage: failureMessage)\n            } else if let actualValue = actualValue {\n                failureMessage.postfixMessage = \"be empty (only works for NSArrays, NSSets, NSDictionaries, NSHashTables, and NSStrings)\"\n                failureMessage.actualValue = \"\\(NSStringFromClass(actualValue.dynamicType)) type\"\n            }\n            return false\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeGreaterThan.swift",
    "content": "import Foundation\n\n\n/// A Nimble matcher that succeeds when the actual value is greater than the expected value.\npublic func beGreaterThan<T: Comparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be greater than <\\(stringify(expectedValue))>\"\n        return try actualExpression.evaluate() > expectedValue\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is greater than the expected value.\npublic func beGreaterThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc<NMBComparable> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be greater than <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedDescending\n        return matches\n    }\n}\n\npublic func ><T: Comparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beGreaterThan(rhs))\n}\n\npublic func >(lhs: Expectation<NMBComparable>, rhs: NMBComparable?) {\n    lhs.to(beGreaterThan(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func beGreaterThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let expr = actualExpression.cast { $0 as? NMBComparable }\n            return try! beGreaterThan(expected).matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeGreaterThanOrEqualTo.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual value is greater than\n/// or equal to the expected value.\npublic func beGreaterThanOrEqualTo<T: Comparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be greater than or equal to <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        return actualValue >= expectedValue\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is greater than\n/// or equal to the expected value.\npublic func beGreaterThanOrEqualTo<T: NMBComparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be greater than or equal to <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedAscending\n        return matches\n    }\n}\n\npublic func >=<T: Comparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beGreaterThanOrEqualTo(rhs))\n}\n\npublic func >=<T: NMBComparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beGreaterThanOrEqualTo(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func beGreaterThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let expr = actualExpression.cast { $0 as? NMBComparable }\n            return try! beGreaterThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeIdenticalTo.swift",
    "content": "import Foundation\n\n\n/// A Nimble matcher that succeeds when the actual value is the same instance\n/// as the expected instance.\npublic func beIdenticalTo<T: AnyObject>(expected: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        let actual = try actualExpression.evaluate()\n        failureMessage.actualValue = \"\\(identityAsString(actual))\"\n        failureMessage.postfixMessage = \"be identical to \\(identityAsString(expected))\"\n        return actual === expected && actual !== nil\n    }\n}\n\npublic func ===<T: AnyObject>(lhs: Expectation<T>, rhs: T?) {\n    lhs.to(beIdenticalTo(rhs))\n}\npublic func !==<T: AnyObject>(lhs: Expectation<T>, rhs: T?) {\n    lhs.toNot(beIdenticalTo(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func beIdenticalToMatcher(expected: NSObject?) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            return try! beIdenticalTo(expected).matches(actualExpression, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeLessThan.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual value is less than the expected value.\npublic func beLessThan<T: Comparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be less than <\\(stringify(expectedValue))>\"\n        return try actualExpression.evaluate() < expectedValue\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is less than the expected value.\npublic func beLessThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc<NMBComparable> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be less than <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedAscending\n        return matches\n    }\n}\n\npublic func <<T: Comparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beLessThan(rhs))\n}\n\npublic func <(lhs: Expectation<NMBComparable>, rhs: NMBComparable?) {\n    lhs.to(beLessThan(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func beLessThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let expr = actualExpression.cast { $0 as! NMBComparable? }\n            return try! beLessThan(expected).matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeLessThanOrEqual.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual value is less than\n/// or equal to the expected value.\npublic func beLessThanOrEqualTo<T: Comparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be less than or equal to <\\(stringify(expectedValue))>\"\n        return try actualExpression.evaluate() <= expectedValue\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is less than\n/// or equal to the expected value.\npublic func beLessThanOrEqualTo<T: NMBComparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be less than or equal to <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        return actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedDescending\n    }\n}\n\npublic func <=<T: Comparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beLessThanOrEqualTo(rhs))\n}\n\npublic func <=<T: NMBComparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beLessThanOrEqualTo(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func beLessThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil:false) { actualExpression, failureMessage in\n            let expr = actualExpression.cast { $0 as? NMBComparable }\n            return try! beLessThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeLogical.swift",
    "content": "import Foundation\n\ninternal func matcherWithFailureMessage<T, M: Matcher where M.ValueType == T>(matcher: M, postprocessor: (FailureMessage) -> Void) -> FullMatcherFunc<T> {\n    return FullMatcherFunc { actualExpression, failureMessage, isNegation in\n        let pass: Bool\n        if isNegation {\n            pass = try matcher.doesNotMatch(actualExpression, failureMessage: failureMessage)\n        } else {\n            pass = try matcher.matches(actualExpression, failureMessage: failureMessage)\n        }\n        postprocessor(failureMessage)\n        return pass\n    }\n}\n\n// MARK: beTrue() / beFalse()\n\n/// A Nimble matcher that succeeds when the actual value is exactly true.\n/// This matcher will not match against nils.\npublic func beTrue() -> FullMatcherFunc<Bool> {\n    return matcherWithFailureMessage(equal(true)) { failureMessage in\n        failureMessage.postfixMessage = \"be true\"\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is exactly false.\n/// This matcher will not match against nils.\npublic func beFalse() -> FullMatcherFunc<Bool> {\n    return matcherWithFailureMessage(equal(false)) { failureMessage in\n        failureMessage.postfixMessage = \"be false\"\n    }\n}\n\n// MARK: beTruthy() / beFalsy()\n\n/// A Nimble matcher that succeeds when the actual value is not logically false.\npublic func beTruthy<T>() -> MatcherFunc<T> {\n    return MatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be truthy\"\n        let actualValue = try actualExpression.evaluate()\n        if let actualValue = actualValue {\n            if let actualValue = actualValue as? BooleanType {\n                return actualValue.boolValue == true\n            }\n        }\n        return actualValue != nil\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is logically false.\n/// This matcher will match against nils.\npublic func beFalsy<T>() -> MatcherFunc<T> {\n    return MatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be falsy\"\n        let actualValue = try actualExpression.evaluate()\n        if let actualValue = actualValue {\n            if let actualValue = actualValue as? BooleanType {\n                return actualValue.boolValue != true\n            }\n        }\n        return actualValue == nil\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beTruthyMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher { actualExpression, failureMessage in\n            let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? }\n            return try! beTruthy().matches(expr, failureMessage: failureMessage)\n        }\n    }\n\n    public class func beFalsyMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher { actualExpression, failureMessage in\n            let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? }\n            return try! beFalsy().matches(expr, failureMessage: failureMessage)\n        }\n    }\n\n    public class func beTrueMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher { actualExpression, failureMessage in\n            let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? }\n            return try! beTrue().matches(expr, failureMessage: failureMessage)\n        }\n    }\n\n    public class func beFalseMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? }\n            return try! beFalse().matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeNil.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual value is nil.\npublic func beNil<T>() -> MatcherFunc<T> {\n    return MatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be nil\"\n        let actualValue = try actualExpression.evaluate()\n        return actualValue == nil\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beNilMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher { actualExpression, failureMessage in\n            return try! beNil().matches(actualExpression, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/BeginWith.swift",
    "content": "import Foundation\n\n\n/// A Nimble matcher that succeeds when the actual sequence's first element\n/// is equal to the expected value.\npublic func beginWith<S: SequenceType, T: Equatable where S.Generator.Element == T>(startingElement: T) -> NonNilMatcherFunc<S> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"begin with <\\(startingElement)>\"\n        if let actualValue = try actualExpression.evaluate() {\n            var actualGenerator = actualValue.generate()\n            return actualGenerator.next() == startingElement\n        }\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual collection's first element\n/// is equal to the expected object.\npublic func beginWith(startingElement: AnyObject) -> NonNilMatcherFunc<NMBOrderedCollection> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"begin with <\\(startingElement)>\"\n        let collection = try actualExpression.evaluate()\n        return collection != nil && collection!.indexOfObject(startingElement) == 0\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual string contains expected substring\n/// where the expected substring's location is zero.\npublic func beginWith(startingSubstring: String) -> NonNilMatcherFunc<String> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"begin with <\\(startingSubstring)>\"\n        if let actual = try actualExpression.evaluate() {\n            let range = actual.rangeOfString(startingSubstring)\n            return range != nil && range!.startIndex == actual.startIndex\n        }\n        return false\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let actual = try! actualExpression.evaluate()\n            if let _ = actual as? String {\n                let expr = actualExpression.cast { $0 as? String }\n                return try! beginWith(expected as! String).matches(expr, failureMessage: failureMessage)\n            } else {\n                let expr = actualExpression.cast { $0 as? NMBOrderedCollection }\n                return try! beginWith(expected).matches(expr, failureMessage: failureMessage)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/Contain.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual sequence contains the expected value.\npublic func contain<S: SequenceType, T: Equatable where S.Generator.Element == T>(items: T...) -> NonNilMatcherFunc<S> {\n    return contain(items)\n}\n\nprivate func contain<S: SequenceType, T: Equatable where S.Generator.Element == T>(items: [T]) -> NonNilMatcherFunc<S> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"contain <\\(arrayAsString(items))>\"\n        if let actual = try actualExpression.evaluate() {\n            return all(items) {\n                return actual.contains($0)\n            }\n        }\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual string contains the expected substring.\npublic func contain(substrings: String...) -> NonNilMatcherFunc<String> {\n    return contain(substrings)\n}\n\nprivate func contain(substrings: [String]) -> NonNilMatcherFunc<String> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"contain <\\(arrayAsString(substrings))>\"\n        if let actual = try actualExpression.evaluate() {\n            return all(substrings) {\n                let scanRange = Range(start: actual.startIndex, end: actual.endIndex)\n                let range = actual.rangeOfString($0, options: [], range: scanRange, locale: nil)\n                return range != nil && !range!.isEmpty\n            }\n        }\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual string contains the expected substring.\npublic func contain(substrings: NSString...) -> NonNilMatcherFunc<NSString> {\n    return contain(substrings)\n}\n\nprivate func contain(substrings: [NSString]) -> NonNilMatcherFunc<NSString> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"contain <\\(arrayAsString(substrings))>\"\n        if let actual = try actualExpression.evaluate() {\n            return all(substrings) { actual.rangeOfString($0.description).length != 0 }\n        }\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual collection contains the expected object.\npublic func contain(items: AnyObject?...) -> NonNilMatcherFunc<NMBContainer> {\n    return contain(items)\n}\n\nprivate func contain(items: [AnyObject?]) -> NonNilMatcherFunc<NMBContainer> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"contain <\\(arrayAsString(items))>\"\n        let actual = try actualExpression.evaluate()\n        return all(items) { item in\n            return actual != nil && actual!.containsObject(item)\n        }\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func containMatcher(expected: [NSObject]) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let location = actualExpression.location\n            let actualValue = try! actualExpression.evaluate()\n            if let value = actualValue as? NMBContainer {\n                let expr = Expression(expression: ({ value as NMBContainer }), location: location)\n\n                // A straightforward cast on the array causes this to crash, so we have to cast the individual items\n                let expectedOptionals: [AnyObject?] = expected.map({ $0 as AnyObject? })\n                return try! contain(expectedOptionals).matches(expr, failureMessage: failureMessage)\n            } else if let value = actualValue as? NSString {\n                let expr = Expression(expression: ({ value as String }), location: location)\n                return try! contain(expected as! [String]).matches(expr, failureMessage: failureMessage)\n            } else if actualValue != nil {\n                failureMessage.postfixMessage = \"contain <\\(arrayAsString(expected))> (only works for NSArrays, NSSets, NSHashTables, and NSStrings)\"\n            } else {\n                failureMessage.postfixMessage = \"contain <\\(arrayAsString(expected))>\"\n            }\n            return false\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/EndWith.swift",
    "content": "import Foundation\n\n\n/// A Nimble matcher that succeeds when the actual sequence's last element\n/// is equal to the expected value.\npublic func endWith<S: SequenceType, T: Equatable where S.Generator.Element == T>(endingElement: T) -> NonNilMatcherFunc<S> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"end with <\\(endingElement)>\"\n\n        if let actualValue = try actualExpression.evaluate() {\n            var actualGenerator = actualValue.generate()\n            var lastItem: T?\n            var item: T?\n            repeat {\n                lastItem = item\n                item = actualGenerator.next()\n            } while(item != nil)\n            \n            return lastItem == endingElement\n        }\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual collection's last element\n/// is equal to the expected object.\npublic func endWith(endingElement: AnyObject) -> NonNilMatcherFunc<NMBOrderedCollection> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"end with <\\(endingElement)>\"\n        let collection = try actualExpression.evaluate()\n        return collection != nil && collection!.indexOfObject(endingElement) == collection!.count - 1\n    }\n}\n\n\n/// A Nimble matcher that succeeds when the actual string contains the expected substring\n/// where the expected substring's location is the actual string's length minus the\n/// expected substring's length.\npublic func endWith(endingSubstring: String) -> NonNilMatcherFunc<String> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"end with <\\(endingSubstring)>\"\n        if let collection = try actualExpression.evaluate() {\n            let range = collection.rangeOfString(endingSubstring)\n            return range != nil && range!.endIndex == collection.endIndex\n        }\n        return false\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func endWithMatcher(expected: AnyObject) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let actual = try! actualExpression.evaluate()\n            if let _ = actual as? String {\n                let expr = actualExpression.cast { $0 as? String }\n                return try! endWith(expected as! String).matches(expr, failureMessage: failureMessage)\n            } else {\n                let expr = actualExpression.cast { $0 as? NMBOrderedCollection }\n                return try! endWith(expected).matches(expr, failureMessage: failureMessage)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/Equal.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual value is equal to the expected value.\n/// Values can support equal by supporting the Equatable protocol.\n///\n/// @see beCloseTo if you want to match imprecise types (eg - floats, doubles).\npublic func equal<T: Equatable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"equal <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        let matches = actualValue == expectedValue && expectedValue != nil\n        if expectedValue == nil || actualValue == nil {\n            if expectedValue == nil {\n                failureMessage.postfixActual = \" (use beNil() to match nils)\"\n            }\n            return false\n        }\n        return matches\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is equal to the expected value.\n/// Values can support equal by supporting the Equatable protocol.\n///\n/// @see beCloseTo if you want to match imprecise types (eg - floats, doubles).\npublic func equal<T: Equatable, C: Equatable>(expectedValue: [T: C]?) -> NonNilMatcherFunc<[T: C]> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"equal <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        if expectedValue == nil || actualValue == nil {\n            if expectedValue == nil {\n                failureMessage.postfixActual = \" (use beNil() to match nils)\"\n            }\n            return false\n        }\n        return expectedValue! == actualValue!\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual collection is equal to the expected collection.\n/// Items must implement the Equatable protocol.\npublic func equal<T: Equatable>(expectedValue: [T]?) -> NonNilMatcherFunc<[T]> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"equal <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        if expectedValue == nil || actualValue == nil {\n            if expectedValue == nil {\n                failureMessage.postfixActual = \" (use beNil() to match nils)\"\n            }\n            return false\n        }\n        return expectedValue! == actualValue!\n    }\n}\n\n/// A Nimble matcher allowing comparison of collection with optional type\npublic func equal<T: Equatable>(expectedValue: [T?]) -> NonNilMatcherFunc<[T?]> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"equal <\\(stringify(expectedValue))>\"\n        if let actualValue = try actualExpression.evaluate() {\n            if expectedValue.count != actualValue.count {\n                return false\n            }\n            \n            for (index, item) in actualValue.enumerate() {\n                let otherItem = expectedValue[index]\n                if item == nil && otherItem == nil {\n                    continue\n                } else if item == nil && otherItem != nil {\n                    return false\n                } else if item != nil && otherItem == nil {\n                    return false\n                } else if item! != otherItem! {\n                    return false\n                }\n            }\n            \n            return true\n        } else {\n            failureMessage.postfixActual = \" (use beNil() to match nils)\"\n        }\n        \n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual set is equal to the expected set.\npublic func equal<T>(expectedValue: Set<T>?) -> NonNilMatcherFunc<Set<T>> {\n    return equal(expectedValue, stringify: stringify)\n}\n\n/// A Nimble matcher that succeeds when the actual set is equal to the expected set.\npublic func equal<T: Comparable>(expectedValue: Set<T>?) -> NonNilMatcherFunc<Set<T>> {\n    return equal(expectedValue, stringify: {\n        if let set = $0 {\n            return stringify(Array(set).sort { $0 < $1 })\n        } else {\n            return \"nil\"\n        }\n    })\n}\n\nprivate func equal<T>(expectedValue: Set<T>?, stringify: Set<T>? -> String) -> NonNilMatcherFunc<Set<T>> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"equal <\\(stringify(expectedValue))>\"\n\n        if let expectedValue = expectedValue {\n            if let actualValue = try actualExpression.evaluate() {\n                failureMessage.actualValue = \"<\\(stringify(actualValue))>\"\n\n                if expectedValue == actualValue {\n                    return true\n                }\n\n                let missing = expectedValue.subtract(actualValue)\n                if missing.count > 0 {\n                    failureMessage.postfixActual += \", missing <\\(stringify(missing))>\"\n                }\n\n                let extra = actualValue.subtract(expectedValue)\n                if extra.count > 0 {\n                    failureMessage.postfixActual += \", extra <\\(stringify(extra))>\"\n                }\n            }\n        } else {\n            failureMessage.postfixActual = \" (use beNil() to match nils)\"\n        }\n\n        return false\n    }\n}\n\npublic func ==<T: Equatable>(lhs: Expectation<T>, rhs: T?) {\n    lhs.to(equal(rhs))\n}\n\npublic func !=<T: Equatable>(lhs: Expectation<T>, rhs: T?) {\n    lhs.toNot(equal(rhs))\n}\n\npublic func ==<T: Equatable>(lhs: Expectation<[T]>, rhs: [T]?) {\n    lhs.to(equal(rhs))\n}\n\npublic func !=<T: Equatable>(lhs: Expectation<[T]>, rhs: [T]?) {\n    lhs.toNot(equal(rhs))\n}\n\npublic func ==<T>(lhs: Expectation<Set<T>>, rhs: Set<T>?) {\n    lhs.to(equal(rhs))\n}\n\npublic func !=<T>(lhs: Expectation<Set<T>>, rhs: Set<T>?) {\n    lhs.toNot(equal(rhs))\n}\n\npublic func ==<T: Comparable>(lhs: Expectation<Set<T>>, rhs: Set<T>?) {\n    lhs.to(equal(rhs))\n}\n\npublic func !=<T: Comparable>(lhs: Expectation<Set<T>>, rhs: Set<T>?) {\n    lhs.toNot(equal(rhs))\n}\n\npublic func ==<T: Equatable, C: Equatable>(lhs: Expectation<[T: C]>, rhs: [T: C]?) {\n    lhs.to(equal(rhs))\n}\n\npublic func !=<T: Equatable, C: Equatable>(lhs: Expectation<[T: C]>, rhs: [T: C]?) {\n    lhs.toNot(equal(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func equalMatcher(expected: NSObject) -> NMBMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            return try! equal(expected).matches(actualExpression, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/HaveCount.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual CollectionType's count equals\n/// the expected value\npublic func haveCount<T: CollectionType>(expectedValue: T.Index.Distance) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        if let actualValue = try actualExpression.evaluate() {\n            failureMessage.postfixMessage = \"have \\(actualValue) with count \\(expectedValue)\"\n            let result = expectedValue == actualValue.count\n            failureMessage.actualValue = \"\\(actualValue.count)\"\n            return result\n        } else {\n            return false\n        }\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual collection's count equals\n/// the expected value\npublic func haveCount(expectedValue: Int) -> MatcherFunc<NMBCollection> {\n    return MatcherFunc { actualExpression, failureMessage in\n        if let actualValue = try actualExpression.evaluate() {\n            failureMessage.postfixMessage = \"have \\(actualValue) with count \\(expectedValue)\"\n            let result = expectedValue == actualValue.count\n            failureMessage.actualValue = \"\\(actualValue.count)\"\n            return result\n        } else {\n            return false\n        }\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func haveCountMatcher(expected: NSNumber) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let location = actualExpression.location\n            let actualValue = try! actualExpression.evaluate()\n            if let value = actualValue as? NMBCollection {\n                let expr = Expression(expression: ({ value as NMBCollection}), location: location)\n                return try! haveCount(expected.integerValue).matches(expr, failureMessage: failureMessage)\n            } else if let actualValue = actualValue {\n                failureMessage.postfixMessage = \"get type of NSArray, NSSet, NSDictionary, or NSHashTable\"\n                failureMessage.actualValue = \"\\(NSStringFromClass(actualValue.dynamicType))\"\n            }\n            return false\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/Match.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual string satisfies the regular expression\n/// described by the expected string.\npublic func match(expectedValue: String?) -> NonNilMatcherFunc<String> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"match <\\(stringify(expectedValue))>\"\n        \n        if let actual = try actualExpression.evaluate() {\n            if let regexp = expectedValue {\n                return actual.rangeOfString(regexp, options: .RegularExpressionSearch) != nil\n            }\n        }\n\n        return false\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func matchMatcher(expected: NSString) -> NMBMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let actual = actualExpression.cast { $0 as? String }\n            return try! match(expected.description).matches(actual, failureMessage: failureMessage)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/MatcherProtocols.swift",
    "content": "import Foundation\n\n/// Implement this protocol to implement a custom matcher for Swift\u0013\npublic protocol Matcher {\n    typealias ValueType\n    func matches(actualExpression: Expression<ValueType>, failureMessage: FailureMessage) throws -> Bool\n    func doesNotMatch(actualExpression: Expression<ValueType>, failureMessage: FailureMessage) throws -> Bool\n}\n\n/// Objective-C interface to the Swift variant of Matcher.\n@objc public protocol NMBMatcher {\n    func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool\n    func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool\n}\n\n/// Protocol for types that support contain() matcher.\n@objc public protocol NMBContainer {\n    func containsObject(object: AnyObject!) -> Bool\n}\nextension NSArray : NMBContainer {}\nextension NSSet : NMBContainer {}\nextension NSHashTable : NMBContainer {}\n\n/// Protocol for types that support only beEmpty(), haveCount() matchers\n@objc public protocol NMBCollection {\n    var count: Int { get }\n}\nextension NSSet : NMBCollection {}\nextension NSDictionary : NMBCollection {}\nextension NSHashTable : NMBCollection {}\nextension NSMapTable : NMBCollection {}\n\n/// Protocol for types that support beginWith(), endWith(), beEmpty() matchers\n@objc public protocol NMBOrderedCollection : NMBCollection {\n    func indexOfObject(object: AnyObject!) -> Int\n}\nextension NSArray : NMBOrderedCollection {}\n\n/// Protocol for types to support beCloseTo() matcher\n@objc public protocol NMBDoubleConvertible {\n    var doubleValue: CDouble { get }\n}\nextension NSNumber : NMBDoubleConvertible {\n}\n\nprivate let dateFormatter: NSDateFormatter = {\n    let formatter = NSDateFormatter()\n    formatter.dateFormat = \"yyyy-MM-dd HH:mm:ss.SSSS\"\n    formatter.locale = NSLocale(localeIdentifier: \"en_US_POSIX\")\n\n    return formatter\n}()\n\nextension NSDate: NMBDoubleConvertible {\n    public var doubleValue: CDouble {\n        get {\n            return self.timeIntervalSinceReferenceDate\n        }\n    }\n}\n\n\nextension NMBDoubleConvertible {\n    public var stringRepresentation: String {\n        get {\n            if let date = self as? NSDate {\n                return dateFormatter.stringFromDate(date)\n            }\n            \n            if let debugStringConvertible = self as? CustomDebugStringConvertible {\n                return debugStringConvertible.debugDescription\n            }\n            \n            if let stringConvertible = self as? CustomStringConvertible {\n                return stringConvertible.description\n            }\n            \n            return \"\"\n        }\n    }\n}\n\n/// Protocol for types to support beLessThan(), beLessThanOrEqualTo(),\n///  beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers.\n///\n/// Types that conform to Swift's Comparable protocol will work implicitly too\n@objc public protocol NMBComparable {\n    func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult\n}\nextension NSNumber : NMBComparable {\n    public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult {\n        return compare(otherObject as! NSNumber)\n    }\n}\nextension NSString : NMBComparable {\n    public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult {\n        return compare(otherObject as! String)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/RaisesException.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual expression raises an\n/// exception with the specified name, reason, and/or\u0013 userInfo.\n///\n/// Alternatively, you can pass a closure to do any arbitrary custom matching\n/// to the raised exception. The closure only gets called when an exception\n/// is raised.\n///\n/// nil arguments indicates that the matcher should not attempt to match against\n/// that parameter.\npublic func raiseException(\n    named named: String? = nil,\n    reason: String? = nil,\n    userInfo: NSDictionary? = nil,\n    closure: ((NSException) -> Void)? = nil) -> MatcherFunc<Any> {\n        return MatcherFunc { actualExpression, failureMessage in\n\n            var exception: NSException?\n            let capture = NMBExceptionCapture(handler: ({ e in\n                exception = e\n            }), finally: nil)\n\n            capture.tryBlock {\n                try! actualExpression.evaluate()\n                return\n            }\n\n            setFailureMessageForException(failureMessage, exception: exception, named: named, reason: reason, userInfo: userInfo, closure: closure)\n            return exceptionMatchesNonNilFieldsOrClosure(exception, named: named, reason: reason, userInfo: userInfo, closure: closure)\n        }\n}\n\ninternal func setFailureMessageForException(\n    failureMessage: FailureMessage,\n    exception: NSException?,\n    named: String?,\n    reason: String?,\n    userInfo: NSDictionary?,\n    closure: ((NSException) -> Void)?) {\n        failureMessage.postfixMessage = \"raise exception\"\n\n        if let named = named {\n            failureMessage.postfixMessage += \" with name <\\(named)>\"\n        }\n        if let reason = reason {\n            failureMessage.postfixMessage += \" with reason <\\(reason)>\"\n        }\n        if let userInfo = userInfo {\n            failureMessage.postfixMessage += \" with userInfo <\\(userInfo)>\"\n        }\n        if let _ = closure {\n            failureMessage.postfixMessage += \" that satisfies block\"\n        }\n        if named == nil && reason == nil && userInfo == nil && closure == nil {\n            failureMessage.postfixMessage = \"raise any exception\"\n        }\n\n        if let exception = exception {\n            failureMessage.actualValue = \"\\(NSStringFromClass(exception.dynamicType)) { name=\\(exception.name), reason='\\(stringify(exception.reason))', userInfo=\\(stringify(exception.userInfo)) }\"\n        } else {\n            failureMessage.actualValue = \"no exception\"\n        }\n}\n\ninternal func exceptionMatchesNonNilFieldsOrClosure(\n    exception: NSException?,\n    named: String?,\n    reason: String?,\n    userInfo: NSDictionary?,\n    closure: ((NSException) -> Void)?) -> Bool {\n        var matches = false\n\n        if let exception = exception {\n            matches = true\n\n            if named != nil && exception.name != named {\n                matches = false\n            }\n            if reason != nil && exception.reason != reason {\n                matches = false\n            }\n            if userInfo != nil && exception.userInfo != userInfo {\n                matches = false\n            }\n            if let closure = closure {\n                let assertions = gatherFailingExpectations {\n                    closure(exception)\n                }\n                let messages = assertions.map { $0.message }\n                if messages.count > 0 {\n                    matches = false\n                }\n            }\n        }\n        \n        return matches\n}\n\npublic class NMBObjCRaiseExceptionMatcher : NSObject, NMBMatcher {\n    internal var _name: String?\n    internal var _reason: String?\n    internal var _userInfo: NSDictionary?\n    internal var _block: ((NSException) -> Void)?\n\n    internal init(name: String?, reason: String?, userInfo: NSDictionary?, block: ((NSException) -> Void)?) {\n        _name = name\n        _reason = reason\n        _userInfo = userInfo\n        _block = block\n    }\n\n    public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        let block: () -> Any? = ({ actualBlock(); return nil })\n        let expr = Expression(expression: block, location: location)\n\n        return try! raiseException(\n            named: _name,\n            reason: _reason,\n            userInfo: _userInfo,\n            closure: _block\n        ).matches(expr, failureMessage: failureMessage)\n    }\n\n    public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        return !matches(actualBlock, failureMessage: failureMessage, location: location)\n    }\n\n    public var named: (name: String) -> NMBObjCRaiseExceptionMatcher {\n        return ({ name in\n            return NMBObjCRaiseExceptionMatcher(\n                name: name,\n                reason: self._reason,\n                userInfo: self._userInfo,\n                block: self._block\n            )\n        })\n    }\n\n    public var reason: (reason: String?) -> NMBObjCRaiseExceptionMatcher {\n        return ({ reason in\n            return NMBObjCRaiseExceptionMatcher(\n                name: self._name,\n                reason: reason,\n                userInfo: self._userInfo,\n                block: self._block\n            )\n        })\n    }\n\n    public var userInfo: (userInfo: NSDictionary?) -> NMBObjCRaiseExceptionMatcher {\n        return ({ userInfo in\n            return NMBObjCRaiseExceptionMatcher(\n                name: self._name,\n                reason: self._reason,\n                userInfo: userInfo,\n                block: self._block\n            )\n        })\n    }\n\n    public var satisfyingBlock: (block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionMatcher {\n        return ({ block in\n            return NMBObjCRaiseExceptionMatcher(\n                name: self._name,\n                reason: self._reason,\n                userInfo: self._userInfo,\n                block: block\n            )\n        })\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionMatcher {\n        return NMBObjCRaiseExceptionMatcher(name: nil, reason: nil, userInfo: nil, block: nil)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/SatisfyAnyOf.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual value matches with any of the matchers\n/// provided in the variable list of matchers. \npublic func satisfyAnyOf<T,U where U: Matcher, U.ValueType == T>(matchers: U...) -> NonNilMatcherFunc<T> {\n    return satisfyAnyOf(matchers)\n}\n\ninternal func satisfyAnyOf<T,U where U: Matcher, U.ValueType == T>(matchers: [U]) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc<T> { actualExpression, failureMessage in\n        var fullPostfixMessage = \"match one of: \"\n        var matches = false\n        for var i = 0; i < matchers.count && !matches; ++i {\n            fullPostfixMessage += \"{\"\n            let matcher = matchers[i]\n            matches = try matcher.matches(actualExpression, failureMessage: failureMessage)\n            fullPostfixMessage += \"\\(failureMessage.postfixMessage)}\"\n            if i < (matchers.count - 1) {\n                fullPostfixMessage += \", or \"\n            }\n        }\n        \n        failureMessage.postfixMessage = fullPostfixMessage\n        if let actualValue = try actualExpression.evaluate() {\n            failureMessage.actualValue = \"\\(actualValue)\"\n        }\n        \n        return matches\n    }\n}\n\npublic func ||<T>(left: NonNilMatcherFunc<T>, right: NonNilMatcherFunc<T>) -> NonNilMatcherFunc<T> {\n    return satisfyAnyOf(left, right)\n}\n\npublic func ||<T>(left: FullMatcherFunc<T>, right: FullMatcherFunc<T>) -> NonNilMatcherFunc<T> {\n    return satisfyAnyOf(left, right)\n}\n\npublic func ||<T>(left: MatcherFunc<T>, right: MatcherFunc<T>) -> NonNilMatcherFunc<T> {\n    return satisfyAnyOf(left, right)\n}\n\nextension NMBObjCMatcher {\n    public class func satisfyAnyOfMatcher(matchers: [NMBObjCMatcher]) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            if matchers.isEmpty {\n                failureMessage.stringValue = \"satisfyAnyOf must be called with at least one matcher\"\n                return false\n            }\n            \n            var elementEvaluators = [NonNilMatcherFunc<NSObject>]()\n            for matcher in matchers {\n                let elementEvaluator: (Expression<NSObject>, FailureMessage) -> Bool = {\n                    expression, failureMessage in\n                    return matcher.matches(\n                        {try! expression.evaluate()}, failureMessage: failureMessage, location: actualExpression.location)\n                }\n                \n                elementEvaluators.append(NonNilMatcherFunc(elementEvaluator))\n            }\n            \n            return try! satisfyAnyOf(elementEvaluators).matches(actualExpression, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Matchers/ThrowError.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual expression throws an\n/// error of the specified type or from the specified case.\n///\n/// Errors are tried to be compared by their implementation of Equatable,\n/// otherwise they fallback to comparision by _domain and _code.\n///\n/// Alternatively, you can pass a closure to do any arbitrary custom matching\n/// to the thrown error. The closure only gets called when an error was thrown.\n///\n/// nil arguments indicates that the matcher should not attempt to match against\n/// that parameter.\npublic func throwError<T: ErrorType>(\n    error: T? = nil,\n    errorType: T.Type? = nil,\n    closure: ((T) -> Void)? = nil) -> MatcherFunc<Any> {\n        return MatcherFunc { actualExpression, failureMessage in\n\n            var actualError: ErrorType?\n            do {\n                try actualExpression.evaluate()\n            } catch let catchedError {\n                actualError = catchedError\n            }\n\n            setFailureMessageForError(failureMessage, actualError: actualError, error: error, errorType: errorType, closure: closure)\n            return errorMatchesNonNilFieldsOrClosure(actualError, error: error, errorType: errorType, closure: closure)\n        }\n}\n\ninternal func setFailureMessageForError<T: ErrorType>(\n    failureMessage: FailureMessage,\n    actualError: ErrorType?,\n    error: T?,\n    errorType: T.Type? = nil,\n    closure: ((T) -> Void)?) {\n        failureMessage.postfixMessage = \"throw error\"\n\n        if let error = error {\n            if let error = error as? CustomDebugStringConvertible {\n                failureMessage.postfixMessage += \" <\\(error.debugDescription)>\"\n            } else {\n                failureMessage.postfixMessage += \" <\\(error)>\"\n            }\n        } else if errorType != nil || closure != nil {\n            failureMessage.postfixMessage += \" from type <\\(T.self)>\"\n        }\n        if let _ = closure {\n            failureMessage.postfixMessage += \" that satisfies block\"\n        }\n        if error == nil && errorType == nil && closure == nil {\n            failureMessage.postfixMessage = \"throw any error\"\n        }\n\n        if let actualError = actualError {\n            failureMessage.actualValue = \"<\\(actualError)>\"\n        } else {\n            failureMessage.actualValue = \"no error\"\n        }\n}\n\ninternal func errorMatchesExpectedError<T: ErrorType>(\n    actualError: ErrorType,\n    expectedError: T) -> Bool {\n        return actualError._domain == expectedError._domain\n            && actualError._code   == expectedError._code\n}\n\ninternal func errorMatchesExpectedError<T: ErrorType where T: Equatable>(\n    actualError: ErrorType,\n    expectedError: T) -> Bool {\n        if let actualError = actualError as? T {\n            return actualError == expectedError\n        }\n        return false\n}\n\ninternal func errorMatchesNonNilFieldsOrClosure<T: ErrorType>(\n    actualError: ErrorType?,\n    error: T?,\n    errorType: T.Type?,\n    closure: ((T) -> Void)?) -> Bool {\n        var matches = false\n\n        if let actualError = actualError {\n            matches = true\n\n            if let error = error {\n                if !errorMatchesExpectedError(actualError, expectedError: error) {\n                    matches = false\n                }\n            }\n            if let actualError = actualError as? T {\n                if let closure = closure {\n                    let assertions = gatherFailingExpectations {\n                        closure(actualError as T)\n                    }\n                    let messages = assertions.map { $0.message }\n                    if messages.count > 0 {\n                        matches = false\n                    }\n                }\n            } else if errorType != nil && closure != nil {\n                // The closure expects another ErrorType as argument, so this\n                // is _supposed_ to fail, so that it becomes more obvious.\n                let assertions = gatherExpectations {\n                    expect(actualError is T).to(equal(true))\n                }\n                precondition(assertions.map { $0.message }.count > 0)\n                matches = false\n            }\n        }\n        \n        return matches\n}\n\n\n/// A Nimble matcher that succeeds when the actual expression throws any\n/// error or when the passed closures' arbitrary custom matching succeeds.\n///\n/// This duplication to it's generic adequate is required to allow to receive\n/// values of the existential type ErrorType in the closure.\n///\n/// The closure only gets called when an error was thrown.\npublic func throwError(\n    closure closure: ((ErrorType) -> Void)? = nil) -> MatcherFunc<Any> {\n        return MatcherFunc { actualExpression, failureMessage in\n            \n            var actualError: ErrorType?\n            do {\n                try actualExpression.evaluate()\n            } catch let catchedError {\n                actualError = catchedError\n            }\n            \n            setFailureMessageForError(failureMessage, actualError: actualError, closure: closure)\n            return errorMatchesNonNilFieldsOrClosure(actualError, closure: closure)\n        }\n}\n\ninternal func setFailureMessageForError(\n    failureMessage: FailureMessage,\n    actualError: ErrorType?,\n    closure: ((ErrorType) -> Void)?) {\n        failureMessage.postfixMessage = \"throw error\"\n\n        if let _ = closure {\n            failureMessage.postfixMessage += \" that satisfies block\"\n        } else {\n            failureMessage.postfixMessage = \"throw any error\"\n        }\n\n        if let actualError = actualError {\n            failureMessage.actualValue = \"<\\(actualError)>\"\n        } else {\n            failureMessage.actualValue = \"no error\"\n        }\n}\n\ninternal func errorMatchesNonNilFieldsOrClosure(\n    actualError: ErrorType?,\n    closure: ((ErrorType) -> Void)?) -> Bool {\n        var matches = false\n\n        if let actualError = actualError {\n            matches = true\n\n            if let closure = closure {\n                let assertions = gatherFailingExpectations {\n                    closure(actualError)\n                }\n                let messages = assertions.map { $0.message }\n                if messages.count > 0 {\n                    matches = false\n                }\n            }\n        }\n        \n        return matches\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Nimble.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"NMBExceptionCapture.h\"\n#import \"DSL.h\"\n\nFOUNDATION_EXPORT double NimbleVersionNumber;\nFOUNDATION_EXPORT const unsigned char NimbleVersionString[];"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/ObjCExpectation.swift",
    "content": "internal struct ObjCMatcherWrapper : Matcher {\n    let matcher: NMBMatcher\n\n    func matches(actualExpression: Expression<NSObject>, failureMessage: FailureMessage) -> Bool {\n        return matcher.matches(\n            ({ try! actualExpression.evaluate() }),\n            failureMessage: failureMessage,\n            location: actualExpression.location)\n    }\n\n    func doesNotMatch(actualExpression: Expression<NSObject>, failureMessage: FailureMessage) -> Bool {\n        return matcher.doesNotMatch(\n            ({ try! actualExpression.evaluate() }),\n            failureMessage: failureMessage,\n            location: actualExpression.location)\n    }\n}\n\n// Equivalent to Expectation, but for Nimble's Objective-C interface\npublic class NMBExpectation : NSObject {\n    internal let _actualBlock: () -> NSObject!\n    internal var _negative: Bool\n    internal let _file: String\n    internal let _line: UInt\n    internal var _timeout: NSTimeInterval = 1.0\n\n    public init(actualBlock: () -> NSObject!, negative: Bool, file: String, line: UInt) {\n        self._actualBlock = actualBlock\n        self._negative = negative\n        self._file = file\n        self._line = line\n    }\n\n    private var expectValue: Expectation<NSObject> {\n        return expect(_file, line: _line){\n            self._actualBlock() as NSObject?\n        }\n    }\n\n    public var withTimeout: (NSTimeInterval) -> NMBExpectation {\n        return ({ timeout in self._timeout = timeout\n            return self\n        })\n    }\n\n    public var to: (NMBMatcher) -> Void {\n        return ({ matcher in\n            self.expectValue.to(ObjCMatcherWrapper(matcher: matcher))\n        })\n    }\n\n    public var toWithDescription: (NMBMatcher, String) -> Void {\n        return ({ matcher, description in\n            self.expectValue.to(ObjCMatcherWrapper(matcher: matcher), description: description)\n        })\n    }\n\n    public var toNot: (NMBMatcher) -> Void {\n        return ({ matcher in\n            self.expectValue.toNot(\n                ObjCMatcherWrapper(matcher: matcher)\n            )\n        })\n    }\n\n    public var toNotWithDescription: (NMBMatcher, String) -> Void {\n        return ({ matcher, description in\n            self.expectValue.toNot(\n                ObjCMatcherWrapper(matcher: matcher), description: description\n            )\n        })\n    }\n\n    public var notTo: (NMBMatcher) -> Void { return toNot }\n\n    public var notToWithDescription: (NMBMatcher, String) -> Void { return toNotWithDescription }\n\n    public var toEventually: (NMBMatcher) -> Void {\n        return ({ matcher in\n            self.expectValue.toEventually(\n                ObjCMatcherWrapper(matcher: matcher),\n                timeout: self._timeout,\n                description: nil\n            )\n        })\n    }\n\n    public var toEventuallyWithDescription: (NMBMatcher, String) -> Void {\n        return ({ matcher, description in\n            self.expectValue.toEventually(\n                ObjCMatcherWrapper(matcher: matcher),\n                timeout: self._timeout,\n                description: description\n            )\n        })\n    }\n\n    public var toEventuallyNot: (NMBMatcher) -> Void {\n        return ({ matcher in\n            self.expectValue.toEventuallyNot(\n                ObjCMatcherWrapper(matcher: matcher),\n                timeout: self._timeout,\n                description: nil\n            )\n        })\n    }\n\n    public var toEventuallyNotWithDescription: (NMBMatcher, String) -> Void {\n        return ({ matcher, description in\n            self.expectValue.toEventuallyNot(\n                ObjCMatcherWrapper(matcher: matcher),\n                timeout: self._timeout,\n                description: description\n            )\n        })\n    }\n\n    public var toNotEventually: (NMBMatcher) -> Void { return toEventuallyNot }\n\n    public var toNotEventuallyWithDescription: (NMBMatcher, String) -> Void { return toEventuallyNotWithDescription }\n\n    public class func failWithMessage(message: String, file: String, line: UInt) {\n        fail(message, location: SourceLocation(file: file, line: line))\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Utils/Async.swift",
    "content": "import Foundation\nimport Dispatch\n\nprivate let timeoutLeeway: UInt64 = NSEC_PER_MSEC\nprivate let pollLeeway: UInt64 = NSEC_PER_MSEC\n\n/// Stores debugging information about callers\ninternal struct WaitingInfo: CustomStringConvertible {\n    let name: String\n    let file: String\n    let lineNumber: UInt\n\n    var description: String {\n        return \"\\(name) at \\(file):\\(lineNumber)\"\n    }\n}\n\ninternal protocol WaitLock {\n    func acquireWaitingLock(fnName: String, file: String, line: UInt)\n    func releaseWaitingLock()\n    func isWaitingLocked() -> Bool\n}\n\ninternal class AssertionWaitLock: WaitLock {\n    private var currentWaiter: WaitingInfo? = nil\n    init() { }\n\n    func acquireWaitingLock(fnName: String, file: String, line: UInt) {\n        let info = WaitingInfo(name: fnName, file: file, lineNumber: line)\n        nimblePrecondition(\n            NSThread.isMainThread(),\n            \"InvalidNimbleAPIUsage\",\n            \"\\(fnName) can only run on the main thread.\"\n        )\n        nimblePrecondition(\n            currentWaiter == nil,\n            \"InvalidNimbleAPIUsage\",\n            \"Nested async expectations are not allowed to avoid creating flaky tests.\\n\\n\" +\n            \"The call to\\n\\t\\(info)\\n\" +\n            \"triggered this exception because\\n\\t\\(currentWaiter!)\\n\" +\n            \"is currently managing the main run loop.\"\n        )\n        currentWaiter = info\n    }\n\n    func isWaitingLocked() -> Bool {\n        return currentWaiter != nil\n    }\n\n    func releaseWaitingLock() {\n        currentWaiter = nil\n    }\n}\n\ninternal enum AwaitResult<T> {\n    /// Incomplete indicates None (aka - this value hasn't been fulfilled yet)\n    case Incomplete\n    /// TimedOut indicates the result reached its defined timeout limit before returning\n    case TimedOut\n    /// BlockedRunLoop indicates the main runloop is too busy processing other blocks to trigger\n    /// the timeout code.\n    ///\n    /// This may also mean the async code waiting upon may have never actually ran within the\n    /// required time because other timers & sources are running on the main run loop.\n    case BlockedRunLoop\n    /// The async block successfully executed and returned a given result\n    case Completed(T)\n    /// When a Swift Error is thrown\n    case ErrorThrown(ErrorType)\n    /// When an Objective-C Exception is raised\n    case RaisedException(NSException)\n\n    func isIncomplete() -> Bool {\n        switch self {\n        case .Incomplete: return true\n        default: return false\n        }\n    }\n\n    func isCompleted() -> Bool {\n        switch self {\n        case .Completed(_): return true\n        default: return false\n        }\n    }\n}\n\n/// Holds the resulting value from an asynchronous expectation.\n/// This class is thread-safe at receiving an \"response\" to this promise.\ninternal class AwaitPromise<T> {\n    private(set) internal var asyncResult: AwaitResult<T> = .Incomplete\n    private var signal: dispatch_semaphore_t\n\n    init() {\n        signal = dispatch_semaphore_create(1)\n    }\n\n    /// Resolves the promise with the given result if it has not been resolved. Repeated calls to\n    /// this method will resolve in a no-op.\n    ///\n    /// @returns a Bool that indicates if the async result was accepted or rejected because another\n    ///          value was recieved first.\n    func resolveResult(result: AwaitResult<T>) -> Bool {\n        if dispatch_semaphore_wait(signal, DISPATCH_TIME_NOW) == 0 {\n            self.asyncResult = result\n            return true\n        } else {\n            return false\n        }\n    }\n}\n\ninternal struct AwaitTrigger {\n    let timeoutSource: dispatch_source_t\n    let actionSource: dispatch_source_t?\n    let start: () throws -> Void\n}\n\n/// Factory for building fully configured AwaitPromises and waiting for their results.\n///\n/// This factory stores all the state for an async expectation so that Await doesn't\n/// doesn't have to manage it.\ninternal class AwaitPromiseBuilder<T> {\n    let awaiter: Awaiter\n    let waitLock: WaitLock\n    let trigger: AwaitTrigger\n    let promise: AwaitPromise<T>\n\n    internal init(\n        awaiter: Awaiter,\n        waitLock: WaitLock,\n        promise: AwaitPromise<T>,\n        trigger: AwaitTrigger) {\n            self.awaiter = awaiter\n            self.waitLock = waitLock\n            self.promise = promise\n            self.trigger = trigger\n    }\n\n    func timeout(timeoutInterval: NSTimeInterval, forcefullyAbortTimeout: NSTimeInterval) -> Self {\n        // = Discussion =\n        //\n        // There's a lot of technical decisions here that is useful to elaborate on. This is\n        // definitely more lower-level than the previous NSRunLoop based implementation.\n        //\n        //\n        // Why Dispatch Source?\n        //\n        //\n        // We're using a dispatch source to have better control of the run loop behavior.\n        // A timer source gives us deferred-timing control without having to rely as much on\n        // a run loop's traditional dispatching machinery (eg - NSTimers, DefaultRunLoopMode, etc.)\n        // which is ripe for getting corrupted by application code.\n        //\n        // And unlike dispatch_async(), we can control how likely our code gets prioritized to\n        // executed (see leeway parameter) + DISPATCH_TIMER_STRICT.\n        //\n        // This timer is assumed to run on the HIGH priority queue to ensure it maintains the\n        // highest priority over normal application / test code when possible.\n        //\n        //\n        // Run Loop Management\n        //\n        // In order to properly interrupt the waiting behavior performed by this factory class,\n        // this timer stops the main run loop to tell the waiter code that the result should be\n        // checked.\n        //\n        // In addition, stopping the run loop is used to halt code executed on the main run loop.\n        dispatch_source_set_timer(\n            trigger.timeoutSource,\n            dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutInterval * Double(NSEC_PER_SEC))),\n            DISPATCH_TIME_FOREVER,\n            timeoutLeeway\n        )\n        dispatch_source_set_event_handler(trigger.timeoutSource) {\n            guard self.promise.asyncResult.isIncomplete() else { return }\n            let timedOutSem = dispatch_semaphore_create(0)\n            let semTimedOutOrBlocked = dispatch_semaphore_create(0)\n            dispatch_semaphore_signal(semTimedOutOrBlocked)\n            let runLoop = CFRunLoopGetMain()\n            CFRunLoopPerformBlock(runLoop, kCFRunLoopDefaultMode) {\n                if dispatch_semaphore_wait(semTimedOutOrBlocked, DISPATCH_TIME_NOW) == 0 {\n                    dispatch_semaphore_signal(timedOutSem)\n                    dispatch_semaphore_signal(semTimedOutOrBlocked)\n                    if self.promise.resolveResult(.TimedOut) {\n                        CFRunLoopStop(CFRunLoopGetMain())\n                    }\n                }\n            }\n            // potentially interrupt blocking code on run loop to let timeout code run\n            CFRunLoopStop(runLoop)\n            let now = dispatch_time(DISPATCH_TIME_NOW, Int64(forcefullyAbortTimeout * Double(NSEC_PER_SEC)))\n            let didNotTimeOut = dispatch_semaphore_wait(timedOutSem, now) != 0\n            let timeoutWasNotTriggered = dispatch_semaphore_wait(semTimedOutOrBlocked, 0) == 0\n            if didNotTimeOut && timeoutWasNotTriggered {\n                if self.promise.resolveResult(.BlockedRunLoop) {\n                    CFRunLoopStop(CFRunLoopGetMain())\n                }\n            }\n        }\n        return self\n    }\n\n    /// Blocks for an asynchronous result.\n    ///\n    /// @discussion\n    /// This function must be executed on the main thread and cannot be nested. This is because\n    /// this function (and it's related methods) coordinate through the main run loop. Tampering\n    /// with the run loop can cause undesireable behavior.\n    ///\n    /// This method will return an AwaitResult in the following cases:\n    ///\n    /// - The main run loop is blocked by other operations and the async expectation cannot be\n    ///   be stopped.\n    /// - The async expectation timed out\n    /// - The async expectation succeeded\n    /// - The async expectation raised an unexpected exception (objc)\n    /// - The async expectation raised an unexpected error (swift)\n    ///\n    /// The returned AwaitResult will NEVER be .Incomplete.\n    func wait(fnName: String = __FUNCTION__, file: String = __FILE__, line: UInt = __LINE__) -> AwaitResult<T> {\n        waitLock.acquireWaitingLock(\n            fnName,\n            file: file,\n            line: line)\n\n        let capture = NMBExceptionCapture(handler: ({ exception in\n            self.promise.resolveResult(.RaisedException(exception))\n        }), finally: ({\n            self.waitLock.releaseWaitingLock()\n        }))\n        capture.tryBlock {\n            do {\n                try self.trigger.start()\n            } catch let error {\n                self.promise.resolveResult(.ErrorThrown(error))\n            }\n            dispatch_resume(self.trigger.timeoutSource)\n            while self.promise.asyncResult.isIncomplete() {\n                // Stopping the run loop does not work unless we run only 1 mode\n                NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture())\n            }\n            dispatch_suspend(self.trigger.timeoutSource)\n            dispatch_source_cancel(self.trigger.timeoutSource)\n            if let asyncSource = self.trigger.actionSource {\n                dispatch_source_cancel(asyncSource)\n            }\n        }\n\n        return promise.asyncResult\n    }\n}\n\ninternal class Awaiter {\n    let waitLock: WaitLock\n    let timeoutQueue: dispatch_queue_t\n    let asyncQueue: dispatch_queue_t\n\n    internal init(\n        waitLock: WaitLock,\n        asyncQueue: dispatch_queue_t,\n        timeoutQueue: dispatch_queue_t) {\n            self.waitLock = waitLock\n            self.asyncQueue = asyncQueue\n            self.timeoutQueue = timeoutQueue\n    }\n\n    private func createTimerSource(queue: dispatch_queue_t) -> dispatch_source_t {\n        return dispatch_source_create(\n            DISPATCH_SOURCE_TYPE_TIMER,\n            0,\n            DISPATCH_TIMER_STRICT,\n            queue\n        )\n    }\n\n    func performBlock<T>(\n        closure: ((T) -> Void) throws -> Void) -> AwaitPromiseBuilder<T> {\n            let promise = AwaitPromise<T>()\n            let timeoutSource = createTimerSource(timeoutQueue)\n            var completionCount = 0\n            let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: nil) {\n                try closure() {\n                    completionCount += 1\n                    nimblePrecondition(\n                        completionCount < 2,\n                        \"InvalidNimbleAPIUsage\",\n                        \"Done closure's was called multiple times. waitUntil(..) expects its \" +\n                        \"completion closure to only be called once.\")\n                    if promise.resolveResult(.Completed($0)) {\n                        CFRunLoopStop(CFRunLoopGetMain())\n                    }\n                }\n            }\n\n            return AwaitPromiseBuilder(\n                awaiter: self,\n                waitLock: waitLock,\n                promise: promise,\n                trigger: trigger)\n    }\n\n    func poll<T>(pollInterval: NSTimeInterval, closure: () throws -> T?) -> AwaitPromiseBuilder<T> {\n        let promise = AwaitPromise<T>()\n        let timeoutSource = createTimerSource(timeoutQueue)\n        let asyncSource = createTimerSource(asyncQueue)\n        let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: asyncSource) {\n            let interval = UInt64(pollInterval * Double(NSEC_PER_SEC))\n            dispatch_source_set_timer(asyncSource, DISPATCH_TIME_NOW, interval, pollLeeway)\n            dispatch_source_set_event_handler(asyncSource) {\n                do {\n                    if let result = try closure() {\n                        if promise.resolveResult(.Completed(result)) {\n                            CFRunLoopStop(CFRunLoopGetCurrent())\n                        }\n                    }\n                } catch let error {\n                    if promise.resolveResult(.ErrorThrown(error)) {\n                        CFRunLoopStop(CFRunLoopGetCurrent())\n                    }\n                }\n            }\n            dispatch_resume(asyncSource)\n        }\n\n        return AwaitPromiseBuilder(\n            awaiter: self,\n            waitLock: waitLock,\n            promise: promise,\n            trigger: trigger)\n    }\n}\n\ninternal func pollBlock(\n    pollInterval pollInterval: NSTimeInterval,\n    timeoutInterval: NSTimeInterval,\n    file: String,\n    line: UInt,\n    fnName: String = __FUNCTION__,\n    expression: () throws -> Bool) -> AwaitResult<Bool> {\n        let awaiter = NimbleEnvironment.activeInstance.awaiter\n        let result = awaiter.poll(pollInterval) { () throws -> Bool? in\n            do {\n                if try expression() {\n                    return true\n                }\n                return nil\n            } catch let error {\n                throw error\n            }\n        }.timeout(timeoutInterval, forcefullyAbortTimeout: timeoutInterval / 2.0).wait(fnName, file: file, line: line)\n\n        return result\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Utils/Functional.swift",
    "content": "import Foundation\n\ninternal func all<T>(array: [T], fn: (T) -> Bool) -> Bool {\n    for item in array {\n        if !fn(item) {\n            return false\n        }\n    }\n    return true\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Utils/SourceLocation.swift",
    "content": "import Foundation\n\n\npublic class SourceLocation : NSObject {\n    public let file: String\n    public let line: UInt\n\n    override init() {\n        file = \"Unknown File\"\n        line = 0\n    }\n\n    init(file: String, line: UInt) {\n        self.file = file\n        self.line = line\n    }\n\n    override public var description: String {\n        return \"\\(file):\\(line)\"\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Utils/Stringers.swift",
    "content": "import Foundation\n\n\ninternal func identityAsString(value: AnyObject?) -> String {\n    if value == nil {\n        return \"nil\"\n    }\n    return NSString(format: \"<%p>\", unsafeBitCast(value!, Int.self)).description\n}\n\ninternal func arrayAsString<T>(items: [T], joiner: String = \", \") -> String {\n    return items.reduce(\"\") { accum, item in\n        let prefix = (accum.isEmpty ? \"\" : joiner)\n        return accum + prefix + \"\\(stringify(item))\"\n    }\n}\n\n@objc internal protocol NMBStringer {\n    func NMB_stringify() -> String\n}\n\ninternal func stringify<S: SequenceType>(value: S) -> String {\n    var generator = value.generate()\n    var strings = [String]()\n    var value: S.Generator.Element?\n    repeat {\n        value = generator.next()\n        if value != nil {\n            strings.append(stringify(value))\n        }\n    } while value != nil\n    let str = strings.joinWithSeparator(\", \")\n    return \"[\\(str)]\"\n}\n\nextension NSArray : NMBStringer {\n    func NMB_stringify() -> String {\n        let str = self.componentsJoinedByString(\", \")\n        return \"[\\(str)]\"\n    }\n}\n\ninternal func stringify<T>(value: T) -> String {\n    if let value = value as? Double {\n        return NSString(format: \"%.4f\", (value)).description\n    }\n    return String(value)\n}\n\ninternal func stringify(value: NMBDoubleConvertible) -> String {\n    if let value = value as? Double {\n        return NSString(format: \"%.4f\", (value)).description\n    }\n    return value.stringRepresentation\n}\n\ninternal func stringify<T>(value: T?) -> String {\n    if let unboxed = value {\n       return stringify(unboxed)\n    }\n    return \"nil\"\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Wrappers/AsyncMatcherWrapper.swift",
    "content": "import Foundation\n\ninternal struct AsyncMatcherWrapper<T, U where U: Matcher, U.ValueType == T>: Matcher {\n    let fullMatcher: U\n    let timeoutInterval: NSTimeInterval\n    let pollInterval: NSTimeInterval\n\n    init(fullMatcher: U, timeoutInterval: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01) {\n      self.fullMatcher = fullMatcher\n      self.timeoutInterval = timeoutInterval\n      self.pollInterval = pollInterval\n    }\n\n    func matches(actualExpression: Expression<T>, failureMessage: FailureMessage) -> Bool {\n        let uncachedExpression = actualExpression.withoutCaching()\n        let fnName = \"expect(...).toEventually(...)\"\n        let result = pollBlock(\n            pollInterval: pollInterval,\n            timeoutInterval: timeoutInterval,\n            file: actualExpression.location.file,\n            line: actualExpression.location.line,\n            fnName: fnName) {\n                try self.fullMatcher.matches(uncachedExpression, failureMessage: failureMessage)\n        }\n        switch (result) {\n        case let .Completed(isSuccessful): return isSuccessful\n        case .TimedOut: return false\n        case let .ErrorThrown(error):\n            failureMessage.actualValue = \"an unexpected error thrown: <\\(error)>\"\n            return false\n        case let .RaisedException(exception):\n            failureMessage.actualValue = \"an unexpected exception thrown: <\\(exception)>\"\n            return false\n        case .BlockedRunLoop:\n            failureMessage.postfixMessage += \" (timed out, but main thread was unresponsive).\"\n            return false\n        case .Incomplete:\n            internalError(\"Reached .Incomplete state for toEventually(...).\")\n        }\n    }\n\n    func doesNotMatch(actualExpression: Expression<T>, failureMessage: FailureMessage) -> Bool  {\n        let uncachedExpression = actualExpression.withoutCaching()\n        let result = pollBlock(\n            pollInterval: pollInterval,\n            timeoutInterval: timeoutInterval,\n            file: actualExpression.location.file,\n            line: actualExpression.location.line,\n            fnName: \"expect(...).toEventuallyNot(...)\") {\n                try self.fullMatcher.doesNotMatch(uncachedExpression, failureMessage: failureMessage)\n        }\n        switch (result) {\n        case let .Completed(isSuccessful): return isSuccessful\n        case .TimedOut: return false\n        case let .ErrorThrown(error):\n            failureMessage.actualValue = \"an unexpected error thrown: <\\(error)>\"\n            return false\n        case let .RaisedException(exception):\n            failureMessage.actualValue = \"an unexpected exception thrown: <\\(exception)>\"\n            return false\n        case .BlockedRunLoop:\n            failureMessage.postfixMessage += \" (timed out, but main thread was unresponsive).\"\n            return false\n        case .Incomplete:\n            internalError(\"Reached .Incomplete state for toEventuallyNot(...).\")\n        }\n    }\n}\n\nprivate let toEventuallyRequiresClosureError = FailureMessage(stringValue: \"expect(...).toEventually(...) requires an explicit closure (eg - expect { ... }.toEventually(...) )\\nSwift 1.2 @autoclosure behavior has changed in an incompatible way for Nimble to function\")\n\n\nextension Expectation {\n    /// Tests the actual value using a matcher to match by checking continuously\n    /// at each pollInterval until the timeout is reached.\n    ///\n    /// @discussion\n    /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function\n    /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior.\n    public func toEventually<U where U: Matcher, U.ValueType == T>(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01, description: String? = nil) {\n        if expression.isClosure {\n            let (pass, msg) = expressionMatches(\n                expression,\n                matcher: AsyncMatcherWrapper(\n                    fullMatcher: matcher,\n                    timeoutInterval: timeout,\n                    pollInterval: pollInterval),\n                to: \"to eventually\",\n                description: description\n            )\n            verify(pass, msg)\n        } else {\n            verify(false, toEventuallyRequiresClosureError)\n        }\n    }\n\n    /// Tests the actual value using a matcher to not match by checking\n    /// continuously at each pollInterval until the timeout is reached.\n    ///\n    /// @discussion\n    /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function\n    /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior.\n    public func toEventuallyNot<U where U: Matcher, U.ValueType == T>(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01, description: String? = nil) {\n        if expression.isClosure {\n            let (pass, msg) = expressionDoesNotMatch(\n                expression,\n                matcher: AsyncMatcherWrapper(\n                    fullMatcher: matcher,\n                    timeoutInterval: timeout,\n                    pollInterval: pollInterval),\n                toNot: \"to eventually not\",\n                description: description\n            )\n            verify(pass, msg)\n        } else {\n            verify(false, toEventuallyRequiresClosureError)\n        }\n    }\n\n    /// Tests the actual value using a matcher to not match by checking\n    /// continuously at each pollInterval until the timeout is reached.\n    ///\n    /// Alias of toEventuallyNot()\n    ///\n    /// @discussion\n    /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function\n    /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior.\n    public func toNotEventually<U where U: Matcher, U.ValueType == T>(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01, description: String? = nil) {\n        return toEventuallyNot(matcher, timeout: timeout, pollInterval: pollInterval, description: description)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Wrappers/MatcherFunc.swift",
    "content": "/// A convenience API to build matchers that allow full control over\n/// to() and toNot() match cases.\n///\n/// The final bool argument in the closure is if the match is for negation.\n///\n/// You may use this when implementing your own custom matchers.\n///\n/// Use the Matcher protocol instead of this type to accept custom matchers as\n/// input parameters.\n/// @see allPass for an example that uses accepts other matchers as input.\npublic struct FullMatcherFunc<T>: Matcher {\n    public let matcher: (Expression<T>, FailureMessage, Bool) throws -> Bool\n\n    public init(_ matcher: (Expression<T>, FailureMessage, Bool) throws -> Bool) {\n        self.matcher = matcher\n    }\n\n    public func matches(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        return try matcher(actualExpression, failureMessage, false)\n    }\n\n    public func doesNotMatch(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        return try matcher(actualExpression, failureMessage, true)\n    }\n}\n\n/// A convenience API to build matchers that don't need special negation\n/// behavior. The toNot() behavior is the negation of to().\n///\n/// @see NonNilMatcherFunc if you prefer to have this matcher fail when nil\n///                        values are recieved in an expectation.\n///\n/// You may use this when implementing your own custom matchers.\n///\n/// Use the Matcher protocol instead of this type to accept custom matchers as\n/// input parameters.\n/// @see allPass for an example that uses accepts other matchers as input.\npublic struct MatcherFunc<T>: Matcher {\n    public let matcher: (Expression<T>, FailureMessage) throws -> Bool\n\n    public init(_ matcher: (Expression<T>, FailureMessage) throws -> Bool) {\n        self.matcher = matcher\n    }\n\n    public func matches(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        return try matcher(actualExpression, failureMessage)\n    }\n\n    public func doesNotMatch(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        return try !matcher(actualExpression, failureMessage)\n    }\n}\n\n/// A convenience API to build matchers that don't need special negation\n/// behavior. The toNot() behavior is the negation of to().\n///\n/// Unlike MatcherFunc, this will always fail if an expectation contains nil.\n/// This applies regardless of using to() or toNot().\n///\n/// You may use this when implementing your own custom matchers.\n///\n/// Use the Matcher protocol instead of this type to accept custom matchers as\n/// input parameters.\n/// @see allPass for an example that uses accepts other matchers as input.\npublic struct NonNilMatcherFunc<T>: Matcher {\n    public let matcher: (Expression<T>, FailureMessage) throws -> Bool\n\n    public init(_ matcher: (Expression<T>, FailureMessage) throws -> Bool) {\n        self.matcher = matcher\n    }\n\n    public func matches(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        let pass = try matcher(actualExpression, failureMessage)\n        if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) {\n            return false\n        }\n        return pass\n    }\n\n    public func doesNotMatch(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        let pass = try !matcher(actualExpression, failureMessage)\n        if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) {\n            return false\n        }\n        return pass\n    }\n\n    internal func attachNilErrorIfNeeded(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        if try actualExpression.evaluate() == nil {\n            failureMessage.postfixActual = \" (use beNil() to match nils)\"\n            return true\n        }\n        return false\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/Wrappers/ObjCMatcher.swift",
    "content": "import Foundation\n\npublic typealias MatcherBlock = (actualExpression: Expression<NSObject>, failureMessage: FailureMessage) -> Bool\npublic typealias FullMatcherBlock = (actualExpression: Expression<NSObject>, failureMessage: FailureMessage, shouldNotMatch: Bool) -> Bool\n\npublic class NMBObjCMatcher : NSObject, NMBMatcher {\n    let _match: MatcherBlock\n    let _doesNotMatch: MatcherBlock\n    let canMatchNil: Bool\n\n    public init(canMatchNil: Bool, matcher: MatcherBlock, notMatcher: MatcherBlock) {\n        self.canMatchNil = canMatchNil\n        self._match = matcher\n        self._doesNotMatch = notMatcher\n    }\n\n    public convenience init(matcher: MatcherBlock) {\n        self.init(canMatchNil: true, matcher: matcher)\n    }\n\n    public convenience init(canMatchNil: Bool, matcher: MatcherBlock) {\n        self.init(canMatchNil: canMatchNil, matcher: matcher, notMatcher: ({ actualExpression, failureMessage in\n            return !matcher(actualExpression: actualExpression, failureMessage: failureMessage)\n        }))\n    }\n\n    public convenience init(matcher: FullMatcherBlock) {\n        self.init(canMatchNil: true, matcher: matcher)\n    }\n\n    public convenience init(canMatchNil: Bool, matcher: FullMatcherBlock) {\n        self.init(canMatchNil: canMatchNil, matcher: ({ actualExpression, failureMessage in\n            return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: false)\n        }), notMatcher: ({ actualExpression, failureMessage in\n            return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: true)\n        }))\n    }\n\n    private func canMatch(actualExpression: Expression<NSObject>, failureMessage: FailureMessage) -> Bool {\n        do {\n            if !canMatchNil {\n                if try actualExpression.evaluate() == nil {\n                    failureMessage.postfixActual = \" (use beNil() to match nils)\"\n                    return false\n                }\n            }\n        } catch let error {\n            failureMessage.actualValue = \"an unexpected error thrown: \\(error)\"\n            return false\n        }\n        return true\n    }\n\n    public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        let expr = Expression(expression: actualBlock, location: location)\n        let result = _match(\n            actualExpression: expr,\n            failureMessage: failureMessage)\n        if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) {\n            return result\n        } else {\n            return false\n        }\n    }\n\n    public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        let expr = Expression(expression: actualBlock, location: location)\n        let result = _doesNotMatch(\n            actualExpression: expr,\n            failureMessage: failureMessage)\n        if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) {\n            return result\n        } else {\n            return false\n        }\n    }\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/objc/DSL.h",
    "content": "#import <Foundation/Foundation.h>\n\n@class NMBExpectation;\n@class NMBObjCBeCloseToMatcher;\n@class NMBObjCRaiseExceptionMatcher;\n@protocol NMBMatcher;\n\n\n#define NIMBLE_EXPORT FOUNDATION_EXPORT\n\n#ifdef NIMBLE_DISABLE_SHORT_SYNTAX\n#define NIMBLE_SHORT(PROTO, ORIGINAL)\n#else\n#define NIMBLE_SHORT(PROTO, ORIGINAL) FOUNDATION_STATIC_INLINE PROTO { return (ORIGINAL); }\n#endif\n\nNIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line);\nNIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line);\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_equal(id expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> equal(id expectedValue),\n             NMB_equal(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_haveCount(id expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> haveCount(id expectedValue),\n             NMB_haveCount(expectedValue));\n\nNIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue);\nNIMBLE_SHORT(NMBObjCBeCloseToMatcher *beCloseTo(id expectedValue),\n             NMB_beCloseTo(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beAnInstanceOf(Class expectedClass);\nNIMBLE_SHORT(id<NMBMatcher> beAnInstanceOf(Class expectedClass),\n             NMB_beAnInstanceOf(expectedClass));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beAKindOf(Class expectedClass);\nNIMBLE_SHORT(id<NMBMatcher> beAKindOf(Class expectedClass),\n             NMB_beAKindOf(expectedClass));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beginWith(id itemElementOrSubstring);\nNIMBLE_SHORT(id<NMBMatcher> beginWith(id itemElementOrSubstring),\n             NMB_beginWith(itemElementOrSubstring));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThan(NSNumber *expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> beGreaterThan(NSNumber *expectedValue),\n             NMB_beGreaterThan(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> beGreaterThanOrEqualTo(NSNumber *expectedValue),\n             NMB_beGreaterThanOrEqualTo(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beIdenticalTo(id expectedInstance);\nNIMBLE_SHORT(id<NMBMatcher> beIdenticalTo(id expectedInstance),\n             NMB_beIdenticalTo(expectedInstance));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beLessThan(NSNumber *expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> beLessThan(NSNumber *expectedValue),\n             NMB_beLessThan(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beLessThanOrEqualTo(NSNumber *expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> beLessThanOrEqualTo(NSNumber *expectedValue),\n             NMB_beLessThanOrEqualTo(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beTruthy(void);\nNIMBLE_SHORT(id<NMBMatcher> beTruthy(void),\n             NMB_beTruthy());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beFalsy(void);\nNIMBLE_SHORT(id<NMBMatcher> beFalsy(void),\n             NMB_beFalsy());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beTrue(void);\nNIMBLE_SHORT(id<NMBMatcher> beTrue(void),\n             NMB_beTrue());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beFalse(void);\nNIMBLE_SHORT(id<NMBMatcher> beFalse(void),\n             NMB_beFalse());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beNil(void);\nNIMBLE_SHORT(id<NMBMatcher> beNil(void),\n             NMB_beNil());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beEmpty(void);\nNIMBLE_SHORT(id<NMBMatcher> beEmpty(void),\n             NMB_beEmpty());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION;\n#define NMB_contain(...) NMB_containWithNilTermination(__VA_ARGS__, nil)\n#ifndef NIMBLE_DISABLE_SHORT_SYNTAX\n#define contain(...) NMB_contain(__VA_ARGS__)\n#endif\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_endWith(id itemElementOrSubstring);\nNIMBLE_SHORT(id<NMBMatcher> endWith(id itemElementOrSubstring),\n             NMB_endWith(itemElementOrSubstring));\n\nNIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException(void);\nNIMBLE_SHORT(NMBObjCRaiseExceptionMatcher *raiseException(void),\n             NMB_raiseException());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_match(id expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> match(id expectedValue),\n             NMB_match(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_allPass(id matcher);\nNIMBLE_SHORT(id<NMBMatcher> allPass(id matcher),\n             NMB_allPass(matcher));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_satisfyAnyOfWithMatchers(id matchers);\n#define NMB_satisfyAnyOf(...) NMB_satisfyAnyOfWithMatchers(@[__VA_ARGS__])\n#ifndef NIMBLE_DISABLE_SHORT_SYNTAX\n#define satisfyAnyOf(...) NMB_satisfyAnyOf(__VA_ARGS__)\n#endif\n\n// In order to preserve breakpoint behavior despite using macros to fill in __FILE__ and __LINE__,\n// define a builder that populates __FILE__ and __LINE__, and returns a block that takes timeout\n// and action arguments. See https://github.com/Quick/Quick/pull/185 for details.\ntypedef void (^NMBWaitUntilTimeoutBlock)(NSTimeInterval timeout, void (^action)(void (^)(void)));\ntypedef void (^NMBWaitUntilBlock)(void (^action)(void (^)(void)));\n\nNIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line);\n\nNIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line);\nNIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line);\n\nNIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line);\n\n#define NMB_waitUntilTimeout NMB_waitUntilTimeoutBuilder(@(__FILE__), __LINE__)\n#define NMB_waitUntil NMB_waitUntilBuilder(@(__FILE__), __LINE__)\n\n#ifndef NIMBLE_DISABLE_SHORT_SYNTAX\n#define expect(...) NMB_expect(^id{ return (__VA_ARGS__); }, @(__FILE__), __LINE__)\n#define expectAction(BLOCK) NMB_expectAction((BLOCK), @(__FILE__), __LINE__)\n#define failWithMessage(msg) NMB_failWithMessage(msg, @(__FILE__), __LINE__)\n#define fail() failWithMessage(@\"fail() always fails\")\n\n\n#define waitUntilTimeout NMB_waitUntilTimeout\n#define waitUntil NMB_waitUntil\n#endif\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/objc/DSL.m",
    "content": "#import <Nimble/DSL.h>\n#import <Nimble/Nimble-Swift.h>\n\nSWIFT_CLASS(\"_TtC6Nimble7NMBWait\")\n@interface NMBWait : NSObject\n\n+ (void)untilTimeout:(NSTimeInterval)timeout file:(NSString *)file line:(NSUInteger)line action:(void(^)())action;\n+ (void)untilFile:(NSString *)file line:(NSUInteger)line action:(void(^)())action;\n\n@end\n\nNIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line) {\n    return [[NMBExpectation alloc] initWithActualBlock:actualBlock\n                                              negative:NO\n                                                  file:file\n                                                  line:line];\n}\n\nNIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line) {\n    return NMB_expect(^id{\n        actualBlock();\n        return nil;\n    }, file, line);\n}\n\nNIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line) {\n    return [NMBExpectation failWithMessage:msg file:file line:line];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beAnInstanceOf(Class expectedClass) {\n    return [NMBObjCMatcher beAnInstanceOfMatcher:expectedClass];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beAKindOf(Class expectedClass) {\n    return [NMBObjCMatcher beAKindOfMatcher:expectedClass];\n}\n\nNIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue) {\n    return [NMBObjCMatcher beCloseToMatcher:expectedValue within:0.001];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beginWith(id itemElementOrSubstring) {\n    return [NMBObjCMatcher beginWithMatcher:itemElementOrSubstring];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThan(NSNumber *expectedValue) {\n    return [NMBObjCMatcher beGreaterThanMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue) {\n    return [NMBObjCMatcher beGreaterThanOrEqualToMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beIdenticalTo(id expectedInstance) {\n    return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beLessThan(NSNumber *expectedValue) {\n    return [NMBObjCMatcher beLessThanMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beLessThanOrEqualTo(NSNumber *expectedValue) {\n    return [NMBObjCMatcher beLessThanOrEqualToMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beTruthy() {\n    return [NMBObjCMatcher beTruthyMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beFalsy() {\n    return [NMBObjCMatcher beFalsyMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beTrue() {\n    return [NMBObjCMatcher beTrueMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beFalse() {\n    return [NMBObjCMatcher beFalseMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beNil() {\n    return [NMBObjCMatcher beNilMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beEmpty() {\n    return [NMBObjCMatcher beEmptyMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_containWithNilTermination(id itemOrSubstring, ...) {\n    NSMutableArray *itemOrSubstringArray = [NSMutableArray array];\n\n    if (itemOrSubstring) {\n        [itemOrSubstringArray addObject:itemOrSubstring];\n\n        va_list args;\n        va_start(args, itemOrSubstring);\n        id next;\n        while ((next = va_arg(args, id))) {\n            [itemOrSubstringArray addObject:next];\n        }\n        va_end(args);\n    }\n\n    return [NMBObjCMatcher containMatcher:itemOrSubstringArray];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_endWith(id itemElementOrSubstring) {\n    return [NMBObjCMatcher endWithMatcher:itemElementOrSubstring];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_equal(id expectedValue) {\n    return [NMBObjCMatcher equalMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_haveCount(id expectedValue) {\n    return [NMBObjCMatcher haveCountMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_match(id expectedValue) {\n    return [NMBObjCMatcher matchMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_allPass(id expectedValue) {\n    return [NMBObjCMatcher allPassMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_satisfyAnyOfWithMatchers(id matchers) {\n    return [NMBObjCMatcher satisfyAnyOfMatcher:matchers];\n}\n\nNIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException() {\n    return [NMBObjCMatcher raiseExceptionMatcher];\n}\n\nNIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line) {\n    return ^(NSTimeInterval timeout, void (^action)(void (^)(void))) {\n        [NMBWait untilTimeout:timeout file:file line:line action:action];\n    };\n}\n\nNIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line) {\n  return ^(void (^action)(void (^)(void))) {\n    [NMBWait untilFile:file line:line action:action];\n  };\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/objc/NMBExceptionCapture.h",
    "content": "#import <Foundation/Foundation.h>\n#import <dispatch/dispatch.h>\n\n@interface NMBExceptionCapture : NSObject\n\n- (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally;\n- (void)tryBlock:(void(^)())unsafeBlock;\n\n@end\n\ntypedef void(^NMBSourceCallbackBlock)(BOOL successful);\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble/objc/NMBExceptionCapture.m",
    "content": "#import \"NMBExceptionCapture.h\"\n\n@interface NMBExceptionCapture ()\n@property (nonatomic, copy) void(^handler)(NSException *exception);\n@property (nonatomic, copy) void(^finally)();\n@end\n\n@implementation NMBExceptionCapture\n\n- (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally {\n    self = [super init];\n    if (self) {\n        self.handler = handler;\n        self.finally = finally;\n    }\n    return self;\n}\n\n- (void)tryBlock:(void(^)())unsafeBlock {\n    @try {\n        unsafeBlock();\n    }\n    @catch (NSException *exception) {\n        if (self.handler) {\n            self.handler(exception);\n        }\n    }\n    @finally {\n        if (self.finally) {\n            self.finally();\n        }\n    }\n}\n\n@end"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = \"Nimble\"\n  s.version      = \"3.1.0\"\n  s.summary      = \"A Matcher Framework for Swift and Objective-C\"\n  s.description  = <<-DESC\n                   Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by Cedar.\n                   DESC\n  s.homepage     = \"https://github.com/Quick/Nimble\"\n  s.license      = { :type => \"Apache 2.0\", :file => \"LICENSE.md\" }\n  s.author       = \"Quick Contributors\"\n  s.ios.deployment_target = \"7.0\"\n  s.osx.deployment_target = \"10.9\"\n  s.tvos.deployment_target = \"9.0\"\n  s.source       = { :git => \"https://github.com/Quick/Nimble.git\", :tag => \"v#{s.version}\" }\n\n  s.source_files = \"Nimble\", \"Nimble/**/*.{swift,h,m}\"\n  s.weak_framework = \"XCTest\"\n  s.requires_arc = true\n  s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO', 'OTHER_LDFLAGS' => '-weak-lswiftXCTest', 'FRAMEWORK_SEARCH_PATHS' => '$(inherited) \"$(PLATFORM_DIR)/Developer/Library/Frameworks\"' }\nend\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble.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\t1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; };\n\t\t1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; };\n\t\t1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; };\n\t\t1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; };\n\t\t1F0FEA9A1AF32DA4001E554E /* ObjCExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0FEA991AF32DA4001E554E /* ObjCExpectation.swift */; };\n\t\t1F0FEA9B1AF32DA4001E554E /* ObjCExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0FEA991AF32DA4001E554E /* ObjCExpectation.swift */; };\n\t\t1F14FB64194180C5009F2A08 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; };\n\t\t1F1A742F1940169200FFFC47 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1A74291940169200FFFC47 /* Nimble.framework */; };\n\t\t1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; };\n\t\t1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; };\n\t\t1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; };\n\t\t1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; };\n\t\t1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; };\n\t\t1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; };\n\t\t1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; };\n\t\t1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; };\n\t\t1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; };\n\t\t1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; };\n\t\t1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; };\n\t\t1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; };\n\t\t1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; };\n\t\t1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; };\n\t\t1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; };\n\t\t1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; };\n\t\t1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; };\n\t\t1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; };\n\t\t1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; };\n\t\t1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; };\n\t\t1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; };\n\t\t1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; };\n\t\t1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; };\n\t\t1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; };\n\t\t1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; };\n\t\t1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; };\n\t\t1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; };\n\t\t1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; };\n\t\t1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; };\n\t\t1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; };\n\t\t1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; };\n\t\t1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; };\n\t\t1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; };\n\t\t1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; };\n\t\t1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; };\n\t\t1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; };\n\t\t1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; };\n\t\t1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; };\n\t\t1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; };\n\t\t1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; };\n\t\t1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; };\n\t\t1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; };\n\t\t1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; };\n\t\t1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; };\n\t\t1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; };\n\t\t1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; };\n\t\t1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; };\n\t\t1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; };\n\t\t1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; };\n\t\t1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; };\n\t\t1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; };\n\t\t1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; };\n\t\t1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; };\n\t\t1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; };\n\t\t1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; };\n\t\t1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; };\n\t\t1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; };\n\t\t1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; };\n\t\t1F5DF1731BDCA0F500C3A531 /* ObjCExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0FEA991AF32DA4001E554E /* ObjCExpectation.swift */; };\n\t\t1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; };\n\t\t1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; };\n\t\t1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; };\n\t\t1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; };\n\t\t1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; };\n\t\t1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; };\n\t\t1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; };\n\t\t1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; };\n\t\t1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; };\n\t\t1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; };\n\t\t1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; };\n\t\t1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; };\n\t\t1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; };\n\t\t1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; };\n\t\t1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; };\n\t\t1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; };\n\t\t1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; };\n\t\t1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; };\n\t\t1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; };\n\t\t1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; };\n\t\t1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; };\n\t\t1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; };\n\t\t1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; };\n\t\t1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; };\n\t\t1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; };\n\t\t1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; };\n\t\t1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; };\n\t\t1F5DF18F1BDCA0F500C3A531 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2A1968AB07008ED995 /* AsyncMatcherWrapper.swift */; };\n\t\t1F5DF1901BDCA0F500C3A531 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2C1968AB07008ED995 /* MatcherFunc.swift */; };\n\t\t1F5DF1911BDCA0F500C3A531 /* ObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2D1968AB07008ED995 /* ObjCMatcher.swift */; };\n\t\t1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; };\n\t\t1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; };\n\t\t1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; };\n\t\t1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; };\n\t\t1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; };\n\t\t1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; };\n\t\t1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; };\n\t\t1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; };\n\t\t1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; };\n\t\t1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; };\n\t\t1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; };\n\t\t1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; };\n\t\t1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; };\n\t\t1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; };\n\t\t1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; };\n\t\t1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; };\n\t\t1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; };\n\t\t1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; };\n\t\t1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; };\n\t\t1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; };\n\t\t1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; };\n\t\t1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; };\n\t\t1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; };\n\t\t1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; };\n\t\t1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; };\n\t\t1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; };\n\t\t1F5DF1AC1BDCA16E00C3A531 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD211968AB07008ED995 /* DSL.m */; };\n\t\t1F5DF1AD1BDCA16E00C3A531 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD231968AB07008ED995 /* NMBExceptionCapture.m */; };\n\t\t1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F5DF1AF1BDCA17600C3A531 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD201968AB07008ED995 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F5DF1B01BDCA17600C3A531 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD221968AB07008ED995 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; };\n\t\t1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; };\n\t\t1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F925EAD195C0D6300ED456B /* Nimble.framework */; };\n\t\t1F925EC7195C0DD100ED456B /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F925EE2195C0DFD00ED456B /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; };\n\t\t1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; };\n\t\t1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; };\n\t\t1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; };\n\t\t1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; };\n\t\t1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; };\n\t\t1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; };\n\t\t1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; };\n\t\t1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; };\n\t\t1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; };\n\t\t1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; };\n\t\t1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; };\n\t\t1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; };\n\t\t1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; };\n\t\t1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; };\n\t\t1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; };\n\t\t1F925F00195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; };\n\t\t1F925F02195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; };\n\t\t1F925F03195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; };\n\t\t1F925F05195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; };\n\t\t1F925F06195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; };\n\t\t1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; };\n\t\t1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; };\n\t\t1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; };\n\t\t1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; };\n\t\t1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; };\n\t\t1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; };\n\t\t1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; };\n\t\t1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; };\n\t\t1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; };\n\t\t1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; };\n\t\t1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; };\n\t\t1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; };\n\t\t1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; };\n\t\t1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; };\n\t\t1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; };\n\t\t1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; };\n\t\t1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; };\n\t\t1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; };\n\t\t1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; };\n\t\t1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; };\n\t\t1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; };\n\t\t1FD8CD341968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; };\n\t\t1FD8CD351968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; };\n\t\t1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; };\n\t\t1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; };\n\t\t1FD8CD381968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; };\n\t\t1FD8CD391968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; };\n\t\t1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; };\n\t\t1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; };\n\t\t1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; };\n\t\t1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; };\n\t\t1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; };\n\t\t1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; };\n\t\t1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; };\n\t\t1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; };\n\t\t1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; };\n\t\t1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; };\n\t\t1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; };\n\t\t1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; };\n\t\t1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; };\n\t\t1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; };\n\t\t1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; };\n\t\t1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; };\n\t\t1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; };\n\t\t1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; };\n\t\t1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; };\n\t\t1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; };\n\t\t1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; };\n\t\t1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; };\n\t\t1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; };\n\t\t1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; };\n\t\t1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; };\n\t\t1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; };\n\t\t1FD8CD561968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; };\n\t\t1FD8CD571968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; };\n\t\t1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; };\n\t\t1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; };\n\t\t1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; };\n\t\t1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; };\n\t\t1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; };\n\t\t1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; };\n\t\t1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; };\n\t\t1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; };\n\t\t1FD8CD601968AB07008ED995 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD201968AB07008ED995 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1FD8CD611968AB07008ED995 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD201968AB07008ED995 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1FD8CD621968AB07008ED995 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD211968AB07008ED995 /* DSL.m */; };\n\t\t1FD8CD631968AB07008ED995 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD211968AB07008ED995 /* DSL.m */; };\n\t\t1FD8CD641968AB07008ED995 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD221968AB07008ED995 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1FD8CD651968AB07008ED995 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD221968AB07008ED995 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1FD8CD661968AB07008ED995 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD231968AB07008ED995 /* NMBExceptionCapture.m */; };\n\t\t1FD8CD671968AB07008ED995 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD231968AB07008ED995 /* NMBExceptionCapture.m */; };\n\t\t1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; };\n\t\t1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; };\n\t\t1FD8CD701968AB07008ED995 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2A1968AB07008ED995 /* AsyncMatcherWrapper.swift */; };\n\t\t1FD8CD711968AB07008ED995 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2A1968AB07008ED995 /* AsyncMatcherWrapper.swift */; };\n\t\t1FD8CD741968AB07008ED995 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2C1968AB07008ED995 /* MatcherFunc.swift */; };\n\t\t1FD8CD751968AB07008ED995 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2C1968AB07008ED995 /* MatcherFunc.swift */; };\n\t\t1FD8CD761968AB07008ED995 /* ObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2D1968AB07008ED995 /* ObjCMatcher.swift */; };\n\t\t1FD8CD771968AB07008ED995 /* ObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2D1968AB07008ED995 /* ObjCMatcher.swift */; };\n\t\t1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; };\n\t\t1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; };\n\t\t29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; };\n\t\t29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; };\n\t\t29EA59661B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; };\n\t\t29EA59671B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; };\n\t\t472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; };\n\t\t472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; };\n\t\t472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; };\n\t\t472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; };\n\t\t4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; };\n\t\t4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; };\n\t\t7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; };\n\t\t7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; };\n\t\t7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; };\n\t\t7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; };\n\t\t7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; };\n\t\t7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; };\n\t\t7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; };\n\t\t7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; };\n\t\t965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; };\n\t\t965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; };\n\t\t965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; };\n\t\t965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; };\n\t\tDA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; };\n\t\tDA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; };\n\t\tDD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; };\n\t\tDD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; };\n\t\tDD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; };\n\t\tDD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; };\n\t\tDDB1BC791A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; };\n\t\tDDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; };\n\t\tDDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; };\n\t\tDDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; };\n\t\tDDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; };\n\t\tDDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; };\n\t\tDDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; };\n\t\tDDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t1F1A74361940169200FFFC47 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F1A74281940169200FFFC47;\n\t\t\tremoteInfo = \"Nimble-iOS\";\n\t\t};\n\t\t1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F5DF1541BDCA0CE00C3A531;\n\t\t\tremoteInfo = \"Nimble-tvOS\";\n\t\t};\n\t\t1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F1A74281940169200FFFC47;\n\t\t\tremoteInfo = \"Nimble-iOS\";\n\t\t};\n\t\t1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F1A74281940169200FFFC47;\n\t\t\tremoteInfo = Nimble;\n\t\t};\n\t\t1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F1A74281940169200FFFC47;\n\t\t\tremoteInfo = Nimble;\n\t\t};\n\t\t1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F925EAC195C0D6300ED456B;\n\t\t\tremoteInfo = \"Nimble-OSX\";\n\t\t};\n\t\t1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F925EAC195C0D6300ED456B;\n\t\t\tremoteInfo = \"Nimble-OSX\";\n\t\t};\n\t\t1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F925EAC195C0D6300ED456B;\n\t\t\tremoteInfo = \"Nimble-OSX\";\n\t\t};\n\t\t1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F925EAC195C0D6300ED456B;\n\t\t\tremoteInfo = \"Nimble-OSX\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectWithLazyProperty.swift; sourceTree = \"<group>\"; };\n\t\t1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronousTests.swift; sourceTree = \"<group>\"; };\n\t\t1F0FEA991AF32DA4001E554E /* ObjCExpectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjCExpectation.swift; sourceTree = \"<group>\"; };\n\t\t1F14FB63194180C5009F2A08 /* utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = utils.swift; sourceTree = \"<group>\"; };\n\t\t1F1A74291940169200FFFC47 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F1A742D1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t1F1A742E1940169200FFFC47 /* Nimble.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Nimble.h; sourceTree = \"<group>\"; };\n\t\t1F1A74341940169200FFFC47 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F1A743A1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAKindOfTest.swift; sourceTree = \"<group>\"; };\n\t\t1F2752D119445B8400052A26 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = README.md; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.markdown; };\n\t\t1F299EAA19627B2D002641AF /* BeEmptyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmptyTest.swift; sourceTree = \"<group>\"; };\n\t\t1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAsyncTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NimbleSpecHelper.h; sourceTree = \"<group>\"; };\n\t\t1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeAnInstanceOfTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeKindOfTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeCloseToTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeginWithTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanOrEqualToTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeIdenticalToTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanOrEqualToTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTruthyTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalsyTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTrueTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalseTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeNilTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56931A3B346F009E1637 /* ObjCContainTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCContainTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEndWithTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEqualTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCMatchTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCRaiseExceptionTest.m; sourceTree = \"<group>\"; };\n\t\t1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSyncTest.m; sourceTree = \"<group>\"; };\n\t\t1F925EAD195C0D6300ED456B /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F925EB7195C0D6300ED456B /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F925EE5195C121200ED456B /* AsynchronousTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsynchronousTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOfTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RaisesExceptionTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EEE195C136500ED456B /* BeLogicalTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLogicalTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EF5195C147800ED456B /* BeCloseToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseToTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EF8195C175000ED456B /* BeNilTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeNilTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EFB195C186800ED456B /* BeginWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeginWithTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EFE195C187600ED456B /* EndWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWithTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F01195C189500ED456B /* ContainTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F04195C18B700ED456B /* EqualTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EqualTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F0A195C18E100ED456B /* BeLessThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanOrEqualToTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanOrEqualToTest.swift; sourceTree = \"<group>\"; };\n\t\t1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeEmptyTest.m; sourceTree = \"<group>\"; };\n\t\t1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToTest.swift; sourceTree = \"<group>\"; };\n\t\t1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleEnvironment.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionRecorder.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdapterProtocols.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleXCTestHandler.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD081968AB07008ED995 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD091968AB07008ED995 /* Expectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expectation.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD0A1968AB07008ED995 /* Expression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expression.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailureMessage.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOf.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeAKindOf.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseTo.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD101968AB07008ED995 /* BeEmpty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmpty.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD111968AB07008ED995 /* BeginWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeginWith.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThan.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThanOrEqualTo.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeIdenticalTo.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD151968AB07008ED995 /* BeLessThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThan.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThanOrEqual.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD171968AB07008ED995 /* BeLogical.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLogical.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD181968AB07008ED995 /* BeNil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeNil.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD1A1968AB07008ED995 /* Contain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contain.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD1B1968AB07008ED995 /* EndWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWith.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD1C1968AB07008ED995 /* Equal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Equal.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherProtocols.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD1E1968AB07008ED995 /* RaisesException.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RaisesException.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD201968AB07008ED995 /* DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DSL.h; sourceTree = \"<group>\"; };\n\t\t1FD8CD211968AB07008ED995 /* DSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DSL.m; sourceTree = \"<group>\"; };\n\t\t1FD8CD221968AB07008ED995 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBExceptionCapture.h; sourceTree = \"<group>\"; };\n\t\t1FD8CD231968AB07008ED995 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBExceptionCapture.m; sourceTree = \"<group>\"; };\n\t\t1FD8CD251968AB07008ED995 /* Functional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Functional.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD261968AB07008ED995 /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Async.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD271968AB07008ED995 /* SourceLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SourceLocation.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD281968AB07008ED995 /* Stringers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stringers.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD2A1968AB07008ED995 /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncMatcherWrapper.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD2C1968AB07008ED995 /* MatcherFunc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherFunc.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD2D1968AB07008ED995 /* ObjCMatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjCMatcher.swift; sourceTree = \"<group>\"; };\n\t\t1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionDispatcher.swift; sourceTree = \"<group>\"; };\n\t\t1FFD729B1963FCAB00CD29A2 /* NimbleTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"NimbleTests-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t1FFD729C1963FCAB00CD29A2 /* Nimble-OSXTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Nimble-OSXTests-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t29EA59621B551ED2002D767E /* ThrowErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowErrorTest.swift; sourceTree = \"<group>\"; };\n\t\t29EA59651B551EE6002D767E /* ThrowError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowError.swift; sourceTree = \"<group>\"; };\n\t\t472FD1341B9E085700C7B8DA /* HaveCount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCount.swift; sourceTree = \"<group>\"; };\n\t\t472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCountTest.swift; sourceTree = \"<group>\"; };\n\t\t4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCHaveCount.m; sourceTree = \"<group>\"; };\n\t\t7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOfTest.swift; sourceTree = \"<group>\"; };\n\t\t7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOf.swift; sourceTree = \"<group>\"; };\n\t\t7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSatisfyAnyOfTest.m; sourceTree = \"<group>\"; };\n\t\t965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCUserDescriptionTest.m; sourceTree = \"<group>\"; };\n\t\t965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDescriptionTest.swift; sourceTree = \"<group>\"; };\n\t\tDA9E8C811A414BB9002633C2 /* DSL+Wait.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"DSL+Wait.swift\"; sourceTree = \"<group>\"; };\n\t\tDD72EC631A93874A002F7651 /* AllPassTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPassTest.swift; sourceTree = \"<group>\"; };\n\t\tDD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToObjectTest.swift; sourceTree = \"<group>\"; };\n\t\tDDB1BC781A92235600F743C3 /* AllPass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPass.swift; sourceTree = \"<group>\"; };\n\t\tDDB4D5EC19FE43C200E9D9FE /* Match.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Match.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\tDDB4D5EF19FE442800E9D9FE /* MatchTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchTest.swift; sourceTree = \"<group>\"; };\n\t\tDDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAllPassTest.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1F1A74251940169200FFFC47 /* 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\t\t1F1A74311940169200FFFC47 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F5DF1511BDCA0CE00C3A531 /* 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\t\t1F5DF15B1BDCA0CE00C3A531 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F925EA9195C0D6300ED456B /* 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\t\t1F925EB4195C0D6300ED456B /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t1F14FB61194180A7009F2A08 /* Helpers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F14FB63194180C5009F2A08 /* utils.swift */,\n\t\t\t\t1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */,\n\t\t\t);\n\t\t\tpath = Helpers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A741F1940169200FFFC47 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F2752D119445B8400052A26 /* README.md */,\n\t\t\t\t1F1A742B1940169200FFFC47 /* Nimble */,\n\t\t\t\t1F1A74381940169200FFFC47 /* NimbleTests */,\n\t\t\t\t1F1A742A1940169200FFFC47 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A742A1940169200FFFC47 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F1A74291940169200FFFC47 /* Nimble.framework */,\n\t\t\t\t1F1A74341940169200FFFC47 /* NimbleTests.xctest */,\n\t\t\t\t1F925EAD195C0D6300ED456B /* Nimble.framework */,\n\t\t\t\t1F925EB7195C0D6300ED456B /* NimbleTests.xctest */,\n\t\t\t\t1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */,\n\t\t\t\t1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A742B1940169200FFFC47 /* Nimble */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FD8CD041968AB07008ED995 /* Adapters */,\n\t\t\t\t1FD8CD081968AB07008ED995 /* DSL.swift */,\n\t\t\t\tDA9E8C811A414BB9002633C2 /* DSL+Wait.swift */,\n\t\t\t\t1FD8CD091968AB07008ED995 /* Expectation.swift */,\n\t\t\t\t1F0FEA991AF32DA4001E554E /* ObjCExpectation.swift */,\n\t\t\t\t1FD8CD0A1968AB07008ED995 /* Expression.swift */,\n\t\t\t\t1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */,\n\t\t\t\t1FD8CD0C1968AB07008ED995 /* Matchers */,\n\t\t\t\t1F1A742E1940169200FFFC47 /* Nimble.h */,\n\t\t\t\t1FD8CD1F1968AB07008ED995 /* objc */,\n\t\t\t\t1F1A742C1940169200FFFC47 /* Supporting Files */,\n\t\t\t\t1FD8CD241968AB07008ED995 /* Utils */,\n\t\t\t\t1FD8CD291968AB07008ED995 /* Wrappers */,\n\t\t\t);\n\t\t\tpath = Nimble;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A742C1940169200FFFC47 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F1A742D1940169200FFFC47 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A74381940169200FFFC47 /* NimbleTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F925EE5195C121200ED456B /* AsynchronousTest.swift */,\n\t\t\t\t1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */,\n\t\t\t\t965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */,\n\t\t\t\t1FFD729A1963FC8200CD29A2 /* objc */,\n\t\t\t\t1F14FB61194180A7009F2A08 /* Helpers */,\n\t\t\t\t1F925EE3195C11B000ED456B /* Matchers */,\n\t\t\t\t1F1A74391940169200FFFC47 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = NimbleTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A74391940169200FFFC47 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F1A743A1940169200FFFC47 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F925EE3195C11B000ED456B /* Matchers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDD72EC631A93874A002F7651 /* AllPassTest.swift */,\n\t\t\t\t1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */,\n\t\t\t\t1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */,\n\t\t\t\t1F925EF5195C147800ED456B /* BeCloseToTest.swift */,\n\t\t\t\t1F299EAA19627B2D002641AF /* BeEmptyTest.swift */,\n\t\t\t\t1F925EFB195C186800ED456B /* BeginWithTest.swift */,\n\t\t\t\t1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */,\n\t\t\t\t1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */,\n\t\t\t\tDD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */,\n\t\t\t\t1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */,\n\t\t\t\t1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */,\n\t\t\t\t1F925F0A195C18E100ED456B /* BeLessThanTest.swift */,\n\t\t\t\t1F925EEE195C136500ED456B /* BeLogicalTest.swift */,\n\t\t\t\t1F925EF8195C175000ED456B /* BeNilTest.swift */,\n\t\t\t\t1F925F01195C189500ED456B /* ContainTest.swift */,\n\t\t\t\t1F925EFE195C187600ED456B /* EndWithTest.swift */,\n\t\t\t\t1F925F04195C18B700ED456B /* EqualTest.swift */,\n\t\t\t\t472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */,\n\t\t\t\tDDB4D5EF19FE442800E9D9FE /* MatchTest.swift */,\n\t\t\t\t1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */,\n\t\t\t\t29EA59621B551ED2002D767E /* ThrowErrorTest.swift */,\n\t\t\t\t7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */,\n\t\t\t);\n\t\t\tpath = Matchers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FD8CD041968AB07008ED995 /* Adapters */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */,\n\t\t\t\t1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */,\n\t\t\t\t1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */,\n\t\t\t\t1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */,\n\t\t\t\t1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */,\n\t\t\t);\n\t\t\tpath = Adapters;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FD8CD0C1968AB07008ED995 /* Matchers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDDB1BC781A92235600F743C3 /* AllPass.swift */,\n\t\t\t\t1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */,\n\t\t\t\t1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */,\n\t\t\t\t1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */,\n\t\t\t\t1FD8CD101968AB07008ED995 /* BeEmpty.swift */,\n\t\t\t\t1FD8CD111968AB07008ED995 /* BeginWith.swift */,\n\t\t\t\t1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */,\n\t\t\t\t1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */,\n\t\t\t\t1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */,\n\t\t\t\t1FD8CD151968AB07008ED995 /* BeLessThan.swift */,\n\t\t\t\t1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */,\n\t\t\t\t1FD8CD171968AB07008ED995 /* BeLogical.swift */,\n\t\t\t\t1FD8CD181968AB07008ED995 /* BeNil.swift */,\n\t\t\t\t1FD8CD1A1968AB07008ED995 /* Contain.swift */,\n\t\t\t\t1FD8CD1B1968AB07008ED995 /* EndWith.swift */,\n\t\t\t\t1FD8CD1C1968AB07008ED995 /* Equal.swift */,\n\t\t\t\t472FD1341B9E085700C7B8DA /* HaveCount.swift */,\n\t\t\t\tDDB4D5EC19FE43C200E9D9FE /* Match.swift */,\n\t\t\t\t1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */,\n\t\t\t\t1FD8CD1E1968AB07008ED995 /* RaisesException.swift */,\n\t\t\t\t29EA59651B551EE6002D767E /* ThrowError.swift */,\n\t\t\t\t7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */,\n\t\t\t);\n\t\t\tpath = Matchers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FD8CD1F1968AB07008ED995 /* objc */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FD8CD201968AB07008ED995 /* DSL.h */,\n\t\t\t\t1FD8CD211968AB07008ED995 /* DSL.m */,\n\t\t\t\t1FD8CD221968AB07008ED995 /* NMBExceptionCapture.h */,\n\t\t\t\t1FD8CD231968AB07008ED995 /* NMBExceptionCapture.m */,\n\t\t\t);\n\t\t\tpath = objc;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FD8CD241968AB07008ED995 /* Utils */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FD8CD251968AB07008ED995 /* Functional.swift */,\n\t\t\t\t1FD8CD261968AB07008ED995 /* Async.swift */,\n\t\t\t\t1FD8CD271968AB07008ED995 /* SourceLocation.swift */,\n\t\t\t\t1FD8CD281968AB07008ED995 /* Stringers.swift */,\n\t\t\t);\n\t\t\tpath = Utils;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FD8CD291968AB07008ED995 /* Wrappers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FD8CD2A1968AB07008ED995 /* AsyncMatcherWrapper.swift */,\n\t\t\t\t1FD8CD2C1968AB07008ED995 /* MatcherFunc.swift */,\n\t\t\t\t1FD8CD2D1968AB07008ED995 /* ObjCMatcher.swift */,\n\t\t\t);\n\t\t\tpath = Wrappers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FFD729A1963FC8200CD29A2 /* objc */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FFD729C1963FCAB00CD29A2 /* Nimble-OSXTests-Bridging-Header.h */,\n\t\t\t\t1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */,\n\t\t\t\t1FFD729B1963FCAB00CD29A2 /* NimbleTests-Bridging-Header.h */,\n\t\t\t\t1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */,\n\t\t\t\t1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */,\n\t\t\t\t1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */,\n\t\t\t\t1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */,\n\t\t\t\t1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */,\n\t\t\t\t1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */,\n\t\t\t\t1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */,\n\t\t\t\t1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */,\n\t\t\t\t1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */,\n\t\t\t\t1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */,\n\t\t\t\t1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */,\n\t\t\t\t1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */,\n\t\t\t\t1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */,\n\t\t\t\t1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */,\n\t\t\t\t1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */,\n\t\t\t\t1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */,\n\t\t\t\t1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */,\n\t\t\t\t1F4A56931A3B346F009E1637 /* ObjCContainTest.m */,\n\t\t\t\t1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */,\n\t\t\t\t1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */,\n\t\t\t\t4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */,\n\t\t\t\t1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */,\n\t\t\t\t1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */,\n\t\t\t\t965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */,\n\t\t\t\tDDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */,\n\t\t\t\t7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */,\n\t\t\t);\n\t\t\tpath = objc;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t1F1A74261940169200FFFC47 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1FD8CD601968AB07008ED995 /* DSL.h in Headers */,\n\t\t\t\t1FD8CD641968AB07008ED995 /* NMBExceptionCapture.h in Headers */,\n\t\t\t\t1F1A742F1940169200FFFC47 /* Nimble.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F5DF1521BDCA0CE00C3A531 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F5DF1AF1BDCA17600C3A531 /* DSL.h in Headers */,\n\t\t\t\t1F5DF1B01BDCA17600C3A531 /* NMBExceptionCapture.h in Headers */,\n\t\t\t\t1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F925EAA195C0D6300ED456B /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1FD8CD611968AB07008ED995 /* DSL.h in Headers */,\n\t\t\t\t1FD8CD651968AB07008ED995 /* NMBExceptionCapture.h in Headers */,\n\t\t\t\t1F925EC7195C0DD100ED456B /* Nimble.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t1F1A74281940169200FFFC47 /* Nimble-iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget \"Nimble-iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F1A74241940169200FFFC47 /* Sources */,\n\t\t\t\t1F1A74251940169200FFFC47 /* Frameworks */,\n\t\t\t\t1F1A74261940169200FFFC47 /* Headers */,\n\t\t\t\t1F1A74271940169200FFFC47 /* 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 = \"Nimble-iOS\";\n\t\t\tproductName = \"Nimble-iOS\";\n\t\t\tproductReference = 1F1A74291940169200FFFC47 /* Nimble.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t1F1A74331940169200FFFC47 /* Nimble-iOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget \"Nimble-iOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F1A74301940169200FFFC47 /* Sources */,\n\t\t\t\t1F1A74311940169200FFFC47 /* Frameworks */,\n\t\t\t\t1F1A74321940169200FFFC47 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t1F1A74371940169200FFFC47 /* PBXTargetDependency */,\n\t\t\t\t1F925EA5195C0C8500ED456B /* PBXTargetDependency */,\n\t\t\t\t1F925EA7195C0C8500ED456B /* PBXTargetDependency */,\n\t\t\t\t1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Nimble-iOSTests\";\n\t\t\tproductName = \"Nimble-iOSTests\";\n\t\t\tproductReference = 1F1A74341940169200FFFC47 /* NimbleTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget \"Nimble-tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F5DF1501BDCA0CE00C3A531 /* Sources */,\n\t\t\t\t1F5DF1511BDCA0CE00C3A531 /* Frameworks */,\n\t\t\t\t1F5DF1521BDCA0CE00C3A531 /* Headers */,\n\t\t\t\t1F5DF1531BDCA0CE00C3A531 /* 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 = \"Nimble-tvOS\";\n\t\t\tproductName = \"Nimble-tvOS\";\n\t\t\tproductReference = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget \"Nimble-tvOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F5DF15A1BDCA0CE00C3A531 /* Sources */,\n\t\t\t\t1F5DF15B1BDCA0CE00C3A531 /* Frameworks */,\n\t\t\t\t1F5DF15C1BDCA0CE00C3A531 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Nimble-tvOSTests\";\n\t\t\tproductName = \"Nimble-tvOSTests\";\n\t\t\tproductReference = 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t1F925EAC195C0D6300ED456B /* Nimble-OSX */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget \"Nimble-OSX\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F925EA8195C0D6300ED456B /* Sources */,\n\t\t\t\t1F925EA9195C0D6300ED456B /* Frameworks */,\n\t\t\t\t1F925EAA195C0D6300ED456B /* Headers */,\n\t\t\t\t1F925EAB195C0D6300ED456B /* 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 = \"Nimble-OSX\";\n\t\t\tproductName = \"Nimble-OSX\";\n\t\t\tproductReference = 1F925EAD195C0D6300ED456B /* Nimble.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t1F925EB6195C0D6300ED456B /* Nimble-OSXTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget \"Nimble-OSXTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F925EB3195C0D6300ED456B /* Sources */,\n\t\t\t\t1F925EB4195C0D6300ED456B /* Frameworks */,\n\t\t\t\t1F925EB5195C0D6300ED456B /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t1F925EBA195C0D6300ED456B /* PBXTargetDependency */,\n\t\t\t\t1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */,\n\t\t\t\t1F9B7C001968AD760094EB8F /* PBXTargetDependency */,\n\t\t\t\t1F9B7C021968AD820094EB8F /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Nimble-OSXTests\";\n\t\t\tproductName = \"Nimble-OSXTests\";\n\t\t\tproductReference = 1F925EB7195C0D6300ED456B /* NimbleTests.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\t1F1A74201940169200FFFC47 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0710;\n\t\t\t\tLastUpgradeCheck = 0710;\n\t\t\t\tORGANIZATIONNAME = \"Jeff Hui\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t1F1A74281940169200FFFC47 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t};\n\t\t\t\t\t1F1A74331940169200FFFC47 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t\tTestTargetID = 1F1A74281940169200FFFC47;\n\t\t\t\t\t};\n\t\t\t\t\t1F5DF1541BDCA0CE00C3A531 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1;\n\t\t\t\t\t};\n\t\t\t\t\t1F5DF15D1BDCA0CE00C3A531 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1;\n\t\t\t\t\t};\n\t\t\t\t\t1F925EAC195C0D6300ED456B = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t};\n\t\t\t\t\t1F925EB6195C0D6300ED456B = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t\tTestTargetID = 1F925EAC195C0D6300ED456B;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject \"Nimble\" */;\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 = 1F1A741F1940169200FFFC47;\n\t\t\tproductRefGroup = 1F1A742A1940169200FFFC47 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1F1A74281940169200FFFC47 /* Nimble-iOS */,\n\t\t\t\t1F1A74331940169200FFFC47 /* Nimble-iOSTests */,\n\t\t\t\t1F925EAC195C0D6300ED456B /* Nimble-OSX */,\n\t\t\t\t1F925EB6195C0D6300ED456B /* Nimble-OSXTests */,\n\t\t\t\t1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */,\n\t\t\t\t1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1F1A74271940169200FFFC47 /* 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\t\t1F1A74321940169200FFFC47 /* 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\t\t1F5DF1531BDCA0CE00C3A531 /* 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\t\t1F5DF15C1BDCA0CE00C3A531 /* 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\t\t1F925EAB195C0D6300ED456B /* 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\t\t1F925EB5195C0D6300ED456B /* 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\t1F1A74241940169200FFFC47 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */,\n\t\t\t\t1FD8CD741968AB07008ED995 /* MatcherFunc.swift in Sources */,\n\t\t\t\t1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */,\n\t\t\t\t1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */,\n\t\t\t\t1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */,\n\t\t\t\t1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */,\n\t\t\t\t1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */,\n\t\t\t\t1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */,\n\t\t\t\t1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */,\n\t\t\t\t1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */,\n\t\t\t\t1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */,\n\t\t\t\t1F0FEA9A1AF32DA4001E554E /* ObjCExpectation.swift in Sources */,\n\t\t\t\t1FD8CD661968AB07008ED995 /* NMBExceptionCapture.m in Sources */,\n\t\t\t\tDA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */,\n\t\t\t\tDDB1BC791A92235600F743C3 /* AllPass.swift in Sources */,\n\t\t\t\t1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */,\n\t\t\t\tDDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */,\n\t\t\t\t1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */,\n\t\t\t\t29EA59661B551EE6002D767E /* ThrowError.swift in Sources */,\n\t\t\t\t1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */,\n\t\t\t\t1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */,\n\t\t\t\t1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */,\n\t\t\t\t1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */,\n\t\t\t\t1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */,\n\t\t\t\t1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */,\n\t\t\t\t1FD8CD561968AB07008ED995 /* Contain.swift in Sources */,\n\t\t\t\t1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */,\n\t\t\t\t1FD8CD701968AB07008ED995 /* AsyncMatcherWrapper.swift in Sources */,\n\t\t\t\t1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */,\n\t\t\t\t1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */,\n\t\t\t\t1FD8CD621968AB07008ED995 /* DSL.m in Sources */,\n\t\t\t\t1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */,\n\t\t\t\t1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */,\n\t\t\t\t1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */,\n\t\t\t\t1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */,\n\t\t\t\t1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */,\n\t\t\t\t1FD8CD761968AB07008ED995 /* ObjCMatcher.swift in Sources */,\n\t\t\t\t1FD8CD341968AB07008ED995 /* DSL.swift in Sources */,\n\t\t\t\t7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */,\n\t\t\t\t1FD8CD381968AB07008ED995 /* Expression.swift in Sources */,\n\t\t\t\t1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */,\n\t\t\t\t472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F1A74301940169200FFFC47 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */,\n\t\t\t\t1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */,\n\t\t\t\t1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */,\n\t\t\t\t1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */,\n\t\t\t\t1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */,\n\t\t\t\t1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */,\n\t\t\t\t1F14FB64194180C5009F2A08 /* utils.swift in Sources */,\n\t\t\t\tDDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */,\n\t\t\t\t1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */,\n\t\t\t\t1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */,\n\t\t\t\t1F925F02195C189500ED456B /* ContainTest.swift in Sources */,\n\t\t\t\t1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */,\n\t\t\t\t1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */,\n\t\t\t\t1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */,\n\t\t\t\t1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */,\n\t\t\t\t1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */,\n\t\t\t\t1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */,\n\t\t\t\t1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */,\n\t\t\t\t1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */,\n\t\t\t\t1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */,\n\t\t\t\t1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */,\n\t\t\t\t1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */,\n\t\t\t\t1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */,\n\t\t\t\t965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */,\n\t\t\t\t965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */,\n\t\t\t\t1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */,\n\t\t\t\t1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */,\n\t\t\t\t1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */,\n\t\t\t\t1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */,\n\t\t\t\t1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */,\n\t\t\t\t1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */,\n\t\t\t\t1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */,\n\t\t\t\tDDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */,\n\t\t\t\t1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */,\n\t\t\t\t1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */,\n\t\t\t\t1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */,\n\t\t\t\t1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */,\n\t\t\t\tDD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */,\n\t\t\t\t1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */,\n\t\t\t\t4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */,\n\t\t\t\t1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */,\n\t\t\t\t7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */,\n\t\t\t\t1F925F05195C18B700ED456B /* EqualTest.swift in Sources */,\n\t\t\t\t1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */,\n\t\t\t\tDD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */,\n\t\t\t\t7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */,\n\t\t\t\t1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */,\n\t\t\t\t1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */,\n\t\t\t\t29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */,\n\t\t\t\t1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */,\n\t\t\t\t472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F5DF1501BDCA0CE00C3A531 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */,\n\t\t\t\t1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */,\n\t\t\t\t1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */,\n\t\t\t\t1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */,\n\t\t\t\t1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */,\n\t\t\t\t1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */,\n\t\t\t\t1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */,\n\t\t\t\t1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */,\n\t\t\t\t1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */,\n\t\t\t\t1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */,\n\t\t\t\t1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */,\n\t\t\t\t1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */,\n\t\t\t\t1F5DF1911BDCA0F500C3A531 /* ObjCMatcher.swift in Sources */,\n\t\t\t\t1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */,\n\t\t\t\t1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */,\n\t\t\t\t1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */,\n\t\t\t\t1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */,\n\t\t\t\t1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */,\n\t\t\t\t1F5DF1731BDCA0F500C3A531 /* ObjCExpectation.swift in Sources */,\n\t\t\t\t1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */,\n\t\t\t\t1F5DF18F1BDCA0F500C3A531 /* AsyncMatcherWrapper.swift in Sources */,\n\t\t\t\t1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */,\n\t\t\t\t1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */,\n\t\t\t\t1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */,\n\t\t\t\t1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */,\n\t\t\t\t1F5DF1AD1BDCA16E00C3A531 /* NMBExceptionCapture.m in Sources */,\n\t\t\t\t1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */,\n\t\t\t\t1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */,\n\t\t\t\t1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */,\n\t\t\t\t1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */,\n\t\t\t\t1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */,\n\t\t\t\t1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */,\n\t\t\t\t1F5DF1AC1BDCA16E00C3A531 /* DSL.m in Sources */,\n\t\t\t\t1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */,\n\t\t\t\t1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */,\n\t\t\t\t1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */,\n\t\t\t\t1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */,\n\t\t\t\t1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */,\n\t\t\t\t7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */,\n\t\t\t\t1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */,\n\t\t\t\t1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */,\n\t\t\t\t1F5DF1901BDCA0F500C3A531 /* MatcherFunc.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F5DF15A1BDCA0CE00C3A531 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */,\n\t\t\t\t1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */,\n\t\t\t\t1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */,\n\t\t\t\t1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */,\n\t\t\t\t7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */,\n\t\t\t\t1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */,\n\t\t\t\t1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */,\n\t\t\t\t1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */,\n\t\t\t\t1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */,\n\t\t\t\t1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */,\n\t\t\t\t1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */,\n\t\t\t\t1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */,\n\t\t\t\t1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */,\n\t\t\t\t1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */,\n\t\t\t\t1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */,\n\t\t\t\t1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */,\n\t\t\t\t1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */,\n\t\t\t\t1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */,\n\t\t\t\t1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */,\n\t\t\t\t1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */,\n\t\t\t\t1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */,\n\t\t\t\t1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */,\n\t\t\t\t1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */,\n\t\t\t\t1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */,\n\t\t\t\t1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F925EA8195C0D6300ED456B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */,\n\t\t\t\t1FD8CD751968AB07008ED995 /* MatcherFunc.swift in Sources */,\n\t\t\t\t1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */,\n\t\t\t\t1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */,\n\t\t\t\t1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */,\n\t\t\t\t1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */,\n\t\t\t\t1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */,\n\t\t\t\t1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */,\n\t\t\t\t1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */,\n\t\t\t\t1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */,\n\t\t\t\t1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */,\n\t\t\t\t1F0FEA9B1AF32DA4001E554E /* ObjCExpectation.swift in Sources */,\n\t\t\t\t1FD8CD671968AB07008ED995 /* NMBExceptionCapture.m in Sources */,\n\t\t\t\tDA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */,\n\t\t\t\tDDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */,\n\t\t\t\t1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */,\n\t\t\t\t1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */,\n\t\t\t\tDDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */,\n\t\t\t\t29EA59671B551EE6002D767E /* ThrowError.swift in Sources */,\n\t\t\t\t1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */,\n\t\t\t\t1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */,\n\t\t\t\t1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */,\n\t\t\t\t1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */,\n\t\t\t\t1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */,\n\t\t\t\t1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */,\n\t\t\t\t1FD8CD571968AB07008ED995 /* Contain.swift in Sources */,\n\t\t\t\t1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */,\n\t\t\t\t1FD8CD711968AB07008ED995 /* AsyncMatcherWrapper.swift in Sources */,\n\t\t\t\t1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */,\n\t\t\t\t1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */,\n\t\t\t\t1FD8CD631968AB07008ED995 /* DSL.m in Sources */,\n\t\t\t\t1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */,\n\t\t\t\t1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */,\n\t\t\t\t1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */,\n\t\t\t\t1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */,\n\t\t\t\t1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */,\n\t\t\t\t1FD8CD771968AB07008ED995 /* ObjCMatcher.swift in Sources */,\n\t\t\t\t1FD8CD351968AB07008ED995 /* DSL.swift in Sources */,\n\t\t\t\t7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */,\n\t\t\t\t1FD8CD391968AB07008ED995 /* Expression.swift in Sources */,\n\t\t\t\t1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */,\n\t\t\t\t472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F925EB3195C0D6300ED456B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */,\n\t\t\t\t1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */,\n\t\t\t\t1F925F00195C187600ED456B /* EndWithTest.swift in Sources */,\n\t\t\t\t1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */,\n\t\t\t\t1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */,\n\t\t\t\t1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */,\n\t\t\t\t1F925EE2195C0DFD00ED456B /* utils.swift in Sources */,\n\t\t\t\tDDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */,\n\t\t\t\t1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */,\n\t\t\t\t1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */,\n\t\t\t\t1F925F03195C189500ED456B /* ContainTest.swift in Sources */,\n\t\t\t\t1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */,\n\t\t\t\t1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */,\n\t\t\t\t1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */,\n\t\t\t\t1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */,\n\t\t\t\t1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */,\n\t\t\t\t1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */,\n\t\t\t\t1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */,\n\t\t\t\t1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */,\n\t\t\t\t1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */,\n\t\t\t\t1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */,\n\t\t\t\t1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */,\n\t\t\t\t1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */,\n\t\t\t\t965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */,\n\t\t\t\t965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */,\n\t\t\t\t1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */,\n\t\t\t\t1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */,\n\t\t\t\t1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */,\n\t\t\t\t1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */,\n\t\t\t\t1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */,\n\t\t\t\t1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */,\n\t\t\t\t1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */,\n\t\t\t\tDDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */,\n\t\t\t\t1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */,\n\t\t\t\t1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */,\n\t\t\t\t1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */,\n\t\t\t\t1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */,\n\t\t\t\tDD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */,\n\t\t\t\t1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */,\n\t\t\t\t4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */,\n\t\t\t\t1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */,\n\t\t\t\t7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */,\n\t\t\t\t1F925F06195C18B700ED456B /* EqualTest.swift in Sources */,\n\t\t\t\t1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */,\n\t\t\t\tDD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */,\n\t\t\t\t7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */,\n\t\t\t\t1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */,\n\t\t\t\t1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */,\n\t\t\t\t29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */,\n\t\t\t\t1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */,\n\t\t\t\t472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift 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\t1F1A74371940169200FFFC47 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F1A74281940169200FFFC47 /* Nimble-iOS */;\n\t\t\ttargetProxy = 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */;\n\t\t\ttargetProxy = 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F1A74281940169200FFFC47 /* Nimble-iOS */;\n\t\t\ttargetProxy = 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F925EA5195C0C8500ED456B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F1A74281940169200FFFC47 /* Nimble-iOS */;\n\t\t\ttargetProxy = 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F925EA7195C0C8500ED456B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F1A74281940169200FFFC47 /* Nimble-iOS */;\n\t\t\ttargetProxy = 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F925EBA195C0D6300ED456B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F925EAC195C0D6300ED456B /* Nimble-OSX */;\n\t\t\ttargetProxy = 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F925EAC195C0D6300ED456B /* Nimble-OSX */;\n\t\t\ttargetProxy = 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F9B7C001968AD760094EB8F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F925EAC195C0D6300ED456B /* Nimble-OSX */;\n\t\t\ttargetProxy = 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F9B7C021968AD820094EB8F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F925EAC195C0D6300ED456B /* Nimble-OSX */;\n\t\t\ttargetProxy = 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1F1A743D1940169200FFFC47 /* 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_MODULES_AUTOLINK = NO;\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\tCURRENT_PROJECT_VERSION = 1;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F1A743E1940169200FFFC47 /* 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_MODULES_AUTOLINK = NO;\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 = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F1A74401940169200FFFC47 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_TREAT_WARNINGS_AS_ERRORS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tONLY_ACTIVE_ARCH = NO;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F1A74411940169200FFFC47 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_TREAT_WARNINGS_AS_ERRORS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F1A74431940169200FFFC47 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/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 = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos appletvsimulator appletvos\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"NimbleTests/objc/NimbleTests-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F1A74441940169200FFFC47 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos appletvsimulator appletvos\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"NimbleTests/objc/NimbleTests-Bridging-Header.h\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F5DF1661BDCA0CE00C3A531 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F5DF1671BDCA0CE00C3A531 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F5DF1681BDCA0CE00C3A531 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F5DF1691BDCA0CE00C3A531 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F925EC1195C0D6300ED456B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tFRAMEWORK_VERSION = A;\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_TREAT_WARNINGS_AS_ERRORS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tVALID_ARCHS = x86_64;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F925EC2195C0D6300ED456B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tGCC_TREAT_WARNINGS_AS_ERRORS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tVALID_ARCHS = x86_64;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F925EC4195C0D6300ED456B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\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 = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"NimbleTests/objc/Nimble-OSXTests-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F925EC5195C0D6300ED456B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"NimbleTests/objc/Nimble-OSXTests-Bridging-Header.h\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1F1A74231940169200FFFC47 /* Build configuration list for PBXProject \"Nimble\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F1A743D1940169200FFFC47 /* Debug */,\n\t\t\t\t1F1A743E1940169200FFFC47 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget \"Nimble-iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F1A74401940169200FFFC47 /* Debug */,\n\t\t\t\t1F1A74411940169200FFFC47 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget \"Nimble-iOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F1A74431940169200FFFC47 /* Debug */,\n\t\t\t\t1F1A74441940169200FFFC47 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget \"Nimble-tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F5DF1661BDCA0CE00C3A531 /* Debug */,\n\t\t\t\t1F5DF1671BDCA0CE00C3A531 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget \"Nimble-tvOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F5DF1681BDCA0CE00C3A531 /* Debug */,\n\t\t\t\t1F5DF1691BDCA0CE00C3A531 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget \"Nimble-OSX\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F925EC1195C0D6300ED456B /* Debug */,\n\t\t\t\t1F925EC2195C0D6300ED456B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget \"Nimble-OSXTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F925EC4195C0D6300ED456B /* Debug */,\n\t\t\t\t1F925EC5195C0D6300ED456B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 1F1A74201940169200FFFC47 /* Project object */;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"2.0\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F925EAC195C0D6300ED456B\"\n               BuildableName = \"Nimble.framework\"\n               BlueprintName = \"Nimble-OSX\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F925EB6195C0D6300ED456B\"\n               BuildableName = \"NimbleTests.xctest\"\n               BlueprintName = \"Nimble-OSXTests\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"\"\n      selectedLauncherIdentifier = \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugXPCServices = \"NO\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F925EAC195C0D6300ED456B\"\n            BuildableName = \"Nimble.framework\"\n            BlueprintName = \"Nimble-OSX\"\n            ReferencedContainer = \"container:Nimble.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"2.0\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F1A74281940169200FFFC47\"\n               BuildableName = \"Nimble.framework\"\n               BlueprintName = \"Nimble-iOS\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F1A74331940169200FFFC47\"\n               BuildableName = \"NimbleTests.xctest\"\n               BlueprintName = \"Nimble-iOSTests\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"\"\n      selectedLauncherIdentifier = \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugXPCServices = \"NO\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F1A74281940169200FFFC47\"\n            BuildableName = \"Nimble.framework\"\n            BlueprintName = \"Nimble-iOS\"\n            ReferencedContainer = \"container:Nimble.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F5DF1541BDCA0CE00C3A531\"\n               BuildableName = \"Nimble.framework\"\n               BlueprintName = \"Nimble-tvOS\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F5DF15D1BDCA0CE00C3A531\"\n               BuildableName = \"NimbleTests.xctest\"\n               BlueprintName = \"Nimble-tvOSTests\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F5DF1541BDCA0CE00C3A531\"\n            BuildableName = \"Nimble.framework\"\n            BlueprintName = \"Nimble-tvOS\"\n            ReferencedContainer = \"container:Nimble.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F5DF1541BDCA0CE00C3A531\"\n            BuildableName = \"Nimble.framework\"\n            BlueprintName = \"Nimble-tvOS\"\n            ReferencedContainer = \"container:Nimble.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F5DF1541BDCA0CE00C3A531\"\n            BuildableName = \"Nimble.framework\"\n            BlueprintName = \"Nimble-tvOS\"\n            ReferencedContainer = \"container:Nimble.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/AsynchronousTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass AsyncTest: XCTestCase {\n    let errorToThrow = NSError(domain: NSInternalInconsistencyException, code: 42, userInfo: nil)\n\n    private func doThrowError() throws -> Int {\n        throw errorToThrow\n    }\n\n    func testToEventuallyPositiveMatches() {\n        var value = 0\n        deferToMainQueue { value = 1 }\n        expect { value }.toEventually(equal(1))\n\n        deferToMainQueue { value = 0 }\n        expect { value }.toEventuallyNot(equal(1))\n    }\n\n    func testToEventuallyNegativeMatches() {\n        let value = 0\n        failsWithErrorMessage(\"expected to eventually not equal <0>, got <0>\") {\n            expect { value }.toEventuallyNot(equal(0))\n        }\n        failsWithErrorMessage(\"expected to eventually equal <1>, got <0>\") {\n            expect { value }.toEventually(equal(1))\n        }\n        failsWithErrorMessage(\"expected to eventually equal <1>, got an unexpected error thrown: <\\(errorToThrow)>\") {\n            expect { try self.doThrowError() }.toEventually(equal(1))\n        }\n        failsWithErrorMessage(\"expected to eventually not equal <0>, got an unexpected error thrown: <\\(errorToThrow)>\") {\n            expect { try self.doThrowError() }.toEventuallyNot(equal(0))\n        }\n    }\n\n    func testWaitUntilPositiveMatches() {\n        waitUntil { done in\n            done()\n        }\n        waitUntil { done in\n            deferToMainQueue {\n                done()\n            }\n        }\n    }\n\n    func testWaitUntilTimesOutIfNotCalled() {\n        failsWithErrorMessage(\"Waited more than 1.0 second\") {\n            waitUntil(timeout: 1) { done in return }\n        }\n    }\n\n    func testWaitUntilTimesOutWhenExceedingItsTime() {\n        var waiting = true\n        failsWithErrorMessage(\"Waited more than 0.01 seconds\") {\n            waitUntil(timeout: 0.01) { done in\n                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {\n                    NSThread.sleepForTimeInterval(0.1)\n                    done()\n                    waiting = false\n                }\n            }\n        }\n\n        // \"clear\" runloop to ensure this test doesn't poison other tests\n        repeat {\n            NSRunLoop.mainRunLoop().runUntilDate(NSDate().dateByAddingTimeInterval(0.2))\n        } while(waiting)\n    }\n\n    func testWaitUntilNegativeMatches() {\n        failsWithErrorMessage(\"expected to equal <2>, got <1>\") {\n            waitUntil { done in\n                NSThread.sleepForTimeInterval(0.1)\n                expect(1).to(equal(2))\n                done()\n            }\n        }\n    }\n\n    func testWaitUntilDetectsStalledMainThreadActivity() {\n        let msg = \"-waitUntil() timed out but was unable to run the timeout handler because the main thread is unresponsive (0.5 seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run.\"\n        failsWithErrorMessage(msg) {\n            waitUntil(timeout: 1) { done in\n                NSThread.sleepForTimeInterval(5.0)\n                done()\n            }\n        }\n    }\n\n    func testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed() {\n        let referenceLine = __LINE__ + 9\n        var msg = \"Unexpected exception raised: Nested async expectations are not allowed \"\n        msg += \"to avoid creating flaky tests.\"\n        msg += \"\\n\\n\"\n        msg += \"The call to\\n\\t\"\n        msg += \"expect(...).toEventually(...) at \\(__FILE__):\\(referenceLine + 7)\\n\"\n        msg += \"triggered this exception because\\n\\t\"\n        msg += \"waitUntil(...) at \\(__FILE__):\\(referenceLine + 1)\\n\"\n        msg += \"is currently managing the main run loop.\"\n        failsWithErrorMessage(msg) { // reference line\n            waitUntil(timeout: 2.0) { done in\n                var protected: Int = 0\n                dispatch_async(dispatch_get_main_queue()) {\n                    protected = 1\n                }\n\n                expect(protected).toEventually(equal(1))\n                done()\n            }\n        }\n    }\n\n    func testWaitUntilErrorsIfDoneIsCalledMultipleTimes() {\n        waitUntil { done in\n            deferToMainQueue {\n                done()\n            }\n        }\n\n        waitUntil { done in\n            deferToMainQueue {\n                done()\n                expect {\n                    done()\n                }.to(raiseException(named: \"InvalidNimbleAPIUsage\"))\n            }\n        }\n    }\n\n    func testWaitUntilMustBeInMainThread() {\n        var executedAsyncBlock: Bool = false\n        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {\n            expect {\n                waitUntil { done in done() }\n            }.to(raiseException(named: \"InvalidNimbleAPIUsage\"))\n            executedAsyncBlock = true\n        }\n        expect(executedAsyncBlock).toEventually(beTruthy())\n    }\n\n    func testToEventuallyMustBeInMainThread() {\n        var executedAsyncBlock: Bool = false\n        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {\n            expect {\n                expect(1).toEventually(equal(2))\n            }.to(raiseException(named: \"InvalidNimbleAPIUsage\"))\n            executedAsyncBlock = true\n        }\n        expect(executedAsyncBlock).toEventually(beTruthy())\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Helpers/ObjectWithLazyProperty.swift",
    "content": "import Foundation\n\nclass ObjectWithLazyProperty {\n    init() {}\n    lazy var value: String = \"hello\"\n    lazy var anotherValue: String = { return \"world\" }()\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Helpers/utils.swift",
    "content": "import Foundation\nimport Nimble\nimport XCTest\n\nfunc failsWithErrorMessage(messages: [String], file: String = __FILE__, line: UInt = __LINE__, preferOriginalSourceLocation: Bool = false, closure: () throws -> Void) {\n    var filePath = file\n    var lineNumber = line\n\n    let recorder = AssertionRecorder()\n    withAssertionHandler(recorder, closure: closure)\n\n    for msg in messages {\n        var lastFailure: AssertionRecord?\n        var foundFailureMessage = false\n\n        for assertion in recorder.assertions {\n            lastFailure = assertion\n            if assertion.message.stringValue == msg {\n                foundFailureMessage = true\n                break\n            }\n        }\n\n        if foundFailureMessage {\n            continue\n        }\n\n        if preferOriginalSourceLocation {\n            if let failure = lastFailure {\n                filePath = failure.location.file\n                lineNumber = failure.location.line\n            }\n        }\n\n        if let lastFailure = lastFailure {\n            let msg = \"Got failure message: \\\"\\(lastFailure.message.stringValue)\\\", but expected \\\"\\(msg)\\\"\"\n            XCTFail(msg, file: filePath, line: lineNumber)\n        } else {\n            XCTFail(\"expected failure message, but got none\", file: filePath, line: lineNumber)\n        }\n    }\n}\n\nfunc failsWithErrorMessage(message: String, file: String = __FILE__, line: UInt = __LINE__, preferOriginalSourceLocation: Bool = false, closure: () -> Void) {\n    return failsWithErrorMessage(\n        [message],\n        file: file,\n        line: line,\n        preferOriginalSourceLocation: preferOriginalSourceLocation,\n        closure: closure\n    )\n}\n\nfunc failsWithErrorMessageForNil(message: String, file: String = __FILE__, line: UInt = __LINE__, preferOriginalSourceLocation: Bool = false, closure: () -> Void) {\n    failsWithErrorMessage(\"\\(message) (use beNil() to match nils)\", file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure)\n}\n\nfunc deferToMainQueue(action: () -> Void) {\n    dispatch_async(dispatch_get_main_queue()) {\n        NSThread.sleepForTimeInterval(0.01)\n        action()\n    }\n}\n\npublic class NimbleHelper : NSObject {\n    class func expectFailureMessage(message: NSString, block: () -> Void, file: String, line: UInt) {\n        failsWithErrorMessage(message as String, file: file, line: line, preferOriginalSourceLocation: true, closure: block)\n    }\n\n    class func expectFailureMessages(messages: [NSString], block: () -> Void, file: String, line: UInt) {\n        failsWithErrorMessage(messages as! [String], file: file, line: line, preferOriginalSourceLocation: true, closure: block)\n    }\n\n    class func expectFailureMessageForNil(message: NSString, block: () -> Void, file: String, line: UInt) {\n        failsWithErrorMessageForNil(message as String, file: file, line: line, preferOriginalSourceLocation: true, closure: block)\n    }\n}\n\nextension NSDate {\n    convenience init(dateTimeString:String) {\n        let dateFormatter = NSDateFormatter()\n        dateFormatter.dateFormat = \"yyyy-MM-dd HH:mm:ss\"\n        dateFormatter.locale = NSLocale(localeIdentifier: \"en_US_POSIX\")\n        let date = dateFormatter.dateFromString(dateTimeString)!\n        self.init(timeInterval:0, sinceDate:date)\n    }\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/AllPassTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass AllPassTest: XCTestCase {\n    func testAllPassArray() {\n        expect([1,2,3,4]).to(allPass({$0 < 5}))\n        expect([1,2,3,4]).toNot(allPass({$0 > 5}))\n\n        failsWithErrorMessage(\n            \"expected to all pass a condition, but failed first at element <3> in <[1, 2, 3, 4]>\") {\n                expect([1,2,3,4]).to(allPass({$0 < 3}))\n        }\n        failsWithErrorMessage(\"expected to not all pass a condition\") {\n            expect([1,2,3,4]).toNot(allPass({$0 < 5}))\n        }\n        failsWithErrorMessage(\n            \"expected to all be something, but failed first at element <3> in <[1, 2, 3, 4]>\") {\n                expect([1,2,3,4]).to(allPass(\"be something\", {$0 < 3}))\n        }\n        failsWithErrorMessage(\"expected to not all be something\") {\n            expect([1,2,3,4]).toNot(allPass(\"be something\", {$0 < 5}))\n        }\n    }\n\n    func testAllPassMatcher() {\n        expect([1,2,3,4]).to(allPass(beLessThan(5)))\n        expect([1,2,3,4]).toNot(allPass(beGreaterThan(5)))\n        \n        failsWithErrorMessage(\n            \"expected to all be less than <3>, but failed first at element <3> in <[1, 2, 3, 4]>\") {\n                expect([1,2,3,4]).to(allPass(beLessThan(3)))\n        }\n        failsWithErrorMessage(\"expected to not all be less than <5>\") {\n            expect([1,2,3,4]).toNot(allPass(beLessThan(5)))\n        }\n    }\n\n    func testAllPassCollectionsWithOptionalsDontWork() {\n        failsWithErrorMessage(\"expected to all be nil, but failed first at element <nil> in <[nil, nil, nil]>\") {\n            expect([nil, nil, nil] as [Int?]).to(allPass(beNil()))\n        }\n        failsWithErrorMessage(\"expected to all pass a condition, but failed first at element <nil> in <[nil, nil, nil]>\") {\n            expect([nil, nil, nil] as [Int?]).to(allPass({$0 == nil}))\n        }\n    }\n\n    func testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer() {\n        expect([nil, nil, nil] as [Int?]).to(allPass({$0! == nil}))\n        expect([nil, 1, nil] as [Int?]).toNot(allPass({$0! == nil}))\n        expect([1, 1, 1] as [Int?]).to(allPass({$0! == 1}))\n        expect([1, 1, nil] as [Int?]).toNot(allPass({$0! == 1}))\n        expect([1, 2, 3] as [Int?]).to(allPass({$0! < 4}))\n        expect([1, 2, 3] as [Int?]).toNot(allPass({$0! < 3}))\n        expect([1, 2, nil] as [Int?]).to(allPass({$0! < 3}))\n    }\n\n    func testAllPassSet() {\n        expect(Set([1,2,3,4])).to(allPass({$0 < 5}))\n        expect(Set([1,2,3,4])).toNot(allPass({$0 > 5}))\n\n        failsWithErrorMessage(\"expected to not all pass a condition\") {\n            expect(Set([1,2,3,4])).toNot(allPass({$0 < 5}))\n        }\n        failsWithErrorMessage(\"expected to not all be something\") {\n            expect(Set([1,2,3,4])).toNot(allPass(\"be something\", {$0 < 5}))\n        }\n    }\n\n    func testAllPassWithNilAsExpectedValue() {\n        failsWithErrorMessageForNil(\"expected to all pass\") {\n            expect(nil as [Int]?).to(allPass(beLessThan(5)))\n        }\n    }\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeAKindOfTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass TestNull : NSNull {}\n\nclass BeAKindOfTest: XCTestCase {\n    func testPositiveMatch() {\n        expect(TestNull()).to(beAKindOf(NSNull))\n        expect(NSObject()).to(beAKindOf(NSObject))\n        expect(NSNumber(integer:1)).toNot(beAKindOf(NSDate))\n    }\n\n    func testFailureMessages() {\n        failsWithErrorMessageForNil(\"expected to not be a kind of NSNull, got <nil>\") {\n            expect(nil as NSNull?).toNot(beAKindOf(NSNull))\n        }\n        failsWithErrorMessageForNil(\"expected to be a kind of NSString, got <nil>\") {\n            expect(nil as NSString?).to(beAKindOf(NSString))\n        }\n        failsWithErrorMessage(\"expected to be a kind of NSString, got <__NSCFNumber instance>\") {\n            expect(NSNumber(integer:1)).to(beAKindOf(NSString))\n        }\n        failsWithErrorMessage(\"expected to not be a kind of NSNumber, got <__NSCFNumber instance>\") {\n            expect(NSNumber(integer:1)).toNot(beAKindOf(NSNumber))\n        }\n    }\n    \n    func testSwiftTypesFailureMessages() {\n        enum TestEnum {\n            case One, Two\n        }\n        failsWithErrorMessage(\"beAKindOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(1).to(beAKindOf(Int))\n        }\n        failsWithErrorMessage(\"beAKindOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(\"test\").to(beAKindOf(String))\n        }\n        failsWithErrorMessage(\"beAKindOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(TestEnum.One).to(beAKindOf(TestEnum))\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeAnInstanceOfTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeAnInstanceOfTest: XCTestCase {\n    func testPositiveMatch() {\n        expect(NSNull()).to(beAnInstanceOf(NSNull))\n        expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSDate))\n    }\n\n    func testFailureMessages() {\n        failsWithErrorMessageForNil(\"expected to not be an instance of NSNull, got <nil>\") {\n            expect(nil as NSNull?).toNot(beAnInstanceOf(NSNull))\n        }\n        failsWithErrorMessageForNil(\"expected to be an instance of NSString, got <nil>\") {\n            expect(nil as NSString?).to(beAnInstanceOf(NSString))\n        }\n        failsWithErrorMessage(\"expected to be an instance of NSString, got <__NSCFNumber instance>\") {\n            expect(NSNumber(integer:1)).to(beAnInstanceOf(NSString))\n        }\n        failsWithErrorMessage(\"expected to not be an instance of NSNumber, got <__NSCFNumber instance>\") {\n            expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSNumber))\n        }\n    }\n    \n    func testSwiftTypesFailureMessages() {\n        enum TestEnum {\n            case One, Two\n        }\n\n        failsWithErrorMessage(\"beAnInstanceOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(1).to(beAnInstanceOf(Int))\n        }\n        failsWithErrorMessage(\"beAnInstanceOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(\"test\").to(beAnInstanceOf(String))\n        }\n        failsWithErrorMessage(\"beAnInstanceOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(TestEnum.One).to(beAnInstanceOf(TestEnum))\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeCloseToTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeCloseToTest: XCTestCase {\n    func testBeCloseTo() {\n        expect(1.2).to(beCloseTo(1.2001))\n        expect(1.2 as CDouble).to(beCloseTo(1.2001))\n        expect(1.2 as Float).to(beCloseTo(1.2001))\n\n        failsWithErrorMessage(\"expected to not be close to <1.2001> (within 0.0001), got <1.2000>\") {\n            expect(1.2).toNot(beCloseTo(1.2001))\n        }\n    }\n\n    func testBeCloseToWithin() {\n        expect(1.2).to(beCloseTo(9.300, within: 10))\n\n        failsWithErrorMessage(\"expected to not be close to <1.2001> (within 1.0000), got <1.2000>\") {\n            expect(1.2).toNot(beCloseTo(1.2001, within: 1.0))\n        }\n    }\n\n    func testBeCloseToWithNSNumber() {\n        expect(NSNumber(double:1.2)).to(beCloseTo(9.300, within: 10))\n        expect(NSNumber(double:1.2)).to(beCloseTo(NSNumber(double:9.300), within: 10))\n        expect(1.2).to(beCloseTo(NSNumber(double:9.300), within: 10))\n\n        failsWithErrorMessage(\"expected to not be close to <1.2001> (within 1.0000), got <1.2000>\") {\n            expect(NSNumber(double:1.2)).toNot(beCloseTo(1.2001, within: 1.0))\n        }\n    }\n    \n    func testBeCloseToWithNSDate() {\n        expect(NSDate(dateTimeString: \"2015-08-26 11:43:00\")).to(beCloseTo(NSDate(dateTimeString: \"2015-08-26 11:43:05\"), within: 10))\n        \n        failsWithErrorMessage(\"expected to not be close to <2015-08-26 11:43:00.0050> (within 0.0040), got <2015-08-26 11:43:00.0000>\") {\n\n            let expectedDate = NSDate(dateTimeString: \"2015-08-26 11:43:00\").dateByAddingTimeInterval(0.005)\n            expect(NSDate(dateTimeString: \"2015-08-26 11:43:00\")).toNot(beCloseTo(expectedDate, within: 0.004))\n        }\n    }\n    \n    func testBeCloseToOperator() {\n        expect(1.2) ≈ 1.2001\n        expect(1.2 as CDouble) ≈ 1.2001\n        \n        failsWithErrorMessage(\"expected to be close to <1.2002> (within 0.0001), got <1.2000>\") {\n            expect(1.2) ≈ 1.2002\n        }\n    }\n\n    func testBeCloseToWithinOperator() {\n        expect(1.2) ≈ (9.300, 10)\n        expect(1.2) == (9.300, 10)\n        \n        failsWithErrorMessage(\"expected to be close to <1.0000> (within 0.1000), got <1.2000>\") {\n            expect(1.2) ≈ (1.0, 0.1)\n        }\n        failsWithErrorMessage(\"expected to be close to <1.0000> (within 0.1000), got <1.2000>\") {\n            expect(1.2) == (1.0, 0.1)\n        }\n    }\n    \n    func testPlusMinusOperator() {\n        expect(1.2) ≈ 9.300 ± 10\n        expect(1.2) == 9.300 ± 10\n        \n        failsWithErrorMessage(\"expected to be close to <1.0000> (within 0.1000), got <1.2000>\") {\n            expect(1.2) ≈ 1.0 ± 0.1\n        }\n        failsWithErrorMessage(\"expected to be close to <1.0000> (within 0.1000), got <1.2000>\") {\n            expect(1.2) == 1.0 ± 0.1\n        }\n    }\n\n    func testBeCloseToArray() {\n        expect([0.0, 1.1, 2.2]) ≈ [0.0001, 1.1001, 2.2001]\n        expect([0.0, 1.1, 2.2]).to(beCloseTo([0.1, 1.2, 2.3], within: 0.1))\n        \n        failsWithErrorMessage(\"expected to be close to <[0.0000, 1.0000]> (each within 0.0001), got <[0.0, 1.1]>\") {\n            expect([0.0, 1.1]) ≈ [0.0, 1.0]\n        }\n        failsWithErrorMessage(\"expected to be close to <[0.2000, 1.2000]> (each within 0.1000), got <[0.0, 1.1]>\") {\n            expect([0.0, 1.1]).to(beCloseTo([0.2, 1.2], within: 0.1))\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeEmptyTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeEmptyTest: XCTestCase {\n    func testBeEmptyPositive() {\n        expect([] as [Int]).to(beEmpty())\n        expect([1]).toNot(beEmpty())\n\n        expect([] as [CInt]).to(beEmpty())\n        expect([1] as [CInt]).toNot(beEmpty())\n\n        expect(NSDictionary() as? [Int:Int]).to(beEmpty())\n        expect(NSDictionary(object: 1, forKey: 1) as? [Int:Int]).toNot(beEmpty())\n\n        expect(Dictionary<Int, Int>()).to(beEmpty())\n        expect([\"hi\": 1]).toNot(beEmpty())\n\n        expect(NSArray() as? [Int]).to(beEmpty())\n        expect(NSArray(array: [1]) as? [Int]).toNot(beEmpty())\n\n        expect(NSSet()).to(beEmpty())\n        expect(NSSet(array: [1])).toNot(beEmpty())\n\n        expect(NSString()).to(beEmpty())\n        expect(NSString(string: \"hello\")).toNot(beEmpty())\n\n        expect(\"\").to(beEmpty())\n        expect(\"foo\").toNot(beEmpty())\n    }\n\n    func testBeEmptyNegative() {\n        failsWithErrorMessageForNil(\"expected to be empty, got <nil>\") {\n            expect(nil as NSString?).to(beEmpty())\n        }\n        failsWithErrorMessageForNil(\"expected to not be empty, got <nil>\") {\n            expect(nil as [CInt]?).toNot(beEmpty())\n        }\n\n        failsWithErrorMessage(\"expected to not be empty, got <()>\") {\n            expect([]).toNot(beEmpty())\n        }\n        failsWithErrorMessage(\"expected to be empty, got <[1]>\") {\n            expect([1]).to(beEmpty())\n        }\n\n        failsWithErrorMessage(\"expected to not be empty, got <>\") {\n            expect(\"\").toNot(beEmpty())\n        }\n        failsWithErrorMessage(\"expected to be empty, got <foo>\") {\n            expect(\"foo\").to(beEmpty())\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeGreaterThanOrEqualToTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeGreaterThanOrEqualToTest: XCTestCase {\n\n    func testGreaterThanOrEqualTo() {\n        expect(10).to(beGreaterThanOrEqualTo(10))\n        expect(10).to(beGreaterThanOrEqualTo(2))\n        expect(1).toNot(beGreaterThanOrEqualTo(2))\n        expect(NSNumber(int:1)).toNot(beGreaterThanOrEqualTo(2))\n        expect(NSNumber(int:2)).to(beGreaterThanOrEqualTo(NSNumber(int:2)))\n        expect(1).to(beGreaterThanOrEqualTo(NSNumber(int:0)))\n\n        failsWithErrorMessage(\"expected to be greater than or equal to <2>, got <0>\") {\n            expect(0).to(beGreaterThanOrEqualTo(2))\n            return\n        }\n        failsWithErrorMessage(\"expected to not be greater than or equal to <1>, got <1>\") {\n            expect(1).toNot(beGreaterThanOrEqualTo(1))\n            return\n        }\n        failsWithErrorMessageForNil(\"expected to be greater than or equal to <-2>, got <nil>\") {\n            expect(nil as Int?).to(beGreaterThanOrEqualTo(-2))\n        }\n        failsWithErrorMessageForNil(\"expected to not be greater than or equal to <1>, got <nil>\") {\n            expect(nil as Int?).toNot(beGreaterThanOrEqualTo(1))\n        }\n    }\n\n    func testGreaterThanOrEqualToOperator() {\n        expect(0) >= 0\n        expect(1) >= 0\n        expect(NSNumber(int:1)) >= 1\n        expect(NSNumber(int:1)) >= NSNumber(int:1)\n\n        failsWithErrorMessage(\"expected to be greater than or equal to <2>, got <1>\") {\n            expect(1) >= 2\n            return\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeGreaterThanTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeGreaterThanTest: XCTestCase {\n    func testGreaterThan() {\n        expect(10).to(beGreaterThan(2))\n        expect(1).toNot(beGreaterThan(2))\n        expect(NSNumber(int:3)).to(beGreaterThan(2))\n        expect(NSNumber(int:1)).toNot(beGreaterThan(NSNumber(int:2)))\n\n        failsWithErrorMessage(\"expected to be greater than <2>, got <0>\") {\n            expect(0).to(beGreaterThan(2))\n        }\n        failsWithErrorMessage(\"expected to not be greater than <0>, got <1>\") {\n            expect(1).toNot(beGreaterThan(0))\n        }\n        failsWithErrorMessageForNil(\"expected to be greater than <-2>, got <nil>\") {\n            expect(nil as Int?).to(beGreaterThan(-2))\n        }\n        failsWithErrorMessageForNil(\"expected to not be greater than <0>, got <nil>\") {\n            expect(nil as Int?).toNot(beGreaterThan(0))\n        }\n    }\n\n    func testGreaterThanOperator() {\n        expect(1) > 0\n        expect(NSNumber(int:1)) > NSNumber(int:0)\n        expect(NSNumber(int:1)) > 0\n\n        failsWithErrorMessage(\"expected to be greater than <2.0000>, got <1.0000>\") {\n            expect(1) > 2\n            return\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeIdenticalToObjectTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeIdenticalToObjectTest: XCTestCase {\n    private class BeIdenticalToObjectTester {}\n    private let testObjectA = BeIdenticalToObjectTester()\n    private let testObjectB = BeIdenticalToObjectTester()\n\n    func testBeIdenticalToPositive() {\n        expect(self.testObjectA).to(beIdenticalTo(testObjectA))\n    }\n    \n    func testBeIdenticalToNegative() {\n        expect(self.testObjectA).toNot(beIdenticalTo(testObjectB))\n    }\n    \n    func testBeIdenticalToPositiveMessage() {\n        let message = String(format: \"expected to be identical to <%p>, got <%p>\",\n            unsafeBitCast(testObjectB, Int.self), unsafeBitCast(testObjectA, Int.self))\n        failsWithErrorMessage(message) {\n            expect(self.testObjectA).to(beIdenticalTo(self.testObjectB))\n        }\n    }\n    \n    func testBeIdenticalToNegativeMessage() {\n        let message = String(format: \"expected to not be identical to <%p>, got <%p>\",\n            unsafeBitCast(testObjectA, Int.self), unsafeBitCast(testObjectA, Int.self))\n        failsWithErrorMessage(message) {\n            expect(self.testObjectA).toNot(beIdenticalTo(self.testObjectA))\n        }\n    }\n\n    func testFailsOnNils() {\n        let message1 = String(format: \"expected to be identical to <%p>, got nil\",\n            unsafeBitCast(testObjectA, Int.self))\n        failsWithErrorMessageForNil(message1) {\n            expect(nil as BeIdenticalToObjectTester?).to(beIdenticalTo(self.testObjectA))\n        }\n\n        let message2 = String(format: \"expected to not be identical to <%p>, got nil\",\n            unsafeBitCast(testObjectA, Int.self))\n        failsWithErrorMessageForNil(message2) {\n            expect(nil as BeIdenticalToObjectTester?).toNot(beIdenticalTo(self.testObjectA))\n        }\n    }\n    \n    func testOperators() {\n        expect(self.testObjectA) === testObjectA\n        expect(self.testObjectA) !== testObjectB\n    }\n\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeIdenticalToTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeIdenticalToTest: XCTestCase {\n    func testBeIdenticalToPositive() {\n        expect(NSNumber(integer:1)).to(beIdenticalTo(NSNumber(integer:1)))\n    }\n\n    func testBeIdenticalToNegative() {\n        expect(NSNumber(integer:1)).toNot(beIdenticalTo(\"yo\"))\n        expect([1]).toNot(beIdenticalTo([1]))\n    }\n\n    func testBeIdenticalToPositiveMessage() {\n        let num1 = NSNumber(integer:1)\n        let num2 = NSNumber(integer:2)\n        let message = NSString(format: \"expected to be identical to <%p>, got <%p>\", num2, num1)\n        failsWithErrorMessage(message.description) {\n            expect(num1).to(beIdenticalTo(num2))\n        }\n    }\n\n    func testBeIdenticalToNegativeMessage() {\n        let value1 = NSArray(array: [])\n        let value2 = NSArray(array: [])\n        let message = NSString(format: \"expected to not be identical to <%p>, got <%p>\", value2, value1)\n        failsWithErrorMessage(message.description) {\n            expect(value1).toNot(beIdenticalTo(value2))\n        }\n    }\n    \n    func testOperators() {\n        expect(NSNumber(integer:1)) === NSNumber(integer:1)\n        expect(NSNumber(integer:1)) !== NSNumber(integer:2)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeLessThanOrEqualToTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeLessThanOrEqualToTest: XCTestCase {\n    func testLessThanOrEqualTo() {\n        expect(10).to(beLessThanOrEqualTo(10))\n        expect(2).to(beLessThanOrEqualTo(10))\n        expect(2).toNot(beLessThanOrEqualTo(1))\n\n        expect(NSNumber(int:2)).to(beLessThanOrEqualTo(10))\n        expect(NSNumber(int:2)).toNot(beLessThanOrEqualTo(1))\n        expect(2).to(beLessThanOrEqualTo(NSNumber(int:10)))\n        expect(2).toNot(beLessThanOrEqualTo(NSNumber(int:1)))\n\n        failsWithErrorMessage(\"expected to be less than or equal to <0>, got <2>\") {\n            expect(2).to(beLessThanOrEqualTo(0))\n            return\n        }\n        failsWithErrorMessage(\"expected to not be less than or equal to <0>, got <0>\") {\n            expect(0).toNot(beLessThanOrEqualTo(0))\n            return\n        }\n        failsWithErrorMessageForNil(\"expected to be less than or equal to <2>, got <nil>\") {\n            expect(nil as Int?).to(beLessThanOrEqualTo(2))\n            return\n        }\n        failsWithErrorMessageForNil(\"expected to not be less than or equal to <-2>, got <nil>\") {\n            expect(nil as Int?).toNot(beLessThanOrEqualTo(-2))\n            return\n        }\n    }\n\n    func testLessThanOrEqualToOperator() {\n        expect(0) <= 1\n        expect(1) <= 1\n\n        failsWithErrorMessage(\"expected to be less than or equal to <1>, got <2>\") {\n            expect(2) <= 1\n            return\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeLessThanTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeLessThanTest: XCTestCase {\n\n    func testLessThan() {\n        expect(2).to(beLessThan(10))\n        expect(2).toNot(beLessThan(1))\n        expect(NSNumber(integer:2)).to(beLessThan(10))\n        expect(NSNumber(integer:2)).toNot(beLessThan(1))\n\n        expect(2).to(beLessThan(NSNumber(integer:10)))\n        expect(2).toNot(beLessThan(NSNumber(integer:1)))\n\n        failsWithErrorMessage(\"expected to be less than <0>, got <2>\") {\n            expect(2).to(beLessThan(0))\n        }\n        failsWithErrorMessage(\"expected to not be less than <1>, got <0>\") {\n            expect(0).toNot(beLessThan(1))\n        }\n\n        failsWithErrorMessageForNil(\"expected to be less than <2>, got <nil>\") {\n            expect(nil as Int?).to(beLessThan(2))\n        }\n        failsWithErrorMessageForNil(\"expected to not be less than <-1>, got <nil>\") {\n            expect(nil as Int?).toNot(beLessThan(-1))\n        }\n    }\n\n    func testLessThanOperator() {\n        expect(0) < 1\n        expect(NSNumber(int:0)) < 1\n\n        failsWithErrorMessage(\"expected to be less than <1.0000>, got <2.0000>\") {\n            expect(2) < 1\n            return\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeLogicalTest.swift",
    "content": "import XCTest\nimport Nimble\n\nenum ConvertsToBool : BooleanType, CustomStringConvertible {\n    case TrueLike, FalseLike\n\n    var boolValue : Bool {\n        switch self {\n        case .TrueLike: return true\n        case .FalseLike: return false\n        }\n    }\n\n    var description : String {\n        switch self {\n        case .TrueLike: return \"TrueLike\"\n        case .FalseLike: return \"FalseLike\"\n        }\n    }\n}\n\nclass BeTruthyTest : XCTestCase {\n    func testShouldMatchNonNilTypes() {\n        expect(true as Bool?).to(beTruthy())\n        expect(1 as Int?).to(beTruthy())\n    }\n\n    func testShouldMatchTrue() {\n        expect(true).to(beTruthy())\n\n        failsWithErrorMessage(\"expected to not be truthy, got <true>\") {\n            expect(true).toNot(beTruthy())\n        }\n    }\n\n    func testShouldNotMatchNilTypes() {\n        expect(false as Bool?).toNot(beTruthy())\n        expect(nil as Bool?).toNot(beTruthy())\n        expect(nil as Int?).toNot(beTruthy())\n    }\n\n    func testShouldNotMatchFalse() {\n        expect(false).toNot(beTruthy())\n\n        failsWithErrorMessage(\"expected to be truthy, got <false>\") {\n            expect(false).to(beTruthy())\n        }\n    }\n\n    func testShouldNotMatchNilBools() {\n        expect(nil as Bool?).toNot(beTruthy())\n\n        failsWithErrorMessage(\"expected to be truthy, got <nil>\") {\n            expect(nil as Bool?).to(beTruthy())\n        }\n    }\n\n    func testShouldMatchBoolConvertibleTypesThatConvertToTrue() {\n        expect(ConvertsToBool.TrueLike).to(beTruthy())\n\n        failsWithErrorMessage(\"expected to not be truthy, got <TrueLike>\") {\n            expect(ConvertsToBool.TrueLike).toNot(beTruthy())\n        }\n    }\n\n    func testShouldNotMatchBoolConvertibleTypesThatConvertToFalse() {\n        expect(ConvertsToBool.FalseLike).toNot(beTruthy())\n\n        failsWithErrorMessage(\"expected to be truthy, got <FalseLike>\") {\n            expect(ConvertsToBool.FalseLike).to(beTruthy())\n        }\n    }\n}\n\nclass BeTrueTest : XCTestCase {\n    func testShouldMatchTrue() {\n        expect(true).to(beTrue())\n\n        failsWithErrorMessage(\"expected to not be true, got <true>\") {\n            expect(true).toNot(beTrue())\n        }\n    }\n\n    func testShouldNotMatchFalse() {\n        expect(false).toNot(beTrue())\n\n        failsWithErrorMessage(\"expected to be true, got <false>\") {\n            expect(false).to(beTrue())\n        }\n    }\n\n    func testShouldNotMatchNilBools() {\n        failsWithErrorMessageForNil(\"expected to not be true, got <nil>\") {\n            expect(nil as Bool?).toNot(beTrue())\n        }\n\n        failsWithErrorMessageForNil(\"expected to be true, got <nil>\") {\n            expect(nil as Bool?).to(beTrue())\n        }\n    }\n}\n\nclass BeFalsyTest : XCTestCase {\n    func testShouldMatchNilTypes() {\n        expect(false as Bool?).to(beFalsy())\n        expect(nil as Bool?).to(beFalsy())\n        expect(nil as Int?).to(beFalsy())\n    }\n\n    func testShouldNotMatchTrue() {\n        expect(true).toNot(beFalsy())\n\n        failsWithErrorMessage(\"expected to be falsy, got <true>\") {\n            expect(true).to(beFalsy())\n        }\n    }\n\n    func testShouldNotMatchNonNilTypes() {\n        expect(true as Bool?).toNot(beFalsy())\n        expect(1 as Int?).toNot(beFalsy())\n    }\n\n    func testShouldMatchFalse() {\n        expect(false).to(beFalsy())\n\n        failsWithErrorMessage(\"expected to not be falsy, got <false>\") {\n            expect(false).toNot(beFalsy())\n        }\n    }\n\n    func testShouldMatchNilBools() {\n        expect(nil as Bool?).to(beFalsy())\n\n        failsWithErrorMessage(\"expected to not be falsy, got <nil>\") {\n            expect(nil as Bool?).toNot(beFalsy())\n        }\n    }\n}\n\nclass BeFalseTest : XCTestCase {\n    func testShouldNotMatchTrue() {\n        expect(true).toNot(beFalse())\n\n        failsWithErrorMessage(\"expected to be false, got <true>\") {\n            expect(true).to(beFalse())\n        }\n    }\n\n    func testShouldMatchFalse() {\n        expect(false).to(beFalse())\n\n        failsWithErrorMessage(\"expected to not be false, got <false>\") {\n            expect(false).toNot(beFalse())\n        }\n    }\n\n    func testShouldNotMatchNilBools() {\n        failsWithErrorMessageForNil(\"expected to be false, got <nil>\") {\n            expect(nil as Bool?).to(beFalse())\n        }\n\n        failsWithErrorMessageForNil(\"expected to not be false, got <nil>\") {\n            expect(nil as Bool?).toNot(beFalse())\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeNilTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeNilTest: XCTestCase {\n    func producesNil() -> Array<Int>? {\n        return nil\n    }\n\n    func testBeNil() {\n        expect(nil as Int?).to(beNil())\n        expect(1 as Int?).toNot(beNil())\n        expect(self.producesNil()).to(beNil())\n\n        failsWithErrorMessage(\"expected to not be nil, got <nil>\") {\n            expect(nil as Int?).toNot(beNil())\n        }\n\n        failsWithErrorMessage(\"expected to be nil, got <1>\") {\n            expect(1 as Int?).to(beNil())\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/BeginWithTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeginWithTest: XCTestCase {\n\n    func testPositiveMatches() {\n        expect([1, 2, 3]).to(beginWith(1))\n        expect([1, 2, 3]).toNot(beginWith(2))\n\n        expect(\"foobar\").to(beginWith(\"foo\"))\n        expect(\"foobar\").toNot(beginWith(\"oo\"))\n\n        expect(NSString(string: \"foobar\").description).to(beginWith(\"foo\"))\n        expect(NSString(string: \"foobar\").description).toNot(beginWith(\"oo\"))\n\n        expect(NSArray(array: [\"a\", \"b\"])).to(beginWith(\"a\"))\n        expect(NSArray(array: [\"a\", \"b\"])).toNot(beginWith(\"b\"))\n    }\n\n    func testNegativeMatches() {\n        failsWithErrorMessageForNil(\"expected to begin with <b>, got <nil>\") {\n            expect(nil as NSArray?).to(beginWith(\"b\"))\n        }\n        failsWithErrorMessageForNil(\"expected to not begin with <b>, got <nil>\") {\n            expect(nil as NSArray?).toNot(beginWith(\"b\"))\n        }\n\n        failsWithErrorMessage(\"expected to begin with <2>, got <[1, 2, 3]>\") {\n            expect([1, 2, 3]).to(beginWith(2))\n        }\n        failsWithErrorMessage(\"expected to not begin with <1>, got <[1, 2, 3]>\") {\n            expect([1, 2, 3]).toNot(beginWith(1))\n        }\n        failsWithErrorMessage(\"expected to begin with <atm>, got <batman>\") {\n            expect(\"batman\").to(beginWith(\"atm\"))\n        }\n        failsWithErrorMessage(\"expected to not begin with <bat>, got <batman>\") {\n            expect(\"batman\").toNot(beginWith(\"bat\"))\n        }\n    }\n\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/ContainTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass ContainTest: XCTestCase {\n    func testContain() {\n        expect([1, 2, 3]).to(contain(1))\n        expect([1, 2, 3] as [CInt]).to(contain(1 as CInt))\n        expect([1, 2, 3] as Array<CInt>).to(contain(1 as CInt))\n        expect([\"foo\", \"bar\", \"baz\"]).to(contain(\"baz\"))\n        expect([1, 2, 3]).toNot(contain(4))\n        expect([\"foo\", \"bar\", \"baz\"]).toNot(contain(\"ba\"))\n        expect(NSArray(array: [\"a\"])).to(contain(\"a\"))\n        expect(NSArray(array: [\"a\"])).toNot(contain(\"b\"))\n        expect(NSArray(object: 1) as NSArray?).to(contain(1))\n\n        failsWithErrorMessage(\"expected to contain <bar>, got <[\\\"a\\\", \\\"b\\\", \\\"c\\\"]>\") {\n            expect([\"a\", \"b\", \"c\"]).to(contain(\"bar\"))\n        }\n        failsWithErrorMessage(\"expected to not contain <b>, got <[\\\"a\\\", \\\"b\\\", \\\"c\\\"]>\") {\n            expect([\"a\", \"b\", \"c\"]).toNot(contain(\"b\"))\n        }\n\n        failsWithErrorMessageForNil(\"expected to contain <bar>, got <nil>\") {\n            expect(nil as [String]?).to(contain(\"bar\"))\n        }\n        failsWithErrorMessageForNil(\"expected to not contain <b>, got <nil>\") {\n            expect(nil as [String]?).toNot(contain(\"b\"))\n        }\n    }\n\n    func testContainSubstring() {\n        expect(\"foo\").to(contain(\"o\"))\n        expect(\"foo\").to(contain(\"oo\"))\n        expect(\"foo\").toNot(contain(\"z\"))\n        expect(\"foo\").toNot(contain(\"zz\"))\n\n        failsWithErrorMessage(\"expected to contain <bar>, got <foo>\") {\n            expect(\"foo\").to(contain(\"bar\"))\n        }\n        failsWithErrorMessage(\"expected to not contain <oo>, got <foo>\") {\n            expect(\"foo\").toNot(contain(\"oo\"))\n        }\n    }\n\n    func testContainObjCSubstring() {\n        let str = NSString(string: \"foo\")\n        expect(str).to(contain(NSString(string: \"o\")))\n        expect(str).to(contain(NSString(string: \"oo\")))\n        expect(str).toNot(contain(NSString(string: \"z\")))\n        expect(str).toNot(contain(NSString(string: \"zz\")))\n    }\n\n    func testVariadicArguments() {\n        expect([1, 2, 3]).to(contain(1, 2))\n        expect([1, 2, 3]).toNot(contain(1, 4))\n\n        failsWithErrorMessage(\"expected to contain <a, bar>, got <[\\\"a\\\", \\\"b\\\", \\\"c\\\"]>\") {\n            expect([\"a\", \"b\", \"c\"]).to(contain(\"a\", \"bar\"))\n        }\n\n        failsWithErrorMessage(\"expected to not contain <bar, b>, got <[\\\"a\\\", \\\"b\\\", \\\"c\\\"]>\") {\n            expect([\"a\", \"b\", \"c\"]).toNot(contain(\"bar\", \"b\"))\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/EndWithTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass EndWithTest: XCTestCase {\n\n    func testEndWithPositives() {\n        expect([1, 2, 3]).to(endWith(3))\n        expect([1, 2, 3]).toNot(endWith(2))\n\n        expect(\"foobar\").to(endWith(\"bar\"))\n        expect(\"foobar\").toNot(endWith(\"oo\"))\n\n        expect(NSString(string: \"foobar\").description).to(endWith(\"bar\"))\n        expect(NSString(string: \"foobar\").description).toNot(endWith(\"oo\"))\n\n        expect(NSArray(array: [\"a\", \"b\"])).to(endWith(\"b\"))\n        expect(NSArray(array: [\"a\", \"b\"])).toNot(endWith(\"a\"))\n    }\n\n    func testEndWithNegatives() {\n        failsWithErrorMessageForNil(\"expected to end with <2>, got <nil>\") {\n            expect(nil as [Int]?).to(endWith(2))\n        }\n        failsWithErrorMessageForNil(\"expected to not end with <2>, got <nil>\") {\n            expect(nil as [Int]?).toNot(endWith(2))\n        }\n\n        failsWithErrorMessage(\"expected to end with <2>, got <[1, 2, 3]>\") {\n            expect([1, 2, 3]).to(endWith(2))\n        }\n        failsWithErrorMessage(\"expected to not end with <3>, got <[1, 2, 3]>\") {\n            expect([1, 2, 3]).toNot(endWith(3))\n        }\n        failsWithErrorMessage(\"expected to end with <atm>, got <batman>\") {\n            expect(\"batman\").to(endWith(\"atm\"))\n        }\n        failsWithErrorMessage(\"expected to not end with <man>, got <batman>\") {\n            expect(\"batman\").toNot(endWith(\"man\"))\n        }\n    }\n\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/EqualTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass EqualTest: XCTestCase {\n    func testEquality() {\n        expect(1 as CInt).to(equal(1 as CInt))\n        expect(1 as CInt).to(equal(1))\n        expect(1).to(equal(1))\n        expect(\"hello\").to(equal(\"hello\"))\n        expect(\"hello\").toNot(equal(\"world\"))\n\n        expect {\n            1\n        }.to(equal(1))\n\n        failsWithErrorMessage(\"expected to equal <world>, got <hello>\") {\n            expect(\"hello\").to(equal(\"world\"))\n        }\n        failsWithErrorMessage(\"expected to not equal <hello>, got <hello>\") {\n            expect(\"hello\").toNot(equal(\"hello\"))\n        }\n    }\n\n    func testArrayEquality() {\n        expect([1, 2, 3]).to(equal([1, 2, 3]))\n        expect([1, 2, 3]).toNot(equal([1, 2]))\n        expect([1, 2, 3]).toNot(equal([1, 2, 4]))\n\n        let array1: Array<Int> = [1, 2, 3]\n        let array2: Array<Int> = [1, 2, 3]\n        expect(array1).to(equal(array2))\n        expect(array1).to(equal([1, 2, 3]))\n        expect(array1).toNot(equal([1, 2] as Array<Int>))\n\n        expect(NSArray(array: [1, 2, 3])).to(equal(NSArray(array: [1, 2, 3])))\n\n        failsWithErrorMessage(\"expected to equal <[1, 2]>, got <[1, 2, 3]>\") {\n            expect([1, 2, 3]).to(equal([1, 2]))\n        }\n    }\n\n    func testSetEquality() {\n        expect(Set([1, 2])).to(equal(Set([1, 2])))\n        expect(Set<Int>()).to(equal(Set<Int>()))\n        expect(Set<Int>()) == Set<Int>()\n        expect(Set([1, 2])) != Set<Int>()\n\n        failsWithErrorMessageForNil(\"expected to equal <[1, 2]>, got <nil>\") {\n            expect(nil as Set<Int>?).to(equal(Set([1, 2])))\n        }\n\n        failsWithErrorMessage(\"expected to equal <[1, 2, 3]>, got <[2, 3]>, missing <[1]>\") {\n            expect(Set([2, 3])).to(equal(Set([1, 2, 3])))\n        }\n\n        failsWithErrorMessage(\"expected to equal <[1, 2, 3]>, got <[1, 2, 3, 4]>, extra <[4]>\") {\n            expect(Set([1, 2, 3, 4])).to(equal(Set([1, 2, 3])))\n        }\n\n        failsWithErrorMessage(\"expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>\") {\n            expect(Set([2, 3, 4])).to(equal(Set([1, 2, 3])))\n        }\n\n        failsWithErrorMessage(\"expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>\") {\n            expect(Set([2, 3, 4])) == Set([1, 2, 3])\n        }\n\n        failsWithErrorMessage(\"expected to not equal <[1, 2, 3]>, got <[1, 2, 3]>\") {\n            expect(Set([1, 2, 3])) != Set([1, 2, 3])\n        }\n    }\n\n    func testDoesNotMatchNils() {\n        failsWithErrorMessageForNil(\"expected to equal <nil>, got <nil>\") {\n            expect(nil as String?).to(equal(nil as String?))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <nil>, got <foo>\") {\n            expect(\"foo\").toNot(equal(nil as String?))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <bar>, got <nil>\") {\n            expect(nil as String?).toNot(equal(\"bar\"))\n        }\n\n        failsWithErrorMessageForNil(\"expected to equal <nil>, got <nil>\") {\n            expect(nil as [Int]?).to(equal(nil as [Int]?))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <[1]>, got <nil>\") {\n            expect(nil as [Int]?).toNot(equal([1]))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <nil>, got <[1]>\") {\n            expect([1]).toNot(equal(nil as [Int]?))\n        }\n\n        failsWithErrorMessageForNil(\"expected to equal <nil>, got <nil>\") {\n            expect(nil as [Int: Int]?).to(equal(nil as [Int: Int]?))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <[1: 1]>, got <nil>\") {\n            expect(nil as [Int: Int]?).toNot(equal([1: 1]))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <nil>, got <[1: 1]>\") {\n            expect([1: 1]).toNot(equal(nil as [Int: Int]?))\n        }\n    }\n\n    func testDictionaryEquality() {\n        expect([\"foo\": \"bar\"]).to(equal([\"foo\": \"bar\"]))\n        expect([\"foo\": \"bar\"]).toNot(equal([\"foo\": \"baz\"]))\n\n        let actual = [\"foo\": \"bar\"]\n        let expected = [\"foo\": \"bar\"]\n        let unexpected = [\"foo\": \"baz\"]\n        expect(actual).to(equal(expected))\n        expect(actual).toNot(equal(unexpected))\n\n        expect(NSDictionary(object: \"bar\", forKey: \"foo\")).to(equal([\"foo\": \"bar\"]))\n        expect(NSDictionary(object: \"bar\", forKey: \"foo\")).to(equal(expected))\n    }\n\n    func testNSObjectEquality() {\n        expect(NSNumber(integer:1)).to(equal(NSNumber(integer:1)))\n        expect(NSNumber(integer:1)) == NSNumber(integer:1)\n        expect(NSNumber(integer:1)) != NSNumber(integer:2)\n        expect { NSNumber(integer:1) }.to(equal(1))\n    }\n\n    func testOperatorEquality() {\n        expect(\"foo\") == \"foo\"\n        expect(\"foo\") != \"bar\"\n\n        failsWithErrorMessage(\"expected to equal <world>, got <hello>\") {\n            expect(\"hello\") == \"world\"\n            return\n        }\n        failsWithErrorMessage(\"expected to not equal <hello>, got <hello>\") {\n            expect(\"hello\") != \"hello\"\n            return\n        }\n    }\n\n    func testOperatorEqualityWithArrays() {\n        let array1: Array<Int> = [1, 2, 3]\n        let array2: Array<Int> = [1, 2, 3]\n        let array3: Array<Int> = [1, 2]\n        expect(array1) == array2\n        expect(array1) != array3\n    }\n\n    func testOperatorEqualityWithDictionaries() {\n        let dict1 = [\"foo\": \"bar\"]\n        let dict2 = [\"foo\": \"bar\"]\n        let dict3 = [\"foo\": \"baz\"]\n        expect(dict1) == dict2\n        expect(dict1) != dict3\n    }\n\n    func testOptionalEquality() {\n        expect(1 as CInt?).to(equal(1))\n        expect(1 as CInt?).to(equal(1 as CInt?))\n\n        expect(1).toNot(equal(nil))\n    }\n    \n    func testArrayOfOptionalsEquality() {\n        let array1: Array<Int?> = [1, nil, 3]\n        let array2: Array<Int?> = [nil, 2, 3]\n        let array3: Array<Int?> = [1, nil, 3]\n        \n        expect(array1).toNot(equal(array2))\n        expect(array1).to(equal(array3))\n        expect(array2).toNot(equal(array3))\n        \n        let allNils1: Array<String?> = [nil, nil, nil, nil]\n        let allNils2: Array<String?> = [nil, nil, nil, nil]\n        let notReallyAllNils: Array<String?> = [nil, nil, nil, \"turtles\"]\n        \n        expect(allNils1).to(equal(allNils2))\n        expect(allNils1).toNot(equal(notReallyAllNils))\n        \n        let noNils1: Array<Int?> = [1, 2, 3, 4, 5]\n        let noNils2: Array<Int?> = [1, 3, 5, 7, 9]\n        \n        expect(noNils1).toNot(equal(noNils2))\n        \n        failsWithErrorMessage(\"expected to equal <[Optional(1), nil]>, got <[nil, Optional(2)]>\") {\n            let arrayOfOptionalInts: Array<Int?> = [nil, 2]\n            let anotherArrayOfOptionalInts: Array<Int?> = [1, nil]\n            expect(arrayOfOptionalInts).to(equal(anotherArrayOfOptionalInts))\n            return\n        }\n    }\n\n    func testDictionariesWithDifferentSequences() {\n        // see: https://github.com/Quick/Nimble/issues/61\n        // these dictionaries generate different orderings of sequences.\n        let result = [\"how\":1, \"think\":1, \"didnt\":2, \"because\":1,\n            \"interesting\":1, \"always\":1, \"right\":1, \"such\":1,\n            \"to\":3, \"say\":1, \"cool\":1, \"you\":1,\n            \"weather\":3, \"be\":1, \"went\":1, \"was\":2,\n            \"sometimes\":1, \"and\":3, \"mind\":1, \"rain\":1,\n            \"whole\":1, \"everything\":1, \"weather.\":1, \"down\":1,\n            \"kind\":1, \"mood.\":1, \"it\":2, \"everyday\":1, \"might\":1,\n            \"more\":1, \"have\":2, \"person\":1, \"could\":1, \"tenth\":2,\n            \"night\":1, \"write\":1, \"Youd\":1, \"affects\":1, \"of\":3,\n            \"Who\":1, \"us\":1, \"an\":1, \"I\":4, \"my\":1, \"much\":2,\n            \"wrong.\":1, \"peacefully.\":1, \"amazing\":3, \"would\":4,\n            \"just\":1, \"grade.\":1, \"Its\":2, \"The\":2, \"had\":1, \"that\":1,\n            \"the\":5, \"best\":1, \"but\":1, \"essay\":1, \"for\":1, \"summer\":2,\n            \"your\":1, \"grade\":1, \"vary\":1, \"pretty\":1, \"at\":1, \"rain.\":1,\n            \"about\":1, \"allow\":1, \"thought\":1, \"in\":1, \"sleep\":1, \"a\":1,\n            \"hot\":1, \"really\":1, \"beach\":1, \"life.\":1, \"we\":1, \"although\":1]\n\n        let storyCount = [\"The\":2, \"summer\":2, \"of\":3, \"tenth\":2, \"grade\":1,\n            \"was\":2, \"the\":5, \"best\":1, \"my\":1, \"life.\":1, \"I\":4,\n            \"went\":1, \"to\":3, \"beach\":1, \"everyday\":1, \"and\":3,\n            \"we\":1, \"had\":1, \"amazing\":3, \"weather.\":1, \"weather\":3,\n            \"didnt\":2, \"really\":1, \"vary\":1, \"much\":2, \"always\":1,\n            \"pretty\":1, \"hot\":1, \"although\":1, \"sometimes\":1, \"at\":1,\n            \"night\":1, \"it\":2, \"would\":4, \"rain.\":1, \"mind\":1, \"rain\":1,\n            \"because\":1, \"cool\":1, \"everything\":1, \"down\":1, \"allow\":1,\n            \"us\":1, \"sleep\":1, \"peacefully.\":1, \"Its\":2, \"how\":1,\n            \"affects\":1, \"your\":1, \"mood.\":1, \"Who\":1, \"have\":2,\n            \"thought\":1, \"that\":1, \"could\":1, \"write\":1, \"a\":1,\n            \"whole\":1, \"essay\":1, \"just\":1, \"about\":1, \"in\":1,\n            \"grade.\":1, \"kind\":1, \"right\":1, \"Youd\":1, \"think\":1,\n            \"for\":1, \"such\":1, \"an\":1, \"interesting\":1, \"person\":1,\n            \"might\":1, \"more\":1, \"say\":1, \"but\":1, \"you\":1, \"be\":1, \"wrong.\":1]\n\n        expect(result).to(equal(storyCount))\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/HaveCountTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass HaveCountTest: XCTestCase {\n    func testHaveCountForArray() {\n        expect([1, 2, 3]).to(haveCount(3))\n        expect([1, 2, 3]).notTo(haveCount(1))\n\n        failsWithErrorMessage(\"expected to have [1, 2, 3] with count 1, got 3\") {\n            expect([1, 2, 3]).to(haveCount(1))\n        }\n\n        failsWithErrorMessage(\"expected to not have [1, 2, 3] with count 3, got 3\") {\n            expect([1, 2, 3]).notTo(haveCount(3))\n        }\n    }\n\n    func testHaveCountForDictionary() {\n        let dictionary = [\"1\":1, \"2\":2, \"3\":3]\n        expect(dictionary).to(haveCount(3))\n        expect(dictionary).notTo(haveCount(1))\n\n        failsWithErrorMessage(\"expected to have \\(dictionary) with count 1, got 3\") {\n            expect(dictionary).to(haveCount(1))\n        }\n\n        failsWithErrorMessage(\"expected to not have \\(dictionary) with count 3, got 3\") {\n            expect(dictionary).notTo(haveCount(3))\n        }\n    }\n\n    func testHaveCountForSet() {\n        let set = Set([1, 2, 3])\n        expect(set).to(haveCount(3))\n        expect(set).notTo(haveCount(1))\n\n        failsWithErrorMessage(\"expected to have \\(set) with count 1, got 3\") {\n            expect(set).to(haveCount(1))\n        }\n\n        failsWithErrorMessage(\"expected to not have \\(set) with count 3, got 3\") {\n            expect(set).notTo(haveCount(3))\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/MatchTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass MatchTest:XCTestCase {\n    func testMatchPositive() {\n        expect(\"11:14\").to(match(\"\\\\d{2}:\\\\d{2}\"))\n    }\n    \n    func testMatchNegative() {\n        expect(\"hello\").toNot(match(\"\\\\d{2}:\\\\d{2}\"))\n    }\n    \n    func testMatchPositiveMessage() {\n        let message = \"expected to match <\\\\d{2}:\\\\d{2}>, got <hello>\"\n        failsWithErrorMessage(message) {\n            expect(\"hello\").to(match(\"\\\\d{2}:\\\\d{2}\"))\n        }\n    }\n    \n    func testMatchNegativeMessage() {\n        let message = \"expected to not match <\\\\d{2}:\\\\d{2}>, got <11:14>\"\n        failsWithErrorMessage(message) {\n            expect(\"11:14\").toNot(match(\"\\\\d{2}:\\\\d{2}\"))\n        }\n    }\n\n    func testMatchNils() {\n        failsWithErrorMessageForNil(\"expected to match <\\\\d{2}:\\\\d{2}>, got <nil>\") {\n            expect(nil as String?).to(match(\"\\\\d{2}:\\\\d{2}\"))\n        }\n\n        failsWithErrorMessageForNil(\"expected to not match <\\\\d{2}:\\\\d{2}>, got <nil>\") {\n            expect(nil as String?).toNot(match(\"\\\\d{2}:\\\\d{2}\"))\n        }\n    }\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/RaisesExceptionTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass RaisesExceptionTest: XCTestCase {\n    var anException = NSException(name: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"])\n\n    func testPositiveMatches() {\n        expect { self.anException.raise() }.to(raiseException())\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\"))\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\"))\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"]))\n    }\n\n    func testPositiveMatchesWithClosures() {\n        expect { self.anException.raise() }.to(raiseException { (exception: NSException) in\n            expect(exception.name).to(equal(\"laugh\"))\n        })\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\") { (exception: NSException) in\n            expect(exception.name).to(beginWith(\"lau\"))\n        })\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\") { (exception: NSException) in\n            expect(exception.name).to(beginWith(\"lau\"))\n        })\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"]) { (exception: NSException) in\n            expect(exception.name).to(beginWith(\"lau\"))\n        })\n\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\") { (exception: NSException) in\n            expect(exception.name).toNot(beginWith(\"as\"))\n        })\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\") { (exception: NSException) in\n            expect(exception.name).toNot(beginWith(\"df\"))\n        })\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"]) { (exception: NSException) in\n            expect(exception.name).toNot(beginWith(\"as\"))\n        })\n    }\n\n    func testNegativeMatches() {\n        failsWithErrorMessage(\"expected to raise exception with name <foo>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.to(raiseException(named: \"foo\"))\n        }\n\n        failsWithErrorMessage(\"expected to raise exception with name <laugh> with reason <bar>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"bar\"))\n        }\n\n        failsWithErrorMessage(\n            \"expected to raise exception with name <laugh> with reason <Lulz> with userInfo <{k = v;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"k\": \"v\"]))\n        }\n\n        failsWithErrorMessage(\"expected to raise any exception, got no exception\") {\n            expect { self.anException }.to(raiseException())\n        }\n        failsWithErrorMessage(\"expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.toNot(raiseException())\n        }\n        failsWithErrorMessage(\"expected to raise exception with name <laugh> with reason <Lulz>, got no exception\") {\n            expect { self.anException }.to(raiseException(named: \"laugh\", reason: \"Lulz\"))\n        }\n\n        failsWithErrorMessage(\"expected to raise exception with name <bar> with reason <Lulz>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.to(raiseException(named: \"bar\", reason: \"Lulz\"))\n        }\n        failsWithErrorMessage(\"expected to not raise exception with name <laugh>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.toNot(raiseException(named: \"laugh\"))\n        }\n        failsWithErrorMessage(\"expected to not raise exception with name <laugh> with reason <Lulz>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.toNot(raiseException(named: \"laugh\", reason: \"Lulz\"))\n        }\n\n        failsWithErrorMessage(\"expected to not raise exception with name <laugh> with reason <Lulz> with userInfo <{key = value;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.toNot(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"]))\n        }\n    }\n\n    func testNegativeMatchesDoNotCallClosureWithoutException() {\n        failsWithErrorMessage(\"expected to raise exception that satisfies block, got no exception\") {\n            expect { self.anException }.to(raiseException { (exception: NSException) in\n                expect(exception.name).to(equal(\"foo\"))\n            })\n        }\n        \n        failsWithErrorMessage(\"expected to raise exception with name <foo> that satisfies block, got no exception\") {\n            expect { self.anException }.to(raiseException(named: \"foo\") { (exception: NSException) in\n                expect(exception.name).to(equal(\"foo\"))\n            })\n        }\n\n        failsWithErrorMessage(\"expected to raise exception with name <foo> with reason <ha> that satisfies block, got no exception\") {\n            expect { self.anException }.to(raiseException(named: \"foo\", reason: \"ha\") { (exception: NSException) in\n                expect(exception.name).to(equal(\"foo\"))\n            })\n        }\n\n        failsWithErrorMessage(\"expected to raise exception with name <foo> with reason <Lulz> with userInfo <{}> that satisfies block, got no exception\") {\n            expect { self.anException }.to(raiseException(named: \"foo\", reason: \"Lulz\", userInfo: [:]) { (exception: NSException) in\n                expect(exception.name).to(equal(\"foo\"))\n                })\n        }\n\n        failsWithErrorMessage(\"expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.toNot(raiseException())\n        }\n    }\n\n    func testNegativeMatchesWithClosure() {\n        failsWithErrorMessage(\"expected to raise exception that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.to(raiseException { (exception: NSException) in\n                expect(exception.name).to(equal(\"foo\"))\n            })\n        }\n\n        let innerFailureMessage = \"expected to begin with <fo>, got <laugh>\"\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <laugh> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"laugh\") { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <lol> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"lol\") { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <laugh> with reason <Lulz> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\") { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <lol> with reason <wrong> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"lol\", reason: \"wrong\") { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <laugh> with reason <Lulz> with userInfo <{key = value;}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"]) { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <lol> with reason <Lulz> with userInfo <{}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"lol\", reason: \"Lulz\", userInfo: [:]) { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/SatisfyAnyOfTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass SatisfyAnyOfTest: XCTestCase {\n    func testSatisfyAnyOf() {\n        expect(2).to(satisfyAnyOf(equal(2), equal(3)))\n        expect(2).toNot(satisfyAnyOf(equal(3), equal(\"turtles\")))\n        expect([1,2,3]).to(satisfyAnyOf(equal([1,2,3]), allPass({$0 < 4}), haveCount(3)))\n        expect(\"turtle\").toNot(satisfyAnyOf(contain(\"a\"), endWith(\"magic\")))\n        expect(82.0).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1)))\n        expect(false).to(satisfyAnyOf(beTrue(), beFalse()))\n        expect(true).to(satisfyAnyOf(beTruthy(), beFalsy()))\n        \n        failsWithErrorMessage(\n            \"expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2\") {\n                expect(2).to(satisfyAnyOf(equal(3), equal(4), equal(5)))\n        }\n        failsWithErrorMessage(\n            \"expected to match one of: {all be less than 4, but failed first at element <5> in <[5, 6, 7]>}, or {equal <[1, 2, 3, 4]>}, got [5, 6, 7]\") {\n                expect([5,6,7]).to(satisfyAnyOf(allPass(\"be less than 4\", {$0 < 4}), equal([1,2,3,4])))\n        }\n        failsWithErrorMessage(\n            \"expected to match one of: {be true}, got false\") {\n                expect(false).to(satisfyAnyOf(beTrue()))\n        }\n        failsWithErrorMessage(\n            \"expected to not match one of: {be less than <10.5000>}, or {be greater than <100.7500>}, or {be close to <50.1000> (within 0.0001)}, got 50.10001\") {\n                expect(50.10001).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1)))\n        }\n    }\n    \n    func testOperatorOr() {\n        expect(2).to(equal(2) || equal(3))\n        expect(2).toNot(equal(3) || equal(\"turtles\"))\n        expect(\"turtle\").toNot(contain(\"a\") || endWith(\"magic\"))\n        expect(82.0).toNot(beLessThan(10.5) || beGreaterThan(100.75))\n        expect(false).to(beTrue() || beFalse())\n        expect(true).to(beTruthy() || beFalsy())\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/Matchers/ThrowErrorTest.swift",
    "content": "import XCTest\nimport Nimble\n\nenum Error : ErrorType {\n    case Laugh\n    case Cry\n}\n\nenum EquatableError : ErrorType {\n    case Parameterized(x: Int)\n}\n\nextension EquatableError : Equatable {\n}\n\nfunc ==(lhs: EquatableError, rhs: EquatableError) -> Bool {\n    switch (lhs, rhs) {\n    case (.Parameterized(let l), .Parameterized(let r)):\n        return l == r\n    }\n}\n\nenum CustomDebugStringConvertibleError : ErrorType {\n    case A\n    case B\n}\n\nextension CustomDebugStringConvertibleError : CustomDebugStringConvertible {\n    var debugDescription : String {\n        return \"code=\\(_code)\"\n    }\n}\n\nclass ThrowErrorTest: XCTestCase {\n    func testPositiveMatches() {\n        expect { throw Error.Laugh }.to(throwError())\n        expect { throw Error.Laugh }.to(throwError(Error.Laugh))\n        expect { throw Error.Laugh }.to(throwError(errorType: Error.self))\n        expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 1)))\n    }\n\n    func testPositiveMatchesWithClosures() {\n        // Generic typed closure\n        expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { error in\n            guard case EquatableError.Parameterized(let x) = error else { fail(); return }\n            expect(x) >= 1\n        })\n        // Explicit typed closure\n        expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { (error: EquatableError) in\n            guard case .Parameterized(let x) = error else { fail(); return }\n            expect(x) >= 1\n        })\n        // Typed closure over errorType argument\n        expect { throw EquatableError.Parameterized(x: 42) }.to(throwError(errorType: EquatableError.self) { error in\n            guard case .Parameterized(let x) = error else { fail(); return }\n            expect(x) >= 1\n        })\n        // Typed closure over error argument\n        expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in\n            expect(error._domain).to(beginWith(\"Nim\"))\n        })\n        // Typed closure over error argument\n        expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in\n            expect(error._domain).toNot(beginWith(\"as\"))\n        })\n    }\n\n    func testNegativeMatches() {\n        // Same case, different arguments\n        failsWithErrorMessage(\"expected to throw error <Parameterized(2)>, got <Parameterized(1)>\") {\n            expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2)))\n        }\n        // Same case, different arguments\n        failsWithErrorMessage(\"expected to throw error <Parameterized(2)>, got <Parameterized(1)>\") {\n            expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2)))\n        }\n        // Different case\n        failsWithErrorMessage(\"expected to throw error <Cry>, got <Laugh>\") {\n            expect { throw Error.Laugh }.to(throwError(Error.Cry))\n        }\n        // Different case with closure\n        failsWithErrorMessage(\"expected to throw error <Cry> that satisfies block, got <Laugh>\") {\n            expect { throw Error.Laugh }.to(throwError(Error.Cry) { _ in return })\n        }\n        // Different case, implementing CustomDebugStringConvertible\n        failsWithErrorMessage(\"expected to throw error <code=1>, got <code=0>\") {\n            expect { throw CustomDebugStringConvertibleError.A }.to(throwError(CustomDebugStringConvertibleError.B))\n        }\n    }\n\n    func testPositiveNegatedMatches() {\n        // No error at all\n        expect { return }.toNot(throwError())\n        // Different case\n        expect { throw Error.Laugh }.toNot(throwError(Error.Cry))\n    }\n\n    func testNegativeNegatedMatches() {\n        // No error at all\n        failsWithErrorMessage(\"expected to not throw any error, got <Laugh>\") {\n            expect { throw Error.Laugh }.toNot(throwError())\n        }\n        // Different error\n        failsWithErrorMessage(\"expected to not throw error <Laugh>, got <Laugh>\") {\n            expect { throw Error.Laugh }.toNot(throwError(Error.Laugh))\n        }\n    }\n\n    func testNegativeMatchesDoNotCallClosureWithoutError() {\n        failsWithErrorMessage(\"expected to throw error that satisfies block, got no error\") {\n            expect { return }.to(throwError { error in\n                fail()\n            })\n        }\n        \n        failsWithErrorMessage(\"expected to throw error <Laugh> that satisfies block, got no error\") {\n            expect { return }.to(throwError(Error.Laugh) { error in\n                fail()\n            })\n        }\n    }\n\n    func testNegativeMatchesWithClosure() {\n        let innerFailureMessage = \"expected to equal <foo>, got <NimbleTests.Error>\"\n        let closure = { (error: Error) in\n            expect(error._domain).to(equal(\"foo\"))\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to throw error from type <Error> that satisfies block, got <Laugh>\"]) {\n            expect { throw Error.Laugh }.to(throwError(closure: closure))\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to throw error <Laugh> that satisfies block, got <Laugh>\"]) {\n            expect { throw Error.Laugh }.to(throwError(Error.Laugh, closure: closure))\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/SynchronousTests.swift",
    "content": "import XCTest\nimport Nimble\n\nclass SynchronousTest: XCTestCase {\n    let errorToThrow = NSError(domain: NSInternalInconsistencyException, code: 42, userInfo: nil)\n    private func doThrowError() throws -> Int {\n        throw errorToThrow\n    }\n\n    func testFailAlwaysFails() {\n        failsWithErrorMessage(\"My error message\") {\n            fail(\"My error message\")\n        }\n        failsWithErrorMessage(\"fail() always fails\") {\n            fail()\n        }\n    }\n\n    func testUnexpectedErrorsThrownFails() {\n        failsWithErrorMessage(\"expected to equal <1>, got an unexpected error thrown: <\\(errorToThrow)>\") {\n            expect { try self.doThrowError() }.to(equal(1))\n        }\n        failsWithErrorMessage(\"expected to not equal <1>, got an unexpected error thrown: <\\(errorToThrow)>\") {\n            expect { try self.doThrowError() }.toNot(equal(1))\n        }\n    }\n\n    func testToMatchesIfMatcherReturnsTrue() {\n        expect(1).to(MatcherFunc { expr, failure in true })\n        expect{1}.to(MatcherFunc { expr, failure in true })\n    }\n\n    func testToProvidesActualValueExpression() {\n        var value: Int?\n        expect(1).to(MatcherFunc { expr, failure in value = try expr.evaluate(); return true })\n        expect(value).to(equal(1))\n    }\n\n    func testToProvidesAMemoizedActualValueExpression() {\n        var callCount = 0\n        expect{ callCount++ }.to(MatcherFunc { expr, failure in\n            try expr.evaluate()\n            try expr.evaluate()\n            return true\n        })\n        expect(callCount).to(equal(1))\n    }\n\n    func testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() {\n        var callCount = 0\n        expect{ callCount++ }.to(MatcherFunc { expr, failure in\n            expect(callCount).to(equal(0))\n            try expr.evaluate()\n            return true\n        })\n        expect(callCount).to(equal(1))\n    }\n\n    func testToMatchAgainstLazyProperties() {\n        expect(ObjectWithLazyProperty().value).to(equal(\"hello\"))\n        expect(ObjectWithLazyProperty().value).toNot(equal(\"world\"))\n        expect(ObjectWithLazyProperty().anotherValue).to(equal(\"world\"))\n        expect(ObjectWithLazyProperty().anotherValue).toNot(equal(\"hello\"))\n    }\n\n    // repeated tests from to() for toNot()\n    func testToNotMatchesIfMatcherReturnsTrue() {\n        expect(1).toNot(MatcherFunc { expr, failure in false })\n        expect{1}.toNot(MatcherFunc { expr, failure in false })\n    }\n\n    func testToNotProvidesActualValueExpression() {\n        var value: Int?\n        expect(1).toNot(MatcherFunc { expr, failure in value = try expr.evaluate(); return false })\n        expect(value).to(equal(1))\n    }\n\n    func testToNotProvidesAMemoizedActualValueExpression() {\n        var callCount = 0\n        expect{ callCount++ }.toNot(MatcherFunc { expr, failure in\n            try expr.evaluate()\n            try expr.evaluate()\n            return false\n        })\n        expect(callCount).to(equal(1))\n    }\n\n    func testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() {\n        var callCount = 0\n        expect{ callCount++ }.toNot(MatcherFunc { expr, failure in\n            expect(callCount).to(equal(0))\n            try expr.evaluate()\n            return false\n        })\n        expect(callCount).to(equal(1))\n    }\n\n    func testToNotNegativeMatches() {\n        failsWithErrorMessage(\"expected to not match, got <1>\") {\n            expect(1).toNot(MatcherFunc { expr, failure in true })\n        }\n    }\n\n\n    func testNotToMatchesLikeToNot() {\n        expect(1).notTo(MatcherFunc { expr, failure in false })\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/UserDescriptionTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass UserDescriptionTest: XCTestCase {\n    \n    func testToMatcher_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These aren't equal!\\n\" +\n            \"expected to match, got <1>\") {\n                expect(1).to(MatcherFunc { expr, failure in false }, description: \"These aren't equal!\")\n        }\n    }\n    \n    func testNotToMatcher_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These aren't equal!\\n\" +\n            \"expected to not match, got <1>\") {\n                expect(1).notTo(MatcherFunc { expr, failure in true }, description: \"These aren't equal!\")\n        }\n    }\n    \n    func testToNotMatcher_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These aren't equal!\\n\" +\n            \"expected to not match, got <1>\") {\n                expect(1).toNot(MatcherFunc { expr, failure in true }, description: \"These aren't equal!\")\n        }\n    }\n    \n    func testToEventuallyMatch_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These aren't eventually equal!\\n\" +\n            \"expected to eventually equal <1>, got <0>\") {\n                expect { 0 }.toEventually(equal(1), description: \"These aren't eventually equal!\")\n        }\n    }\n    \n    func testToEventuallyNotMatch_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These are eventually equal!\\n\" +\n            \"expected to eventually not equal <1>, got <1>\") {\n                expect { 1 }.toEventuallyNot(equal(1), description: \"These are eventually equal!\")\n        }\n    }\n    \n    func testToNotEventuallyMatch_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These are eventually equal!\\n\" +\n            \"expected to eventually not equal <1>, got <1>\") {\n                expect { 1 }.toEventuallyNot(equal(1), description: \"These are eventually equal!\")\n        }\n    }\n\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/Nimble-OSXTests-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/NimbleSpecHelper.h",
    "content": "@import Nimble;\n#import \"NimbleTests-Swift.h\"\n\n// Use this when you want to verify the failure message for when an expectation fails\n#define expectFailureMessage(MSG, BLOCK) \\\n[NimbleHelper expectFailureMessage:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__];\n\n#define expectFailureMessages(MSGS, BLOCK) \\\n[NimbleHelper expectFailureMessages:(MSGS) block:(BLOCK) file:@(__FILE__) line:__LINE__];\n\n\n// Use this when you want to verify the failure message with the nil message postfixed\n// to it: \" (use beNil() to match nils)\"\n#define expectNilFailureMessage(MSG, BLOCK) \\\n[NimbleHelper expectFailureMessageForNil:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__];\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/NimbleTests-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCAllPassTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCAllPassTest : XCTestCase\n\n@end\n\n@implementation ObjCAllPassTest\n\n- (void)testPositiveMatches {\n    expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5)));\n    expect(@[@1, @2, @3,@4]).toNot(allPass(beGreaterThan(@5)));\n    \n    expect([NSSet setWithArray:@[@1, @2, @3,@4]]).to(allPass(beLessThan(@5)));\n    expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beGreaterThan(@5)));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to all be less than <3.0000>, but failed first at element\"\n                         \" <3.0000> in <[1.0000, 2.0000, 3.0000, 4.0000]>\", ^{\n                             expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@3)));\n                         });\n    expectFailureMessage(@\"expected to not all be less than <5.0000>\", ^{\n        expect(@[@1, @2, @3,@4]).toNot(allPass(beLessThan(@5)));\n    });\n    expectFailureMessage(@\"expected to not all be less than <5.0000>\", ^{\n        expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beLessThan(@5)));\n    });\n    expectFailureMessage(@\"allPass only works with NSFastEnumeration\"\n                         \" (NSArray, NSSet, ...) of NSObjects, got <3.0000>\", ^{\n                             expect(@3).to(allPass(beLessThan(@5)));\n                         });\n    expectFailureMessage(@\"allPass only works with NSFastEnumeration\"\n                         \" (NSArray, NSSet, ...) of NSObjects, got <3.0000>\", ^{\n                             expect(@3).toNot(allPass(beLessThan(@5)));\n                         });\n}\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCAsyncTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Nimble/Nimble.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCAsyncTest : XCTestCase\n\n@end\n\n@implementation ObjCAsyncTest\n\n- (void)testAsync {\n    __block id obj = @1;\n    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n        obj = nil;\n    });\n    expect(obj).toEventually(beNil());\n}\n\n\n- (void)testAsyncWithCustomTimeout {\n    __block id obj = nil;\n    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n        obj = @1;\n    });\n    expect(obj).withTimeout(5).toEventuallyNot(beNil());\n}\n\n- (void)testAsyncCallback {\n    waitUntil(^(void (^done)(void)){\n        done();\n    });\n\n    expectFailureMessage(@\"Waited more than 1.0 second\", ^{\n        waitUntil(^(void (^done)(void)){ /* ... */ });\n    });\n\n    expectFailureMessage(@\"Waited more than 0.01 seconds\", ^{\n        waitUntilTimeout(0.01, ^(void (^done)(void)){\n            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n                [NSThread sleepForTimeInterval:0.1];\n                done();\n            });\n        });\n    });\n\n    expectFailureMessage(@\"expected to equal <goodbye>, got <hello>\", ^{\n        waitUntil(^(void (^done)(void)){\n            [NSThread sleepForTimeInterval:0.1];\n            expect(@\"hello\").to(equal(@\"goodbye\"));\n            done();\n        });\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeAnInstanceOfTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeAnInstanceOfTest : XCTestCase\n@end\n\n@implementation ObjCBeAnInstanceOfTest\n\n- (void)testPositiveMatches {\n    NSNull *obj = [NSNull null];\n    expect(obj).to(beAnInstanceOf([NSNull class]));\n    expect(@1).toNot(beAnInstanceOf([NSNull class]));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be an instance of NSNull, got <__NSCFNumber instance>\", ^{\n        expect(@1).to(beAnInstanceOf([NSNull class]));\n    });\n    expectFailureMessage(@\"expected to not be an instance of NSNull, got <NSNull instance>\", ^{\n        expect([NSNull null]).toNot(beAnInstanceOf([NSNull class]));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be an instance of NSNull, got <nil>\", ^{\n        expect(nil).to(beAnInstanceOf([NSNull class]));\n    });\n\n    expectNilFailureMessage(@\"expected to not be an instance of NSNull, got <nil>\", ^{\n        expect(nil).toNot(beAnInstanceOf([NSNull class]));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeCloseToTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeCloseToTest : XCTestCase\n\n@end\n\n@implementation ObjCBeCloseToTest\n\n- (void)testPositiveMatches {\n    expect(@1.2).to(beCloseTo(@1.2001));\n    expect(@1.2).to(beCloseTo(@2).within(10));\n    expect(@2).toNot(beCloseTo(@1));\n    expect(@1.00001).toNot(beCloseTo(@1).within(0.00000001));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be close to <0.0000> (within 0.0010), got <1.0000>\", ^{\n        expect(@1).to(beCloseTo(@0));\n    });\n    expectFailureMessage(@\"expected to not be close to <0.0000> (within 0.0010), got <0.0001>\", ^{\n        expect(@(0.0001)).toNot(beCloseTo(@0));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be close to <0.0000> (within 0.0010), got <nil>\", ^{\n        expect(nil).to(beCloseTo(@0));\n    });\n    expectNilFailureMessage(@\"expected to not be close to <0.0000> (within 0.0010), got <nil>\", ^{\n        expect(nil).toNot(beCloseTo(@0));\n    });\n}\n\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeEmptyTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeEmptyTest : XCTestCase\n@end\n\n@implementation ObjCBeEmptyTest\n\n- (void)testPositiveMatches {\n    expect(@[]).to(beEmpty());\n    expect(@\"\").to(beEmpty());\n    expect(@{}).to(beEmpty());\n    expect([NSSet set]).to(beEmpty());\n    expect([NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]).to(beEmpty());\n\n    expect(@[@1, @2]).toNot(beEmpty());\n    expect(@\"a\").toNot(beEmpty());\n    expect(@{@\"key\": @\"value\"}).toNot(beEmpty());\n    expect([NSSet setWithObject:@1]).toNot(beEmpty());\n\n    NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory];\n    [table addObject:@1];\n    expect(table).toNot(beEmpty());\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be empty, got <foo>\", ^{\n        expect(@\"foo\").to(beEmpty());\n    });\n    expectFailureMessage(@\"expected to be empty, got <(1)>\", ^{\n        expect(@[@1]).to(beEmpty());\n    });\n    expectFailureMessage(@\"expected to be empty, got <{key = value;}>\", ^{\n        expect(@{@\"key\": @\"value\"}).to(beEmpty());\n    });\n    expectFailureMessage(@\"expected to be empty, got <{(1)}>\", ^{\n        expect([NSSet setWithObject:@1]).to(beEmpty());\n    });\n    NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory];\n    [table addObject:@1];\n    NSString *tableString = [[table description] stringByReplacingOccurrencesOfString:@\"\\n\" withString:@\"\"];\n    expectFailureMessage(([NSString stringWithFormat:@\"expected to be empty, got <%@>\", tableString]), ^{\n        expect(table).to(beEmpty());\n    });\n\n    expectFailureMessage(@\"expected to not be empty, got <>\", ^{\n        expect(@\"\").toNot(beEmpty());\n    });\n    expectFailureMessage(@\"expected to not be empty, got <()>\", ^{\n        expect(@[]).toNot(beEmpty());\n    });\n    expectFailureMessage(@\"expected to not be empty, got <{}>\", ^{\n        expect(@{}).toNot(beEmpty());\n    });\n    expectFailureMessage(@\"expected to not be empty, got <{(1)}>\", ^{\n        expect([NSSet setWithObject:@1]).toNot(beEmpty());\n    });\n    expectFailureMessage(@\"expected to not be empty, got <NSHashTable {}>\", ^{\n        expect([NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]).toNot(beEmpty());\n    });\n}\n\n- (void)testItDoesNotMatchNil {\n    expectNilFailureMessage(@\"expected to be empty, got <nil>\", ^{\n        expect(nil).to(beEmpty());\n    });\n    expectNilFailureMessage(@\"expected to not be empty, got <nil>\", ^{\n        expect(nil).toNot(beEmpty());\n    });\n}\n\n- (void)testItReportsTypesItMatchesAgainst {\n    expectFailureMessage(@\"expected to be empty (only works for NSArrays, NSSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type\", ^{\n        expect(@1).to(beEmpty());\n    });\n    expectFailureMessage(@\"expected to not be empty (only works for NSArrays, NSSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type\", ^{\n        expect(@1).toNot(beEmpty());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeFalseTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeFalseTest : XCTestCase\n\n@end\n\n@implementation ObjCBeFalseTest\n\n- (void)testPositiveMatches {\n    expect(@NO).to(beFalse());\n    expect(@YES).toNot(beFalse());\n}\n\n- (void)testNegativeMatches {\n    expectNilFailureMessage(@\"expected to be false, got <nil>\", ^{\n        expect(nil).to(beFalse());\n    });\n    expectNilFailureMessage(@\"expected to not be false, got <nil>\", ^{\n        expect(nil).toNot(beFalse());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeFalsyTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeFalsyTest : XCTestCase\n\n@end\n\n@implementation ObjCBeFalsyTest\n\n- (void)testPositiveMatches {\n    expect(@NO).to(beFalsy());\n    expect(@YES).toNot(beFalsy());\n    expect(nil).to(beFalsy());\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to not be falsy, got <nil>\", ^{\n        expect(nil).toNot(beFalsy());\n    });\n    expectFailureMessage(@\"expected to be falsy, got <1.0000>\", ^{\n        expect(@1).to(beFalsy());\n    });\n    expectFailureMessage(@\"expected to be truthy, got <0.0000>\", ^{\n        expect(@NO).to(beTruthy());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeGreaterThanOrEqualToTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeGreaterThanOrEqualToTest : XCTestCase\n\n@end\n\n@implementation ObjCBeGreaterThanOrEqualToTest\n\n- (void)testPositiveMatches {\n    expect(@2).to(beGreaterThanOrEqualTo(@2));\n    expect(@2).toNot(beGreaterThanOrEqualTo(@3));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be greater than or equal to <0.0000>, got <-1.0000>\", ^{\n        expect(@(-1)).to(beGreaterThanOrEqualTo(@0));\n    });\n    expectFailureMessage(@\"expected to not be greater than or equal to <1.0000>, got <2.0000>\", ^{\n        expect(@2).toNot(beGreaterThanOrEqualTo(@(1)));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be greater than or equal to <-1.0000>, got <nil>\", ^{\n        expect(nil).to(beGreaterThanOrEqualTo(@(-1)));\n    });\n    expectNilFailureMessage(@\"expected to not be greater than or equal to <1.0000>, got <nil>\", ^{\n        expect(nil).toNot(beGreaterThanOrEqualTo(@(1)));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeGreaterThanTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeGreaterThanTest : XCTestCase\n\n@end\n\n@implementation ObjCBeGreaterThanTest\n\n- (void)testPositiveMatches {\n    expect(@2).to(beGreaterThan(@1));\n    expect(@2).toNot(beGreaterThan(@2));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be greater than <0.0000>, got <-1.0000>\", ^{\n        expect(@(-1)).to(beGreaterThan(@(0)));\n    });\n    expectFailureMessage(@\"expected to not be greater than <1.0000>, got <0.0000>\", ^{\n        expect(@0).toNot(beGreaterThan(@(1)));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be greater than <-1.0000>, got <nil>\", ^{\n        expect(nil).to(beGreaterThan(@(-1)));\n    });\n    expectNilFailureMessage(@\"expected to not be greater than <1.0000>, got <nil>\", ^{\n        expect(nil).toNot(beGreaterThan(@(1)));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeIdenticalToTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeIdenticalToTest : XCTestCase\n\n@end\n\n@implementation ObjCBeIdenticalToTest\n\n- (void)testPositiveMatches {\n    NSNull *obj = [NSNull null];\n    expect(obj).to(beIdenticalTo([NSNull null]));\n    expect(@2).toNot(beIdenticalTo(@3));\n}\n\n- (void)testNegativeMatches {\n    NSNull *obj = [NSNull null];\n    expectFailureMessage(([NSString stringWithFormat:@\"expected to be identical to <%p>, got <%p>\", obj, @2]), ^{\n        expect(@2).to(beIdenticalTo(obj));\n    });\n    expectFailureMessage(([NSString stringWithFormat:@\"expected to not be identical to <%p>, got <%p>\", obj, obj]), ^{\n        expect(obj).toNot(beIdenticalTo(obj));\n    });\n}\n\n- (void)testNilMatches {\n    NSNull *obj = [NSNull null];\n    expectNilFailureMessage(@\"expected to be identical to nil, got nil\", ^{\n        expect(nil).to(beIdenticalTo(nil));\n    });\n    expectNilFailureMessage(([NSString stringWithFormat:@\"expected to not be identical to <%p>, got nil\", obj]), ^{\n        expect(nil).toNot(beIdenticalTo(obj));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeKindOfTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeKindOfTest : XCTestCase\n\n@end\n\n@implementation ObjCBeKindOfTest\n\n- (void)testPositiveMatches {\n    NSMutableArray *array = [NSMutableArray array];\n    expect(array).to(beAKindOf([NSArray class]));\n    expect(@1).toNot(beAKindOf([NSNull class]));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be a kind of NSNull, got <__NSCFNumber instance>\", ^{\n        expect(@1).to(beAKindOf([NSNull class]));\n    });\n    expectFailureMessage(@\"expected to not be a kind of NSNull, got <NSNull instance>\", ^{\n        expect([NSNull null]).toNot(beAKindOf([NSNull class]));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be a kind of NSNull, got <nil>\", ^{\n        expect(nil).to(beAKindOf([NSNull class]));\n    });\n    expectNilFailureMessage(@\"expected to not be a kind of NSNull, got <nil>\", ^{\n        expect(nil).toNot(beAKindOf([NSNull class]));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeLessThanOrEqualToTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeLessThanOrEqualToTest : XCTestCase\n\n@end\n\n@implementation ObjCBeLessThanOrEqualToTest\n\n- (void)testPositiveMatches {\n    expect(@2).to(beLessThanOrEqualTo(@2));\n    expect(@2).toNot(beLessThanOrEqualTo(@1));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be less than or equal to <1.0000>, got <2.0000>\", ^{\n        expect(@2).to(beLessThanOrEqualTo(@1));\n    });\n    expectFailureMessage(@\"expected to not be less than or equal to <1.0000>, got <1.0000>\", ^{\n        expect(@1).toNot(beLessThanOrEqualTo(@1));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be less than or equal to <1.0000>, got <nil>\", ^{\n        expect(nil).to(beLessThanOrEqualTo(@1));\n    });\n    expectNilFailureMessage(@\"expected to not be less than or equal to <-1.0000>, got <nil>\", ^{\n        expect(nil).toNot(beLessThanOrEqualTo(@(-1)));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeLessThanTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeLessThanTest : XCTestCase\n\n@end\n\n@implementation ObjCBeLessThanTest\n\n- (void)testPositiveMatches {\n    expect(@2).to(beLessThan(@3));\n    expect(@2).toNot(beLessThan(@2));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be less than <0.0000>, got <-1.0000>\", ^{\n        expect(@(-1)).to(beLessThan(@0));\n    });\n    expectFailureMessage(@\"expected to not be less than <1.0000>, got <0.0000>\", ^{\n        expect(@0).toNot(beLessThan(@1));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be less than <-1.0000>, got <nil>\", ^{\n        expect(nil).to(beLessThan(@(-1)));\n    });\n    expectNilFailureMessage(@\"expected to not be less than <1.0000>, got <nil>\", ^{\n        expect(nil).toNot(beLessThan(@1));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeNilTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeNilTest : XCTestCase\n\n@end\n\n@implementation ObjCBeNilTest\n\n- (void)testPositiveMatches {\n    expect(nil).to(beNil());\n    expect(@NO).toNot(beNil());\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be nil, got <1.0000>\", ^{\n        expect(@1).to(beNil());\n    });\n    expectFailureMessage(@\"expected to not be nil, got <nil>\", ^{\n        expect(nil).toNot(beNil());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeTrueTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeTrueTest : XCTestCase\n\n@end\n\n@implementation ObjCBeTrueTest\n\n- (void)testPositiveMatches {\n    expect(@YES).to(beTrue());\n    expect(@NO).toNot(beTrue());\n    expect(nil).toNot(beTrue());\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be true, got <0.0000>\", ^{\n        expect(@NO).to(beTrue());\n    });\n    expectFailureMessage(@\"expected to be true, got <nil>\", ^{\n        expect(nil).to(beTrue());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeTruthyTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeTruthyTest : XCTestCase\n\n@end\n\n@implementation ObjCBeTruthyTest\n\n- (void)testPositiveMatches {\n    expect(@YES).to(beTruthy());\n    expect(@NO).toNot(beTruthy());\n    expect(nil).toNot(beTruthy());\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be truthy, got <nil>\", ^{\n        expect(nil).to(beTruthy());\n    });\n    expectFailureMessage(@\"expected to not be truthy, got <1.0000>\", ^{\n        expect(@1).toNot(beTruthy());\n    });\n    expectFailureMessage(@\"expected to be truthy, got <0.0000>\", ^{\n        expect(@NO).to(beTruthy());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCBeginWithTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeginWithTest : XCTestCase\n\n@end\n\n@implementation ObjCBeginWithTest\n\n- (void)testPositiveMatches {\n    expect(@\"hello world!\").to(beginWith(@\"hello\"));\n    expect(@\"hello world!\").toNot(beginWith(@\"world\"));\n\n    NSArray *array = @[@1, @2];\n    expect(array).to(beginWith(@1));\n    expect(array).toNot(beginWith(@2));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to begin with <bar>, got <foo>\", ^{\n        expect(@\"foo\").to(beginWith(@\"bar\"));\n    });\n    expectFailureMessage(@\"expected to not begin with <foo>, got <foo>\", ^{\n        expect(@\"foo\").toNot(beginWith(@\"foo\"));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to begin with <1>, got <nil>\", ^{\n        expect(nil).to(beginWith(@1));\n    });\n    expectNilFailureMessage(@\"expected to not begin with <1>, got <nil>\", ^{\n        expect(nil).toNot(beginWith(@1));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCContainTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCContainTest : XCTestCase\n\n@end\n\n@implementation ObjCContainTest\n\n- (void)testPositiveMatches {\n    NSArray *array = @[@1, @2];\n    expect(array).to(contain(@1));\n    expect(array).toNot(contain(@\"HI\"));\n    expect(@\"String\").to(contain(@\"Str\"));\n    expect(@\"Other\").toNot(contain(@\"Str\"));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to contain <Optional(3)>, got <(1,2)>\", ^{\n        expect((@[@1, @2])).to(contain(@3));\n    });\n    expectFailureMessage(@\"expected to not contain <Optional(2)>, got <(1,2)>\", ^{\n        expect((@[@1, @2])).toNot(contain(@2));\n    });\n\n    expectFailureMessage(@\"expected to contain <hi>, got <la>\", ^{\n        expect(@\"la\").to(contain(@\"hi\"));\n    });\n    expectFailureMessage(@\"expected to not contain <hi>, got <hihihi>\", ^{\n        expect(@\"hihihi\").toNot(contain(@\"hi\"));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to contain <3.0000>, got <nil>\", ^{\n        expect(nil).to(contain(@3));\n    });\n    expectNilFailureMessage(@\"expected to not contain <3.0000>, got <nil>\", ^{\n        expect(nil).toNot(contain(@3));\n    });\n\n    expectNilFailureMessage(@\"expected to contain <hi>, got <nil>\", ^{\n        expect(nil).to(contain(@\"hi\"));\n    });\n    expectNilFailureMessage(@\"expected to not contain <hi>, got <nil>\", ^{\n        expect(nil).toNot(contain(@\"hi\"));\n    });\n}\n\n- (void)testVariadicArguments {\n    NSArray *array = @[@1, @2];\n    expect(array).to(contain(@1, @2));\n    expect(array).toNot(contain(@\"HI\", @\"whale\"));\n    expect(@\"String\").to(contain(@\"Str\", @\"ng\"));\n    expect(@\"Other\").toNot(contain(@\"Str\", @\"Oth\"));\n\n\n    expectFailureMessage(@\"expected to contain <Optional(a), Optional(bar)>, got <(a,b,c)>\", ^{\n        expect(@[@\"a\", @\"b\", @\"c\"]).to(contain(@\"a\", @\"bar\"));\n    });\n\n    expectFailureMessage(@\"expected to not contain <Optional(bar), Optional(b)>, got <(a,b,c)>\", ^{\n        expect(@[@\"a\", @\"b\", @\"c\"]).toNot(contain(@\"bar\", @\"b\"));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCEndWithTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCEndWithTest : XCTestCase\n\n@end\n\n@implementation ObjCEndWithTest\n\n- (void)testPositiveMatches {\n    NSArray *array = @[@1, @2];\n    expect(@\"hello world!\").to(endWith(@\"world!\"));\n    expect(@\"hello world!\").toNot(endWith(@\"hello\"));\n    expect(array).to(endWith(@2));\n    expect(array).toNot(endWith(@1));\n    expect(@1).toNot(contain(@\"foo\"));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to end with <?>, got <hello world!>\", ^{\n        expect(@\"hello world!\").to(endWith(@\"?\"));\n    });\n    expectFailureMessage(@\"expected to not end with <!>, got <hello world!>\", ^{\n        expect(@\"hello world!\").toNot(endWith(@\"!\"));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to end with <1>, got <nil>\", ^{\n        expect(nil).to(endWith(@1));\n    });\n    expectNilFailureMessage(@\"expected to not end with <1>, got <nil>\", ^{\n        expect(nil).toNot(endWith(@1));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCEqualTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCEqualTest : XCTestCase\n\n@end\n\n@implementation ObjCEqualTest\n\n- (void)testPositiveMatches {\n    expect(@1).to(equal(@1));\n    expect(@1).toNot(equal(@2));\n    expect(@1).notTo(equal(@2));\n    expect(@\"hello\").to(equal(@\"hello\"));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to equal <2.0000>, got <1.0000>\", ^{\n        expect(@1).to(equal(@2));\n    });\n    expectFailureMessage(@\"expected to not equal <1.0000>, got <1.0000>\", ^{\n        expect(@1).toNot(equal(@1));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to equal <nil>, got <nil>\", ^{\n        expect(nil).to(equal(nil));\n    });\n    expectNilFailureMessage(@\"expected to not equal <nil>, got <nil>\", ^{\n        expect(nil).toNot(equal(nil));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCHaveCount.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCHaveCountTest : XCTestCase\n\n@end\n\n@implementation ObjCHaveCountTest\n\n- (void)testHaveCountForNSArray {\n    expect(@[@1, @2, @3]).to(haveCount(@3));\n    expect(@[@1, @2, @3]).notTo(haveCount(@1));\n\n    expect(@[]).to(haveCount(@0));\n    expect(@[@1]).notTo(haveCount(@0));\n\n    expectFailureMessage(@\"expected to have (1,2,3) with count 1, got 3\", ^{\n        expect(@[@1, @2, @3]).to(haveCount(@1));\n    });\n\n    expectFailureMessage(@\"expected to not have (1,2,3) with count 3, got 3\", ^{\n        expect(@[@1, @2, @3]).notTo(haveCount(@3));\n    });\n\n}\n\n- (void)testHaveCountForNSDictionary {\n    expect(@{@\"1\":@1, @\"2\":@2, @\"3\":@3}).to(haveCount(@3));\n    expect(@{@\"1\":@1, @\"2\":@2, @\"3\":@3}).notTo(haveCount(@1));\n\n    expectFailureMessage(@\"expected to have {1 = 1;2 = 2;3 = 3;} with count 1, got 3\", ^{\n        expect(@{@\"1\":@1, @\"2\":@2, @\"3\":@3}).to(haveCount(@1));\n    });\n\n    expectFailureMessage(@\"expected to not have {1 = 1;2 = 2;3 = 3;} with count 3, got 3\", ^{\n        expect(@{@\"1\":@1, @\"2\":@2, @\"3\":@3}).notTo(haveCount(@3));\n    });\n}\n\n- (void)testHaveCountForNSHashtable {\n    NSHashTable *const table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory];\n    [table addObject:@1];\n    [table addObject:@2];\n    [table addObject:@3];\n\n    expect(table).to(haveCount(@3));\n    expect(table).notTo(haveCount(@1));\n\n    NSString *msg = [NSString stringWithFormat:\n                     @\"expected to have %@with count 1, got 3\",\n                     [table.description stringByReplacingOccurrencesOfString:@\"\\n\" withString:@\"\"]];\n    expectFailureMessage(msg, ^{\n        expect(table).to(haveCount(@1));\n    });\n\n\n    msg = [NSString stringWithFormat:\n           @\"expected to not have %@with count 3, got 3\",\n           [table.description stringByReplacingOccurrencesOfString:@\"\\n\" withString:@\"\"]];\n    expectFailureMessage(msg, ^{\n        expect(table).notTo(haveCount(@3));\n    });\n}\n\n- (void)testHaveCountForNSSet {\n    NSSet *const set = [NSSet setWithArray:@[@1, @2, @3]];\n\n    expect(set).to(haveCount(@3));\n    expect(set).notTo(haveCount(@1));\n\n    expectFailureMessage(@\"expected to have {(3,1,2)} with count 1, got 3\", ^{\n        expect(set).to(haveCount(@1));\n    });\n\n    expectFailureMessage(@\"expected to not have {(3,1,2)} with count 3, got 3\", ^{\n        expect(set).notTo(haveCount(@3));\n    });\n}\n\n- (void)testHaveCountForUnsupportedTypes {\n    expectFailureMessage(@\"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFConstantString\", ^{\n        expect(@\"string\").to(haveCount(@6));\n    });\n\n    expectFailureMessage(@\"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFNumber\", ^{\n        expect(@1).to(haveCount(@6));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCMatchTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCMatchTest : XCTestCase\n\n@end\n\n@implementation ObjCMatchTest\n\n- (void)testPositiveMatches {\n    expect(@\"11:14\").to(match(@\"\\\\d{2}:\\\\d{2}\"));\n    expect(@\"hello\").toNot(match(@\"\\\\d{2}:\\\\d{2}\"));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to match <\\\\d{2}:\\\\d{2}>, got <hello>\", ^{\n        expect(@\"hello\").to(match(@\"\\\\d{2}:\\\\d{2}\"));\n    });\n    expectFailureMessage(@\"expected to not match <\\\\d{2}:\\\\d{2}>, got <11:22>\", ^{\n        expect(@\"11:22\").toNot(match(@\"\\\\d{2}:\\\\d{2}\"));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to match <\\\\d{2}:\\\\d{2}>, got <nil>\", ^{\n        expect(nil).to(match(@\"\\\\d{2}:\\\\d{2}\"));\n    });\n    expectNilFailureMessage(@\"expected to not match <\\\\d{2}:\\\\d{2}>, got <nil>\", ^{\n        expect(nil).toNot(match(@\"\\\\d{2}:\\\\d{2}\"));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCRaiseExceptionTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCRaiseExceptionTest : XCTestCase\n\n@end\n\n@implementation ObjCRaiseExceptionTest\n\n- (void)testPositiveMatches {\n    __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException\n                                                             reason:@\"No food\"\n                                                           userInfo:@{@\"key\": @\"value\"}];\n    expectAction(^{ @throw exception; }).to(raiseException());\n    expectAction(^{ [exception raise]; }).to(raiseException());\n    expectAction(^{ [exception raise]; }).to(raiseException().named(NSInvalidArgumentException));\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             named(NSInvalidArgumentException).\n                                             reason(@\"No food\"));\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             named(NSInvalidArgumentException).\n                                             reason(@\"No food\").\n                                             userInfo(@{@\"key\": @\"value\"}));\n\n    expectAction(^{ }).toNot(raiseException());\n}\n\n- (void)testPositiveMatchesWithBlocks {\n    __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException\n                                                             reason:@\"No food\"\n                                                           userInfo:@{@\"key\": @\"value\"}];\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             satisfyingBlock(^(NSException *exception) {\n        expect(exception.name).to(equal(NSInvalidArgumentException));\n    }));\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             named(NSInvalidArgumentException).\n                                             satisfyingBlock(^(NSException *exception) {\n        expect(exception.name).to(equal(NSInvalidArgumentException));\n    }));\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             named(NSInvalidArgumentException).\n                                             reason(@\"No food\").\n                                             satisfyingBlock(^(NSException *exception) {\n        expect(exception.name).to(equal(NSInvalidArgumentException));\n    }));\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             named(NSInvalidArgumentException).\n                                             reason(@\"No food\").\n                                             userInfo(@{@\"key\": @\"value\"}).\n                                             satisfyingBlock(^(NSException *exception) {\n        expect(exception.name).to(equal(NSInvalidArgumentException));\n    }));\n}\n\n- (void)testNegativeMatches {\n    __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException\n                                                             reason:@\"No food\"\n                                                           userInfo:@{@\"key\": @\"value\"}];\n\n    expectFailureMessage(@\"expected to raise any exception, got no exception\", ^{\n        expectAction(^{ }).to(raiseException());\n    });\n\n    expectFailureMessage(@\"expected to raise exception with name <foo>, got no exception\", ^{\n        expectAction(^{ }).to(raiseException().\n                              named(@\"foo\"));\n    });\n\n    expectFailureMessage(@\"expected to raise exception with name <NSInvalidArgumentException> with reason <cakes>, got no exception\", ^{\n        expectAction(^{ }).to(raiseException().\n                              named(NSInvalidArgumentException).\n                              reason(@\"cakes\"));\n    });\n\n    expectFailureMessage(@\"expected to raise exception with name <NSInvalidArgumentException> with reason <No food> with userInfo <{k = v;}>, got no exception\", ^{\n        expectAction(^{ }).to(raiseException().\n                              named(NSInvalidArgumentException).\n                              reason(@\"No food\").\n                              userInfo(@{@\"k\": @\"v\"}));\n    });\n\n    expectFailureMessage(@\"expected to not raise any exception, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\", ^{\n        expectAction(^{ [exception raise]; }).toNot(raiseException());\n    });\n}\n\n- (void)testNegativeMatchesWithPassingBlocks {\n    __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException\n                                                             reason:@\"No food\"\n                                                           userInfo:@{@\"key\": @\"value\"}];\n    expectFailureMessage(@\"expected to raise exception that satisfies block, got no exception\", ^{\n        expect(exception).to(raiseException().\n                             satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(@\"LOL\"));\n        }));\n    });\n\n    NSString *outerFailureMessage = @\"expected to raise exception that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(NSInvalidArgumentException));\n        }));\n    });\n\n    outerFailureMessage = @\"expected to raise exception with name <foo> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(@\"foo\").\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(NSInvalidArgumentException));\n        }));\n    });\n\n    outerFailureMessage = @\"expected to raise exception with name <NSInvalidArgumentException> with reason <bar> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(NSInvalidArgumentException).\n                                                 reason(@\"bar\").\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(NSInvalidArgumentException));\n        }));\n    });\n\n    outerFailureMessage = @\"expected to raise exception with name <NSInvalidArgumentException> with reason <No food> with userInfo <{}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(NSInvalidArgumentException).\n                                                 reason(@\"No food\").\n                                                 userInfo(@{}).\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(NSInvalidArgumentException));\n        }));\n    });\n}\n\n- (void)testNegativeMatchesWithNegativeBlocks {\n    __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException\n                                                             reason:@\"No food\"\n                                                           userInfo:@{@\"key\": @\"value\"}];\n    NSString *outerFailureMessage;\n\n    NSString const *innerFailureMessage = @\"expected to equal <foo>, got <NSInvalidArgumentException>\";\n    outerFailureMessage = @\"expected to raise exception with name <NSInvalidArgumentException> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(NSInvalidArgumentException).\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(@\"foo\"));\n        }));\n    });\n\n\n    outerFailureMessage = @\"expected to raise exception with name <NSInvalidArgumentException> with reason <No food> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(NSInvalidArgumentException).\n                                                 reason(@\"No food\").\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(@\"foo\"));\n        }));\n    });\n\n\n    outerFailureMessage = @\"expected to raise exception with name <NSInvalidArgumentException> with reason <No food> with userInfo <{key = value;}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(NSInvalidArgumentException).\n                                                 reason(@\"No food\").\n                                                 userInfo(@{@\"key\": @\"value\"}).\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(@\"foo\"));\n        }));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCSatisfyAnyOfTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCSatisfyAnyOfTest : XCTestCase\n\n@end\n\n@implementation ObjCSatisfyAnyOfTest\n\n- (void)testPositiveMatches {\n    expect(@2).to(satisfyAnyOf(equal(@2), equal(@3)));\n    expect(@2).toNot(satisfyAnyOf(equal(@3), equal(@16)));\n    expect(@[@1, @2, @3]).to(satisfyAnyOf(equal(@[@1, @2, @3]), allPass(beLessThan(@4))));\n    expect(@NO).to(satisfyAnyOf(beTrue(), beFalse()));\n    expect(@YES).to(satisfyAnyOf(beTrue(), beFalse()));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to match one of: {equal <3.0000>}, or {equal <4.0000>}, or {equal <5.0000>}, got 2\", ^{\n        expect(@2).to(satisfyAnyOf(equal(@3), equal(@4), equal(@5)));\n    });\n    \n    expectFailureMessage(@\"expected to match one of: {all be less than <4.0000>, but failed first at element\"\n                         \" <5.0000> in <[5.0000, 6.0000, 7.0000]>}, or {equal <(1,2,3,4)>}, got (5,6,7)\", ^{\n                             expect(@[@5, @6, @7]).to(satisfyAnyOf(allPass(beLessThan(@4)), equal(@[@1, @2, @3, @4])));\n                         });\n    \n    expectFailureMessage(@\"satisfyAnyOf must be called with at least one matcher\", ^{\n        expect(@\"turtles\").to(satisfyAnyOf());\n    });\n}\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCSyncTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Nimble/Nimble.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCSyncTest : XCTestCase\n\n@end\n\n@implementation ObjCSyncTest\n\n- (void)testFailureExpectation {\n    expectFailureMessage(@\"fail() always fails\", ^{\n        fail();\n    });\n\n    expectFailureMessage(@\"This always fails\", ^{\n        failWithMessage(@\"This always fails\");\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/NimbleTests/objc/ObjCUserDescriptionTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCUserDescriptionTest : XCTestCase\n\n@end\n\n@implementation ObjCUserDescriptionTest\n\n- (void)testToWithDescription {\n    expectFailureMessage(@\"These are equal!\\n\"\n                         \"expected to equal <2.0000>, got <1.0000>\", ^{\n                             expect(@1).toWithDescription(equal(@2), @\"These are equal!\");\n                         });\n}\n\n- (void)testToNotWithDescription {\n    expectFailureMessage(@\"These aren't equal!\\n\"\n                         \"expected to not equal <1.0000>, got <1.0000>\", ^{\n                             expect(@1).toNotWithDescription(equal(@1), @\"These aren't equal!\");\n                         });\n}\n\n- (void)testNotToWithDescription {\n    expectFailureMessage(@\"These aren't equal!\\n\"\n                         \"expected to not equal <1.0000>, got <1.0000>\", ^{\n                             expect(@1).notToWithDescription(equal(@1), @\"These aren't equal!\");\n                         });\n}\n\n- (void)testToEventuallyWithDescription {\n    expectFailureMessage(@\"These are equal!\\n\"\n                         \"expected to eventually equal <2.0000>, got <1.0000>\", ^{\n                             expect(@1).toEventuallyWithDescription(equal(@2), @\"These are equal!\");\n                         });\n}\n\n- (void)testToEventuallyNotWithDescription {\n    expectFailureMessage(@\"These aren't equal!\\n\"\n                         \"expected to eventually not equal <1.0000>, got <1.0000>\", ^{\n                             expect(@1).toEventuallyNotWithDescription(equal(@1), @\"These aren't equal!\");\n                         });\n}\n\n- (void)testToNotEventuallyWithDescription {\n    expectFailureMessage(@\"These aren't equal!\\n\"\n                         \"expected to eventually not equal <1.0000>, got <1.0000>\", ^{\n                             expect(@1).toNotEventuallyWithDescription(equal(@1), @\"These aren't equal!\");\n                         });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/README.md",
    "content": "# Nimble\n\nUse Nimble to express the expected outcomes of Swift\nor Objective-C expressions. Inspired by\n[Cedar](https://github.com/pivotal/cedar).\n\n```swift\n// Swift\n\nexpect(1 + 1).to(equal(2))\nexpect(1.2).to(beCloseTo(1.1, within: 0.1))\nexpect(3) > 2\nexpect(\"seahorse\").to(contain(\"sea\"))\nexpect([\"Atlantic\", \"Pacific\"]).toNot(contain(\"Mississippi\"))\nexpect(ocean.isClean).toEventually(beTruthy())\n```\n\n# How to Use Nimble\n\n<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n**Table of Contents**  *generated with [DocToc](https://github.com/thlorenz/doctoc)*\n\n- [Some Background: Expressing Outcomes Using Assertions in XCTest](#some-background-expressing-outcomes-using-assertions-in-xctest)\n- [Nimble: Expectations Using `expect(...).to`](#nimble-expectations-using-expectto)\n  - [Custom Failure Messages](#custom-failure-messages)\n  - [Type Checking](#type-checking)\n  - [Operator Overloads](#operator-overloads)\n  - [Lazily Computed Values](#lazily-computed-values)\n  - [C Primitives](#c-primitives)\n  - [Asynchronous Expectations](#asynchronous-expectations)\n  - [Objective-C Support](#objective-c-support)\n  - [Disabling Objective-C Shorthand](#disabling-objective-c-shorthand)\n- [Built-in Matcher Functions](#built-in-matcher-functions)\n  - [Equivalence](#equivalence)\n  - [Identity](#identity)\n  - [Comparisons](#comparisons)\n  - [Types/Classes](#typesclasses)\n  - [Truthiness](#truthiness)\n  - [Swift Error Handling](#swift-error-handling)\n  - [Exceptions](#exceptions)\n  - [Collection Membership](#collection-membership)\n  - [Strings](#strings)\n  - [Checking if all elements of a collection pass a condition](#checking-if-all-elements-of-a-collection-pass-a-condition)\n  - [Verify collection count](#verify-collection-count)\n  - [Matching a value to any of a group of matchers](#matching-a-value-to-any-of-a-group-of-matchers)\n- [Writing Your Own Matchers](#writing-your-own-matchers)\n  - [Lazy Evaluation](#lazy-evaluation)\n  - [Type Checking via Swift Generics](#type-checking-via-swift-generics)\n  - [Customizing Failure Messages](#customizing-failure-messages)\n  - [Supporting Objective-C](#supporting-objective-c)\n    - [Properly Handling `nil` in Objective-C Matchers](#properly-handling-nil-in-objective-c-matchers)\n- [Installing Nimble](#installing-nimble)\n  - [Installing Nimble as a Submodule](#installing-nimble-as-a-submodule)\n  - [Installing Nimble via CocoaPods](#installing-nimble-via-cocoapods)\n  - [Using Nimble without XCTest](#using-nimble-without-xctest)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n# Some Background: Expressing Outcomes Using Assertions in XCTest\n\nApple's Xcode includes the XCTest framework, which provides\nassertion macros to test whether code behaves properly.\nFor example, to assert that `1 + 1 = 2`, XCTest has you write:\n\n```swift\n// Swift\n\nXCTAssertEqual(1 + 1, 2, \"expected one plus one to equal two\")\n```\n\nOr, in Objective-C:\n\n```objc\n// Objective-C\n\nXCTAssertEqual(1 + 1, 2, @\"expected one plus one to equal two\");\n```\n\nXCTest assertions have a couple of drawbacks:\n\n1. **Not enough macros.** There's no easy way to assert that a string\n   contains a particular substring, or that a number is less than or\n   equal to another.\n2. **It's hard to write asynchronous tests.** XCTest forces you to write\n   a lot of boilerplate code.\n\nNimble addresses these concerns.\n\n# Nimble: Expectations Using `expect(...).to`\n\nNimble allows you to express expectations using a natural,\neasily understood language:\n\n```swift\n// Swift\n\nimport Nimble\n\nexpect(seagull.squawk).to(equal(\"Squee!\"))\n```\n\n```objc\n// Objective-C\n\n@import Nimble;\n\nexpect(seagull.squawk).to(equal(@\"Squee!\"));\n```\n\n> The `expect` function autocompletes to include `file:` and `line:`,\n  but these parameters are optional. Use the default values to have\n  Xcode highlight the correct line when an expectation is not met.\n\nTo perform the opposite expectation--to assert something is *not*\nequal--use `toNot` or `notTo`:\n\n```swift\n// Swift\n\nimport Nimble\n\nexpect(seagull.squawk).toNot(equal(\"Oh, hello there!\"))\nexpect(seagull.squawk).notTo(equal(\"Oh, hello there!\"))\n```\n\n```objc\n// Objective-C\n\n@import Nimble;\n\nexpect(seagull.squawk).toNot(equal(@\"Oh, hello there!\"));\nexpect(seagull.squawk).notTo(equal(@\"Oh, hello there!\"));\n```\n\n## Custom Failure Messages\n\nWould you like to add more information to the test's failure messages? Use the `description` optional argument to add your own text:\n\n```swift\n// Swift\n\nexpect(1 + 1).to(equal(3))\n// failed - expected to equal <3>, got <2>\n\nexpect(1 + 1).to(equal(3), description: \"Make sure libKindergartenMath is loaded\")\n// failed - Make sure libKindergartenMath is loaded\n// expected to equal <3>, got <2>\n```\n\nOr the *WithDescription version in Objective-C:\n\n```objc\n// Objective-C\n\n@import Nimble;\n\nexpect(@(1+1)).to(equal(@3));\n// failed - expected to equal <3.0000>, got <2.0000>\n\nexpect(@(1+1)).toWithDescription(equal(@3), @\"Make sure libKindergartenMath is loaded\");\n// failed - Make sure libKindergartenMath is loaded\n// expected to equal <3.0000>, got <2.0000>\n```\n\n## Type Checking\n\nNimble makes sure you don't compare two types that don't match:\n\n```swift\n// Swift\n\n// Does not compile:\nexpect(1 + 1).to(equal(\"Squee!\"))\n```\n\n> Nimble uses generics--only available in Swift--to ensure\n  type correctness. That means type checking is\n  not available when using Nimble in Objective-C. :sob:\n\n## Operator Overloads\n\nTired of so much typing? With Nimble, you can use overloaded operators\nlike `==` for equivalence, or `>` for comparisons:\n\n```swift\n// Swift\n\n// Passes if squawk does not equal \"Hi!\":\nexpect(seagull.squawk) != \"Hi!\"\n\n// Passes if 10 is greater than 2:\nexpect(10) > 2\n```\n\n> Operator overloads are only available in Swift, so you won't be able\n  to use this syntax in Objective-C. :broken_heart:\n\n## Lazily Computed Values\n\nThe `expect` function doesn't evaluate the value it's given until it's\ntime to match. So Nimble can test whether an expression raises an\nexception once evaluated:\n\n```swift\n// Swift\n\n// Note: Swift currently doesn't have exceptions.\n//       Only Objective-C code can raise exceptions\n//       that Nimble will catch.\n//       (see https://github.com/Quick/Nimble/issues/220#issuecomment-172667064)\nlet exception = NSException(\n  name: NSInternalInconsistencyException,\n  reason: \"Not enough fish in the sea.\",\n  userInfo: [\"something\": \"is fishy\"])\nexpect { exception.raise() }.to(raiseException())\n\n// Also, you can customize raiseException to be more specific\nexpect { exception.raise() }.to(raiseException(named: NSInternalInconsistencyException))\nexpect { exception.raise() }.to(raiseException(\n    named: NSInternalInconsistencyException,\n    reason: \"Not enough fish in the sea\"))\nexpect { exception.raise() }.to(raiseException(\n    named: NSInternalInconsistencyException,\n    reason: \"Not enough fish in the sea\",\n    userInfo: [\"something\": \"is fishy\"]))\n```\n\nObjective-C works the same way, but you must use the `expectAction`\nmacro when making an expectation on an expression that has no return\nvalue:\n\n```objc\n// Objective-C\n\nNSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException\n                                                 reason:@\"Not enough fish in the sea.\"\n                                               userInfo:nil];\nexpectAction(^{ [exception raise]; }).to(raiseException());\n\n// Use the property-block syntax to be more specific.\nexpectAction(^{ [exception raise]; }).to(raiseException().named(NSInternalInconsistencyException));\nexpectAction(^{ [exception raise]; }).to(raiseException().\n    named(NSInternalInconsistencyException).\n    reason(\"Not enough fish in the sea\"));\nexpectAction(^{ [exception raise]; }).to(raiseException().\n    named(NSInternalInconsistencyException).\n    reason(\"Not enough fish in the sea\").\n    userInfo(@{@\"something\": @\"is fishy\"}));\n\n// You can also pass a block for custom matching of the raised exception\nexpectAction(exception.raise()).to(raiseException().satisfyingBlock(^(NSException *exception) {\n    expect(exception.name).to(beginWith(NSInternalInconsistencyException));\n}));\n```\n\n## C Primitives\n\nSome testing frameworks make it hard to test primitive C values.\nIn Nimble, it just works:\n\n```swift\n// Swift\n\nlet actual: CInt = 1\nlet expectedValue: CInt = 1\nexpect(actual).to(equal(expectedValue))\n```\n\nIn fact, Nimble uses type inference, so you can write the above\nwithout explicitly specifying both types:\n\n```swift\n// Swift\n\nexpect(1 as CInt).to(equal(1))\n```\n\n> In Objective-C, Nimble only supports Objective-C objects. To\n  make expectations on primitive C values, wrap then in an object\n  literal:\n\n  ```objc\n  expect(@(1 + 1)).to(equal(@2));\n  ```\n\n## Asynchronous Expectations\n\nIn Nimble, it's easy to make expectations on values that are updated\nasynchronously. Just use `toEventually` or `toEventuallyNot`:\n\n```swift\n// Swift\n\ndispatch_async(dispatch_get_main_queue()) {\n  ocean.add(\"dolphins\")\n  ocean.add(\"whales\")\n}\nexpect(ocean).toEventually(contain(\"dolphins\", \"whales\"))\n```\n\n\n```objc\n// Objective-C\ndispatch_async(dispatch_get_main_queue(), ^{\n  [ocean add:@\"dolphins\"];\n  [ocean add:@\"whales\"];\n});\nexpect(ocean).toEventually(contain(@\"dolphins\", @\"whales\"));\n```\n\nNote: toEventually triggers its polls on the main thread. Blocking the main\nthread will cause Nimble to stop the run loop. This can cause test pollution\nfor whatever incomplete code that was running on the main thread.  Blocking the\nmain thread can be caused by blocking IO, calls to sleep(), deadlocks, and\nsynchronous IPC.\n\nIn the above example, `ocean` is constantly re-evaluated. If it ever\ncontains dolphins and whales, the expectation passes. If `ocean` still\ndoesn't contain them, even after being continuously re-evaluated for one\nwhole second, the expectation fails.\n\nSometimes it takes more than a second for a value to update. In those\ncases, use the `timeout` parameter:\n\n```swift\n// Swift\n\n// Waits three seconds for ocean to contain \"starfish\":\nexpect(ocean).toEventually(contain(\"starfish\"), timeout: 3)\n```\n\n```objc\n// Objective-C\n\n// Waits three seconds for ocean to contain \"starfish\":\nexpect(ocean).withTimeout(3).toEventually(contain(@\"starfish\"));\n```\n\nYou can also provide a callback by using the `waitUntil` function:\n\n```swift\n// Swift\n\nwaitUntil { done in\n  // do some stuff that takes a while...\n  NSThread.sleepForTimeInterval(0.5)\n  done()\n}\n```\n\n```objc\n// Objective-C\n\nwaitUntil(^(void (^done)(void)){\n  // do some stuff that takes a while...\n  [NSThread sleepForTimeInterval:0.5];\n  done();\n});\n```\n\n`waitUntil` also optionally takes a timeout parameter:\n\n```swift\n// Swift\n\nwaitUntil(timeout: 10) { done in\n  // do some stuff that takes a while...\n  NSThread.sleepForTimeInterval(1)\n  done()\n}\n```\n\n```objc\n// Objective-C\n\nwaitUntilTimeout(10, ^(void (^done)(void)){\n  // do some stuff that takes a while...\n  [NSThread sleepForTimeInterval:1];\n  done();\n});\n```\n\nNote: waitUntil triggers its timeout code on the main thread. Blocking the main\nthread will cause Nimble to stop the run loop to continue. This can cause test\npollution for whatever incomplete code that was running on the main thread.\nBlocking the main thread can be caused by blocking IO, calls to sleep(),\ndeadlocks, and synchronous IPC.\n\n## Objective-C Support\n\nNimble has full support for Objective-C. However, there are two things\nto keep in mind when using Nimble in Objective-C:\n\n1. All parameters passed to the `expect` function, as well as matcher\n   functions like `equal`, must be Objective-C objects:\n\n   ```objc\n   // Objective-C\n\n   @import Nimble;\n\n   expect(@(1 + 1)).to(equal(@2));\n   expect(@\"Hello world\").to(contain(@\"world\"));\n   ```\n\n2. To make an expectation on an expression that does not return a value,\n   such as `-[NSException raise]`, use `expectAction` instead of\n   `expect`:\n\n   ```objc\n   // Objective-C\n\n   expectAction(^{ [exception raise]; }).to(raiseException());\n   ```\n\n## Disabling Objective-C Shorthand\n\nNimble provides a shorthand for expressing expectations using the\n`expect` function. To disable this shorthand in Objective-C, define the\n`NIMBLE_DISABLE_SHORT_SYNTAX` macro somewhere in your code before\nimporting Nimble:\n\n```objc\n#define NIMBLE_DISABLE_SHORT_SYNTAX 1\n\n@import Nimble;\n\nNMB_expect(^{ return seagull.squawk; }, __FILE__, __LINE__).to(NMB_equal(@\"Squee!\"));\n```\n\n> Disabling the shorthand is useful if you're testing functions with\n  names that conflict with Nimble functions, such as `expect` or\n  `equal`. If that's not the case, there's no point in disabling the\n  shorthand.\n\n# Built-in Matcher Functions\n\nNimble includes a wide variety of matcher functions.\n\n## Equivalence\n\n```swift\n// Swift\n\n// Passes if actual is equivalent to expected:\nexpect(actual).to(equal(expected))\nexpect(actual) == expected\n\n// Passes if actual is not equivalent to expected:\nexpect(actual).toNot(equal(expected))\nexpect(actual) != expected\n```\n\n```objc\n// Objective-C\n\n// Passes if actual is equivalent to expected:\nexpect(actual).to(equal(expected))\n\n// Passes if actual is not equivalent to expected:\nexpect(actual).toNot(equal(expected))\n```\n\nValues must be `Equatable`, `Comparable`, or subclasses of `NSObject`.\n`equal` will always fail when used to compare one or more `nil` values.\n\n## Identity\n\n```swift\n// Swift\n\n// Passes if actual has the same pointer address as expected:\nexpect(actual).to(beIdenticalTo(expected))\nexpect(actual) === expected\n\n// Passes if actual does not have the same pointer address as expected:\nexpect(actual).toNot(beIdenticalTo(expected))\nexpect(actual) !== expected\n```\n\n```objc\n// Objective-C\n\n// Passes if actual has the same pointer address as expected:\nexpect(actual).to(beIdenticalTo(expected));\n\n// Passes if actual does not have the same pointer address as expected:\nexpect(actual).toNot(beIdenticalTo(expected));\n```\n\n## Comparisons\n\n```swift\n// Swift\n\nexpect(actual).to(beLessThan(expected))\nexpect(actual) < expected\n\nexpect(actual).to(beLessThanOrEqualTo(expected))\nexpect(actual) <= expected\n\nexpect(actual).to(beGreaterThan(expected))\nexpect(actual) > expected\n\nexpect(actual).to(beGreaterThanOrEqualTo(expected))\nexpect(actual) >= expected\n```\n\n```objc\n// Objective-C\n\nexpect(actual).to(beLessThan(expected));\nexpect(actual).to(beLessThanOrEqualTo(expected));\nexpect(actual).to(beGreaterThan(expected));\nexpect(actual).to(beGreaterThanOrEqualTo(expected));\n```\n\n> Values given to the comparison matchers above must implement\n  `Comparable`.\n\nBecause of how computers represent floating point numbers, assertions\nthat two floating point numbers be equal will sometimes fail. To express\nthat two numbers should be close to one another within a certain margin\nof error, use `beCloseTo`:\n\n```swift\n// Swift\n\nexpect(actual).to(beCloseTo(expected, within: delta))\n```\n\n```objc\n// Objective-C\n\nexpect(actual).to(beCloseTo(expected).within(delta));\n```\n\nFor example, to assert that `10.01` is close to `10`, you can write:\n\n```swift\n// Swift\n\nexpect(10.01).to(beCloseTo(10, within: 0.1))\n```\n\n```objc\n// Objective-C\n\nexpect(@(10.01)).to(beCloseTo(@10).within(0.1));\n```\n\nThere is also an operator shortcut available in Swift:\n\n```swift\n// Swift\n\nexpect(actual) ≈ expected\nexpect(actual) ≈ (expected, delta)\n\n```\n(Type Option-x to get ≈ on a U.S. keyboard)\n\nThe former version uses the default delta of 0.0001. Here is yet another way to do this:\n\n```swift\n// Swift\n\nexpect(actual) ≈ expected ± delta\nexpect(actual) == expected ± delta\n\n```\n(Type Option-Shift-= to get ± on a U.S. keyboard)\n\nIf you are comparing arrays of floating point numbers, you'll find the following useful:\n\n```swift\n// Swift\n\nexpect([0.0, 2.0]) ≈ [0.0001, 2.0001]\nexpect([0.0, 2.0]).to(beCloseTo([0.1, 2.1], within: 0.1))\n\n```\n\n> Values given to the `beCloseTo` matcher must be coercable into a\n  `Double`.\n\n## Types/Classes\n\n```swift\n// Swift\n\n// Passes if instance is an instance of aClass:\nexpect(instance).to(beAnInstanceOf(aClass))\n\n// Passes if instance is an instance of aClass or any of its subclasses:\nexpect(instance).to(beAKindOf(aClass))\n```\n\n```objc\n// Objective-C\n\n// Passes if instance is an instance of aClass:\nexpect(instance).to(beAnInstanceOf(aClass));\n\n// Passes if instance is an instance of aClass or any of its subclasses:\nexpect(instance).to(beAKindOf(aClass));\n```\n\n> Instances must be Objective-C objects: subclasses of `NSObject`,\n  or Swift objects bridged to Objective-C with the `@objc` prefix.\n\nFor example, to assert that `dolphin` is a kind of `Mammal`:\n\n```swift\n// Swift\n\nexpect(dolphin).to(beAKindOf(Mammal))\n```\n\n```objc\n// Objective-C\n\nexpect(dolphin).to(beAKindOf([Mammal class]));\n```\n\n> `beAnInstanceOf` uses the `-[NSObject isMemberOfClass:]` method to\n  test membership. `beAKindOf` uses `-[NSObject isKindOfClass:]`.\n\n## Truthiness\n\n```swift\n// Passes if actual is not nil, true, or an object with a boolean value of true:\nexpect(actual).to(beTruthy())\n\n// Passes if actual is only true (not nil or an object conforming to BooleanType true):\nexpect(actual).to(beTrue())\n\n// Passes if actual is nil, false, or an object with a boolean value of false:\nexpect(actual).to(beFalsy())\n\n// Passes if actual is only false (not nil or an object conforming to BooleanType false):\nexpect(actual).to(beFalse())\n\n// Passes if actual is nil:\nexpect(actual).to(beNil())\n```\n\n```objc\n// Objective-C\n\n// Passes if actual is not nil, true, or an object with a boolean value of true:\nexpect(actual).to(beTruthy());\n\n// Passes if actual is only true (not nil or an object conforming to BooleanType true):\nexpect(actual).to(beTrue());\n\n// Passes if actual is nil, false, or an object with a boolean value of false:\nexpect(actual).to(beFalsy());\n\n// Passes if actual is only false (not nil or an object conforming to BooleanType false):\nexpect(actual).to(beFalse());\n\n// Passes if actual is nil:\nexpect(actual).to(beNil());\n```\n\n## Swift Error Handling\n\nIf you're using Swift 2.0+, you can use the `throwError` matcher to check if an error is thrown.\n\n```swift\n// Swift\n\n// Passes if somethingThatThrows() throws an ErrorType:\nexpect{ try somethingThatThrows() }.to(throwError())\n\n// Passes if somethingThatThrows() throws an error with a given domain:\nexpect{ try somethingThatThrows() }.to(throwError { (error: ErrorType) in\n    expect(error._domain).to(equal(NSCocoaErrorDomain))\n})\n\n// Passes if somethingThatThrows() throws an error with a given case:\nexpect{ try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError))\n\n// Passes if somethingThatThrows() throws an error with a given type:\nexpect{ try somethingThatThrows() }.to(throwError(errorType: MyError.self))\n```\n\nNote: This feature is only available in Swift.\n\n## Exceptions\n\n```swift\n// Swift\n\n// Passes if actual, when evaluated, raises an exception:\nexpect(actual).to(raiseException())\n\n// Passes if actual raises an exception with the given name:\nexpect(actual).to(raiseException(named: name))\n\n// Passes if actual raises an exception with the given name and reason:\nexpect(actual).to(raiseException(named: name, reason: reason))\n\n// Passes if actual raises an exception and it passes expectations in the block\n// (in this case, if name begins with 'a r')\nexpect { exception.raise() }.to(raiseException { (exception: NSException) in\n    expect(exception.name).to(beginWith(\"a r\"))\n})\n```\n\n```objc\n// Objective-C\n\n// Passes if actual, when evaluated, raises an exception:\nexpect(actual).to(raiseException())\n\n// Passes if actual raises an exception with the given name\nexpect(actual).to(raiseException().named(name))\n\n// Passes if actual raises an exception with the given name and reason:\nexpect(actual).to(raiseException().named(name).reason(reason))\n\n// Passes if actual raises an exception and it passes expectations in the block\n// (in this case, if name begins with 'a r')\nexpect(actual).to(raiseException().satisfyingBlock(^(NSException *exception) {\n    expect(exception.name).to(beginWith(@\"a r\"));\n}));\n```\n\nNote: Swift currently doesn't have exceptions (see [#220](https://github.com/Quick/Nimble/issues/220#issuecomment-172667064)). Only Objective-C code can raise\nexceptions that Nimble will catch.\n\n## Collection Membership\n\n```swift\n// Swift\n\n// Passes if all of the expected values are members of actual:\nexpect(actual).to(contain(expected...))\n\n// Passes if actual is an empty collection (it contains no elements):\nexpect(actual).to(beEmpty())\n```\n\n```objc\n// Objective-C\n\n// Passes if expected is a member of actual:\nexpect(actual).to(contain(expected));\n\n// Passes if actual is an empty collection (it contains no elements):\nexpect(actual).to(beEmpty());\n```\n\n> In Swift `contain` takes any number of arguments. The expectation\n  passes if all of them are members of the collection. In Objective-C,\n  `contain` only takes one argument [for now](https://github.com/Quick/Nimble/issues/27).\n\nFor example, to assert that a list of sea creature names contains\n\"dolphin\" and \"starfish\":\n\n```swift\n// Swift\n\nexpect([\"whale\", \"dolphin\", \"starfish\"]).to(contain(\"dolphin\", \"starfish\"))\n```\n\n```objc\n// Objective-C\n\nexpect(@[@\"whale\", @\"dolphin\", @\"starfish\"]).to(contain(@\"dolphin\"));\nexpect(@[@\"whale\", @\"dolphin\", @\"starfish\"]).to(contain(@\"starfish\"));\n```\n\n> `contain` and `beEmpty` expect collections to be instances of\n  `NSArray`, `NSSet`, or a Swift collection composed of `Equatable` elements.\n\nTo test whether a set of elements is present at the beginning or end of\nan ordered collection, use `beginWith` and `endWith`:\n\n```swift\n// Swift\n\n// Passes if the elements in expected appear at the beginning of actual:\nexpect(actual).to(beginWith(expected...))\n\n// Passes if the the elements in expected come at the end of actual:\nexpect(actual).to(endWith(expected...))\n```\n\n```objc\n// Objective-C\n\n// Passes if the elements in expected appear at the beginning of actual:\nexpect(actual).to(beginWith(expected));\n\n// Passes if the the elements in expected come at the end of actual:\nexpect(actual).to(endWith(expected));\n```\n\n> `beginWith` and `endWith` expect collections to be instances of\n  `NSArray`, or ordered Swift collections composed of `Equatable`\n  elements.\n\n  Like `contain`, in Objective-C `beginWith` and `endWith` only support\n  a single argument [for now](https://github.com/Quick/Nimble/issues/27).\n\n## Strings\n\n```swift\n// Swift\n\n// Passes if actual contains substring expected:\nexpect(actual).to(contain(expected))\n\n// Passes if actual begins with substring:\nexpect(actual).to(beginWith(expected))\n\n// Passes if actual ends with substring:\nexpect(actual).to(endWith(expected))\n\n// Passes if actual is an empty string, \"\":\nexpect(actual).to(beEmpty())\n\n// Passes if actual matches the regular expression defined in expected:\nexpect(actual).to(match(expected))\n```\n\n```objc\n// Objective-C\n\n// Passes if actual contains substring expected:\nexpect(actual).to(contain(expected));\n\n// Passes if actual begins with substring:\nexpect(actual).to(beginWith(expected));\n\n// Passes if actual ends with substring:\nexpect(actual).to(endWith(expected));\n\n// Passes if actual is an empty string, \"\":\nexpect(actual).to(beEmpty());\n\n// Passes if actual matches the regular expression defined in expected:\nexpect(actual).to(match(expected))\n```\n\n## Checking if all elements of a collection pass a condition\n\n```swift\n// Swift\n\n// with a custom function:\nexpect([1,2,3,4]).to(allPass({$0 < 5}))\n\n// with another matcher:\nexpect([1,2,3,4]).to(allPass(beLessThan(5)))\n```\n\n```objc\n// Objective-C\n\nexpect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5)));\n```\n\nFor Swift the actual value has to be a SequenceType, e.g. an array, a set or a custom seqence type.\n\nFor Objective-C the actual value has to be a NSFastEnumeration, e.g. NSArray and NSSet, of NSObjects and only the variant which\nuses another matcher is available here.\n\n## Verify collection count\n\n```swift\n// passes if actual collection's count is equal to expected\nexpect(actual).to(haveCount(expected))\n\n// passes if actual collection's count is not equal to expected\nexpect(actual).notTo(haveCount(expected))\n```\n\n```objc\n// passes if actual collection's count is equal to expected\nexpect(actual).to(haveCount(expected))\n\n// passes if actual collection's count is not equal to expected\nexpect(actual).notTo(haveCount(expected))\n```\n\nFor Swift the actual value must be a `CollectionType` such as array, dictionary or set.\n\nFor Objective-C the actual value has to be one of the following classes `NSArray`, `NSDictionary`, `NSSet`, `NSHashTable` or one of their subclasses.\n\n## Matching a value to any of a group of matchers\n\n```swift\n// passes if actual is either less than 10 or greater than 20\nexpect(actual).to(satisfyAnyOf(beLessThan(10), beGreaterThan(20)))\n\n// can include any number of matchers -- the following will pass\n// **be careful** -- too many matchers can be the sign of an unfocused test\nexpect(6).to(satisfyAnyOf(equal(2), equal(3), equal(4), equal(5), equal(6), equal(7)))\n\n// in Swift you also have the option to use the || operator to achieve a similar function\nexpect(82).to(beLessThan(50) || beGreaterThan(80))\n```\n\n```objc\n// passes if actual is either less than 10 or greater than 20\nexpect(actual).to(satisfyAnyOf(beLessThan(@10), beGreaterThan(@20)))\n\n// can include any number of matchers -- the following will pass\n// **be careful** -- too many matchers can be the sign of an unfocused test\nexpect(@6).to(satisfyAnyOf(equal(@2), equal(@3), equal(@4), equal(@5), equal(@6), equal(@7)))\n```\n\nNote: This matcher allows you to chain any number of matchers together. This provides flexibility, \n      but if you find yourself chaining many matchers together in one test, consider whether you  \n      could instead refactor that single test into multiple, more precisely focused tests for \n      better coverage. \n\n# Writing Your Own Matchers\n\nIn Nimble, matchers are Swift functions that take an expected\nvalue and return a `MatcherFunc` closure. Take `equal`, for example:\n\n```swift\n// Swift\n\npublic func equal<T: Equatable>(expectedValue: T?) -> MatcherFunc<T?> {\n  return MatcherFunc { actualExpression, failureMessage in\n    failureMessage.postfixMessage = \"equal <\\(expectedValue)>\"\n    return actualExpression.evaluate() == expectedValue\n  }\n}\n```\n\nThe return value of a `MatcherFunc` closure is a `Bool` that indicates\nwhether the actual value matches the expectation: `true` if it does, or\n`false` if it doesn't.\n\n> The actual `equal` matcher function does not match when either\n  `actual` or `expected` are nil; the example above has been edited for\n  brevity.\n\nSince matchers are just Swift functions, you can define them anywhere:\nat the top of your test file, in a file shared by all of your tests, or\nin an Xcode project you distribute to others.\n\n> If you write a matcher you think everyone can use, consider adding it\n  to Nimble's built-in set of matchers by sending a pull request! Or\n  distribute it yourself via GitHub.\n\nFor examples of how to write your own matchers, just check out the\n[`Matchers` directory](https://github.com/Quick/Nimble/tree/master/Nimble/Matchers)\nto see how Nimble's built-in set of matchers are implemented. You can\nalso check out the tips below.\n\n## Lazy Evaluation\n\n`actualExpression` is a lazy, memoized closure around the value provided to the\n`expect` function. The expression can either be a closure or a value directly\npassed to `expect(...)`. In order to determine whether that value matches,\ncustom matchers should call `actualExpression.evaluate()`:\n\n```swift\n// Swift\n\npublic func beNil<T>() -> MatcherFunc<T?> {\n  return MatcherFunc { actualExpression, failureMessage in\n    failureMessage.postfixMessage = \"be nil\"\n    return actualExpression.evaluate() == nil\n  }\n}\n```\n\nIn the above example, `actualExpression` is not `nil`--it is a closure\nthat returns a value. The value it returns, which is accessed via the\n`evaluate()` method, may be `nil`. If that value is `nil`, the `beNil`\nmatcher function returns `true`, indicating that the expectation passed.\n\nUse `expression.isClosure` to determine if the expression will be invoking\na closure to produce its value.\n\n## Type Checking via Swift Generics\n\nUsing Swift's generics, matchers can constrain the type of the actual value\npassed to the `expect` function by modifying the return type.\n\nFor example, the following matcher, `haveDescription`, only accepts actual\nvalues that implement the `Printable` protocol. It checks their `description`\nagainst the one provided to the matcher function, and passes if they are the same:\n\n```swift\n// Swift\n\npublic func haveDescription(description: String) -> MatcherFunc<Printable?> {\n  return MatcherFunc { actual, failureMessage in\n    return actual.evaluate().description == description\n  }\n}\n```\n\n## Customizing Failure Messages\n\nBy default, Nimble outputs the following failure message when an\nexpectation fails:\n\n```\nexpected to match, got <\\(actual)>\n```\n\nYou can customize this message by modifying the `failureMessage` struct\nfrom within your `MatcherFunc` closure. To change the verb \"match\" to\nsomething else, update the `postfixMessage` property:\n\n```swift\n// Swift\n\n// Outputs: expected to be under the sea, got <\\(actual)>\nfailureMessage.postfixMessage = \"be under the sea\"\n```\n\nYou can change how the `actual` value is displayed by updating\n`failureMessage.actualValue`. Or, to remove it altogether, set it to\n`nil`:\n\n```swift\n// Swift\n\n// Outputs: expected to be under the sea\nfailureMessage.actualValue = nil\nfailureMessage.postfixMessage = \"be under the sea\"\n```\n\n## Supporting Objective-C\n\nTo use a custom matcher written in Swift from Objective-C, you'll have\nto extend the `NMBObjCMatcher` class, adding a new class method for your\ncustom matcher. The example below defines the class method\n`+[NMBObjCMatcher beNilMatcher]`:\n\n```swift\n// Swift\n\nextension NMBObjCMatcher {\n  public class func beNilMatcher() -> NMBObjCMatcher {\n    return NMBObjCMatcher { actualBlock, failureMessage, location in\n      let block = ({ actualBlock() as NSObject? })\n      let expr = Expression(expression: block, location: location)\n      return beNil().matches(expr, failureMessage: failureMessage)\n    }\n  }\n}\n```\n\nThe above allows you to use the matcher from Objective-C:\n\n```objc\n// Objective-C\n\nexpect(actual).to([NMBObjCMatcher beNilMatcher]());\n```\n\nTo make the syntax easier to use, define a C function that calls the\nclass method:\n\n```objc\n// Objective-C\n\nFOUNDATION_EXPORT id<NMBMatcher> beNil() {\n  return [NMBObjCMatcher beNilMatcher];\n}\n```\n\n### Properly Handling `nil` in Objective-C Matchers\n\nWhen supporting Objective-C, make sure you handle `nil` appropriately.\nLike [Cedar](https://github.com/pivotal/cedar/issues/100),\n**most matchers do not match with nil**. This is to bring prevent test\nwriters from being surprised by `nil` values where they did not expect\nthem.\n\nNimble provides the `beNil` matcher function for test writer that want\nto make expectations on `nil` objects:\n\n```objc\n// Objective-C\n\nexpect(nil).to(equal(nil)); // fails\nexpect(nil).to(beNil());    // passes\n```\n\nIf your matcher does not want to match with nil, you use `NonNilMatcherFunc`\nand the `canMatchNil` constructor on `NMBObjCMatcher`. Using both types will\nautomatically generate expected value failure messages when they're nil.\n\n```swift\n\npublic func beginWith<S: SequenceType, T: Equatable where S.Generator.Element == T>(startingElement: T) -> NonNilMatcherFunc<S> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"begin with <\\(startingElement)>\"\n        if let actualValue = actualExpression.evaluate() {\n            var actualGenerator = actualValue.generate()\n            return actualGenerator.next() == startingElement\n        }\n        return false\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let actual = actualExpression.evaluate()\n            let expr = actualExpression.cast { $0 as? NMBOrderedCollection }\n            return beginWith(expected).matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n```\n\n# Installing Nimble\n\n> Nimble can be used on its own, or in conjunction with its sister\n  project, [Quick](https://github.com/Quick/Quick). To install both\n  Quick and Nimble, follow [the installation instructions in the Quick\n  README](https://github.com/Quick/Quick#how-to-install-quick).\n\nNimble can currently be installed in one of two ways: using CocoaPods, or with\ngit submodules.\n\n## Installing Nimble as a Submodule\n\nTo use Nimble as a submodule to test your iOS or OS X applications, follow these\n4 easy steps:\n\n1. Clone the Nimble repository\n2. Add Nimble.xcodeproj to the Xcode workspace for your project\n3. Link Nimble.framework to your test target\n4. Start writing expectations!\n\nFor more detailed instructions on each of these steps,\nread [How to Install Quick](https://github.com/Quick/Quick#how-to-install-quick).\nIgnore the steps involving adding Quick to your project in order to\ninstall just Nimble.\n\n## Installing Nimble via CocoaPods\n\nTo use Nimble in CocoaPods to test your iOS or OS X applications, add Nimble to\nyour podfile and add the ```use_frameworks!``` line to enable Swift support for\nCocoapods.\n\n```ruby\nplatform :ios, '8.0'\n\nsource 'https://github.com/CocoaPods/Specs.git'\n\n# Whatever pods you need for your app go here\n\ntarget 'YOUR_APP_NAME_HERE_Tests', :exclusive => true do\n  use_frameworks!\n  pod 'Nimble', '~> 3.0.0'\nend\n```\n\nFinally run `pod install`.\n\n## Using Nimble without XCTest\n\nNimble is integrated with XCTest to allow it work well when used in Xcode test\nbundles, however it can also be used in a standalone app. After installing\nNimble using one of the above methods, there are two additional steps required\nto make this work.\n\n1. Create a custom assertion handler and assign an instance of it to the\n   global `NimbleAssertionHandler` variable. For example:\n\n```swift\nclass MyAssertionHandler : AssertionHandler {\n    func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        if (!assertion) {\n            print(\"Expectation failed: \\(message.stringValue)\")\n        }\n    }\n}\n```\n```swift\n// Somewhere before you use any assertions\nNimbleAssertionHandler = MyAssertionHandler()\n```\n\n2. Add a post-build action to fix an issue with the Swift XCTest support\n   library being unnecessarily copied into your app\n  * Edit your scheme in Xcode, and navigate to Build -> Post-actions\n  * Click the \"+\" icon and select \"New Run Script Action\"\n  * Open the \"Provide build settings from\" dropdown and select your target\n  * Enter the following script contents:\n```\nrm \"${SWIFT_STDLIB_TOOL_DESTINATION_DIR}/libswiftXCTest.dylib\"\n```\n\nYou can now use Nimble assertions in your code and handle failures as you see\nfit.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/circle.yml",
    "content": "machine:\n  xcode:\n    version: \"7.0\"\n\ntest:\n  override:\n    - NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 ./test ios\n    - NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 ./test osx\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/script/release",
    "content": "#!/usr/bin/env sh\nREMOTE_BRANCH=master\nPOD_NAME=Nimble\nPODSPEC=Nimble.podspec\nGITHUB_TAGS_URL=https://github.com/Quick/Nimble/tags\nCARTHAGE_FRAMEWORK_NAME=Nimble\n\nCARTHAGE=${CARTHAGE:-carthage}\nPOD=${COCOAPODS:-pod}\n\nfunction help {\n    echo \"Usage: release VERSION RELEASE_NOTES [-f]\"\n    echo\n    echo \"VERSION should be the version to release, should not include the 'v' prefix\"\n    echo \"RELEASE_NOTES should be a file that lists all the release notes for this version\"\n    echo \"              if file does not exist, creates a git-style commit with a diff as a comment\"\n    echo\n    echo \"FLAGS\"\n    echo \"  -f  Forces override of tag\"\n    echo\n    echo \"  Example: ./release 1.0.0-rc.2 ./release-notes.txt\"\n    echo\n    echo \"HINT: use 'git diff <PREVIOUS_TAG>...HEAD' to build the release notes\"\n    echo\n    exit 2\n}\n\nfunction die {\n    echo \"[ERROR] $@\"\n    echo\n    exit 1\n}\n\nif [ $# -lt 2 ]; then\n    help\nfi\n\nVERSION=$1\nRELEASE_NOTES=$2\nFORCE_TAG=$3\n\nVERSION_TAG=\"v$VERSION\"\n\necho \"-> Verifying Local Directory for Release\"\n\nif [ -z \"`which $CARTHAGE`\" ]; then\n    die \"Carthage is required to produce a release. Aborting.\"\nfi\necho \" > Carthage is installed\"\n\nif [ -z \"`which $POD`\" ]; then\n    die \"Cocoapods is required to produce a release. Aborting.\"\nfi\necho \" > Cocoapods is installed\"\n\necho \" > Is this a reasonable tag?\"\n\necho $VERSION_TAG | grep -q \"^vv\"\nif [ $? -eq 0 ]; then\n    die \"This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix.\"\nfi\n\necho $VERSION_TAG | grep -q -E \"^v\\d+\\.\\d+\\.\\d+(-\\w+(\\.\\d)?)?\\$\"\nif [ $? -ne 0 ]; then\n    die \"This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form.\"\nfi\n\necho \" > Is this version ($VERSION) unique?\"\ngit describe --exact-match \"$VERSION_TAG\" > /dev/null 2>&1\nif [ $? -eq 0 ]; then\n    if [ -z \"$FORCE_TAG\" ]; then\n        die \"This tag ($VERSION) already exists. Aborting. Append '-f' to override\"\n    else\n        echo \" > NO, but force was specified.\"\n    fi\nelse\n    echo \" > Yes, tag is unique\"\nfi\n\nif [ ! -f \"$RELEASE_NOTES\" ]; then\n    echo \" > Failed to find $RELEASE_NOTES. Prompting editor\"\n    RELEASE_NOTES=.release-changes\n    LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format=\"%(refname:short)\" | grep -E \"^v\\d+\\.\\d+\\.\\d+(-\\w+(\\.\\d)?)?\\$\" | ruby -e 'puts STDIN.read.split(\"\\n\").sort { |a,b| Gem::Version.new(a.gsub(/^v/, \"\")) <=> Gem::Version.new(b.gsub(/^v/, \"\")) }.last'`\n    echo \" > Latest tag ${LATEST_TAG}\"\n    echo \"${POD_NAME} v$VERSION\" > $RELEASE_NOTES\n    echo \"================\" >> $RELEASE_NOTES\n    echo >> $RELEASE_NOTES\n    echo \"# Changelog from ${LATEST_TAG}..HEAD\" >> $RELEASE_NOTES\n    git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES\n    $EDITOR $RELEASE_NOTES\n    diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1\n    STATUS=$?\n    rm ${RELEASE_NOTES}.backup\n    if [ $STATUS -eq 0 ]; then\n        rm $RELEASE_NOTES\n        die \"No changes in release notes file. Aborting.\"\n    fi\nfi\necho \" > Release notes: $RELEASE_NOTES\"\n\nif [ ! -f \"$PODSPEC\" ]; then\n    die \"Cannot find podspec: $PODSPEC. Aborting.\"\nfi\necho \" > Podspec exists\"\n\ngit config --get user.signingkey > /dev/null || {\n    echo \"[ERROR] No PGP found to sign tag. Aborting.\"\n    echo\n    echo \"  Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source.\"\n    echo \"  From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any\"\n    echo \"  intermediate between you and the end-users to modify the git repository.\"\n    echo\n    echo \"  While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'\"\n    echo \"  from the official maintainers.\"\n    echo\n    echo \"  If you're creating your PGP key for the first time, use RSA with at least 4096 bits.\"\n    echo\n    echo \"Related resources:\"\n    echo \" - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work\"\n    echo \" - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a\"\n    echo\n    exit 2\n}\necho \" > Found PGP key for git\"\n\n# Verify cocoapods trunk ownership\npod trunk me | grep -q \"$POD_NAME\" || die \"You do not have access to pod repository $POD_NAME. Aborting.\"\necho \" > Verified ownership to $POD_NAME pod\"\n\n\necho \"--- Releasing version $VERSION (tag: $VERSION_TAG)...\"\n\nfunction restore_podspec {\n    if [ -f \"${PODSPEC}.backup\" ]; then\n        mv -f ${PODSPEC}{.backup,}\n    fi\n}\n\necho \"-> Ensuring no differences to origin/$REMOTE_BRANCH\"\ngit fetch origin || die \"Failed to fetch origin\"\ngit diff --quiet HEAD \"origin/$REMOTE_BRANCH\" || die \"HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely\"\n\n# Don't build binaries: see https://github.com/Carthage/Carthage/issues/924\n# echo \"-> Building Carthage release\"\n# $CARTHAGE build --no-skip-current || die \"Failed to build framework for carthage\"\n\necho \"-> Setting podspec version\"\ncat \"$PODSPEC\" | grep 's.version' | grep -q \"\\\"$VERSION\\\"\"\nSET_PODSPEC_VERSION=$?\nif [ $SET_PODSPEC_VERSION -eq 0 ]; then\n    echo \" > Podspec already set to $VERSION. Skipping.\"\nelse\n    sed -i.backup \"s/s.version *= *\\\".*\\\"/s.version      = \\\"$VERSION\\\"/g\" \"$PODSPEC\" || {\n        restore_podspec\n        die \"Failed to update version in podspec\"\n    }\n\n    git add ${PODSPEC} || { restore_podspec; die \"Failed to add ${PODSPEC} to INDEX\"; }\n    git commit -m \"Bumping version to $VERSION\" || { restore_podspec; die \"Failed to push updated version: $VERSION\"; }\nfi\n\nif [ -z \"$FORCE_TAG\" ]; then\n    echo \"-> Tagging version\"\n    git tag -s \"$VERSION_TAG\" -F \"$RELEASE_NOTES\" || die \"Failed to tag version\"\n    echo \"-> Pushing tag to origin\"\n    git push origin \"$VERSION_TAG\" || die \"Failed to push tag '$VERSION_TAG' to origin\"\nelse\n    echo \"-> Tagging version (force)\"\n    git tag -f -s \"$VERSION_TAG\" -F \"$RELEASE_NOTES\" || die \"Failed to tag version\"\n    echo \"-> Pushing tag to origin (force)\"\n    git push origin \"$VERSION_TAG\" -f || die \"Failed to push tag '$VERSION_TAG' to origin\"\nfi\n\nif [ $SET_PODSPEC_VERSION -ne 0 ]; then\n    rm $RELEASE_NOTES\n    git push origin \"$REMOTE_BRANCH\" || die \"Failed to push to origin\"\n    echo \" > Pushed version to origin\"\nfi\n\necho\necho \"---------------- Released as $VERSION_TAG ----------------\"\necho \n# Don't build binaries: see https://github.com/Carthage/Carthage/issues/924\n# echo \"Archiving carthage release...\"\n# $CARTHAGE archive \"$CARTHAGE_FRAMEWORK_NAME\" || die \"Failed to archive framework for carthage\"\n\necho\necho \"Pushing to pod trunk...\"\n\n$POD trunk push \"$PODSPEC\"\n\necho\necho \"================ Finalizing the Release ================\"\necho\necho \" - Go to $GITHUB_TAGS_URL and mark this as a release.\"\necho \"   - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for Github styling.\"\n# echo \"   - Attach ${CARTHAGE_FRAMEWORK_NAME}.framework.zip to it.\"\necho \" - Announce!\"\n\nrm ${PODSPEC}.backup\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Nimble/test",
    "content": "#!/bin/sh\n\nBUILD_DIR=`pwd`/build\nLATEST_IOS_SDK_VERSION=`xcodebuild -showsdks | grep iphonesimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split(\"\\n\").last'`\nLATEST_OSX_SDK_VERSION=`xcodebuild -showsdks | grep 'macosx' | cut -d ' ' -f 3 | ruby -e 'puts STDIN.read.chomp.split(\"\\n\").last'`\nBUILD_IOS_SDK_VERSION=${NIMBLE_BUILD_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION}\nRUNTIME_IOS_SDK_VERSION=${NIMBLE_RUNTIME_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION}\nBUILD_OSX_SDK_VERSION=${NIMBLE_BUILD_OSX_SDK_VERSION:-$LATEST_OSX_SDK_VERSION}\n\nset -e\n\nGREEN=\"\\x1B[01;92m\"\nCLEAR=\"\\x1B[0m\"\n\nfunction color_if_overridden {\n    local actual=$1\n    local env_var=$2\n    if [ -z \"$env_var\" ]; then\n        printf \"$actual\"\n    else\n        printf \"$GREEN$actual$CLEAR\"\n    fi\n}\n\nfunction print_env {\n    echo \"=== Environment ===\"\n    echo \" iOS:\"\n    echo \"   Latest iOS SDK: $LATEST_IOS_SDK_VERSION\"\n    echo \"   Building with iOS SDK: `color_if_overridden $BUILD_IOS_SDK_VERSION $NIMBLE_BUILD_IOS_SDK_VERSION`\"\n    echo \"   Running with iOS SDK: `color_if_overridden $RUNTIME_IOS_SDK_VERSION $NIMBLE_RUNTIME_IOS_SDK_VERSION`\"\n    echo\n    echo \" Mac OS X:\"\n    echo \"   Latest OS X SDK: $LATEST_OSX_SDK_VERSION\"\n    echo \"   Building with OS X SDK: `color_if_overridden $BUILD_OSX_SDK_VERSION $NIMBLE_BUILD_OSX_SDK_VERSION`\"\n    echo\n    echo \"======= END =======\"\n    echo\n}\n\nfunction run {\n    echo \"$GREEN==>$CLEAR $@\"\n    \"$@\"\n}\n\nfunction test_ios {\n    run osascript -e 'tell app \"iOS Simulator\" to quit'\n    run xcodebuild -project Nimble.xcodeproj -scheme \"Nimble-iOS\" -configuration \"Debug\" -sdk \"iphonesimulator$BUILD_IOS_SDK_VERSION\" -destination \"name=iPad Air,OS=$RUNTIME_IOS_SDK_VERSION\" build test\n\n    run osascript -e 'tell app \"iOS Simulator\" to quit'\n    run xcodebuild -project Nimble.xcodeproj -scheme \"Nimble-iOS\" -configuration \"Debug\" -sdk \"iphonesimulator$BUILD_IOS_SDK_VERSION\" -destination \"name=iPhone 5s,OS=$RUNTIME_IOS_SDK_VERSION\" build test\n}\n\nfunction test_osx {\n    run xcodebuild -project Nimble.xcodeproj -scheme \"Nimble-OSX\" -configuration \"Debug\" -sdk \"macosx$BUILD_OSX_SDK_VERSION\" build test\n}\n\nfunction test() {\n    test_ios\n    test_osx\n}\n\nfunction clean {\n    run rm -rf ~/Library/Developer/Xcode/DerivedData\\; true\n}\n\nfunction help {\n    echo \"Usage: $0 COMMANDS\"\n    echo\n    echo \"COMMANDS:\"\n    echo \" clean        - Cleans the derived data directory of Xcode. Assumes default location\"\n    echo \" ios          - Runs the tests as an iOS device\"\n    echo \" osx          - Runs the tests on Mac OS X 10.10 (Yosemite and newer only)\"\n    echo \" all          - Runs both ios and osx tests\"\n    echo \" help         - Displays this help\"\n    echo\n    exit 1\n}\n\nfunction main {\n    print_env\n    for arg in $@\n    do\n        case \"$arg\" in\n            clean) clean ;;\n            ios) test_ios ;;\n            osx) test_osx ;;\n            test) test ;;\n            all) test ;;\n            help) help ;;\n        esac\n    done\n\n    if [ $# -eq 0 ]; then\n        clean\n        test\n    fi\n}\n\nmain $@\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/.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*.xcscmblueprint\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\n# Carthage\n#\n# Add this line if you want to avoid checking in source code from Carthage dependencies.\n# Carthage/Checkouts\n\nCarthage/Build\n\n# Mac OS X\n.DS_Store\n\n# Quick\nQuick.framework.zip\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/.gitmodules",
    "content": "[submodule \"Externals/Nimble\"]\n\tpath = Externals/Nimble\n\turl = https://github.com/Quick/Nimble.git\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/.travis.yml",
    "content": "osx_image: xcode7\nlanguage: objective-c\n\nbefore_install: git submodule update --init --recursive\nscript: \"rake\"\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/CONTRIBUTING.md",
    "content": "<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n**Table of Contents**  *generated with [DocToc](http://doctoc.herokuapp.com/)*\n\n- [Welcome to Quick!](#welcome-to-quick!)\n  - [Reporting Bugs](#reporting-bugs)\n  - [Building the Project](#building-the-project)\n  - [Pull Requests](#pull-requests)\n    - [Style Conventions](#style-conventions)\n  - [Core Members](#core-members)\n    - [Code of Conduct](#code-of-conduct)\n  - [Creating a Release](#creating-a-release)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n# Welcome to Quick!\n\nWe're building a testing framework for a new generation of Swift and\nObjective-C developers.\n\nQuick should be easy to use and easy to maintain. Let's keep things\nsimple and well-tested.\n\n## Reporting Bugs\n\nNothing is off-limits. If you're having a problem, we want to hear about\nit.\n\n- See a crash? File an issue.\n- Code isn't compiling, but you don't know why? Sounds like you should\n  submit a new issue, bud.\n- Went to the kitchen, only to forget why you went in the first place?\n  Better submit an issue.\n\nBe sure to include in your issue:\n\n- Your Xcode version (eg - Xcode 7.0.1 7A1001)\n- Your version of Quick / Nimble (eg - v0.7.0 or git sha `7d0b8c21357839a8c5228863b77faecf709254a9`)\n- What are the steps to reproduce this issue?\n\n## Building the Project\n\n- After cloning the repository, run `git submodule update --init` to pull the Nimble submodule.\n- Use `Quick.xcworkspace` to work on Quick. The workspace includes\n  Nimble, which is used in Quick's tests.\n\n## Pull Requests\n\n- Nothing is trivial. Submit pull requests for anything: typos,\n  whitespace, you name it.\n- Not all pull requests will be merged, but all will be acknowledged. If\n  no one has provided feedback on your request, ping one of the owners\n  by name.\n- Make sure your pull request includes any necessary updates to the\n  README or other documentation.\n- Be sure the unit tests for both the OS X and iOS targets of both Quick\n  and Nimble pass before submitting your pull request. You can run all\n  the iOS and OS X unit tests using `rake`.\n- The `master` branch will always support the stable Xcode version. Other\n  branches will point to their corresponding versions they support.\n- If you're making a configuration change, make sure to edit both the xcode\n  project and the podspec file.\n\n### Style Conventions\n\n- Indent using 4 spaces.\n- Keep lines 100 characters or shorter. Break long statements into\n  shorter ones over multiple lines.\n- In Objective-C, use `#pragma mark -` to mark public, internal,\n  protocol, and superclass methods. See `QuickSpec.m` for an example.\n\n## Core Members\n\nIf a few of your pull requests have been merged, and you'd like a\ncontrolling stake in the project, file an issue asking for write access\nto the repository.\n\n### Code of Conduct\n\nYour conduct as a core member is your own responsibility, but here are\nsome \"ground rules\":\n\n- Feel free to push whatever you want to master, and (if you have\n  ownership permissions) to create any repositories you'd like.\n\n  Ideally, however, all changes should be submitted as GitHub pull\n  requests. No one should merge their own pull request, unless no\n  other core members respond for at least a few days.\n\n  Pull requests should be issued from personal forks. The Quick repo\n  should be reserved for long-running feature branches.\n\n  If you'd like to create a new repository, it'd be nice if you created\n  a GitHub issue and gathered some feedback first.\n\n- It'd be awesome if you could review, provide feedback on, and close\n  issues or pull requests submitted to the project. Please provide kind,\n  constructive feedback. Please don't be sarcastic or snarky.\n\n## Creating a Release\n\nThe process is relatively straight forward, but here's is a useful checklist for tagging:\n\n- Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD`\n- Run the release script: `./script/release A.B.C release-notes-file`\n- Go to [github releases](https://github.com/Quick/Quick/releases) and mark the tagged commit as a release.\n  - Use the same release notes you created for the tag, but tweak up formatting for github.\n  - Attach the carthage release `Quick.framework.zip` to the release.\n- Announce!\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ArrangeActAssert.md",
    "content": "# Effective Tests Using XCTest: Arrange, Act, and Assert\n\nWhether you're using XCTest, Quick, or another testing framework, you can write\neffective unit tests by following a simple pattern:\n\n1. Arrange\n2. Act\n3. Assert\n\n## Using Arrange, Act, and Assert\n\nFor example, let's look at a simple class called `Banana`:\n\n```swift\n// Banana/Banana.swift\n\n/** A delicious banana. Tastes better if you peel it first. */\npublic class Banana {\n  private var isPeeled = false\n\n  /** Peels the banana. */\n  public func peel() {\n    isPeeled = true\n  }\n\n  /** You shouldn't eat a banana unless it's been peeled. */\n  public var isEdible: Bool {\n    return isPeeled\n  }\n}\n```\n\nLet's verify the `Banana.peel()` method does what it's supposed to:\n\n```swift\n// BananaTests/BananaTests.swift\n\nclass BananaTests: XCTestCase {\n  func testPeel() {\n    // Arrange: Create the banana we'll be peeling.\n    let banana = Banana()\n\n    // Act: Peel the banana.\n    banana.peel()\n\n    // Assert: Verify that the banana is now edible.\n    XCTAssertTrue(banana.isEdible)\n  }\n}\n```\n\n## Using Clear Test Names\n\nOur `testPeel()` makes sure that, if the `Banana.peel()` method ever\nstops working right, we'll know. This usually happens when our application\ncode changes, which either means:\n\n1. We accidentally broke our application code, so we have to fix the application code\n2. We changed how our application code works--maybe because we're adding a new\n   feature--so we have to change the test code\n\nIf our tests start breaking, how do we know which one of these cases applies? It might\nsurprise you that **the name of the test** is our best indication. Good test names:\n\n1. Are clear about what is being tested.\n2. Are clear about when the test should pass or fail.\n\nIs our `testPeel()` method clearly named? Let's make it clearer:\n\n```diff\n// BananaTests.swift\n\n-func testPeel() {\n+func testPeel_makesTheBananaEdible() {\n  // Arrange: Create the banana we'll be peeling.\n  let banana = Banana()\n\n  // Act: Peel the banana.\n  banana.peel()\n\n  // Assert: Verify that the banana is now edible.\n  XCTAssertTrue(banana.isEdible)\n}\n```\n\nThe new name:\n\n1. Is clear about what is being tested: `testPeel` indicates it's the `Banana.peel()` method.\n2. Is clear about when the test should pass: `makesTheBananaEdible` indicates the\n   banana is edible once the method has been called.\n\n## Testing Conditions\n\nLet's say we want to offer people bananas, using a function called `offer()`:\n\n```swift\n// Banana/Offer.swift\n\n/** Given a banana, returns a string that can be used to offer someone the banana. */\npublic func offer(banana: Banana) -> String {\n  if banana.isEdible {\n    return \"Hey, want a banana?\"\n  } else {\n    return \"Hey, want me to peel this banana for you?\"\n  }\n}\n```\n\nOur application code does one of two things:\n\n1. Either it offers a banana that's already been peeled...\n2. ...or it offers an unpeeled banana.\n\nLet's write tests for these two cases:\n\n```swift\n// BananaTests/OfferTests.swift\n\nclass OfferTests: XCTestCase {\n  func testOffer_whenTheBananaIsPeeled_offersTheBanana() {\n    // Arrange: Create a banana and peel it.\n    let banana = Banana()\n    banana.peel()\n\n    // Act: Create the string used to offer the banana.\n    let message = offer(banana)\n\n    // Assert: Verify it's the right string.\n    XCTAssertEqual(message, \"Hey, want a banana?\")\n  }\n\n  func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() {\n    // Arrange: Create a banana.\n    let banana = Banana()\n\n    // Act: Create the string used to offer the banana.\n    let message = offer(banana)\n\n    // Assert: Verify it's the right string.\n    XCTAssertEqual(message, \"Hey, want me to peel this banana for you?\")\n  }\n}\n```\n\nOur test names clearly indicate the **conditions** under which our tests should pass:\nin the case that `whenTheBananaIsntPeeled`, `offer()` should `offersTheBanana`. And if\nthe banana isn't peeled? Well, we have a test for that, too!\n\nNotice that we have one test per `if` statement in our application code.\nThis is a great pattern when writing tests: it makes sure every set of conditions\nis tested. If one of those conditions no longer works, or needs to be changed, we'll know\nexactly which test needs to be looked at.\n\n## Shorter \"Arrange\" Steps with `XCTestCase.setUp()`\n\nBoth of our `OfferTests` tests contain the same \"Arrange\" code: they both\ncreate a banana. We should move that code into a single place. Why?\n\n1. As-is, if we change the `Banana` initializer, we'll have to change every test that creates a banana.\n2. Our test methods will be shorter--which is a good thing if (and **only if**) that makes\n   the tests easier to read.\n\nLet's move the `Banana` initialization into the `XCTestCase.setUp()` method, which is called\nonce before every test method.\n\n```diff\n// OfferTests.swift\n\nclass OfferTests: XCTestCase {\n+  var banana: Banana!\n+\n+  override func setUp() {\n+    super.setUp()\n+    banana = Banana()\n+  }\n+\n  func testOffer_whenTheBananaIsPeeled_offersTheBanana() {\n-    // Arrange: Create a banana and peel it.\n-    let banana = Banana()\n+    // Arrange: Peel the banana.\n    banana.peel()\n\n    // Act: Create the string used to offer the banana.\n    let message = offer(banana)\n\n    // Assert: Verify it's the right string.\n    XCTAssertEqual(message, \"Hey, want a banana?\")\n  }\n\n  func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() {\n-    // Arrange: Create a banana.\n-    let banana = Banana()\n-\n    // Act: Create the string used to offer the banana.\n    let message = offer(banana)\n\n    // Assert: Verify it's the right string.\n    XCTAssertEqual(message, \"Hey, want me to peel this banana for you?\")\n  }\n}\n```\n\n## Sharing \"Arrange\" Code Across Multiple Tests\n\nIf you find yourself using the same \"arrange\" steps across multiple tests,\nyou may want to define a helper function within your test target:\n\n```swift\n// BananaTests/BananaHelpers.swift\n\ninternal func createNewPeeledBanana() -> Banana {\n  let banana = Banana()\n  banana.peel()\n  return banana\n}\n```\n\n> Use a function to define your helpers: functions can't be subclassed, nor\n  can they retain any state. Subclassing and mutable state can make your tests\n  harder to read.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/BehavioralTesting.md",
    "content": "# Don't Test Code, Instead Verify Behavior\n\nTests should only fail if the application **behaves differently**.\nThey should test *what* the application code does, not *how* it does those things.\n\n- Tests that verify *what* an application does are **behavioral tests**.\n- Tests that break if the application code changes, even if the behavior\n  remains the same, are **brittle tests**.\n\nLet's say we have a banana database, called `GorillaDB`.\n`GorillaDB` is a key-value store for bananas. We can save bananas:\n\n```swift\nlet database = GorillaDB()\nlet banana = Banana()\ndatabase.save(banana: banana, key: \"my-banana\")\n```\n\nAnd we can restore bananas from disk later:\n\n```swift\nlet banana = database.load(key: \"my-banana\")\n```\n\n## Brittle Tests\n\nHow can we test this behavior? One way would be to check the size of the database\nafter we save a banana:\n\n```swift\n// GorillaDBTests.swift\n\nfunc testSave_savesTheBananaToTheDatabase() {\n  // Arrange: Create a database and get its original size.\n  let database = GorillaDB()\n  let originalSize = database.size\n\n  // Act: Save a banana to the database.\n  let banana = Banana()\n  database.save(banana: banana, key: \"test-banana\")\n\n  // Assert: The size of the database should have increased by one.\n  XCTAssertEqual(database.size, originalSize + 1)\n}\n```\n\n\nImagine, however, that the source code of `GorillaDB` changes. In order to make\nreading bananas from the database faster, it maintains a cache of the most frequently\nused bananas. `GorillaDB.size` grows as the size of the cache grows, and our test fails:\n\n![](http://cl.ly/image/0G2s3B3d2F3O/Screen%20Shot%202015-02-23%20at%204.07.32%20PM.png)\n\n## Behavioral Tests\n\nThe key to writing behavioral tests is determining exactly what you're expecting\nyour application code to do.\n\nIn the context of our `testSave_savesTheBananaToTheDatabase` test: what is the\nbehavior we expect when we \"save\" a banana to the database? \"Saving\" implies, to me,\nthat we can load it later. So instead of testing that the size of the database increases,\nwe should test that we can load a banana.\n\n```diff\n// GorillaDBTests.swift\n\nfunc testSave_savesTheBananaToTheDatabase() {\n  // Arrange: Create a database and get its original size.\n  let database = GorillaDB()\n-  let originalSize = database.size\n\n  // Act: Save a banana to the database.\n  let banana = Banana()\n  database.save(banana: banana, key: \"test-banana\")\n\n-  // Assert: The size of the database should have increased by one.\n-  XCTAssertEqual(database.size, originalSize + 1)\n+  // Assert: The bananas saved to and loaded from the database should be the same.\n+  XCTAssertEqual(database.load(key: \"test-banana\"), banana)\n}\n```\n\nThe key to writing behavioral tests is asking:\n\n- What exactly should this application code do?\n- Is my test verifying *only* that behavior?\n  Or could it fail due to other aspects of how the code works?\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/ConfiguringQuick.md",
    "content": "# Configuring How Quick Behaves\n\nYou can customize how Quick behaves by subclassing `QuickConfiguration` and\noverriding the `QuickConfiguration.Type.configure()` class method:\n\n```swift\n// Swift\n\nimport Quick\n\nclass ProjectDataTestConfiguration: QuickConfiguration {\n  override class func configure(configuration: Configuration) {\n    // ...set options on the configuration object here.\n  }\n}\n```\n\n```objc\n// Objective-C\n\n#import <Quick/Quick.h>\n\nQuickConfigurationBegin(ProjectDataTestConfiguration)\n\n+ (void)configure:(Configuration *configuration) {\n  // ...set options on the configuration object here.\n}\n\nQuickConfigurationEnd\n```\n\nProjects may include several configurations. Quick does not make any\nguarantee about the order in which those configurations are executed.\n\n## Adding Global `beforeEach` and `afterEach` Closures\n\nUsing `QuickConfiguration.beforeEach` and `QuickConfiguration.afterEach`, you\ncan specify closures to be run before or after *every* example in a test suite:\n\n```swift\n// Swift\n\nimport Quick\nimport Sea\n\nclass FinConfiguration: QuickConfiguration {\n  override class func configure(configuration: Configuration) {\n    configuration.beforeEach {\n      Dorsal.sharedFin().height = 0\n    }\n  }\n}\n```\n\n```objc\n// Objective-C\n\n#import <Quick/Quick.h>\n#import \"Dorsal.h\"\n\nQuickConfigurationBegin(FinConfiguration)\n\n+ (void)configure:(Configuration *)configuration {\n  [configuration beforeEach:^{\n    [Dorsal sharedFin].height = 0;\n  }];\n}\n\nQuickConfigurationEnd\n```\n\nIn addition, Quick allows you to access metadata regarding the current\nexample being run:\n\n```swift\n// Swift\n\nimport Quick\n\nclass SeaConfiguration: QuickConfiguration {\n  override class func configure(configuration: Configuration) {\n    configuration.beforeEach { exampleMetadata in\n      // ...use the example metadata object to access the current example name, and more.\n    }\n  }\n}\n```\n\n```objc\n// Objective-C\n\n#import <Quick/Quick.h>\n\nQuickConfigurationBegin(SeaConfiguration)\n\n+ (void)configure:(Configuration *)configuration {\n  [configuration beforeEachWithMetadata:^(ExampleMetadata *data) {\n    // ...use the example metadata object to access the current example name, and more.\n  }];\n}\n\nQuickConfigurationEnd\n```\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/InstallingFileTemplates.md",
    "content": "# Installing Quick File Templates\n\nThe Quick repository includes file templates for both Swift and\nObjective-C specs.\n\n## Alcatraz\n\nQuick templates can be installed via [Alcatraz](https://github.com/supermarin/Alcatraz),\na package manager for Xcode. Just search for the templates from the\nPackage Manager window.\n\n![](http://f.cl.ly/items/3T3q0G1j0b2t1V0M0T04/Screen%20Shot%202014-06-27%20at%202.01.10%20PM.png)\n\n## Manually via the Rakefile\n\nTo manually install the templates, just clone the repository and\nrun the `templates:install` rake task:\n\n```sh\n$ git clone git@github.com:Quick/Quick.git\n$ rake templates:install\n```\n\nUninstalling is easy, too:\n\n```sh\n$ rake templates:uninstall\n```\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/InstallingQuick.md",
    "content": "# Installing Quick\n\n> **If you're using Xcode 6.2 & Swift 1.1,** use Quick `v0.2.*`.\n> New releases are developed on the `swift-1.1` branch.\n>\n> **If you're using Xcode 6.3 & Swift 1.2,** use Quick `v0.3.*`.\n> New releases are developed on the `master` branch.\n>\n> **If you're using Xcode 7.0 & Swift 2.0,** use the latest version of Quick--`v0.6.0` at the time of writing.\n> New releases are developed on the `swift-2.0` branch.\n\n\n\nQuick provides the syntax to define examples and example groups. Nimble\nprovides the `expect(...).to` assertion syntax. You may use either one,\nor both, in your tests.\n\nThere are three recommended ways of linking Quick to your tests:\n\n1. [Git Submodules](#git-submodules)\n2. [CocoaPods](#cocoapods)\n3. [Carthage](#carthage)\n\nChoose one and follow the instructions below. Once you've completed them,\nyou should be able to `import Quick` from within files in your test target.\n\n## Git Submodules\n\nTo link Quick and Nimble using Git submodules:\n\n1. Add submodule for Quick.\n2. If you don't already have a `.xcworkspace` for your project, create one. ([Here's how](https://developer.apple.com/library/ios/recipes/xcode_help-structure_navigator/articles/Adding_an_Existing_Project_to_a_Workspace.html))\n3. Add `Quick.xcodeproj` to your project's `.xcworkspace`.\n4. Add `Nimble.xcodeproj` to your project's `.xcworkspace`. It exists in `path/to/Quick/Externals/Nimble`. By adding Nimble from Quick's dependencies (as opposed to adding directly as a submodule), you'll ensure that you're using the correct version of Nimble for whatever version of Quick you're using.\n5. Link `Quick.framework` and `Nimble.framework` in your test target's\n   \"Link Binary with Libraries\" build phase.\n\nFirst, if you don't already have one, create a directory for your Git submodules.\nLet's assume you have a directory named `Vendor`.\n\n**Step One:** Download Quick and Nimble as Git submodules:\n\n```sh\ngit submodule add git@github.com:Quick/Quick.git Vendor/Quick\ngit submodule add git@github.com:Quick/Nimble.git Vendor/Nimble\ngit submodule update --init --recursive\n```\n\n**Step Two:** Add the `Quick.xcodeproj` and `Nimble.xcodeproj` files downloaded above to\nyour project's `.xcworkspace`. For example, this is `Guanaco.xcworkspace`, the\nworkspace for a project that is tested using Quick and Nimble:\n\n![](http://f.cl.ly/items/2b2R0e1h09003u2f0Z3U/Screen%20Shot%202015-02-27%20at%202.19.37%20PM.png)\n\n**Step Three:** Link the `Quick.framework` during your test target's\n`Link Binary with Libraries` build phase. You should see two\n`Quick.frameworks`; one is for OS X, and the other is for iOS.\n\n![](http://cl.ly/image/2L0G0H1a173C/Screen%20Shot%202014-06-08%20at%204.27.48%20AM.png)\n\nDo the same for the `Nimble.framework`, and you're done!\n\n**Updating the Submodules:** If you ever want to update the Quick\nor Nimble submodules to latest version, enter the Quick directory\nand pull from the master repository:\n\n```sh\ncd /path/to/your/project/Vendor/Quick\ngit checkout master\ngit pull --rebase origin master\n```\n\nYour Git repository will track changes to submodules. You'll want to\ncommit the fact that you've updated the Quick submodule:\n\n```sh\ncd /path/to/your/project\ngit commit -m \"Updated Quick submodule\"\n```\n\n**Cloning a Repository that Includes a Quick Submodule:** After other people\nclone your repository, they'll have to pull down the submodules as well.\nThey can do so by running the `git submodule update` command:\n\n```sh\ngit submodule update --init --recursive\n```\n\nYou can read more about Git submodules [here](http://git-scm.com/book/en/Git-Tools-Submodules).\n\n## CocoaPods\n\nFirst, update CocoaPods to Version 0.36.0 or newer, which is necessary to install CocoaPods using Swift.\n\nThen, add Quick and Nimble to your Podfile. Additionally, the ```use_frameworks!``` line is necessary for using Swift in CocoaPods:\n\n```rb\n\n# Podfile\n\nuse_frameworks!\n\ndef testing_pods\n    # If you're using Xcode 7 / Swift 2\n    pod 'Quick', '~> 0.6.0'\n    pod 'Nimble', '2.0.0-rc.2'\n\n    # If you're using Xcode 6 / Swift 1.2\n    pod 'Quick', '~> 0.3.0'\n    pod 'Nimble', '~> 1.0.0'\nend\n\ntarget 'MyTests' do\n    testing_pods\nend\n\ntarget 'MyUITests' do\n    testing_pods\nend\n```\n\nFinally, download and link Quick and Nimble to your tests:\n\n```sh\npod install\n```\n\n### Using Swift 1.2?\n\nThe latest release of Quick (0.4.0) is for Swift 2 (Xcode 7), but the latest Nimble (1.0.0) is for Swift 1.2 (Xcode 6).\n\nIf you want Xcode 6 do:\n\n```sh\ntarget 'MyTests' do\n  use_frameworks!\n  pod 'Quick', '~>0.3.0'\n  pod 'Nimble', '~>1.0.0'\nend\n```\n\n## [Carthage](https://github.com/Carthage/Carthage)\n\nAs test targets do not have the \"Embedded Binaries\" section, the frameworks must\nbe added to the target's \"Link Binary With Libraries\" as well as a \"Copy Files\" build phase\nto copy them to the target's Frameworks destination.\n\n > As Carthage builds dynamic frameworks, you will need a valid code signing identity set up.\n\n1. Add Quick to your [`Cartfile.private`](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfileprivate):\n\n    ```\n    github \"Quick/Quick\"\n    github \"Quick/Nimble\"\n    ```\n\n2. Run `carthage update`.\n3. From your `Carthage/Build/[platform]/` directory, add both Quick and Nimble to your test target's \"Link Binary With Libraries\" build phase:\n    ![](http://i.imgur.com/pBkDDk5.png)\n\n4. For your test target, create a new build phase of type \"Copy Files\":\n    ![](http://i.imgur.com/jZATIjQ.png)\n\n5. Set the \"Destination\" to \"Frameworks\", then add both frameworks:\n    ![](http://i.imgur.com/rpnyWGH.png)\n\nThis is not \"the one and only way\" to use Carthage to manage dependencies.\nFor further reference check out the [Carthage documentation](https://github.com/Carthage/Carthage/blob/master/README.md).\n\n### (Not Recommended) Running Quick Specs on a Physical iOS Device\n\nIn order to run specs written in Quick on device, you need to add `Quick.framework` and\n`Nimble.framework` as `Embedded Binaries` to the `Host Application` of the\ntest target. After adding a framework as an embedded binary, Xcode will\nautomatically link the host app against the framework.\n\n![](http://indiedev.kapsi.fi/images/embed-in-host.png)\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/MoreResources.md",
    "content": "# More Resources\n\n## Examples of Quick Specs\n\nQuick is used by many companies, open-source projects, and individuals,\nincluding [GitHub](https://github.com/github) and\n[ReactiveCocoa](https://github.com/ReactiveCocoa). For examples, check out:\n\n- https://github.com/ReactiveCocoa/ReactiveCocoa\n- https://github.com/github/Archimedes\n- https://github.com/libgit2/objective-git\n- https://github.com/jspahrsummers/RXSwift\n- https://github.com/artsy/eidolon\n- https://github.com/AshFurrow/Moya\n- https://github.com/nerdyc/Squeal\n- https://github.com/pepibumur/SugarRecord\n\n## More on Unit Testing for OS X and iOS Apps\n\n- **[Quality Coding](http://qualitycoding.org/)**:\n  A blog on iOS development that focuses on unit testing.\n- **[OCMock Tutorials](http://ocmock.org/tutorials/)**:\n  Use OCMock when you need \"fake objects\" in your tests.\n- **[Nocilla: Stunning HTTP stubbing for iOS and Mac OS X](https://github.com/luisobo/Nocilla)**:\n  Use this library to test code that sends requests to, and receives responses from, the Internet.\n- **[Pivotal Labs: Writing Beautiful Specs with Jasmine Custom Matchers](http://pivotallabs.com/writing-beautiful-specs-jasmine-custom-matchers/)**:\n  See [the Nimble documentation](https://github.com/Quick/Nimble) for instructions on how to write\n  custom matchers in Nimble.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/NimbleAssertions.md",
    "content": "# Clearer Tests Using Nimble Assertions\n\nWhen code doesn't work the way it's supposed to, unit tests should make it\n**clear** exactly what's wrong.\n\nTake the following function which, given a bunch of monkeys, only returns\nthe silly monkeys in the bunch:\n\n```swift\npublic func silliest(monkeys: [Monkey]) -> [Monkey] {\n  return monkeys.filter { $0.silliness == .VerySilly }\n}\n```\n\nNow let's say we have a unit test for this function:\n\n```swift\nfunc testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() {\n  let kiki = Monkey(name: \"Kiki\", silliness: .ExtremelySilly)\n  let carl = Monkey(name: \"Carl\", silliness: .NotSilly)\n  let jane = Monkey(name: \"Jane\", silliness: .VerySilly)\n  let sillyMonkeys = silliest([kiki, carl, jane])\n  XCTAssertTrue(contains(sillyMonkeys, kiki))\n}\n```\n\nThe test fails with the following failure message:\n\n```\nXCTAssertTrue failed\n```\n\n![](http://f.cl.ly/items/1G17453p47090y30203d/Screen%20Shot%202015-02-26%20at%209.08.27%20AM.png)\n\nThe failure message leaves a lot to be desired. It leaves us wondering,\n\"OK, so something that should have been true was false--but what?\"\nThat confusion slows us down, since we now have to spend time deciphering test code.\n\n## Better Failure Messages, Part 1: Manually Providing `XCTAssert` Failure Messages\n\n`XCTAssert` assertions allow us to specify a failure message of our own, which certainly helps:\n\n```diff\nfunc testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() {\n  let kiki = Monkey(name: \"Kiki\", silliness: .ExtremelySilly)\n  let carl = Monkey(name: \"Carl\", silliness: .NotSilly)\n  let jane = Monkey(name: \"Jane\", silliness: .VerySilly)\n  let sillyMonkeys = silliest([kiki, carl, jane])\n-  XCTAssertTrue(contains(sillyMonkeys, kiki))\n+  XCTAssertTrue(contains(sillyMonkeys, kiki), \"Expected sillyMonkeys to contain 'Kiki'\")\n}\n```\n\nBut we have to write our own failure message.\n\n## Better Failure Messages, Part 2: Nimble Failure Messages\n\nNimble makes your test assertions, and their failure messages, easier to read:\n\n```diff\nfunc testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() {\n  let kiki = Monkey(name: \"Kiki\", silliness: .ExtremelySilly)\n  let carl = Monkey(name: \"Carl\", silliness: .NotSilly)\n  let jane = Monkey(name: \"Jane\", silliness: .VerySilly)\n  let sillyMonkeys = silliest([kiki, carl, jane])\n-  XCTAssertTrue(contains(sillyMonkeys, kiki), \"Expected sillyMonkeys to contain 'Kiki'\")\n+  expect(sillyMonkeys).to(contain(kiki))\n}\n```\n\nWe don't have to write our own failure message--the one provided by Nimble\nis already very readable:\n\n```\nexpected to contain <Monkey(name: Kiki, sillines: ExtremelySilly)>,\n                got <[Monkey(name: Jane, silliness: VerySilly)]>\n```\n\n![](http://f.cl.ly/items/3N2e3g2K3W123b1L1J0G/Screen%20Shot%202015-02-26%20at%2011.27.02%20AM.png)\n\nThe failure message makes it clear what's wrong: we were expecting `kiki` to be included\nin the result of `silliest()`, but the result only contains `jane`. Now that we know\nexactly what's wrong, it's easy to fix the issue:\n\n```diff\npublic func silliest(monkeys: [Monkey]) -> [Monkey] {\n-  return monkeys.filter { $0.silliness == .VerySilly }\n+  return monkeys.filter { $0.silliness == .VerySilly || $0.silliness == .ExtremelySilly }\n}\n```\n\nNimble provides many different kind of assertions, each with great failure\nmessages. And unlike `XCTAssert`, you don't have to type your own failure message\nevery time.\n\nFor the full list of Nimble assertions, check out the [Nimble README](https://github.com/Quick/Nimble).\nBelow is just a sample, to whet your appetite:\n\n```swift\nexpect(1 + 1).to(equal(2))\nexpect(1.2).to(beCloseTo(1.1, within: 0.1))\nexpect(3) > 2\nexpect(\"seahorse\").to(contain(\"sea\"))\nexpect([\"Atlantic\", \"Pacific\"]).toNot(contain(\"Mississippi\"))\nexpect(ocean.isClean).toEventually(beTruthy())\n```\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/QuickExamplesAndGroups.md",
    "content": "# Organized Tests with Quick Examples and Example Groups\n\nQuick uses a special syntax to define **examples** and **example groups**.\n\nIn *[Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md)*,\nwe learned that a good test method name is crucial--when a test starts failing, it's\nthe best way to determine whether we have to fix the application code or update the test.\n\nQuick examples and example groups serve two purposes:\n\n1. They encourage you to write descriptive test names.\n2. They greatly simplify the test code in the \"arrange\" step of your tests.\n\n## Examples Using `it`\n\nExamples, defined with the `it` function, use assertions to demonstrate\nhow code should behave. These are like test methods in XCTest.\n\n`it` takes two parameters: the name of the example, and a closure.\nThe examples below specify how the `Sea.Dolphin` class should behave.\nA new dolphin should be smart and friendly:\n\n```swift\n// Swift\n\nimport Quick\nimport Nimble\nimport Sea\n\nclass DolphinSpec: QuickSpec {\n  override func spec() {\n    it(\"is friendly\") {\n      expect(Dolphin().isFriendly).to(beTruthy())\n    }\n\n    it(\"is smart\") {\n      expect(Dolphin().isSmart).to(beTruthy())\n    }\n  }\n}\n```\n\n```objc\n// Objective-C\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\nQuickSpecBegin(DolphinSpec)\n\nit(@\"is friendly\", ^{\n  expect(@([[Dolphin new] isFriendly])).to(beTruthy());\n});\n\nit(@\"is smart\", ^{\n  expect(@([[Dolphin new] isSmart])).to(beTruthy());\n});\n\nQuickSpecEnd\n```\n\nUse descriptions to make it clear what your examples are testing.\nDescriptions can be of any length and use any character, including\ncharacters from languages besides English, or even emoji! :v: :sunglasses:\n\n## Example Groups Using `describe` and `context`\n\nExample groups are logical groupings of examples. Example groups can share\nsetup and teardown code.\n\n### Describing Classes and Methods Using `describe`\n\nTo specify the behavior of the `Dolphin` class's `click` method--in\nother words, to test the method works--several `it` examples can be\ngrouped together using the `describe` function. Grouping similar\nexamples together makes the spec easier to read:\n\n```swift\n// Swift\n\nimport Quick\nimport Nimble\n\nclass DolphinSpec: QuickSpec {\n  override func spec() {\n    describe(\"a dolphin\") {\n      describe(\"its click\") {\n        it(\"is loud\") {\n          let click = Dolphin().click()\n          expect(click.isLoud).to(beTruthy())\n        }\n\n        it(\"has a high frequency\") {\n          let click = Dolphin().click()\n          expect(click.hasHighFrequency).to(beTruthy())\n        }\n      }\n    }\n  }\n}\n```\n\n```objc\n// Objective-C\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\nQuickSpecBegin(DolphinSpec)\n\ndescribe(@\"a dolphin\", ^{\n  describe(@\"its click\", ^{\n    it(@\"is loud\", ^{\n      Click *click = [[Dolphin new] click];\n      expect(@(click.isLoud)).to(beTruthy());\n    });\n\n    it(@\"has a high frequency\", ^{\n      Click *click = [[Dolphin new] click];\n      expect(@(click.hasHighFrequency)).to(beTruthy());\n    });\n  });\n});\n\nQuickSpecEnd\n```\n\nWhen these two examples are run in Xcode, they'll display the\ndescription from the `describe` and `it` functions:\n\n1. `DolphinSpec.a_dolphin_its_click_is_loud`\n2. `DolphinSpec.a_dolphin_its_click_has_a_high_frequency`\n\nAgain, it's clear what each of these examples is testing.\n\n### Sharing Setup/Teardown Code Using `beforeEach` and `afterEach`\n\nExample groups don't just make the examples clearer, they're also useful\nfor sharing setup and teardown code among examples in a group.\n\nIn the example below, the `beforeEach` function is used to create a brand\nnew instance of a dolphin and its click before each example in the group.\nThis ensures that both are in a \"fresh\" state for every example:\n\n```swift\n// Swift\n\nimport Quick\nimport Nimble\n\nclass DolphinSpec: QuickSpec {\n  override func spec() {\n    describe(\"a dolphin\") {\n      var dolphin: Dolphin!\n      beforeEach {\n        dolphin = Dolphin()\n      }\n\n      describe(\"its click\") {\n        var click: Click!\n        beforeEach {\n          click = dolphin.click()\n        }\n\n        it(\"is loud\") {\n          expect(click.isLoud).to(beTruthy())\n        }\n\n        it(\"has a high frequency\") {\n          expect(click.hasHighFrequency).to(beTruthy())\n        }\n      }\n    }\n  }\n}\n```\n\n```objc\n// Objective-C\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\nQuickSpecBegin(DolphinSpec)\n\ndescribe(@\"a dolphin\", ^{\n  __block Dolphin *dolphin = nil;\n  beforeEach(^{\n      dolphin = [Dolphin new];\n  });\n\n  describe(@\"its click\", ^{\n    __block Click *click = nil;\n    beforeEach(^{\n      click = [dolphin click];\n    });\n\n    it(@\"is loud\", ^{\n      expect(@(click.isLoud)).to(beTruthy());\n    });\n\n    it(@\"has a high frequency\", ^{\n      expect(@(click.hasHighFrequency)).to(beTruthy());\n    });\n  });\n});\n\nQuickSpecEnd\n```\n\nSharing setup like this might not seem like a big deal with the\ndolphin example, but for more complicated objects, it saves a lot\nof typing!\n\nTo execute code *after* each example, use `afterEach`.\n\n### Specifying Conditional Behavior Using `context`\n\nDolphins use clicks for echolocation. When they approach something\nparticularly interesting to them, they release a series of clicks in\norder to get a better idea of what it is.\n\nThe tests need to show that the `click` method behaves differently in\ndifferent circumstances. Normally, the dolphin just clicks once. But when\nthe dolphin is close to something interesting, it clicks several times.\n\nThis can be expressed using `context` functions: one `context` for the\nnormal case, and one `context` for when the dolphin is close to\nsomething interesting:\n\n```swift\n// Swift\n\nimport Quick\nimport Nimble\n\nclass DolphinSpec: QuickSpec {\n  override func spec() {\n    describe(\"a dolphin\") {\n      var dolphin: Dolphin!\n      beforeEach { dolphin = Dolphin() }\n\n      describe(\"its click\") {\n        context(\"when the dolphin is not near anything interesting\") {\n          it(\"is only emitted once\") {\n            expect(dolphin!.click().count).to(equal(1))\n          }\n        }\n\n        context(\"when the dolphin is near something interesting\") {\n          beforeEach {\n            let ship = SunkenShip()\n            Jamaica.dolphinCove.add(ship)\n            Jamaica.dolphinCove.add(dolphin)\n          }\n\n          it(\"is emitted three times\") {\n            expect(dolphin.click().count).to(equal(3))\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n```objc\n// Objective-C\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\nQuickSpecBegin(DolphinSpec)\n\ndescribe(@\"a dolphin\", ^{\n  __block Dolphin *dolphin = nil;\n  beforeEach(^{ dolphin = [Dolphin new]; });\n\n  describe(@\"its click\", ^{\n    context(@\"when the dolphin is not near anything interesting\", ^{\n      it(@\"is only emitted once\", ^{\n        expect(@([[dolphin click] count])).to(equal(@1));\n      });\n    });\n\n    context(@\"when the dolphin is near something interesting\", ^{\n      beforeEach(^{\n        [[Jamaica dolphinCove] add:[SunkenShip new]];\n        [[Jamaica dolphinCove] add:dolphin];\n      });\n\n      it(@\"is emitted three times\", ^{\n        expect(@([[dolphin click] count])).to(equal(@3));\n      });\n    });\n  });\n});\n\nQuickSpecEnd\n```\n\n### Test Readability: Quick and XCTest\n\nIn [Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md),\nwe looked at how one test per condition was a great way to organize test code.\nIn XCTest, that leads to long test method names:\n\n```swift\nfunc testDolphin_click_whenTheDolphinIsNearSomethingInteresting_isEmittedThreeTimes() {\n  // ...\n}\n```\n\nUsing Quick, the conditions are much easier to read, and we can perform setup\nfor each example group:\n\n```swift\ndescribe(\"a dolphin\") {\n  describe(\"its click\") {\n    context(\"when the dolphin is near something interesting\") {\n      it(\"is emitted three times\") {\n        // ...\n      }\n    }\n  }\n}\n```\n\n## Temporarily Disabling Examples or Groups\n\nYou can temporarily disable examples or example groups that don't pass yet.\nThe names of the examples will be printed out along with the test results,\nbut they won't be run.\n\nYou can disable an example or group by prepending `x`:\n\n```swift\n// Swift\n\nxdescribe(\"its click\") {\n  // ...none of the code in this closure will be run.\n}\n\nxcontext(\"when the dolphin is not near anything interesting\") {\n  // ...none of the code in this closure will be run.\n}\n\nxit(\"is only emitted once\") {\n  // ...none of the code in this closure will be run.\n}\n```\n\n```objc\n// Objective-C\n\nxdescribe(@\"its click\", ^{\n  // ...none of the code in this closure will be run.\n});\n\nxcontext(@\"when the dolphin is not near anything interesting\", ^{\n  // ...none of the code in this closure will be run.\n});\n\nxit(@\"is only emitted once\", ^{\n  // ...none of the code in this closure will be run.\n});\n```\n\n## Temporarily Running a Subset of Focused Examples\n\nSometimes it helps to focus on only one or a few examples. Running one\nor two examples is faster than the entire suite, after all. You can\nrun only one or two by using the `fit` function. You can also focus a\ngroup of examples using `fdescribe` or `fcontext`:\n\n```swift\nfit(\"is loud\") {\n  // ...only this focused example will be run.\n}\n\nit(\"has a high frequency\") {\n  // ...this example is not focused, and will not be run.\n}\n\nfcontext(\"when the dolphin is near something interesting\") {\n  // ...examples in this group are also focused, so they'll be run.\n}\n```\n\n```objc\nfit(@\"is loud\", {\n  // ...only this focused example will be run.\n});\n\nit(@\"has a high frequency\", ^{\n  // ...this example is not focused, and will not be run.\n});\n\nfcontext(@\"when the dolphin is near something interesting\", ^{\n  // ...examples in this group are also focused, so they'll be run.\n});\n```\n\n## Global Setup/Teardown Using `beforeSuite` and `afterSuite`\n\nSome test setup needs to be performed before *any* examples are\nrun. For these cases, use `beforeSuite` and `afterSuite`.\n\nIn the example below, a database of all the creatures in the ocean is\ncreated before any examples are run. That database is torn down once all\nthe examples have finished:\n\n```swift\n// Swift\n\nimport Quick\n\nclass DolphinSpec: QuickSpec {\n  override func spec() {\n    beforeSuite {\n      OceanDatabase.createDatabase(name: \"test.db\")\n      OceanDatabase.connectToDatabase(name: \"test.db\")\n    }\n\n    afterSuite {\n      OceanDatabase.teardownDatabase(name: \"test.db\")\n    }\n\n    describe(\"a dolphin\") {\n      // ...\n    }\n  }\n}\n```\n\n```objc\n// Objective-C\n\n#import <Quick/Quick.h>\n\nQuickSpecBegin(DolphinSpec)\n\nbeforeSuite(^{\n  [OceanDatabase createDatabase:@\"test.db\"];\n  [OceanDatabase connectToDatabase:@\"test.db\"];\n});\n\nafterSuite(^{\n  [OceanDatabase teardownDatabase:@\"test.db\"];\n});\n\ndescribe(@\"a dolphin\", ^{\n  // ...\n});\n\nQuickSpecEnd\n```\n\nYou can specify as many `beforeSuite` and `afterSuite` as you like. All\n`beforeSuite` closures will be executed before any tests run, and all\n`afterSuite` closures will be executed after all the tests are finished.\nThere is no guarantee as to what order these closures will be executed in.\n\n## Accessing Metadata for the Current Example\n\nThere may be some cases in which you'd like the know the name of the example\nthat is currently being run, or how many have been run so far. Quick provides\naccess to this metadata in `beforeEach` and `afterEach` closures.\n\n```swift\nbeforeEach { exampleMetadata in\n  println(\"Example number \\(exampleMetadata.exampleIndex) is about to be run.\")\n}\n\nafterEach { exampleMetadata in\n  println(\"Example number \\(exampleMetadata.exampleIndex) has run.\")\n}\n```\n\n```objc\nbeforeEachWithMetadata(^(ExampleMetadata *exampleMetadata){\n  NSLog(@\"Example number %l is about to be run.\", (long)exampleMetadata.exampleIndex);\n});\n\nafterEachWithMetadata(^(ExampleMetadata *exampleMetadata){\n  NSLog(@\"Example number %l has run.\", (long)exampleMetadata.exampleIndex);\n});\n```\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/QuickInObjectiveC.md",
    "content": "# Using Quick in Objective-C\n\nQuick works equally well in both Swift and Objective-C.\n\nThere are two notes to keep in mind when using Quick in Objective-C,\nhowever, which are described below.\n\n## The Optional Shorthand Syntax\n\nImporting Quick in an Objective-C file defines macros named `it` and\n`itShouldBehaveLike`, as well as functions like `context()` and `describe()`.\n\nIf the project you are testing also defines symbols with these names, you may\nencounter confusing build failures. In that case, you can avoid namespace\ncollision by turning off Quick's optional \"shorthand\" syntax:\n\n```objc\n#define QUICK_DISABLE_SHORT_SYNTAX 1\n\n#import <Quick/Quick.h>\n\nQuickSpecBegin(DolphinSpec)\n// ...\nQuickSpecEnd\n```\n\nYou must define the `QUICK_DISABLE_SHORT_SYNTAX` macro *before*\nimporting the Quick header.\n\n## Your Test Target Must Include At Least One Swift File\n\nThe Swift stdlib will not be linked into your test target, and thus\nQuick will fail to execute properly, if you test target does not contain\n*at least one* Swift file.\n\nWithout at least one Swift file, your tests will exit prematurely with\nthe following error:\n\n```\n*** Test session exited(82) without checking in. Executable cannot be\nloaded for some other reason, such as a problem with a library it\ndepends on or a code signature/entitlements mismatch.\n```\n\nTo fix the problem, add a blank file called `SwiftSpec.swift` to your test target:\n\n```swift\n// SwiftSpec.swift\n\nimport Quick\n```\n\n> For more details on this issue, see https://github.com/Quick/Quick/issues/164.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/README.md",
    "content": "# Documentation\n\nQuick helps you verify how your Swift and Objective-C programs behave.\nDoing so effectively isn't just a matter of knowing how to use Quick,\nhowever. The guides in this directory can help you write\neffective tests--not just using Quick, but even XCTest or other testing\nframeworks.\n\nEach guide covers a particular topic. If you're completely new to unit\ntesting, consider reading them in the order they're introduced below:\n\n- **[Setting Up Tests in Your Xcode Project](SettingUpYourXcodeProject.md)**:\n  Read this if you're having trouble using your application code from within\n  your test files.\n- **[Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md)**:\n  Read this to learn how to write `XCTestCase` tests that will help you write\n  code faster and more effectively.\n- **[Don't Test Code, Instead Verify Behavior](BehavioralTesting.md)**:\n  Read this to learn what kinds of tests speed you up, and which ones will only end up\n  slowing you down.\n- **[Clearer Tests Using Nimble Assertions](NimbleAssertions.md)**:\n  Read this to learn how to use Nimble to generate better failure messages.\n  Better failure messages help you move faster, by spending less time figuring out why\n  a test failed.\n- **[Organized Tests with Quick Examples and Example Groups](QuickExamplesAndGroups.md)**:\n  Read this to learn how Quick can help you write even more effective tests, using\n  *examples* and *example groups*.\n- **[Testing OS X and iOS Applications](TestingApps.md)**:\n  Read this to learn more about testing code that uses the AppKit and UIKit frameworks.\n- **[Reducing Test Boilerplate with Shared Assertions](SharedExamples.md)**\n  Read this to learn how to share sets of assertions among your tests.\n- **[Configuring How Quick Behaves](ConfiguringQuick.md)**:\n  Read this to learn how you can change how Quick behaves when running your test suite.\n- **[Using Quick in Objective-C](QuickInObjectiveC.md)**:\n  Read this if you experience trouble using Quick in Objective-C.\n- **[Installing Quick](InstallingQuick.md)**:\n  Read this for instructions on how to add Quick to your project, using\n  Git submodules, CocoaPods, or Carthage.\n- **[Installing Quick File Templates](InstallingFileTemplates.md)**:\n  Read this to learn how to install file templates that make writing Quick specs faster.\n- **[More Resources](MoreResources.md)**\n  A list of additional resources on OS X and iOS testing.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/SettingUpYourXcodeProject.md",
    "content": "# Setting Up Tests in Your Xcode Project\n\nWhen you create a new project in Xcode 6, a unit test target is included\nby default. To write unit tests, you'll need to be able to use your main\ntarget's code from within your test target.\n\n## Testing Swift Code Using Swift\n\nIn order to test code written in Swift, you'll need to do three things:\n\n1. Set \"defines module\" in your `.xcodeproj` to `YES`.\n\n  * To do this in Xcode: Choose your project, then \"Build Settings\" header, then \"Defines Modules\" line, then select \"Yes\".\n\n2. Mark any class/method/function you want to test `public`, since only\n   `public` symbols are exported.\n3. `import YourAppModuleName` in your unit tests.\n\n```swift\n// MyAppTests.swift\n\nimport XCTest\nimport MyModule\n\nclass MyClassTests: XCTestCase {\n  // ...\n}\n```\n\n> Some developers advocate adding Swift source files to your test target.\nHowever, this leads to [subtle, hard-to-diagnose\nerrors](https://github.com/Quick/Quick/issues/91), and is not\nrecommended.\n\n## Testing Objective-C Code Using Swift\n\n1. Add a bridging header to your test target.\n2. In the bridging header, import the file containing the code you'd like to test.\n\n```objc\n// MyAppTests-BridgingHeader.h\n\n#import \"MyClass.h\"\n```\n\nYou can now use the code from `MyClass.h` in your Swift test files.\n\n## Testing Swift Code Using Objective-C\n\n1. Bridge Swift classes and functions you'd like to test to Objective-C by\n   using the `@objc` attribute.\n2. Import your module's Swift headers in your unit tests.\n\n```objc\n#import <XCTest/XCTest.h>\n#import \"MyModule-Swift.h\"\n\n@interface MyClassTests: XCTestCase\n// ...\n@end\n```\n\n## Testing Objective-C Code Using Objective-C\n\nImport the file defining the code you'd like to test from within your test target:\n\n```objc\n// MyAppTests.m\n\n#import <XCTest/XCTest.h>\n#import \"MyClass.h\"\n\n@interface MyClassTests: XCTestCase\n// ...\n@end\n```\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/SharedExamples.md",
    "content": "# Reducing Test Boilerplate with Shared Assertions\n\nIn some cases, the same set of specifications apply to multiple objects.\n\nFor example, consider a protocol called `Edible`. When a dolphin\neats something `Edible`, the dolphin becomes happy. `Mackerel` and\n`Cod` are both edible. Quick allows you to easily test that a dolphin is\nhappy to eat either one.\n\nThe example below defines a set of  \"shared examples\" for \"something edible\",\nand specifies that both mackerel and cod behave like \"something edible\":\n\n```swift\n// Swift\n\nimport Quick\nimport Nimble\n\nclass EdibleSharedExamplesConfiguration: QuickConfiguration {\n  override class func configure(configuration: Configuration) {\n    sharedExamples(\"something edible\") { (sharedExampleContext: SharedExampleContext) in\n      it(\"makes dolphins happy\") {\n        let dolphin = Dolphin(happy: false)\n        let edible = sharedExampleContext()[\"edible\"]\n        dolphin.eat(edible)\n        expect(dolphin.isHappy).to(beTruthy())\n      }\n    }\n  }\n}\n\nclass MackerelSpec: QuickSpec {\n  override func spec() {\n    var mackerel: Mackerel!\n    beforeEach {\n      mackerel = Mackerel()\n    }\n\n    itBehavesLike(\"something edible\") { [\"edible\": mackerel] }\n  }\n}\n\nclass CodSpec: QuickSpec {\n  override func spec() {\n    var cod: Cod!\n    beforeEach {\n      cod = Cod()\n    }\n\n    itBehavesLike(\"something edible\") { [\"edible\": cod] }\n  }\n}\n```\n\n```objc\n// Objective-C\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\nQuickConfigurationBegin(EdibleSharedExamplesConfiguration)\n\n+ (void)configure:(Configuration *configuration) {\n  sharedExamples(@\"something edible\", ^(QCKDSLSharedExampleContext exampleContext) {\n    it(@\"makes dolphins happy\") {\n      Dolphin *dolphin = [[Dolphin alloc] init];\n      dolphin.happy = NO;\n      id<Edible> edible = exampleContext()[@\"edible\"];\n      [dolphin eat:edible];\n      expect(dolphin.isHappy).to(beTruthy())\n    }\n  });\n}\n\nQuickConfigurationEnd\n\nQuickSpecBegin(MackerelSpec)\n\n__block Mackerel *mackerel = nil;\nbeforeEach(^{\n  mackerel = [[Mackerel alloc] init];\n});\n\nitBehavesLike(@\"someting edible\", ^{ return @{ @\"edible\": mackerel }; });\n\nQuickSpecEnd\n\nQuickSpecBegin(CodSpec)\n\n__block Mackerel *cod = nil;\nbeforeEach(^{\n  cod = [[Cod alloc] init];\n});\n\nitBehavesLike(@\"someting edible\", ^{ return @{ @\"edible\": cod }; });\n\nQuickSpecEnd\n```\n\nShared examples can include any number of `it`, `context`, and\n`describe` blocks. They save a *lot* of typing when running\nthe same tests against several different kinds of objects.\n\nIn some cases, you won't need any additional context. In Swift, you can\nsimply use `sharedExampleFor` closures that take no parameters. This\nmight be useful when testing some sort of global state:\n\n```swift\n// Swift\n\nimport Quick\n\nsharedExamplesFor(\"everything under the sea\") {\n  // ...\n}\n\nitBehavesLike(\"everything under the sea\")\n```\n\n> In Objective-C, you'll have to pass a block that takes a\n  `QCKDSLSharedExampleContext`, even if you don't plan on using that\n  argument. Sorry, but that's the way the cookie crumbles!\n  :cookie: :bomb:\n\nYou can also \"focus\" shared examples using the `fitBehavesLike` function.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Documentation/TestingApps.md",
    "content": "# Testing OS X and iOS Applications\n\n*[Setting Up Tests in Your Xcode Project](SettingUpYourXcodeProject.md)*\ncovers everything you need to know to test any Objective-C or Swift function or class.\nIn this section, we'll go over a few additional hints for testing\nclasses like `UIViewController` subclasses.\n\n> You can see a short lightning talk covering most of these topics\n  [here](https://vimeo.com/115671189#t=37m50s) (the talk begins at 37'50\").\n\n## Triggering `UIViewController` Lifecycle Events\n\nNormally, UIKit triggers lifecycle events for your view controller as it's\npresented within the app. When testing a `UIViewController`, however, you'll\nneed to trigger these yourself. You can do so in one of three ways:\n\n1. Accessing `UIViewController.view`, which triggers things like `UIViewController.viewDidLoad()`.\n2. Use `UIViewController.beginAppearanceTransition()` to trigger most lifecycle events.\n3. Directly calling methods like `UIViewController.viewDidLoad()` or `UIViewController.viewWillAppear()`.\n\n```swift\n// Swift\n\nimport Quick\nimport Nimble\nimport BananaApp\n\nclass BananaViewControllerSpec: QuickSpec {\n  override func spec() {\n    var viewController: BananaViewController!\n    beforeEach {\n      viewController = BananaViewController()\n    }\n\n    describe(\".viewDidLoad()\") {\n      beforeEach {\n        // Method #1: Access the view to trigger BananaViewController.viewDidLoad().\n        let _ =  viewController.view\n      }\n\n      it(\"sets the banana count label to zero\") {\n        // Since the label is only initialized when the view is loaded, this\n        // would fail if we didn't access the view in the `beforeEach` above.\n        expect(viewController.bananaCountLabel.text).to(equal(\"0\"))\n      }\n    }\n\n    describe(\"the view\") {\n      beforeEach {\n        // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events.\n        viewController.beginAppearanceTransition(true, animated: false)\n        viewController.endAppearanceTransition()\n      }\n      // ...\n    }\n\n    describe(\".viewWillDisappear()\") {\n      beforeEach {\n        // Method #3: Directly call the lifecycle event.\n        viewController.viewWillDisappear(false)\n      }\n      // ...\n    }\n  }\n}\n```\n\n```objc\n// Objective-C\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n#import \"BananaViewController.h\"\n\nQuickSpecBegin(BananaViewControllerSpec)\n\n__block BananaViewController *viewController = nil;\nbeforeEach(^{\n  viewController = [[BananaViewController alloc] init];\n});\n\ndescribe(@\"-viewDidLoad\", ^{\n  beforeEach(^{\n    // Method #1: Access the view to trigger -[BananaViewController viewDidLoad].\n    [viewController view];\n  });\n\n  it(@\"sets the banana count label to zero\", ^{\n    // Since the label is only initialized when the view is loaded, this\n    // would fail if we didn't access the view in the `beforeEach` above.\n    expect(viewController.bananaCountLabel.text).to(equal(@\"0\"))\n  });\n});\n\ndescribe(@\"the view\", ^{\n  beforeEach(^{\n    // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events.\n    [viewController beginAppearanceTransition:YES animated:NO];\n    [viewController endAppearanceTransition];\n  });\n  // ...\n});\n\ndescribe(@\"-viewWillDisappear\", ^{\n  beforeEach(^{\n    // Method #3: Directly call the lifecycle event.\n    [viewController viewWillDisappear:NO];\n  });\n  // ...\n});\n\nQuickSpecEnd\n```\n\n## Initializing View Controllers Defined in Storyboards\n\nTo initialize view controllers defined in a storyboard, you'll need to assign\na **Storyboard ID** to the view controller:\n\n![](http://f.cl.ly/items/2X2G381K1h1l2B2Q0g3L/Screen%20Shot%202015-02-27%20at%2011.58.06%20AM.png)\n\nOnce you've done so, you can instantiate the view controller from within your tests:\n\n```swift\n// Swift\n\nvar viewController: BananaViewController!\nbeforeEach {\n  // 1. Instantiate the storyboard. By default, it's name is \"Main.storyboard\".\n  //    You'll need to use a different string here if the name of your storyboard is different.\n  let storyboard = UIStoryboard(name: \"Main\", bundle: nil)\n  // 2. Use the storyboard to instantiate the view controller.\n  viewController = \n    storyboard.instantiateViewControllerWithIdentifier(\n      \"BananaViewControllerID\") as! BananaViewController\n}\n```\n\n```objc\n// Objective-C\n\n__block BananaViewController *viewController = nil;\nbeforeEach(^{\n  // 1. Instantiate the storyboard. By default, it's name is \"Main.storyboard\".\n  //    You'll need to use a different string here if the name of your storyboard is different.\n  UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@\"Main\" bundle:nil];\n  // 2. Use the storyboard to instantiate the view controller.\n  viewController = [storyboard instantiateViewControllerWithIdentifier:@\"BananaViewControllerID\"];\n});\n```\n\n## Triggering UIControl Events Like Button Taps\n\nButtons and other UIKit classes inherit from `UIControl`, which defines methods\nthat allow us to send control events, like button taps, programmatically.\nTo test behavior that occurs when a button is tapped, you can write:\n\n```swift\n// Swift\n\ndescribe(\"the 'more bananas' button\") {\n  it(\"increments the banana count label when tapped\") {\n    viewController.moreButton.sendActionsForControlEvents(\n      UIControlEvents.TouchUpInside)\n    expect(viewController.bananaCountLabel.text).to(equal(\"1\"))\n  }\n}\n```\n\n```objc\n// Objective-C\n\ndescribe(@\"the 'more bananas' button\", ^{\n  it(@\"increments the banana count label when tapped\", ^{\n    [viewController.moreButton sendActionsForControlEvents:UIControlEventTouchUpInside];\n    expect(viewController.bananaCountLabel.text).to(equal(@\"1\"));\n  });\n});\n```\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/.gitignore",
    "content": ".DS_Store\nxcuserdata/\nbuild/\n.idea\nDerivedData/\nNimble.framework.zip\n\n# Carthage\n#\n# Add this line if you want to avoid checking in source code from Carthage dependencies.\n# Carthage/Checkouts\n\nCarthage/Build\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/.travis.yml",
    "content": "osx_image: xcode7\nlanguage: objective-c\n\nenv:\n  matrix:\n    - NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 TYPE=ios\n    - NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 TYPE=osx\n\nscript: ./test $TYPE\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/CONTRIBUTING.md",
    "content": "<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n\n- [Welcome to Nimble!](#welcome-to-nimble!)\n  - [Reporting Bugs](#reporting-bugs)\n  - [Building the Project](#building-the-project)\n  - [Pull Requests](#pull-requests)\n    - [Style Conventions](#style-conventions)\n  - [Core Members](#core-members)\n    - [Code of Conduct](#code-of-conduct)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n# Welcome to Nimble!\n\nWe're building a testing framework for a new generation of Swift and\nObjective-C developers.\n\nNimble should be easy to use and easy to maintain. Let's keep things\nsimple and well-tested.\n\n**tl;dr:** If you've added a file to the project, make sure it's\nincluded in both the OS X and iOS targets.\n\n## Reporting Bugs\n\nNothing is off-limits. If you're having a problem, we want to hear about\nit.\n\n- See a crash? File an issue.\n- Code isn't compiling, but you don't know why? Sounds like you should\n  submit a new issue, bud.\n- Went to the kitchen, only to forget why you went in the first place?\n  Better submit an issue.\n\nBe sure to include in your issue:\n\n- Your Xcode version (eg - Xcode 7.0.1 7A1001)\n- Your version of Nimble (eg - v2.0.0 or git sha `20a3f3b4e63cc8d97c92c4164bf36f2a2c9a6e1b`)\n- What are the steps to reproduce this issue?\n\n## Building the Project\n\n- Use `Nimble.xcodeproj` to work on Nimble.\n\n## Pull Requests\n\n- Nothing is trivial. Submit pull requests for anything: typos,\n  whitespace, you name it.\n- Not all pull requests will be merged, but all will be acknowledged. If\n  no one has provided feedback on your request, ping one of the owners\n  by name.\n- Make sure your pull request includes any necessary updates to the\n  README or other documentation.\n- Be sure the unit tests for both the OS X and iOS targets of Nimble\n  before submitting your pull request. You can run all the OS X & iOS unit\n  tests using `./test`.\n- If you've added a file to the project, make sure it's included in both\n  the OS X and iOS targets.\n- The `master` branch will always support the stable Xcode version. Other\n  branches will point to their corresponding versions they support.\n- If you're making a configuration change, make sure to edit both the xcode\n  project and the podspec file.\n\n### Style Conventions\n\n- Indent using 4 spaces.\n- Keep lines 100 characters or shorter. Break long statements into\n  shorter ones over multiple lines.\n- In Objective-C, use `#pragma mark -` to mark public, internal,\n  protocol, and superclass methods.\n\n## Core Members\n\nIf a few of your pull requests have been merged, and you'd like a\ncontrolling stake in the project, file an issue asking for write access\nto the repository.\n\n### Code of Conduct\n\nYour conduct as a core member is your own responsibility, but here are\nsome \"ground rules\":\n\n- Feel free to push whatever you want to master, and (if you have\n  ownership permissions) to create any repositories you'd like.\n\n  Ideally, however, all changes should be submitted as GitHub pull\n  requests. No one should merge their own pull request, unless no\n  other core members respond for at least a few days.\n\n  If you'd like to create a new repository, it'd be nice if you created\n  a GitHub issue and gathered some feedback first.\n\n- It'd be awesome if you could review, provide feedback on, and close\n  issues or pull requests submitted to the project. Please provide kind,\n  constructive feedback. Please don't be sarcastic or snarky.\n\n### Creating a Release\n\nThe process is relatively straight forward, but here's is a useful checklist for tagging:\n\n- Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD`\n- Run the release script: `./script/release A.B.C release-notes-file`\n- Go to [github releases](https://github.com/Quick/Nimble/releases) and mark the tagged commit as a release.\n  - Use the same release notes you created for the tag, but tweak up formatting for github.\n  - Attach the carthage release `Nimble.framework.zip` to the release.\n- Announce!\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/LICENSE.md",
    "content": "Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2014 Quick Team\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Adapters/AdapterProtocols.swift",
    "content": "import Foundation\n\n/// Protocol for the assertion handler that Nimble uses for all expectations.\npublic protocol AssertionHandler {\n    func assert(assertion: Bool, message: FailureMessage, location: SourceLocation)\n}\n\n/// Global backing interface for assertions that Nimble creates.\n/// Defaults to a private test handler that passes through to XCTest.\n///\n/// If XCTest is not available, you must assign your own assertion handler\n/// before using any matchers, otherwise Nimble will abort the program.\n///\n/// @see AssertionHandler\npublic var NimbleAssertionHandler: AssertionHandler = { () -> AssertionHandler in\n    return isXCTestAvailable() ? NimbleXCTestHandler() : NimbleXCTestUnavailableHandler()\n}()\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Adapters/AssertionDispatcher.swift",
    "content": "\n/// AssertionDispatcher allows multiple AssertionHandlers to receive\n/// assertion messages.\n///\n/// @warning Does not fully dispatch if one of the handlers raises an exception.\n///          This is possible with XCTest-based assertion handlers.\n///\npublic class AssertionDispatcher: AssertionHandler {\n    let handlers: [AssertionHandler]\n\n    public init(handlers: [AssertionHandler]) {\n        self.handlers = handlers\n    }\n\n    public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        for handler in handlers {\n            handler.assert(assertion, message: message, location: location)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Adapters/AssertionRecorder.swift",
    "content": "import Foundation\n\n/// A data structure that stores information about an assertion when\n/// AssertionRecorder is set as the Nimble assertion handler.\n///\n/// @see AssertionRecorder\n/// @see AssertionHandler\npublic struct AssertionRecord: CustomStringConvertible {\n    /// Whether the assertion succeeded or failed\n    public let success: Bool\n    /// The failure message the assertion would display on failure.\n    public let message: FailureMessage\n    /// The source location the expectation occurred on.\n    public let location: SourceLocation\n\n    public var description: String {\n        return \"AssertionRecord { success=\\(success), message='\\(message.stringValue)', location=\\(location) }\"\n    }\n}\n\n/// An AssertionHandler that silently records assertions that Nimble makes.\n/// This is useful for testing failure messages for matchers.\n///\n/// @see AssertionHandler\npublic class AssertionRecorder : AssertionHandler {\n    /// All the assertions that were captured by this recorder\n    public var assertions = [AssertionRecord]()\n\n    public init() {}\n\n    public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        assertions.append(\n            AssertionRecord(\n                success: assertion,\n                message: message,\n                location: location))\n    }\n}\n\n/// Allows you to temporarily replace the current Nimble assertion handler with\n/// the one provided for the scope of the closure.\n///\n/// Once the closure finishes, then the original Nimble assertion handler is restored.\n///\n/// @see AssertionHandler\npublic func withAssertionHandler(tempAssertionHandler: AssertionHandler, closure: () throws -> Void) {\n    let oldRecorder = NimbleAssertionHandler\n    let capturer = NMBExceptionCapture(handler: nil, finally: ({\n        NimbleAssertionHandler = oldRecorder\n    }))\n    NimbleAssertionHandler = tempAssertionHandler\n    capturer.tryBlock {\n        try! closure()\n    }\n}\n\n/// Captures expectations that occur in the given closure. Note that all\n/// expectations will still go through to the default Nimble handler.\n///\n/// This can be useful if you want to gather information about expectations\n/// that occur within a closure.\n///\n/// @param silently expectations are no longer send to the default Nimble \n///                 assertion handler when this is true. Defaults to false.\n///\n/// @see gatherFailingExpectations\npublic func gatherExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] {\n    let previousRecorder = NimbleAssertionHandler\n    let recorder = AssertionRecorder()\n    let handlers: [AssertionHandler]\n\n    if silently {\n        handlers = [recorder]\n    } else {\n        handlers = [recorder, previousRecorder]\n    }\n\n    let dispatcher = AssertionDispatcher(handlers: handlers)\n    withAssertionHandler(dispatcher, closure: closure)\n    return recorder.assertions\n}\n\n/// Captures failed expectations that occur in the given closure. Note that all\n/// expectations will still go through to the default Nimble handler.\n///\n/// This can be useful if you want to gather information about failed\n/// expectations that occur within a closure.\n///\n/// @param silently expectations are no longer send to the default Nimble\n///                 assertion handler when this is true. Defaults to false.\n///\n/// @see gatherExpectations\n/// @see raiseException source for an example use case.\npublic func gatherFailingExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] {\n    let assertions = gatherExpectations(silently: silently, closure: closure)\n    return assertions.filter { assertion in\n        !assertion.success\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Adapters/NimbleXCTestHandler.swift",
    "content": "import Foundation\nimport XCTest\n\n/// Default handler for Nimble. This assertion handler passes failures along to\n/// XCTest.\npublic class NimbleXCTestHandler : AssertionHandler {\n    public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        if !assertion {\n            XCTFail(\"\\(message.stringValue)\\n\", file: location.file, line: location.line)\n        }\n    }\n}\n\n/// Alternative handler for Nimble. This assertion handler passes failures along\n/// to XCTest by attempting to reduce the failure message size.\npublic class NimbleShortXCTestHandler: AssertionHandler {\n    public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        if !assertion {\n            let msg: String\n            if let actual = message.actualValue {\n                msg = \"got: \\(actual) \\(message.postfixActual)\"\n            } else {\n                msg = \"expected \\(message.to) \\(message.postfixMessage)\"\n            }\n            XCTFail(\"\\(msg)\\n\", file: location.file, line: location.line)\n        }\n    }\n}\n\n/// Fallback handler in case XCTest is unavailable. This assertion handler will abort\n/// the program if it is invoked.\nclass NimbleXCTestUnavailableHandler : AssertionHandler {\n    func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        fatalError(\"XCTest is not available and no custom assertion handler was configured. Aborting.\")\n    }\n}\n\nfunc isXCTestAvailable() -> Bool {\n    return NSClassFromString(\"XCTestCase\") != nil\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/DSL+Wait.swift",
    "content": "import Foundation\n\n/// Only classes, protocols, methods, properties, and subscript declarations can be\n/// bridges to Objective-C via the @objc keyword. This class encapsulates callback-style\n/// asynchronous waiting logic so that it may be called from Objective-C and Swift.\ninternal class NMBWait: NSObject {\n    internal class func until(timeout timeout: NSTimeInterval, file: String = __FILE__, line: UInt = __LINE__, action: (() -> Void) -> Void) -> Void {\n        var completed = false\n        var token: dispatch_once_t = 0\n        let result = pollBlock(pollInterval: 0.01, timeoutInterval: timeout) {\n            dispatch_once(&token) {\n                dispatch_async(dispatch_get_main_queue()) {\n                    action() { completed = true }\n                }\n            }\n            return completed\n        }\n        switch (result) {\n        case .Failure:\n            let pluralize = (timeout == 1 ? \"\" : \"s\")\n            fail(\"Waited more than \\(timeout) second\\(pluralize)\", file: file, line: line)\n        case .Timeout:\n            fail(\"Stall on main thread - too much enqueued on main run loop before waitUntil executes.\", file: file, line: line)\n        case let .ErrorThrown(error):\n            // Technically, we can never reach this via a public API call\n            fail(\"Unexpected error thrown: \\(error)\", file: file, line: line)\n        case .Success:\n            break\n        }\n    }\n\n    @objc(untilFile:line:action:)\n    internal class func until(file: String = __FILE__, line: UInt = __LINE__, action: (() -> Void) -> Void) -> Void {\n        until(timeout: 1, file: file, line: line, action: action)\n    }\n}\n\n/// Wait asynchronously until the done closure is called.\n///\n/// This will advance the run loop.\npublic func waitUntil(timeout timeout: NSTimeInterval = 1, file: String = __FILE__, line: UInt = __LINE__, action: (() -> Void) -> Void) -> Void {\n    NMBWait.until(timeout: timeout, file: file, line: line, action: action)\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/DSL.swift",
    "content": "/// Make an expectation on a given actual value. The value given is lazily evaluated.\npublic func expect<T>(@autoclosure(escaping) expression: () throws -> T?, file: String = __FILE__, line: UInt = __LINE__) -> Expectation<T> {\n    return Expectation(\n        expression: Expression(\n            expression: expression,\n            location: SourceLocation(file: file, line: line),\n            isClosure: true))\n}\n\n/// Make an expectation on a given actual value. The closure is lazily invoked.\npublic func expect<T>(file: String = __FILE__, line: UInt = __LINE__, expression: () throws -> T?) -> Expectation<T> {\n    return Expectation(\n        expression: Expression(\n            expression: expression,\n            location: SourceLocation(file: file, line: line),\n            isClosure: true))\n}\n\n/// Always fails the test with a message and a specified location.\npublic func fail(message: String, location: SourceLocation) {\n    NimbleAssertionHandler.assert(false, message: FailureMessage(stringValue: message), location: location)\n}\n\n/// Always fails the test with a message.\npublic func fail(message: String, file: String = __FILE__, line: UInt = __LINE__) {\n    fail(message, location: SourceLocation(file: file, line: line))\n}\n\n/// Always fails the test.\npublic func fail(file: String = __FILE__, line: UInt = __LINE__) {\n    fail(\"fail() always fails\", file: file, line: line)\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Expectation.swift",
    "content": "import Foundation\n\ninternal func expressionMatches<T, U where U: Matcher, U.ValueType == T>(expression: Expression<T>, matcher: U, to: String, description: String?) -> (Bool, FailureMessage) {\n    let msg = FailureMessage()\n    msg.userDescription = description\n    msg.to = to\n    do {\n        let pass = try matcher.matches(expression, failureMessage: msg)\n        if msg.actualValue == \"\" {\n            msg.actualValue = \"<\\(stringify(try expression.evaluate()))>\"\n        }\n        return (pass, msg)\n    } catch let error {\n        msg.actualValue = \"an unexpected error thrown: <\\(error)>\"\n        return (false, msg)\n    }\n}\n\ninternal func expressionDoesNotMatch<T, U where U: Matcher, U.ValueType == T>(expression: Expression<T>, matcher: U, toNot: String, description: String?) -> (Bool, FailureMessage) {\n    let msg = FailureMessage()\n    msg.userDescription = description\n    msg.to = toNot\n    do {\n        let pass = try matcher.doesNotMatch(expression, failureMessage: msg)\n        if msg.actualValue == \"\" {\n            msg.actualValue = \"<\\(stringify(try expression.evaluate()))>\"\n        }\n        return (pass, msg)\n    } catch let error {\n        msg.actualValue = \"an unexpected error thrown: <\\(error)>\"\n        return (false, msg)\n    }\n}\n\npublic struct Expectation<T> {\n    let expression: Expression<T>\n\n    public func verify(pass: Bool, _ message: FailureMessage) {\n        NimbleAssertionHandler.assert(pass, message: message, location: expression.location)\n    }\n\n    /// Tests the actual value using a matcher to match.\n    public func to<U where U: Matcher, U.ValueType == T>(matcher: U, description: String? = nil) {\n        let (pass, msg) = expressionMatches(expression, matcher: matcher, to: \"to\", description: description)\n        verify(pass, msg)\n    }\n\n    /// Tests the actual value using a matcher to not match.\n    public func toNot<U where U: Matcher, U.ValueType == T>(matcher: U, description: String? = nil) {\n        let (pass, msg) = expressionDoesNotMatch(expression, matcher: matcher, toNot: \"to not\", description: description)\n        verify(pass, msg)\n    }\n\n    /// Tests the actual value using a matcher to not match.\n    ///\n    /// Alias to toNot().\n    public func notTo<U where U: Matcher, U.ValueType == T>(matcher: U, description: String? = nil) {\n        toNot(matcher, description: description)\n    }\n\n    // see:\n    // - AsyncMatcherWrapper for extension\n    // - NMBExpectation for Objective-C interface\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Expression.swift",
    "content": "import Foundation\n\n// Memoizes the given closure, only calling the passed\n// closure once; even if repeat calls to the returned closure\ninternal func memoizedClosure<T>(closure: () throws -> T) -> (Bool) throws -> T {\n    var cache: T?\n    return ({ withoutCaching in\n        if (withoutCaching || cache == nil) {\n            cache = try closure()\n        }\n        return cache!\n    })\n}\n\n/// Expression represents the closure of the value inside expect(...).\n/// Expressions are memoized by default. This makes them safe to call\n/// evaluate() multiple times without causing a re-evaluation of the underlying\n/// closure.\n///\n/// @warning Since the closure can be any code, Objective-C code may choose\n///          to raise an exception. Currently, Expression does not memoize\n///          exception raising.\n///\n/// This provides a common consumable API for matchers to utilize to allow\n/// Nimble to change internals to how the captured closure is managed.\npublic struct Expression<T> {\n    internal let _expression: (Bool) throws -> T?\n    internal let _withoutCaching: Bool\n    public let location: SourceLocation\n    public let isClosure: Bool\n\n    /// Creates a new expression struct. Normally, expect(...) will manage this\n    /// creation process. The expression is memoized.\n    ///\n    /// @param expression The closure that produces a given value.\n    /// @param location The source location that this closure originates from.\n    /// @param isClosure A bool indicating if the captured expression is a\n    ///                  closure or internally produced closure. Some matchers\n    ///                  may require closures. For example, toEventually()\n    ///                  requires an explicit closure. This gives Nimble\n    ///                  flexibility if @autoclosure behavior changes between\n    ///                  Swift versions. Nimble internals always sets this true.\n    public init(expression: () throws -> T?, location: SourceLocation, isClosure: Bool = true) {\n        self._expression = memoizedClosure(expression)\n        self.location = location\n        self._withoutCaching = false\n        self.isClosure = isClosure\n    }\n\n    /// Creates a new expression struct. Normally, expect(...) will manage this\n    /// creation process.\n    ///\n    /// @param expression The closure that produces a given value.\n    /// @param location The source location that this closure originates from.\n    /// @param withoutCaching Indicates if the struct should memoize the given\n    ///                       closure's result. Subsequent evaluate() calls will\n    ///                       not call the given closure if this is true.\n    /// @param isClosure A bool indicating if the captured expression is a\n    ///                  closure or internally produced closure. Some matchers\n    ///                  may require closures. For example, toEventually()\n    ///                  requires an explicit closure. This gives Nimble\n    ///                  flexibility if @autoclosure behavior changes between\n    ///                  Swift versions. Nimble internals always sets this true.\n    public init(memoizedExpression: (Bool) throws -> T?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true) {\n        self._expression = memoizedExpression\n        self.location = location\n        self._withoutCaching = withoutCaching\n        self.isClosure = isClosure\n    }\n\n    /// Returns a new Expression from the given expression. Identical to a map()\n    /// on this type. This should be used only to typecast the Expression's\n    /// closure value.\n    ///\n    /// The returned expression will preserve location and isClosure.\n    ///\n    /// @param block The block that can cast the current Expression value to a\n    ///              new type.\n    public func cast<U>(block: (T?) throws -> U?) -> Expression<U> {\n        return Expression<U>(expression: ({ try block(self.evaluate()) }), location: self.location, isClosure: self.isClosure)\n    }\n\n    public func evaluate() throws -> T? {\n        return try self._expression(_withoutCaching)\n    }\n\n    public func withoutCaching() -> Expression<T> {\n        return Expression(memoizedExpression: self._expression, location: location, withoutCaching: true, isClosure: isClosure)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/FailureMessage.swift",
    "content": "import Foundation\n\n/// Encapsulates the failure message that matchers can report to the end user.\n///\n/// This is shared state between Nimble and matchers that mutate this value.\npublic class FailureMessage: NSObject {\n    public var expected: String = \"expected\"\n    public var actualValue: String? = \"\" // empty string -> use default; nil -> exclude\n    public var to: String = \"to\"\n    public var postfixMessage: String = \"match\"\n    public var postfixActual: String = \"\"\n    public var userDescription: String? = nil\n\n    public var stringValue: String {\n        get {\n            if let value = _stringValueOverride {\n                return value\n            } else {\n                return computeStringValue()\n            }\n        }\n        set {\n            _stringValueOverride = newValue\n        }\n    }\n\n    internal var _stringValueOverride: String?\n\n    public override init() {\n    }\n\n    public init(stringValue: String) {\n        _stringValueOverride = stringValue\n    }\n\n    internal func stripNewlines(str: String) -> String {\n        var lines: [String] = (str as NSString).componentsSeparatedByString(\"\\n\") as [String]\n        let whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet()\n        lines = lines.map { line in line.stringByTrimmingCharactersInSet(whitespace) }\n        return lines.joinWithSeparator(\"\")\n    }\n\n    internal func computeStringValue() -> String {\n        var value = \"\\(expected) \\(to) \\(postfixMessage)\"\n        if let actualValue = actualValue {\n            value = \"\\(expected) \\(to) \\(postfixMessage), got \\(actualValue)\\(postfixActual)\"\n        }\n        value = stripNewlines(value)\n        \n        if let userDescription = userDescription {\n            return \"\\(userDescription)\\n\\(value)\"\n        }\n        \n        return value\n    }\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</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>${CURRENT_PROJECT_VERSION}</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2014 Jeff Hui. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/AllPass.swift",
    "content": "import Foundation\n\npublic func allPass<T,U where U: SequenceType, U.Generator.Element == T>\n    (passFunc: (T?) -> Bool) -> NonNilMatcherFunc<U> {\n        return allPass(\"pass a condition\", passFunc)\n}\n\npublic func allPass<T,U where U: SequenceType, U.Generator.Element == T>\n    (passName: String, _ passFunc: (T?) -> Bool) -> NonNilMatcherFunc<U> {\n        return createAllPassMatcher() {\n            expression, failureMessage in\n            failureMessage.postfixMessage = passName\n            return passFunc(try expression.evaluate())\n        }\n}\n\npublic func allPass<U,V where U: SequenceType, V: Matcher, U.Generator.Element == V.ValueType>\n    (matcher: V) -> NonNilMatcherFunc<U> {\n        return createAllPassMatcher() {\n            try matcher.matches($0, failureMessage: $1)\n        }\n}\n\nprivate func createAllPassMatcher<T,U where U: SequenceType, U.Generator.Element == T>\n    (elementEvaluator:(Expression<T>, FailureMessage) throws -> Bool) -> NonNilMatcherFunc<U> {\n        return NonNilMatcherFunc { actualExpression, failureMessage in\n            failureMessage.actualValue = nil\n            if let actualValue = try actualExpression.evaluate() {\n                for currentElement in actualValue {\n                    let exp = Expression(\n                        expression: {currentElement}, location: actualExpression.location)\n                    if try !elementEvaluator(exp, failureMessage) {\n                        failureMessage.postfixMessage =\n                            \"all \\(failureMessage.postfixMessage),\"\n                            + \" but failed first at element <\\(stringify(currentElement))>\"\n                            + \" in <\\(stringify(actualValue))>\"\n                        return false\n                    }\n                }\n                failureMessage.postfixMessage = \"all \\(failureMessage.postfixMessage)\"\n            } else {\n                failureMessage.postfixMessage = \"all pass (use beNil() to match nils)\"\n                return false\n            }\n            \n            return true\n        }\n}\n\nextension NMBObjCMatcher {\n    public class func allPassMatcher(matcher: NMBObjCMatcher) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let location = actualExpression.location\n            let actualValue = try! actualExpression.evaluate()\n            var nsObjects = [NSObject]()\n            \n            var collectionIsUsable = true\n            if let value = actualValue as? NSFastEnumeration {\n                let generator = NSFastGenerator(value)\n                while let obj:AnyObject = generator.next() {\n                    if let nsObject = obj as? NSObject {\n                        nsObjects.append(nsObject)\n                    } else {\n                        collectionIsUsable = false\n                        break\n                    }\n                }\n            } else {\n                collectionIsUsable = false\n            }\n            \n            if !collectionIsUsable {\n                failureMessage.postfixMessage =\n                  \"allPass only works with NSFastEnumeration (NSArray, NSSet, ...) of NSObjects\"\n                failureMessage.expected = \"\"\n                failureMessage.to = \"\"\n                return false\n            }\n            \n            let expr = Expression(expression: ({ nsObjects }), location: location)\n            let elementEvaluator: (Expression<NSObject>, FailureMessage) -> Bool = {\n                expression, failureMessage in\n                return matcher.matches(\n                    {try! expression.evaluate()}, failureMessage: failureMessage, location: expr.location)\n            }\n            return try! createAllPassMatcher(elementEvaluator).matches(\n                expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeAKindOf.swift",
    "content": "import Foundation\n\n// A Nimble matcher that catches attempts to use beAKindOf with non Objective-C types\npublic func beAKindOf(expectedClass: Any) -> NonNilMatcherFunc<Any> {\n    return NonNilMatcherFunc {actualExpression, failureMessage in\n        failureMessage.stringValue = \"beAKindOf only works on Objective-C types since\"\n            + \" the Swift compiler will automatically type check Swift-only types.\"\n            + \" This expectation is redundant.\"\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is an instance of the given class.\n/// @see beAnInstanceOf if you want to match against the exact class\npublic func beAKindOf(expectedClass: AnyClass) -> NonNilMatcherFunc<NSObject> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        let instance = try actualExpression.evaluate()\n        if let validInstance = instance {\n            failureMessage.actualValue = \"<\\(NSStringFromClass(validInstance.dynamicType)) instance>\"\n        } else {\n            failureMessage.actualValue = \"<nil>\"\n        }\n        failureMessage.postfixMessage = \"be a kind of \\(NSStringFromClass(expectedClass))\"\n        return instance != nil && instance!.isKindOfClass(expectedClass)\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beAKindOfMatcher(expected: AnyClass) -> NMBMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            return try! beAKindOf(expected).matches(actualExpression, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeAnInstanceOf.swift",
    "content": "import Foundation\n\n// A Nimble matcher that catches attempts to use beAnInstanceOf with non Objective-C types\npublic func beAnInstanceOf(expectedClass: Any) -> NonNilMatcherFunc<Any> {\n    return NonNilMatcherFunc {actualExpression, failureMessage in\n        failureMessage.stringValue = \"beAnInstanceOf only works on Objective-C types since\"\n            + \" the Swift compiler will automatically type check Swift-only types.\"\n            + \" This expectation is redundant.\"\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is an instance of the given class.\n/// @see beAKindOf if you want to match against subclasses\npublic func beAnInstanceOf(expectedClass: AnyClass) -> NonNilMatcherFunc<NSObject> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        let instance = try actualExpression.evaluate()\n        if let validInstance = instance {\n            failureMessage.actualValue = \"<\\(NSStringFromClass(validInstance.dynamicType)) instance>\"\n        } else {\n            failureMessage.actualValue = \"<nil>\"\n        }\n        failureMessage.postfixMessage = \"be an instance of \\(NSStringFromClass(expectedClass))\"\n        return instance != nil && instance!.isMemberOfClass(expectedClass)\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beAnInstanceOfMatcher(expected: AnyClass) -> NMBMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            return try! beAnInstanceOf(expected).matches(actualExpression, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeCloseTo.swift",
    "content": "import Foundation\n\ninternal let DefaultDelta = 0.0001\n\ninternal func isCloseTo(actualValue: NMBDoubleConvertible?, expectedValue: NMBDoubleConvertible, delta: Double, failureMessage: FailureMessage) -> Bool {\n    failureMessage.postfixMessage = \"be close to <\\(stringify(expectedValue))> (within \\(stringify(delta)))\"\n    if actualValue != nil {\n        failureMessage.actualValue = \"<\\(stringify(actualValue!))>\"\n    } else {\n        failureMessage.actualValue = \"<nil>\"\n    }\n    return actualValue != nil && abs(actualValue!.doubleValue - expectedValue.doubleValue) < delta\n}\n\n/// A Nimble matcher that succeeds when a value is close to another. This is used for floating\n/// point values which can have imprecise results when doing arithmetic on them.\n///\n/// @see equal\npublic func beCloseTo(expectedValue: Double, within delta: Double = DefaultDelta) -> NonNilMatcherFunc<Double> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage)\n    }\n}\n\n/// A Nimble matcher that succeeds when a value is close to another. This is used for floating\n/// point values which can have imprecise results when doing arithmetic on them.\n///\n/// @see equal\npublic func beCloseTo(expectedValue: NMBDoubleConvertible, within delta: Double = DefaultDelta) -> NonNilMatcherFunc<NMBDoubleConvertible> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage)\n    }\n}\n\npublic class NMBObjCBeCloseToMatcher : NSObject, NMBMatcher {\n    var _expected: NSNumber\n    var _delta: CDouble\n    init(expected: NSNumber, within: CDouble) {\n        _expected = expected\n        _delta = within\n    }\n\n    public func matches(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        let actualBlock: () -> NMBDoubleConvertible? = ({\n            return actualExpression() as? NMBDoubleConvertible\n        })\n        let expr = Expression(expression: actualBlock, location: location)\n        let matcher = beCloseTo(self._expected, within: self._delta)\n        return try! matcher.matches(expr, failureMessage: failureMessage)\n    }\n\n    public func doesNotMatch(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        let actualBlock: () -> NMBDoubleConvertible? = ({\n            return actualExpression() as? NMBDoubleConvertible\n        })\n        let expr = Expression(expression: actualBlock, location: location)\n        let matcher = beCloseTo(self._expected, within: self._delta)\n        return try! matcher.doesNotMatch(expr, failureMessage: failureMessage)\n    }\n\n    public var within: (CDouble) -> NMBObjCBeCloseToMatcher {\n        return ({ delta in\n            return NMBObjCBeCloseToMatcher(expected: self._expected, within: delta)\n        })\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beCloseToMatcher(expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToMatcher {\n        return NMBObjCBeCloseToMatcher(expected: expected, within: within)\n    }\n}\n\npublic func beCloseTo(expectedValues: [Double], within delta: Double = DefaultDelta) -> NonNilMatcherFunc <[Double]> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be close to <\\(stringify(expectedValues))> (each within \\(stringify(delta)))\"\n        if let actual = try actualExpression.evaluate() {\n            if actual.count != expectedValues.count {\n                return false\n            } else {\n                for (index, actualItem) in actual.enumerate() {\n                    if fabs(actualItem - expectedValues[index]) > delta {\n                        return false\n                    }\n                }\n                return true\n            }\n        }\n        return false\n    }\n}\n\n// MARK: - Operators\n\ninfix operator ≈ {\n    associativity none\n    precedence 130\n}\n\npublic func ≈(lhs: Expectation<[Double]>, rhs: [Double]) {\n    lhs.to(beCloseTo(rhs))\n}\n\npublic func ≈(lhs: Expectation<Double>, rhs: Double) {\n    lhs.to(beCloseTo(rhs))\n}\n\npublic func ≈(lhs: Expectation<Double>, rhs: (expected: Double, delta: Double)) {\n    lhs.to(beCloseTo(rhs.expected, within: rhs.delta))\n}\n\npublic func ==(lhs: Expectation<Double>, rhs: (expected: Double, delta: Double)) {\n    lhs.to(beCloseTo(rhs.expected, within: rhs.delta))\n}\n\n// make this higher precedence than exponents so the Doubles either end aren't pulled in\n// unexpectantly\ninfix operator ± { precedence 170 }\npublic func ±(lhs: Double, rhs: Double) -> (expected: Double, delta: Double) {\n    return (expected: lhs, delta: rhs)\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeEmpty.swift",
    "content": "import Foundation\n\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For strings, it is an empty string.\npublic func beEmpty<S: SequenceType>() -> NonNilMatcherFunc<S> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be empty\"\n        let actualSeq = try actualExpression.evaluate()\n        if actualSeq == nil {\n            return true\n        }\n        var generator = actualSeq!.generate()\n        return generator.next() == nil\n    }\n}\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For strings, it is an empty string.\npublic func beEmpty() -> NonNilMatcherFunc<String> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be empty\"\n        let actualString = try actualExpression.evaluate()\n        return actualString == nil || (actualString! as NSString).length  == 0\n    }\n}\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For NSString instances, it is an empty string.\npublic func beEmpty() -> NonNilMatcherFunc<NSString> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be empty\"\n        let actualString = try actualExpression.evaluate()\n        return actualString == nil || actualString!.length == 0\n    }\n}\n\n// Without specific overrides, beEmpty() is ambiguous for NSDictionary, NSArray,\n// etc, since they conform to SequenceType as well as NMBCollection.\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For strings, it is an empty string.\npublic func beEmpty() -> NonNilMatcherFunc<NSDictionary> {\n\treturn NonNilMatcherFunc { actualExpression, failureMessage in\n\t\tfailureMessage.postfixMessage = \"be empty\"\n\t\tlet actualDictionary = try actualExpression.evaluate()\n\t\treturn actualDictionary == nil || actualDictionary!.count == 0\n\t}\n}\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For strings, it is an empty string.\npublic func beEmpty() -> NonNilMatcherFunc<NSArray> {\n\treturn NonNilMatcherFunc { actualExpression, failureMessage in\n\t\tfailureMessage.postfixMessage = \"be empty\"\n\t\tlet actualArray = try actualExpression.evaluate()\n\t\treturn actualArray == nil || actualArray!.count == 0\n\t}\n}\n\n/// A Nimble matcher that succeeds when a value is \"empty\". For collections, this\n/// means the are no items in that collection. For strings, it is an empty string.\npublic func beEmpty() -> NonNilMatcherFunc<NMBCollection> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be empty\"\n        let actual = try actualExpression.evaluate()\n        return actual == nil || actual!.count == 0\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beEmptyMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let location = actualExpression.location\n            let actualValue = try! actualExpression.evaluate()\n            failureMessage.postfixMessage = \"be empty\"\n            if let value = actualValue as? NMBCollection {\n                let expr = Expression(expression: ({ value as NMBCollection }), location: location)\n                return try! beEmpty().matches(expr, failureMessage: failureMessage)\n            } else if let value = actualValue as? NSString {\n                let expr = Expression(expression: ({ value as String }), location: location)\n                return try! beEmpty().matches(expr, failureMessage: failureMessage)\n            } else if let actualValue = actualValue {\n                failureMessage.postfixMessage = \"be empty (only works for NSArrays, NSSets, NSDictionaries, NSHashTables, and NSStrings)\"\n                failureMessage.actualValue = \"\\(NSStringFromClass(actualValue.dynamicType)) type\"\n            }\n            return false\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeGreaterThan.swift",
    "content": "import Foundation\n\n\n/// A Nimble matcher that succeeds when the actual value is greater than the expected value.\npublic func beGreaterThan<T: Comparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be greater than <\\(stringify(expectedValue))>\"\n        return try actualExpression.evaluate() > expectedValue\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is greater than the expected value.\npublic func beGreaterThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc<NMBComparable> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be greater than <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedDescending\n        return matches\n    }\n}\n\npublic func ><T: Comparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beGreaterThan(rhs))\n}\n\npublic func >(lhs: Expectation<NMBComparable>, rhs: NMBComparable?) {\n    lhs.to(beGreaterThan(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func beGreaterThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let expr = actualExpression.cast { $0 as? NMBComparable }\n            return try! beGreaterThan(expected).matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeGreaterThanOrEqualTo.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual value is greater than\n/// or equal to the expected value.\npublic func beGreaterThanOrEqualTo<T: Comparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be greater than or equal to <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        return actualValue >= expectedValue\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is greater than\n/// or equal to the expected value.\npublic func beGreaterThanOrEqualTo<T: NMBComparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be greater than or equal to <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedAscending\n        return matches\n    }\n}\n\npublic func >=<T: Comparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beGreaterThanOrEqualTo(rhs))\n}\n\npublic func >=<T: NMBComparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beGreaterThanOrEqualTo(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func beGreaterThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let expr = actualExpression.cast { $0 as? NMBComparable }\n            return try! beGreaterThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeIdenticalTo.swift",
    "content": "import Foundation\n\n\n/// A Nimble matcher that succeeds when the actual value is the same instance\n/// as the expected instance.\npublic func beIdenticalTo<T: AnyObject>(expected: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        let actual = try actualExpression.evaluate()\n        failureMessage.actualValue = \"\\(identityAsString(actual))\"\n        failureMessage.postfixMessage = \"be identical to \\(identityAsString(expected))\"\n        return actual === expected && actual !== nil\n    }\n}\n\npublic func ===<T: AnyObject>(lhs: Expectation<T>, rhs: T?) {\n    lhs.to(beIdenticalTo(rhs))\n}\npublic func !==<T: AnyObject>(lhs: Expectation<T>, rhs: T?) {\n    lhs.toNot(beIdenticalTo(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func beIdenticalToMatcher(expected: NSObject?) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            return try! beIdenticalTo(expected).matches(actualExpression, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeLessThan.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual value is less than the expected value.\npublic func beLessThan<T: Comparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be less than <\\(stringify(expectedValue))>\"\n        return try actualExpression.evaluate() < expectedValue\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is less than the expected value.\npublic func beLessThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc<NMBComparable> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be less than <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedAscending\n        return matches\n    }\n}\n\npublic func <<T: Comparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beLessThan(rhs))\n}\n\npublic func <(lhs: Expectation<NMBComparable>, rhs: NMBComparable?) {\n    lhs.to(beLessThan(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func beLessThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let expr = actualExpression.cast { $0 as! NMBComparable? }\n            return try! beLessThan(expected).matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeLessThanOrEqual.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual value is less than\n/// or equal to the expected value.\npublic func beLessThanOrEqualTo<T: Comparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be less than or equal to <\\(stringify(expectedValue))>\"\n        return try actualExpression.evaluate() <= expectedValue\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is less than\n/// or equal to the expected value.\npublic func beLessThanOrEqualTo<T: NMBComparable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be less than or equal to <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        return actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedDescending\n    }\n}\n\npublic func <=<T: Comparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beLessThanOrEqualTo(rhs))\n}\n\npublic func <=<T: NMBComparable>(lhs: Expectation<T>, rhs: T) {\n    lhs.to(beLessThanOrEqualTo(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func beLessThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil:false) { actualExpression, failureMessage in\n            let expr = actualExpression.cast { $0 as? NMBComparable }\n            return try! beLessThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeLogical.swift",
    "content": "import Foundation\n\ninternal func matcherWithFailureMessage<T, M: Matcher where M.ValueType == T>(matcher: M, postprocessor: (FailureMessage) -> Void) -> FullMatcherFunc<T> {\n    return FullMatcherFunc { actualExpression, failureMessage, isNegation in\n        let pass: Bool\n        if isNegation {\n            pass = try matcher.doesNotMatch(actualExpression, failureMessage: failureMessage)\n        } else {\n            pass = try matcher.matches(actualExpression, failureMessage: failureMessage)\n        }\n        postprocessor(failureMessage)\n        return pass\n    }\n}\n\n// MARK: beTrue() / beFalse()\n\n/// A Nimble matcher that succeeds when the actual value is exactly true.\n/// This matcher will not match against nils.\npublic func beTrue() -> FullMatcherFunc<Bool> {\n    return matcherWithFailureMessage(equal(true)) { failureMessage in\n        failureMessage.postfixMessage = \"be true\"\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is exactly false.\n/// This matcher will not match against nils.\npublic func beFalse() -> FullMatcherFunc<Bool> {\n    return matcherWithFailureMessage(equal(false)) { failureMessage in\n        failureMessage.postfixMessage = \"be false\"\n    }\n}\n\n// MARK: beTruthy() / beFalsy()\n\n/// A Nimble matcher that succeeds when the actual value is not logically false.\npublic func beTruthy<T>() -> MatcherFunc<T> {\n    return MatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be truthy\"\n        let actualValue = try actualExpression.evaluate()\n        if let actualValue = actualValue {\n            if let actualValue = actualValue as? BooleanType {\n                return actualValue.boolValue == true\n            }\n        }\n        return actualValue != nil\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is logically false.\n/// This matcher will match against nils.\npublic func beFalsy<T>() -> MatcherFunc<T> {\n    return MatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be falsy\"\n        let actualValue = try actualExpression.evaluate()\n        if let actualValue = actualValue {\n            if let actualValue = actualValue as? BooleanType {\n                return actualValue.boolValue != true\n            }\n        }\n        return actualValue == nil\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beTruthyMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher { actualExpression, failureMessage in\n            let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? }\n            return try! beTruthy().matches(expr, failureMessage: failureMessage)\n        }\n    }\n\n    public class func beFalsyMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher { actualExpression, failureMessage in\n            let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? }\n            return try! beFalsy().matches(expr, failureMessage: failureMessage)\n        }\n    }\n\n    public class func beTrueMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher { actualExpression, failureMessage in\n            let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? }\n            return try! beTrue().matches(expr, failureMessage: failureMessage)\n        }\n    }\n\n    public class func beFalseMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? }\n            return try! beFalse().matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeNil.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual value is nil.\npublic func beNil<T>() -> MatcherFunc<T> {\n    return MatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"be nil\"\n        let actualValue = try actualExpression.evaluate()\n        return actualValue == nil\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beNilMatcher() -> NMBObjCMatcher {\n        return NMBObjCMatcher { actualExpression, failureMessage in\n            return try! beNil().matches(actualExpression, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/BeginWith.swift",
    "content": "import Foundation\n\n\n/// A Nimble matcher that succeeds when the actual sequence's first element\n/// is equal to the expected value.\npublic func beginWith<S: SequenceType, T: Equatable where S.Generator.Element == T>(startingElement: T) -> NonNilMatcherFunc<S> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"begin with <\\(startingElement)>\"\n        if let actualValue = try actualExpression.evaluate() {\n            var actualGenerator = actualValue.generate()\n            return actualGenerator.next() == startingElement\n        }\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual collection's first element\n/// is equal to the expected object.\npublic func beginWith(startingElement: AnyObject) -> NonNilMatcherFunc<NMBOrderedCollection> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"begin with <\\(startingElement)>\"\n        let collection = try actualExpression.evaluate()\n        return collection != nil && collection!.indexOfObject(startingElement) == 0\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual string contains expected substring\n/// where the expected substring's location is zero.\npublic func beginWith(startingSubstring: String) -> NonNilMatcherFunc<String> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"begin with <\\(startingSubstring)>\"\n        if let actual = try actualExpression.evaluate() {\n            let range = actual.rangeOfString(startingSubstring)\n            return range != nil && range!.startIndex == actual.startIndex\n        }\n        return false\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let actual = try! actualExpression.evaluate()\n            if let _ = actual as? String {\n                let expr = actualExpression.cast { $0 as? String }\n                return try! beginWith(expected as! String).matches(expr, failureMessage: failureMessage)\n            } else {\n                let expr = actualExpression.cast { $0 as? NMBOrderedCollection }\n                return try! beginWith(expected).matches(expr, failureMessage: failureMessage)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/Contain.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual sequence contains the expected value.\npublic func contain<S: SequenceType, T: Equatable where S.Generator.Element == T>(items: T...) -> NonNilMatcherFunc<S> {\n    return contain(items)\n}\n\nprivate func contain<S: SequenceType, T: Equatable where S.Generator.Element == T>(items: [T]) -> NonNilMatcherFunc<S> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"contain <\\(arrayAsString(items))>\"\n        if let actual = try actualExpression.evaluate() {\n            return all(items) {\n                return actual.contains($0)\n            }\n        }\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual string contains the expected substring.\npublic func contain(substrings: String...) -> NonNilMatcherFunc<String> {\n    return contain(substrings)\n}\n\nprivate func contain(substrings: [String]) -> NonNilMatcherFunc<String> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"contain <\\(arrayAsString(substrings))>\"\n        if let actual = try actualExpression.evaluate() {\n            return all(substrings) {\n                let scanRange = Range(start: actual.startIndex, end: actual.endIndex)\n                let range = actual.rangeOfString($0, options: [], range: scanRange, locale: nil)\n                return range != nil && !range!.isEmpty\n            }\n        }\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual string contains the expected substring.\npublic func contain(substrings: NSString...) -> NonNilMatcherFunc<NSString> {\n    return contain(substrings)\n}\n\nprivate func contain(substrings: [NSString]) -> NonNilMatcherFunc<NSString> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"contain <\\(arrayAsString(substrings))>\"\n        if let actual = try actualExpression.evaluate() {\n            return all(substrings) { actual.rangeOfString($0.description).length != 0 }\n        }\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual collection contains the expected object.\npublic func contain(items: AnyObject?...) -> NonNilMatcherFunc<NMBContainer> {\n    return contain(items)\n}\n\nprivate func contain(items: [AnyObject?]) -> NonNilMatcherFunc<NMBContainer> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"contain <\\(arrayAsString(items))>\"\n        let actual = try actualExpression.evaluate()\n        return all(items) { item in\n            return actual != nil && actual!.containsObject(item)\n        }\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func containMatcher(expected: [NSObject]) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let location = actualExpression.location\n            let actualValue = try! actualExpression.evaluate()\n            if let value = actualValue as? NMBContainer {\n                let expr = Expression(expression: ({ value as NMBContainer }), location: location)\n\n                // A straightforward cast on the array causes this to crash, so we have to cast the individual items\n                let expectedOptionals: [AnyObject?] = expected.map({ $0 as AnyObject? })\n                return try! contain(expectedOptionals).matches(expr, failureMessage: failureMessage)\n            } else if let value = actualValue as? NSString {\n                let expr = Expression(expression: ({ value as String }), location: location)\n                return try! contain(expected as! [String]).matches(expr, failureMessage: failureMessage)\n            } else if actualValue != nil {\n                failureMessage.postfixMessage = \"contain <\\(arrayAsString(expected))> (only works for NSArrays, NSSets, NSHashTables, and NSStrings)\"\n            } else {\n                failureMessage.postfixMessage = \"contain <\\(arrayAsString(expected))>\"\n            }\n            return false\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/EndWith.swift",
    "content": "import Foundation\n\n\n/// A Nimble matcher that succeeds when the actual sequence's last element\n/// is equal to the expected value.\npublic func endWith<S: SequenceType, T: Equatable where S.Generator.Element == T>(endingElement: T) -> NonNilMatcherFunc<S> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"end with <\\(endingElement)>\"\n\n        if let actualValue = try actualExpression.evaluate() {\n            var actualGenerator = actualValue.generate()\n            var lastItem: T?\n            var item: T?\n            repeat {\n                lastItem = item\n                item = actualGenerator.next()\n            } while(item != nil)\n            \n            return lastItem == endingElement\n        }\n        return false\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual collection's last element\n/// is equal to the expected object.\npublic func endWith(endingElement: AnyObject) -> NonNilMatcherFunc<NMBOrderedCollection> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"end with <\\(endingElement)>\"\n        let collection = try actualExpression.evaluate()\n        return collection != nil && collection!.indexOfObject(endingElement) == collection!.count - 1\n    }\n}\n\n\n/// A Nimble matcher that succeeds when the actual string contains the expected substring\n/// where the expected substring's location is the actual string's length minus the\n/// expected substring's length.\npublic func endWith(endingSubstring: String) -> NonNilMatcherFunc<String> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"end with <\\(endingSubstring)>\"\n        if let collection = try actualExpression.evaluate() {\n            let range = collection.rangeOfString(endingSubstring)\n            return range != nil && range!.endIndex == collection.endIndex\n        }\n        return false\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func endWithMatcher(expected: AnyObject) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let actual = try! actualExpression.evaluate()\n            if let _ = actual as? String {\n                let expr = actualExpression.cast { $0 as? String }\n                return try! endWith(expected as! String).matches(expr, failureMessage: failureMessage)\n            } else {\n                let expr = actualExpression.cast { $0 as? NMBOrderedCollection }\n                return try! endWith(expected).matches(expr, failureMessage: failureMessage)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/Equal.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual value is equal to the expected value.\n/// Values can support equal by supporting the Equatable protocol.\n///\n/// @see beCloseTo if you want to match imprecise types (eg - floats, doubles).\npublic func equal<T: Equatable>(expectedValue: T?) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"equal <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        let matches = actualValue == expectedValue && expectedValue != nil\n        if expectedValue == nil || actualValue == nil {\n            if expectedValue == nil {\n                failureMessage.postfixActual = \" (use beNil() to match nils)\"\n            }\n            return false\n        }\n        return matches\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is equal to the expected value.\n/// Values can support equal by supporting the Equatable protocol.\n///\n/// @see beCloseTo if you want to match imprecise types (eg - floats, doubles).\npublic func equal<T: Equatable, C: Equatable>(expectedValue: [T: C]?) -> NonNilMatcherFunc<[T: C]> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"equal <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        if expectedValue == nil || actualValue == nil {\n            if expectedValue == nil {\n                failureMessage.postfixActual = \" (use beNil() to match nils)\"\n            }\n            return false\n        }\n        return expectedValue! == actualValue!\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual collection is equal to the expected collection.\n/// Items must implement the Equatable protocol.\npublic func equal<T: Equatable>(expectedValue: [T]?) -> NonNilMatcherFunc<[T]> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"equal <\\(stringify(expectedValue))>\"\n        let actualValue = try actualExpression.evaluate()\n        if expectedValue == nil || actualValue == nil {\n            if expectedValue == nil {\n                failureMessage.postfixActual = \" (use beNil() to match nils)\"\n            }\n            return false\n        }\n        return expectedValue! == actualValue!\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual set is equal to the expected set.\npublic func equal<T>(expectedValue: Set<T>?) -> NonNilMatcherFunc<Set<T>> {\n    return equal(expectedValue, stringify: stringify)\n}\n\n/// A Nimble matcher that succeeds when the actual set is equal to the expected set.\npublic func equal<T: Comparable>(expectedValue: Set<T>?) -> NonNilMatcherFunc<Set<T>> {\n    return equal(expectedValue, stringify: {\n        if let set = $0 {\n            return stringify(Array(set).sort { $0 < $1 })\n        } else {\n            return \"nil\"\n        }\n    })\n}\n\nprivate func equal<T>(expectedValue: Set<T>?, stringify: Set<T>? -> String) -> NonNilMatcherFunc<Set<T>> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"equal <\\(stringify(expectedValue))>\"\n\n        if let expectedValue = expectedValue {\n            if let actualValue = try actualExpression.evaluate() {\n                failureMessage.actualValue = \"<\\(stringify(actualValue))>\"\n\n                if expectedValue == actualValue {\n                    return true\n                }\n\n                let missing = expectedValue.subtract(actualValue)\n                if missing.count > 0 {\n                    failureMessage.postfixActual += \", missing <\\(stringify(missing))>\"\n                }\n\n                let extra = actualValue.subtract(expectedValue)\n                if extra.count > 0 {\n                    failureMessage.postfixActual += \", extra <\\(stringify(extra))>\"\n                }\n            }\n        } else {\n            failureMessage.postfixActual = \" (use beNil() to match nils)\"\n        }\n\n        return false\n    }\n}\n\npublic func ==<T: Equatable>(lhs: Expectation<T>, rhs: T?) {\n    lhs.to(equal(rhs))\n}\n\npublic func !=<T: Equatable>(lhs: Expectation<T>, rhs: T?) {\n    lhs.toNot(equal(rhs))\n}\n\npublic func ==<T: Equatable>(lhs: Expectation<[T]>, rhs: [T]?) {\n    lhs.to(equal(rhs))\n}\n\npublic func !=<T: Equatable>(lhs: Expectation<[T]>, rhs: [T]?) {\n    lhs.toNot(equal(rhs))\n}\n\npublic func ==<T>(lhs: Expectation<Set<T>>, rhs: Set<T>?) {\n    lhs.to(equal(rhs))\n}\n\npublic func !=<T>(lhs: Expectation<Set<T>>, rhs: Set<T>?) {\n    lhs.toNot(equal(rhs))\n}\n\npublic func ==<T: Comparable>(lhs: Expectation<Set<T>>, rhs: Set<T>?) {\n    lhs.to(equal(rhs))\n}\n\npublic func !=<T: Comparable>(lhs: Expectation<Set<T>>, rhs: Set<T>?) {\n    lhs.toNot(equal(rhs))\n}\n\npublic func ==<T: Equatable, C: Equatable>(lhs: Expectation<[T: C]>, rhs: [T: C]?) {\n    lhs.to(equal(rhs))\n}\n\npublic func !=<T: Equatable, C: Equatable>(lhs: Expectation<[T: C]>, rhs: [T: C]?) {\n    lhs.toNot(equal(rhs))\n}\n\nextension NMBObjCMatcher {\n    public class func equalMatcher(expected: NSObject) -> NMBMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            return try! equal(expected).matches(actualExpression, failureMessage: failureMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/HaveCount.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual CollectionType's count equals\n/// the expected value\npublic func haveCount<T: CollectionType>(expectedValue: T.Index.Distance) -> NonNilMatcherFunc<T> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        if let actualValue = try actualExpression.evaluate() {\n            failureMessage.postfixMessage = \"have \\(actualValue) with count \\(expectedValue)\"\n            let result = expectedValue == actualValue.count\n            failureMessage.actualValue = \"\\(actualValue.count)\"\n            return result\n        } else {\n            return false\n        }\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual collection's count equals\n/// the expected value\npublic func haveCount(expectedValue: Int) -> MatcherFunc<NMBCollection> {\n    return MatcherFunc { actualExpression, failureMessage in\n        if let actualValue = try actualExpression.evaluate() {\n            failureMessage.postfixMessage = \"have \\(actualValue) with count \\(expectedValue)\"\n            let result = expectedValue == actualValue.count\n            failureMessage.actualValue = \"\\(actualValue.count)\"\n            return result\n        } else {\n            return false\n        }\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func haveCountMatcher(expected: NSNumber) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let location = actualExpression.location\n            let actualValue = try! actualExpression.evaluate()\n            if let value = actualValue as? NMBCollection {\n                let expr = Expression(expression: ({ value as NMBCollection}), location: location)\n                return try! haveCount(expected.integerValue).matches(expr, failureMessage: failureMessage)\n            } else if let actualValue = actualValue {\n                failureMessage.postfixMessage = \"get type of NSArray, NSSet, NSDictionary, or NSHashTable\"\n                failureMessage.actualValue = \"\\(NSStringFromClass(actualValue.dynamicType))\"\n            }\n            return false\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/Match.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual string satisfies the regular expression\n/// described by the expected string.\npublic func match(expectedValue: String?) -> NonNilMatcherFunc<String> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"match <\\(stringify(expectedValue))>\"\n        \n        if let actual = try actualExpression.evaluate() {\n            if let regexp = expectedValue {\n                return actual.rangeOfString(regexp, options: .RegularExpressionSearch) != nil\n            }\n        }\n\n        return false\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func matchMatcher(expected: NSString) -> NMBMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let actual = actualExpression.cast { $0 as? String }\n            return try! match(expected.description).matches(actual, failureMessage: failureMessage)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/MatcherProtocols.swift",
    "content": "import Foundation\n\n/// Implement this protocol to implement a custom matcher for Swift\u0013\npublic protocol Matcher {\n    typealias ValueType\n    func matches(actualExpression: Expression<ValueType>, failureMessage: FailureMessage) throws -> Bool\n    func doesNotMatch(actualExpression: Expression<ValueType>, failureMessage: FailureMessage) throws -> Bool\n}\n\n/// Objective-C interface to the Swift variant of Matcher.\n@objc public protocol NMBMatcher {\n    func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool\n    func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool\n}\n\n/// Protocol for types that support contain() matcher.\n@objc public protocol NMBContainer {\n    func containsObject(object: AnyObject!) -> Bool\n}\nextension NSArray : NMBContainer {}\nextension NSSet : NMBContainer {}\nextension NSHashTable : NMBContainer {}\n\n/// Protocol for types that support only beEmpty(), haveCount() matchers\n@objc public protocol NMBCollection {\n    var count: Int { get }\n}\nextension NSSet : NMBCollection {}\nextension NSDictionary : NMBCollection {}\nextension NSHashTable : NMBCollection {}\nextension NSMapTable : NMBCollection {}\n\n/// Protocol for types that support beginWith(), endWith(), beEmpty() matchers\n@objc public protocol NMBOrderedCollection : NMBCollection {\n    func indexOfObject(object: AnyObject!) -> Int\n}\nextension NSArray : NMBOrderedCollection {}\n\n/// Protocol for types to support beCloseTo() matcher\n@objc public protocol NMBDoubleConvertible {\n    var doubleValue: CDouble { get }\n}\nextension NSNumber : NMBDoubleConvertible {\n}\n\nprivate let dateFormatter: NSDateFormatter = {\n    let formatter = NSDateFormatter()\n    formatter.dateFormat = \"yyyy-MM-dd HH:mm:ss.SSSS\"\n    formatter.locale = NSLocale(localeIdentifier: \"en_US_POSIX\")\n    \n    return formatter\n    }()\n\nextension NSDate: NMBDoubleConvertible {\n    public var doubleValue: CDouble {\n        get {\n            return self.timeIntervalSinceReferenceDate\n        }\n    }\n}\n\n\nextension NMBDoubleConvertible {\n    public var stringRepresentation: String {\n        get {\n            if let date = self as? NSDate {\n                return dateFormatter.stringFromDate(date)\n            }\n            \n            if let debugStringConvertible = self as? CustomDebugStringConvertible {\n                return debugStringConvertible.debugDescription\n            }\n            \n            if let stringConvertible = self as? CustomStringConvertible {\n                return stringConvertible.description\n            }\n            \n            return \"\"\n        }\n    }\n}\n\n/// Protocol for types to support beLessThan(), beLessThanOrEqualTo(),\n///  beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers.\n///\n/// Types that conform to Swift's Comparable protocol will work implicitly too\n@objc public protocol NMBComparable {\n    func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult\n}\nextension NSNumber : NMBComparable {\n    public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult {\n        return compare(otherObject as! NSNumber)\n    }\n}\nextension NSString : NMBComparable {\n    public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult {\n        return compare(otherObject as! String)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/RaisesException.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual expression raises an\n/// exception with the specified name, reason, and/or\u0013 userInfo.\n///\n/// Alternatively, you can pass a closure to do any arbitrary custom matching\n/// to the raised exception. The closure only gets called when an exception\n/// is raised.\n///\n/// nil arguments indicates that the matcher should not attempt to match against\n/// that parameter.\npublic func raiseException(\n    named named: String? = nil,\n    reason: String? = nil,\n    userInfo: NSDictionary? = nil,\n    closure: ((NSException) -> Void)? = nil) -> MatcherFunc<Any> {\n        return MatcherFunc { actualExpression, failureMessage in\n\n            var exception: NSException?\n            let capture = NMBExceptionCapture(handler: ({ e in\n                exception = e\n            }), finally: nil)\n\n            capture.tryBlock {\n                try! actualExpression.evaluate()\n                return\n            }\n\n            setFailureMessageForException(failureMessage, exception: exception, named: named, reason: reason, userInfo: userInfo, closure: closure)\n            return exceptionMatchesNonNilFieldsOrClosure(exception, named: named, reason: reason, userInfo: userInfo, closure: closure)\n        }\n}\n\ninternal func setFailureMessageForException(\n    failureMessage: FailureMessage,\n    exception: NSException?,\n    named: String?,\n    reason: String?,\n    userInfo: NSDictionary?,\n    closure: ((NSException) -> Void)?) {\n        failureMessage.postfixMessage = \"raise exception\"\n\n        if let named = named {\n            failureMessage.postfixMessage += \" with name <\\(named)>\"\n        }\n        if let reason = reason {\n            failureMessage.postfixMessage += \" with reason <\\(reason)>\"\n        }\n        if let userInfo = userInfo {\n            failureMessage.postfixMessage += \" with userInfo <\\(userInfo)>\"\n        }\n        if let _ = closure {\n            failureMessage.postfixMessage += \" that satisfies block\"\n        }\n        if named == nil && reason == nil && userInfo == nil && closure == nil {\n            failureMessage.postfixMessage = \"raise any exception\"\n        }\n\n        if let exception = exception {\n            failureMessage.actualValue = \"\\(NSStringFromClass(exception.dynamicType)) { name=\\(exception.name), reason='\\(stringify(exception.reason))', userInfo=\\(stringify(exception.userInfo)) }\"\n        } else {\n            failureMessage.actualValue = \"no exception\"\n        }\n}\n\ninternal func exceptionMatchesNonNilFieldsOrClosure(\n    exception: NSException?,\n    named: String?,\n    reason: String?,\n    userInfo: NSDictionary?,\n    closure: ((NSException) -> Void)?) -> Bool {\n        var matches = false\n\n        if let exception = exception {\n            matches = true\n\n            if named != nil && exception.name != named {\n                matches = false\n            }\n            if reason != nil && exception.reason != reason {\n                matches = false\n            }\n            if userInfo != nil && exception.userInfo != userInfo {\n                matches = false\n            }\n            if let closure = closure {\n                let assertions = gatherFailingExpectations {\n                    closure(exception)\n                }\n                let messages = assertions.map { $0.message }\n                if messages.count > 0 {\n                    matches = false\n                }\n            }\n        }\n        \n        return matches\n}\n\npublic class NMBObjCRaiseExceptionMatcher : NSObject, NMBMatcher {\n    internal var _name: String?\n    internal var _reason: String?\n    internal var _userInfo: NSDictionary?\n    internal var _block: ((NSException) -> Void)?\n\n    internal init(name: String?, reason: String?, userInfo: NSDictionary?, block: ((NSException) -> Void)?) {\n        _name = name\n        _reason = reason\n        _userInfo = userInfo\n        _block = block\n    }\n\n    public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        let block: () -> Any? = ({ actualBlock(); return nil })\n        let expr = Expression(expression: block, location: location)\n\n        return try! raiseException(\n            named: _name,\n            reason: _reason,\n            userInfo: _userInfo,\n            closure: _block\n        ).matches(expr, failureMessage: failureMessage)\n    }\n\n    public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        return !matches(actualBlock, failureMessage: failureMessage, location: location)\n    }\n\n    public var named: (name: String) -> NMBObjCRaiseExceptionMatcher {\n        return ({ name in\n            return NMBObjCRaiseExceptionMatcher(\n                name: name,\n                reason: self._reason,\n                userInfo: self._userInfo,\n                block: self._block\n            )\n        })\n    }\n\n    public var reason: (reason: String?) -> NMBObjCRaiseExceptionMatcher {\n        return ({ reason in\n            return NMBObjCRaiseExceptionMatcher(\n                name: self._name,\n                reason: reason,\n                userInfo: self._userInfo,\n                block: self._block\n            )\n        })\n    }\n\n    public var userInfo: (userInfo: NSDictionary?) -> NMBObjCRaiseExceptionMatcher {\n        return ({ userInfo in\n            return NMBObjCRaiseExceptionMatcher(\n                name: self._name,\n                reason: self._reason,\n                userInfo: userInfo,\n                block: self._block\n            )\n        })\n    }\n\n    public var satisfyingBlock: (block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionMatcher {\n        return ({ block in\n            return NMBObjCRaiseExceptionMatcher(\n                name: self._name,\n                reason: self._reason,\n                userInfo: self._userInfo,\n                block: block\n            )\n        })\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionMatcher {\n        return NMBObjCRaiseExceptionMatcher(name: nil, reason: nil, userInfo: nil, block: nil)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Matchers/ThrowError.swift",
    "content": "import Foundation\n\n/// A Nimble matcher that succeeds when the actual expression throws an\n/// error of the specified type or from the specified case.\n///\n/// Errors are tried to be compared by their implementation of Equatable,\n/// otherwise they fallback to comparision by _domain and _code.\n///\n/// Alternatively, you can pass a closure to do any arbitrary custom matching\n/// to the thrown error. The closure only gets called when an error was thrown.\n///\n/// nil arguments indicates that the matcher should not attempt to match against\n/// that parameter.\npublic func throwError<T: ErrorType>(\n    error: T? = nil,\n    errorType: T.Type? = nil,\n    closure: ((T) -> Void)? = nil) -> MatcherFunc<Any> {\n        return MatcherFunc { actualExpression, failureMessage in\n\n            var actualError: ErrorType?\n            do {\n                try actualExpression.evaluate()\n            } catch let catchedError {\n                actualError = catchedError\n            }\n\n            setFailureMessageForError(failureMessage, actualError: actualError, error: error, errorType: errorType, closure: closure)\n            return errorMatchesNonNilFieldsOrClosure(actualError, error: error, errorType: errorType, closure: closure)\n        }\n}\n\ninternal func setFailureMessageForError<T: ErrorType>(\n    failureMessage: FailureMessage,\n    actualError: ErrorType?,\n    error: T?,\n    errorType: T.Type? = nil,\n    closure: ((T) -> Void)?) {\n        failureMessage.postfixMessage = \"throw error\"\n\n        if let error = error {\n            if let error = error as? CustomDebugStringConvertible {\n                failureMessage.postfixMessage += \" <\\(error.debugDescription)>\"\n            } else {\n                failureMessage.postfixMessage += \" <\\(error)>\"\n            }\n        } else if errorType != nil || closure != nil {\n            failureMessage.postfixMessage += \" from type <\\(T.self)>\"\n        }\n        if let _ = closure {\n            failureMessage.postfixMessage += \" that satisfies block\"\n        }\n        if error == nil && errorType == nil && closure == nil {\n            failureMessage.postfixMessage = \"throw any error\"\n        }\n\n        if let actualError = actualError {\n            failureMessage.actualValue = \"<\\(actualError)>\"\n        } else {\n            failureMessage.actualValue = \"no error\"\n        }\n}\n\ninternal func errorMatchesExpectedError<T: ErrorType>(\n    actualError: ErrorType,\n    expectedError: T) -> Bool {\n        return actualError._domain == expectedError._domain\n            && actualError._code   == expectedError._code\n}\n\ninternal func errorMatchesExpectedError<T: ErrorType where T: Equatable>(\n    actualError: ErrorType,\n    expectedError: T) -> Bool {\n        if let actualError = actualError as? T {\n            return actualError == expectedError\n        }\n        return false\n}\n\ninternal func errorMatchesNonNilFieldsOrClosure<T: ErrorType>(\n    actualError: ErrorType?,\n    error: T?,\n    errorType: T.Type?,\n    closure: ((T) -> Void)?) -> Bool {\n        var matches = false\n\n        if let actualError = actualError {\n            matches = true\n\n            if let error = error {\n                if !errorMatchesExpectedError(actualError, expectedError: error) {\n                    matches = false\n                }\n            }\n            if let actualError = actualError as? T {\n                if let closure = closure {\n                    let assertions = gatherFailingExpectations {\n                        closure(actualError as T)\n                    }\n                    let messages = assertions.map { $0.message }\n                    if messages.count > 0 {\n                        matches = false\n                    }\n                }\n            } else if errorType != nil && closure != nil {\n                // The closure expects another ErrorType as argument, so this\n                // is _supposed_ to fail, so that it becomes more obvious.\n                let assertions = gatherExpectations {\n                    expect(actualError is T).to(equal(true))\n                }\n                precondition(assertions.map { $0.message }.count > 0)\n                matches = false\n            }\n        }\n        \n        return matches\n}\n\n\n/// A Nimble matcher that succeeds when the actual expression throws any\n/// error or when the passed closures' arbitrary custom matching succeeds.\n///\n/// This duplication to it's generic adequate is required to allow to receive\n/// values of the existential type ErrorType in the closure.\n///\n/// The closure only gets called when an error was thrown.\npublic func throwError(\n    closure closure: ((ErrorType) -> Void)? = nil) -> MatcherFunc<Any> {\n        return MatcherFunc { actualExpression, failureMessage in\n            \n            var actualError: ErrorType?\n            do {\n                try actualExpression.evaluate()\n            } catch let catchedError {\n                actualError = catchedError\n            }\n            \n            setFailureMessageForError(failureMessage, actualError: actualError, closure: closure)\n            return errorMatchesNonNilFieldsOrClosure(actualError, closure: closure)\n        }\n}\n\ninternal func setFailureMessageForError(\n    failureMessage: FailureMessage,\n    actualError: ErrorType?,\n    closure: ((ErrorType) -> Void)?) {\n        failureMessage.postfixMessage = \"throw error\"\n\n        if let _ = closure {\n            failureMessage.postfixMessage += \" that satisfies block\"\n        } else {\n            failureMessage.postfixMessage = \"throw any error\"\n        }\n\n        if let actualError = actualError {\n            failureMessage.actualValue = \"<\\(actualError)>\"\n        } else {\n            failureMessage.actualValue = \"no error\"\n        }\n}\n\ninternal func errorMatchesNonNilFieldsOrClosure(\n    actualError: ErrorType?,\n    closure: ((ErrorType) -> Void)?) -> Bool {\n        var matches = false\n\n        if let actualError = actualError {\n            matches = true\n\n            if let closure = closure {\n                let assertions = gatherFailingExpectations {\n                    closure(actualError)\n                }\n                let messages = assertions.map { $0.message }\n                if messages.count > 0 {\n                    matches = false\n                }\n            }\n        }\n        \n        return matches\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Nimble.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"NMBExceptionCapture.h\"\n#import \"DSL.h\"\n\nFOUNDATION_EXPORT double NimbleVersionNumber;\nFOUNDATION_EXPORT const unsigned char NimbleVersionString[];"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/ObjCExpectation.swift",
    "content": "internal struct ObjCMatcherWrapper : Matcher {\n    let matcher: NMBMatcher\n\n    func matches(actualExpression: Expression<NSObject>, failureMessage: FailureMessage) -> Bool {\n        return matcher.matches(\n            ({ try! actualExpression.evaluate() }),\n            failureMessage: failureMessage,\n            location: actualExpression.location)\n    }\n\n    func doesNotMatch(actualExpression: Expression<NSObject>, failureMessage: FailureMessage) -> Bool {\n        return matcher.doesNotMatch(\n            ({ try! actualExpression.evaluate() }),\n            failureMessage: failureMessage,\n            location: actualExpression.location)\n    }\n}\n\n// Equivalent to Expectation, but for Nimble's Objective-C interface\npublic class NMBExpectation : NSObject {\n    internal let _actualBlock: () -> NSObject!\n    internal var _negative: Bool\n    internal let _file: String\n    internal let _line: UInt\n    internal var _timeout: NSTimeInterval = 1.0\n\n    public init(actualBlock: () -> NSObject!, negative: Bool, file: String, line: UInt) {\n        self._actualBlock = actualBlock\n        self._negative = negative\n        self._file = file\n        self._line = line\n    }\n\n    private var expectValue: Expectation<NSObject> {\n        return expect(_file, line: _line){\n            self._actualBlock() as NSObject?\n        }\n    }\n\n    public var withTimeout: (NSTimeInterval) -> NMBExpectation {\n        return ({ timeout in self._timeout = timeout\n            return self\n        })\n    }\n\n    public var to: (NMBMatcher) -> Void {\n        return ({ matcher in\n            self.expectValue.to(ObjCMatcherWrapper(matcher: matcher))\n        })\n    }\n\n    public var toWithDescription: (NMBMatcher, String) -> Void {\n        return ({ matcher, description in\n            self.expectValue.to(ObjCMatcherWrapper(matcher: matcher), description: description)\n        })\n    }\n\n    public var toNot: (NMBMatcher) -> Void {\n        return ({ matcher in\n            self.expectValue.toNot(\n                ObjCMatcherWrapper(matcher: matcher)\n            )\n        })\n    }\n\n    public var toNotWithDescription: (NMBMatcher, String) -> Void {\n        return ({ matcher, description in\n            self.expectValue.toNot(\n                ObjCMatcherWrapper(matcher: matcher), description: description\n            )\n        })\n    }\n\n    public var notTo: (NMBMatcher) -> Void { return toNot }\n\n    public var notToWithDescription: (NMBMatcher, String) -> Void { return toNotWithDescription }\n\n    public var toEventually: (NMBMatcher) -> Void {\n        return ({ matcher in\n            self.expectValue.toEventually(\n                ObjCMatcherWrapper(matcher: matcher),\n                timeout: self._timeout,\n                description: nil\n            )\n        })\n    }\n\n    public var toEventuallyWithDescription: (NMBMatcher, String) -> Void {\n        return ({ matcher, description in\n            self.expectValue.toEventually(\n                ObjCMatcherWrapper(matcher: matcher),\n                timeout: self._timeout,\n                description: description\n            )\n        })\n    }\n\n    public var toEventuallyNot: (NMBMatcher) -> Void {\n        return ({ matcher in\n            self.expectValue.toEventuallyNot(\n                ObjCMatcherWrapper(matcher: matcher),\n                timeout: self._timeout,\n                description: nil\n            )\n        })\n    }\n\n    public var toEventuallyNotWithDescription: (NMBMatcher, String) -> Void {\n        return ({ matcher, description in\n            self.expectValue.toEventuallyNot(\n                ObjCMatcherWrapper(matcher: matcher),\n                timeout: self._timeout,\n                description: description\n            )\n        })\n    }\n\n    public var toNotEventually: (NMBMatcher) -> Void { return toEventuallyNot }\n\n    public var toNotEventuallyWithDescription: (NMBMatcher, String) -> Void { return toEventuallyNotWithDescription }\n\n    public class func failWithMessage(message: String, file: String, line: UInt) {\n        fail(message, location: SourceLocation(file: file, line: line))\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Utils/Functional.swift",
    "content": "import Foundation\n\ninternal func all<T>(array: [T], fn: (T) -> Bool) -> Bool {\n    for item in array {\n        if !fn(item) {\n            return false\n        }\n    }\n    return true\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Utils/Poll.swift",
    "content": "import Foundation\n\ninternal enum PollResult : BooleanType {\n    case Success, Failure, Timeout\n    case ErrorThrown(ErrorType)\n\n    var boolValue : Bool {\n        switch (self) {\n        case .Success:\n            return true\n        default:\n            return false\n        }\n    }\n}\n\ninternal class RunPromise {\n    var token: dispatch_once_t = 0\n    var didFinish = false\n    var didFail = false\n\n    init() {}\n\n    func succeed() {\n        dispatch_once(&self.token) {\n            self.didFinish = false\n        }\n    }\n\n    func fail(block: () -> Void) {\n        dispatch_once(&self.token) {\n            self.didFail = true\n            block()\n        }\n    }\n}\n\nlet killQueue = dispatch_queue_create(\"nimble.waitUntil.queue\", DISPATCH_QUEUE_SERIAL)\n\ninternal func stopRunLoop(runLoop: NSRunLoop, delay: NSTimeInterval) -> RunPromise {\n    let promise = RunPromise()\n    let killTimeOffset = Int64(CDouble(delay) * CDouble(NSEC_PER_SEC))\n    let killTime = dispatch_time(DISPATCH_TIME_NOW, killTimeOffset)\n    dispatch_after(killTime, killQueue) {\n        promise.fail {\n            CFRunLoopStop(runLoop.getCFRunLoop())\n        }\n    }\n    return promise\n}\n\ninternal func pollBlock(pollInterval pollInterval: NSTimeInterval, timeoutInterval: NSTimeInterval, expression: () throws -> Bool) -> PollResult {\n    let runLoop = NSRunLoop.mainRunLoop()\n\n    let promise = stopRunLoop(runLoop, delay: min(timeoutInterval, 0.2))\n\n    let startDate = NSDate()\n\n    // trigger run loop to make sure enqueued tasks don't block our assertion polling\n    // the stop run loop task above will abort us if necessary\n    runLoop.runUntilDate(startDate)\n    dispatch_sync(killQueue) {\n        promise.succeed()\n    }\n\n    if promise.didFail {\n        return .Timeout\n    }\n\n    var pass = false\n    do {\n        repeat {\n            pass = try expression()\n            if pass {\n                break\n            }\n\n            let runDate = NSDate().dateByAddingTimeInterval(pollInterval)\n            runLoop.runUntilDate(runDate)\n        } while(NSDate().timeIntervalSinceDate(startDate) < timeoutInterval)\n    } catch let error {\n        return .ErrorThrown(error)\n    }\n\n    return pass ? .Success : .Failure\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Utils/SourceLocation.swift",
    "content": "import Foundation\n\n\npublic class SourceLocation : NSObject {\n    public let file: String\n    public let line: UInt\n\n    override init() {\n        file = \"Unknown File\"\n        line = 0\n    }\n\n    init(file: String, line: UInt) {\n        self.file = file\n        self.line = line\n    }\n\n    override public var description: String {\n        return \"\\(file):\\(line)\"\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Utils/Stringers.swift",
    "content": "import Foundation\n\n\ninternal func identityAsString(value: AnyObject?) -> String {\n    if value == nil {\n        return \"nil\"\n    }\n    return NSString(format: \"<%p>\", unsafeBitCast(value!, Int.self)).description\n}\n\ninternal func arrayAsString<T>(items: [T], joiner: String = \", \") -> String {\n    return items.reduce(\"\") { accum, item in\n        let prefix = (accum.isEmpty ? \"\" : joiner)\n        return accum + prefix + \"\\(stringify(item))\"\n    }\n}\n\n@objc internal protocol NMBStringer {\n    func NMB_stringify() -> String\n}\n\ninternal func stringify<S: SequenceType>(value: S) -> String {\n    var generator = value.generate()\n    var strings = [String]()\n    var value: S.Generator.Element?\n    repeat {\n        value = generator.next()\n        if value != nil {\n            strings.append(stringify(value))\n        }\n    } while value != nil\n    let str = strings.joinWithSeparator(\", \")\n    return \"[\\(str)]\"\n}\n\nextension NSArray : NMBStringer {\n    func NMB_stringify() -> String {\n        let str = self.componentsJoinedByString(\", \")\n        return \"[\\(str)]\"\n    }\n}\n\ninternal func stringify<T>(value: T) -> String {\n    if let value = value as? Double {\n        return NSString(format: \"%.4f\", (value)).description\n    }\n    return String(value)\n}\n\ninternal func stringify(value: NMBDoubleConvertible) -> String {\n    if let value = value as? Double {\n        return NSString(format: \"%.4f\", (value)).description\n    }\n    return value.stringRepresentation\n}\n\ninternal func stringify<T>(value: T?) -> String {\n    if let unboxed = value {\n       return stringify(unboxed)\n    }\n    return \"nil\"\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Wrappers/AsyncMatcherWrapper.swift",
    "content": "import Foundation\n\ninternal struct AsyncMatcherWrapper<T, U where U: Matcher, U.ValueType == T>: Matcher {\n    let fullMatcher: U\n    let timeoutInterval: NSTimeInterval\n    let pollInterval: NSTimeInterval\n\n    init(fullMatcher: U, timeoutInterval: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01) {\n      self.fullMatcher = fullMatcher\n      self.timeoutInterval = timeoutInterval\n      self.pollInterval = pollInterval\n    }\n\n    func matches(actualExpression: Expression<T>, failureMessage: FailureMessage) -> Bool {\n        let uncachedExpression = actualExpression.withoutCaching()\n        let result = pollBlock(pollInterval: pollInterval, timeoutInterval: timeoutInterval) {\n            try self.fullMatcher.matches(uncachedExpression, failureMessage: failureMessage)\n        }\n        switch (result) {\n        case .Success: return true\n        case .Failure: return false\n        case let .ErrorThrown(error):\n            failureMessage.actualValue = \"an unexpected error thrown: <\\(error)>\"\n            return false\n        case .Timeout:\n            failureMessage.postfixMessage += \" (Stall on main thread).\"\n            return false\n        }\n    }\n\n    func doesNotMatch(actualExpression: Expression<T>, failureMessage: FailureMessage) -> Bool  {\n        let uncachedExpression = actualExpression.withoutCaching()\n        let result = pollBlock(pollInterval: pollInterval, timeoutInterval: timeoutInterval) {\n            try self.fullMatcher.doesNotMatch(uncachedExpression, failureMessage: failureMessage)\n        }\n        switch (result) {\n        case .Success: return true\n        case .Failure: return false\n        case let .ErrorThrown(error):\n            failureMessage.actualValue = \"an unexpected error thrown: <\\(error)>\"\n            return false\n        case .Timeout:\n            failureMessage.postfixMessage += \" (Stall on main thread).\"\n            return false\n        }\n    }\n}\n\nprivate let toEventuallyRequiresClosureError = FailureMessage(stringValue: \"expect(...).toEventually(...) requires an explicit closure (eg - expect { ... }.toEventually(...) )\\nSwift 1.2 @autoclosure behavior has changed in an incompatible way for Nimble to function\")\n\n\nextension Expectation {\n    /// Tests the actual value using a matcher to match by checking continuously\n    /// at each pollInterval until the timeout is reached.\n    public func toEventually<U where U: Matcher, U.ValueType == T>(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01, description: String? = nil) {\n        if expression.isClosure {\n            let (pass, msg) = expressionMatches(\n                expression,\n                matcher: AsyncMatcherWrapper(\n                    fullMatcher: matcher,\n                    timeoutInterval: timeout,\n                    pollInterval: pollInterval),\n                to: \"to eventually\",\n                description: description\n            )\n            verify(pass, msg)\n        } else {\n            verify(false, toEventuallyRequiresClosureError)\n        }\n    }\n\n    /// Tests the actual value using a matcher to not match by checking\n    /// continuously at each pollInterval until the timeout is reached.\n    public func toEventuallyNot<U where U: Matcher, U.ValueType == T>(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01, description: String? = nil) {\n        if expression.isClosure {\n            let (pass, msg) = expressionDoesNotMatch(\n                expression,\n                matcher: AsyncMatcherWrapper(\n                    fullMatcher: matcher,\n                    timeoutInterval: timeout,\n                    pollInterval: pollInterval),\n                toNot: \"to eventually not\",\n                description: description\n            )\n            verify(pass, msg)\n        } else {\n            verify(false, toEventuallyRequiresClosureError)\n        }\n    }\n\n    /// Tests the actual value using a matcher to not match by checking\n    /// continuously at each pollInterval until the timeout is reached.\n    ///\n    /// Alias of toEventuallyNot()\n    public func toNotEventually<U where U: Matcher, U.ValueType == T>(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01, description: String? = nil) {\n        return toEventuallyNot(matcher, timeout: timeout, pollInterval: pollInterval, description: description)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Wrappers/MatcherFunc.swift",
    "content": "/// A convenience API to build matchers that allow full control over\n/// to() and toNot() match cases.\n///\n/// The final bool argument in the closure is if the match is for negation.\n///\n/// You may use this when implementing your own custom matchers.\n///\n/// Use the Matcher protocol instead of this type to accept custom matchers as\n/// input parameters.\n/// @see allPass for an example that uses accepts other matchers as input.\npublic struct FullMatcherFunc<T>: Matcher {\n    public let matcher: (Expression<T>, FailureMessage, Bool) throws -> Bool\n\n    public init(_ matcher: (Expression<T>, FailureMessage, Bool) throws -> Bool) {\n        self.matcher = matcher\n    }\n\n    public func matches(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        return try matcher(actualExpression, failureMessage, false)\n    }\n\n    public func doesNotMatch(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        return try matcher(actualExpression, failureMessage, true)\n    }\n}\n\n/// A convenience API to build matchers that don't need special negation\n/// behavior. The toNot() behavior is the negation of to().\n///\n/// @see NonNilMatcherFunc if you prefer to have this matcher fail when nil\n///                        values are recieved in an expectation.\n///\n/// You may use this when implementing your own custom matchers.\n///\n/// Use the Matcher protocol instead of this type to accept custom matchers as\n/// input parameters.\n/// @see allPass for an example that uses accepts other matchers as input.\npublic struct MatcherFunc<T>: Matcher {\n    public let matcher: (Expression<T>, FailureMessage) throws -> Bool\n\n    public init(_ matcher: (Expression<T>, FailureMessage) throws -> Bool) {\n        self.matcher = matcher\n    }\n\n    public func matches(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        return try matcher(actualExpression, failureMessage)\n    }\n\n    public func doesNotMatch(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        return try !matcher(actualExpression, failureMessage)\n    }\n}\n\n/// A convenience API to build matchers that don't need special negation\n/// behavior. The toNot() behavior is the negation of to().\n///\n/// Unlike MatcherFunc, this will always fail if an expectation contains nil.\n/// This applies regardless of using to() or toNot().\n///\n/// You may use this when implementing your own custom matchers.\n///\n/// Use the Matcher protocol instead of this type to accept custom matchers as\n/// input parameters.\n/// @see allPass for an example that uses accepts other matchers as input.\npublic struct NonNilMatcherFunc<T>: Matcher {\n    public let matcher: (Expression<T>, FailureMessage) throws -> Bool\n\n    public init(_ matcher: (Expression<T>, FailureMessage) throws -> Bool) {\n        self.matcher = matcher\n    }\n\n    public func matches(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        let pass = try matcher(actualExpression, failureMessage)\n        if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) {\n            return false\n        }\n        return pass\n    }\n\n    public func doesNotMatch(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        let pass = try !matcher(actualExpression, failureMessage)\n        if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) {\n            return false\n        }\n        return pass\n    }\n\n    internal func attachNilErrorIfNeeded(actualExpression: Expression<T>, failureMessage: FailureMessage) throws -> Bool {\n        if try actualExpression.evaluate() == nil {\n            failureMessage.postfixActual = \" (use beNil() to match nils)\"\n            return true\n        }\n        return false\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/Wrappers/ObjCMatcher.swift",
    "content": "import Foundation\n\npublic typealias MatcherBlock = (actualExpression: Expression<NSObject>, failureMessage: FailureMessage) -> Bool\npublic typealias FullMatcherBlock = (actualExpression: Expression<NSObject>, failureMessage: FailureMessage, shouldNotMatch: Bool) -> Bool\n\npublic class NMBObjCMatcher : NSObject, NMBMatcher {\n    let _match: MatcherBlock\n    let _doesNotMatch: MatcherBlock\n    let canMatchNil: Bool\n\n    public init(canMatchNil: Bool, matcher: MatcherBlock, notMatcher: MatcherBlock) {\n        self.canMatchNil = canMatchNil\n        self._match = matcher\n        self._doesNotMatch = notMatcher\n    }\n\n    public convenience init(matcher: MatcherBlock) {\n        self.init(canMatchNil: true, matcher: matcher)\n    }\n\n    public convenience init(canMatchNil: Bool, matcher: MatcherBlock) {\n        self.init(canMatchNil: canMatchNil, matcher: matcher, notMatcher: ({ actualExpression, failureMessage in\n            return !matcher(actualExpression: actualExpression, failureMessage: failureMessage)\n        }))\n    }\n\n    public convenience init(matcher: FullMatcherBlock) {\n        self.init(canMatchNil: true, matcher: matcher)\n    }\n\n    public convenience init(canMatchNil: Bool, matcher: FullMatcherBlock) {\n        self.init(canMatchNil: canMatchNil, matcher: ({ actualExpression, failureMessage in\n            return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: false)\n        }), notMatcher: ({ actualExpression, failureMessage in\n            return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: true)\n        }))\n    }\n\n    private func canMatch(actualExpression: Expression<NSObject>, failureMessage: FailureMessage) -> Bool {\n        do {\n            if !canMatchNil {\n                if try actualExpression.evaluate() == nil {\n                    failureMessage.postfixActual = \" (use beNil() to match nils)\"\n                    return false\n                }\n            }\n        } catch let error {\n            failureMessage.actualValue = \"an unexpected error thrown: \\(error)\"\n            return false\n        }\n        return true\n    }\n\n    public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        let expr = Expression(expression: actualBlock, location: location)\n        let result = _match(\n            actualExpression: expr,\n            failureMessage: failureMessage)\n        if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) {\n            return result\n        } else {\n            return false\n        }\n    }\n\n    public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool {\n        let expr = Expression(expression: actualBlock, location: location)\n        let result = _doesNotMatch(\n            actualExpression: expr,\n            failureMessage: failureMessage)\n        if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) {\n            return result\n        } else {\n            return false\n        }\n    }\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/objc/DSL.h",
    "content": "#import <Foundation/Foundation.h>\n\n@class NMBExpectation;\n@class NMBObjCBeCloseToMatcher;\n@class NMBObjCRaiseExceptionMatcher;\n@protocol NMBMatcher;\n\n\n#define NIMBLE_EXPORT FOUNDATION_EXPORT\n\n#ifdef NIMBLE_DISABLE_SHORT_SYNTAX\n#define NIMBLE_SHORT(PROTO, ORIGINAL)\n#else\n#define NIMBLE_SHORT(PROTO, ORIGINAL) FOUNDATION_STATIC_INLINE PROTO { return (ORIGINAL); }\n#endif\n\nNIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line);\nNIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line);\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_equal(id expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> equal(id expectedValue),\n             NMB_equal(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_haveCount(id expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> haveCount(id expectedValue),\n             NMB_haveCount(expectedValue));\n\nNIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue);\nNIMBLE_SHORT(NMBObjCBeCloseToMatcher *beCloseTo(id expectedValue),\n             NMB_beCloseTo(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beAnInstanceOf(Class expectedClass);\nNIMBLE_SHORT(id<NMBMatcher> beAnInstanceOf(Class expectedClass),\n             NMB_beAnInstanceOf(expectedClass));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beAKindOf(Class expectedClass);\nNIMBLE_SHORT(id<NMBMatcher> beAKindOf(Class expectedClass),\n             NMB_beAKindOf(expectedClass));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beginWith(id itemElementOrSubstring);\nNIMBLE_SHORT(id<NMBMatcher> beginWith(id itemElementOrSubstring),\n             NMB_beginWith(itemElementOrSubstring));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThan(NSNumber *expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> beGreaterThan(NSNumber *expectedValue),\n             NMB_beGreaterThan(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> beGreaterThanOrEqualTo(NSNumber *expectedValue),\n             NMB_beGreaterThanOrEqualTo(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beIdenticalTo(id expectedInstance);\nNIMBLE_SHORT(id<NMBMatcher> beIdenticalTo(id expectedInstance),\n             NMB_beIdenticalTo(expectedInstance));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beLessThan(NSNumber *expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> beLessThan(NSNumber *expectedValue),\n             NMB_beLessThan(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beLessThanOrEqualTo(NSNumber *expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> beLessThanOrEqualTo(NSNumber *expectedValue),\n             NMB_beLessThanOrEqualTo(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beTruthy(void);\nNIMBLE_SHORT(id<NMBMatcher> beTruthy(void),\n             NMB_beTruthy());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beFalsy(void);\nNIMBLE_SHORT(id<NMBMatcher> beFalsy(void),\n             NMB_beFalsy());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beTrue(void);\nNIMBLE_SHORT(id<NMBMatcher> beTrue(void),\n             NMB_beTrue());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beFalse(void);\nNIMBLE_SHORT(id<NMBMatcher> beFalse(void),\n             NMB_beFalse());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beNil(void);\nNIMBLE_SHORT(id<NMBMatcher> beNil(void),\n             NMB_beNil());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beEmpty(void);\nNIMBLE_SHORT(id<NMBMatcher> beEmpty(void),\n             NMB_beEmpty());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION;\n#define NMB_contain(...) NMB_containWithNilTermination(__VA_ARGS__, nil)\n#ifndef NIMBLE_DISABLE_SHORT_SYNTAX\n#define contain(...) NMB_contain(__VA_ARGS__)\n#endif\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_endWith(id itemElementOrSubstring);\nNIMBLE_SHORT(id<NMBMatcher> endWith(id itemElementOrSubstring),\n             NMB_endWith(itemElementOrSubstring));\n\nNIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException(void);\nNIMBLE_SHORT(NMBObjCRaiseExceptionMatcher *raiseException(void),\n             NMB_raiseException());\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_match(id expectedValue);\nNIMBLE_SHORT(id<NMBMatcher> match(id expectedValue),\n             NMB_match(expectedValue));\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_allPass(id matcher);\nNIMBLE_SHORT(id<NMBMatcher> allPass(id matcher),\n             NMB_allPass(matcher));\n\n// In order to preserve breakpoint behavior despite using macros to fill in __FILE__ and __LINE__,\n// define a builder that populates __FILE__ and __LINE__, and returns a block that takes timeout\n// and action arguments. See https://github.com/Quick/Quick/pull/185 for details.\ntypedef void (^NMBWaitUntilTimeoutBlock)(NSTimeInterval timeout, void (^action)(void (^)(void)));\ntypedef void (^NMBWaitUntilBlock)(void (^action)(void (^)(void)));\n\nNIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line);\n\nNIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line);\nNIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line);\n\nNIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line);\n\n#define NMB_waitUntilTimeout NMB_waitUntilTimeoutBuilder(@(__FILE__), __LINE__)\n#define NMB_waitUntil NMB_waitUntilBuilder(@(__FILE__), __LINE__)\n\n#ifndef NIMBLE_DISABLE_SHORT_SYNTAX\n#define expect(...) NMB_expect(^id{ return (__VA_ARGS__); }, @(__FILE__), __LINE__)\n#define expectAction(BLOCK) NMB_expectAction((BLOCK), @(__FILE__), __LINE__)\n#define failWithMessage(msg) NMB_failWithMessage(msg, @(__FILE__), __LINE__)\n#define fail() failWithMessage(@\"fail() always fails\")\n\n\n#define waitUntilTimeout NMB_waitUntilTimeout\n#define waitUntil NMB_waitUntil\n#endif\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/objc/DSL.m",
    "content": "#import <Nimble/DSL.h>\n#import <Nimble/Nimble-Swift.h>\n\nSWIFT_CLASS(\"_TtC6Nimble7NMBWait\")\n@interface NMBWait : NSObject\n\n+ (void)untilTimeout:(NSTimeInterval)timeout file:(NSString *)file line:(NSUInteger)line action:(void(^)())action;\n+ (void)untilFile:(NSString *)file line:(NSUInteger)line action:(void(^)())action;\n\n@end\n\nNIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line) {\n    return [[NMBExpectation alloc] initWithActualBlock:actualBlock\n                                              negative:NO\n                                                  file:file\n                                                  line:line];\n}\n\nNIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line) {\n    return NMB_expect(^id{\n        actualBlock();\n        return nil;\n    }, file, line);\n}\n\nNIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line) {\n    return [NMBExpectation failWithMessage:msg file:file line:line];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beAnInstanceOf(Class expectedClass) {\n    return [NMBObjCMatcher beAnInstanceOfMatcher:expectedClass];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beAKindOf(Class expectedClass) {\n    return [NMBObjCMatcher beAKindOfMatcher:expectedClass];\n}\n\nNIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue) {\n    return [NMBObjCMatcher beCloseToMatcher:expectedValue within:0.001];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beginWith(id itemElementOrSubstring) {\n    return [NMBObjCMatcher beginWithMatcher:itemElementOrSubstring];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThan(NSNumber *expectedValue) {\n    return [NMBObjCMatcher beGreaterThanMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue) {\n    return [NMBObjCMatcher beGreaterThanOrEqualToMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beIdenticalTo(id expectedInstance) {\n    return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beLessThan(NSNumber *expectedValue) {\n    return [NMBObjCMatcher beLessThanMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beLessThanOrEqualTo(NSNumber *expectedValue) {\n    return [NMBObjCMatcher beLessThanOrEqualToMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beTruthy() {\n    return [NMBObjCMatcher beTruthyMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beFalsy() {\n    return [NMBObjCMatcher beFalsyMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beTrue() {\n    return [NMBObjCMatcher beTrueMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beFalse() {\n    return [NMBObjCMatcher beFalseMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beNil() {\n    return [NMBObjCMatcher beNilMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_beEmpty() {\n    return [NMBObjCMatcher beEmptyMatcher];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_containWithNilTermination(id itemOrSubstring, ...) {\n    NSMutableArray *itemOrSubstringArray = [NSMutableArray array];\n\n    if (itemOrSubstring) {\n        [itemOrSubstringArray addObject:itemOrSubstring];\n\n        va_list args;\n        va_start(args, itemOrSubstring);\n        id next;\n        while ((next = va_arg(args, id))) {\n            [itemOrSubstringArray addObject:next];\n        }\n        va_end(args);\n    }\n\n    return [NMBObjCMatcher containMatcher:itemOrSubstringArray];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_endWith(id itemElementOrSubstring) {\n    return [NMBObjCMatcher endWithMatcher:itemElementOrSubstring];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_equal(id expectedValue) {\n    return [NMBObjCMatcher equalMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_haveCount(id expectedValue) {\n    return [NMBObjCMatcher haveCountMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_match(id expectedValue) {\n    return [NMBObjCMatcher matchMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT id<NMBMatcher> NMB_allPass(id expectedValue) {\n    return [NMBObjCMatcher allPassMatcher:expectedValue];\n}\n\nNIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException() {\n    return [NMBObjCMatcher raiseExceptionMatcher];\n}\n\nNIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line) {\n    return ^(NSTimeInterval timeout, void (^action)(void (^)(void))) {\n        [NMBWait untilTimeout:timeout file:file line:line action:action];\n    };\n}\n\nNIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line) {\n  return ^(void (^action)(void (^)(void))) {\n    [NMBWait untilFile:file line:line action:action];\n  };\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/objc/NMBExceptionCapture.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface NMBExceptionCapture : NSObject\n\n- (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally;\n- (void)tryBlock:(void(^)())unsafeBlock;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble/objc/NMBExceptionCapture.m",
    "content": "#import \"NMBExceptionCapture.h\"\n\n@interface NMBExceptionCapture ()\n@property (nonatomic, copy) void(^handler)(NSException *exception);\n@property (nonatomic, copy) void(^finally)();\n@end\n\n@implementation NMBExceptionCapture\n\n- (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally {\n    self = [super init];\n    if (self) {\n        self.handler = handler;\n        self.finally = finally;\n    }\n    return self;\n}\n\n- (void)tryBlock:(void(^)())unsafeBlock {\n    @try {\n        unsafeBlock();\n    }\n    @catch (NSException *exception) {\n        if (self.handler) {\n            self.handler(exception);\n        }\n    }\n    @finally {\n        if (self.finally) {\n            self.finally();\n        }\n    }\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = \"Nimble\"\n  s.version      = \"3.0.0\"\n  s.summary      = \"A Matcher Framework for Swift and Objective-C\"\n  s.description  = <<-DESC\n                   Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by Cedar.\n                   DESC\n  s.homepage     = \"https://github.com/Quick/Nimble\"\n  s.license      = { :type => \"Apache 2.0\", :file => \"LICENSE.md\" }\n  s.author       = \"Quick Contributors\"\n  s.ios.deployment_target = \"7.0\"\n  s.osx.deployment_target = \"10.9\"\n  s.tvos.deployment_target = \"9.0\"\n  s.source       = { :git => \"https://github.com/Quick/Nimble.git\", :tag => \"v#{s.version}\" }\n\n  s.source_files = \"Nimble\", \"Nimble/**/*.{swift,h,m}\"\n  s.weak_framework = \"XCTest\"\n  s.requires_arc = true\n  s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO', 'OTHER_LDFLAGS' => '-weak-lswiftXCTest', 'FRAMEWORK_SEARCH_PATHS' => '$(inherited) \"$(PLATFORM_DIR)/Developer/Library/Frameworks\"' }\nend\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.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\t1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; };\n\t\t1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; };\n\t\t1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; };\n\t\t1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; };\n\t\t1F0FEA9A1AF32DA4001E554E /* ObjCExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0FEA991AF32DA4001E554E /* ObjCExpectation.swift */; };\n\t\t1F0FEA9B1AF32DA4001E554E /* ObjCExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0FEA991AF32DA4001E554E /* ObjCExpectation.swift */; };\n\t\t1F14FB64194180C5009F2A08 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; };\n\t\t1F1A742F1940169200FFFC47 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1A74291940169200FFFC47 /* Nimble.framework */; };\n\t\t1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; };\n\t\t1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; };\n\t\t1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; };\n\t\t1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; };\n\t\t1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; };\n\t\t1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; };\n\t\t1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; };\n\t\t1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; };\n\t\t1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; };\n\t\t1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; };\n\t\t1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; };\n\t\t1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; };\n\t\t1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; };\n\t\t1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; };\n\t\t1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; };\n\t\t1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; };\n\t\t1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; };\n\t\t1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; };\n\t\t1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; };\n\t\t1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; };\n\t\t1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; };\n\t\t1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; };\n\t\t1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; };\n\t\t1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; };\n\t\t1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; };\n\t\t1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; };\n\t\t1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; };\n\t\t1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; };\n\t\t1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; };\n\t\t1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; };\n\t\t1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; };\n\t\t1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; };\n\t\t1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; };\n\t\t1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; };\n\t\t1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; };\n\t\t1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; };\n\t\t1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; };\n\t\t1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; };\n\t\t1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; };\n\t\t1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; };\n\t\t1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; };\n\t\t1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; };\n\t\t1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; };\n\t\t1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; };\n\t\t1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; };\n\t\t1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; };\n\t\t1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; };\n\t\t1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; };\n\t\t1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; };\n\t\t1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; };\n\t\t1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; };\n\t\t1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; };\n\t\t1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; };\n\t\t1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; };\n\t\t1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; };\n\t\t1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; };\n\t\t1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; };\n\t\t1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; };\n\t\t1F5DF1731BDCA0F500C3A531 /* ObjCExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0FEA991AF32DA4001E554E /* ObjCExpectation.swift */; };\n\t\t1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; };\n\t\t1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; };\n\t\t1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; };\n\t\t1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; };\n\t\t1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; };\n\t\t1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; };\n\t\t1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; };\n\t\t1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; };\n\t\t1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; };\n\t\t1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; };\n\t\t1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; };\n\t\t1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; };\n\t\t1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; };\n\t\t1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; };\n\t\t1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; };\n\t\t1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; };\n\t\t1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; };\n\t\t1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; };\n\t\t1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; };\n\t\t1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; };\n\t\t1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; };\n\t\t1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; };\n\t\t1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; };\n\t\t1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; };\n\t\t1F5DF18C1BDCA0F500C3A531 /* Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Poll.swift */; };\n\t\t1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; };\n\t\t1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; };\n\t\t1F5DF18F1BDCA0F500C3A531 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2A1968AB07008ED995 /* AsyncMatcherWrapper.swift */; };\n\t\t1F5DF1901BDCA0F500C3A531 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2C1968AB07008ED995 /* MatcherFunc.swift */; };\n\t\t1F5DF1911BDCA0F500C3A531 /* ObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2D1968AB07008ED995 /* ObjCMatcher.swift */; };\n\t\t1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; };\n\t\t1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; };\n\t\t1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; };\n\t\t1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; };\n\t\t1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; };\n\t\t1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; };\n\t\t1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; };\n\t\t1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; };\n\t\t1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; };\n\t\t1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; };\n\t\t1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; };\n\t\t1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; };\n\t\t1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; };\n\t\t1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; };\n\t\t1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; };\n\t\t1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; };\n\t\t1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; };\n\t\t1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; };\n\t\t1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; };\n\t\t1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; };\n\t\t1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; };\n\t\t1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; };\n\t\t1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; };\n\t\t1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; };\n\t\t1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; };\n\t\t1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; };\n\t\t1F5DF1AC1BDCA16E00C3A531 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD211968AB07008ED995 /* DSL.m */; };\n\t\t1F5DF1AD1BDCA16E00C3A531 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD231968AB07008ED995 /* NMBExceptionCapture.m */; };\n\t\t1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F5DF1AF1BDCA17600C3A531 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD201968AB07008ED995 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F5DF1B01BDCA17600C3A531 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD221968AB07008ED995 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; };\n\t\t1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; };\n\t\t1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F925EAD195C0D6300ED456B /* Nimble.framework */; };\n\t\t1F925EC7195C0DD100ED456B /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F925EE2195C0DFD00ED456B /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; };\n\t\t1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; };\n\t\t1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; };\n\t\t1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; };\n\t\t1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; };\n\t\t1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; };\n\t\t1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; };\n\t\t1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; };\n\t\t1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; };\n\t\t1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; };\n\t\t1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; };\n\t\t1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; };\n\t\t1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; };\n\t\t1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; };\n\t\t1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; };\n\t\t1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; };\n\t\t1F925F00195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; };\n\t\t1F925F02195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; };\n\t\t1F925F03195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; };\n\t\t1F925F05195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; };\n\t\t1F925F06195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; };\n\t\t1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; };\n\t\t1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; };\n\t\t1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; };\n\t\t1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; };\n\t\t1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; };\n\t\t1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; };\n\t\t1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; };\n\t\t1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; };\n\t\t1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; };\n\t\t1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; };\n\t\t1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; };\n\t\t1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; };\n\t\t1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; };\n\t\t1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; };\n\t\t1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; };\n\t\t1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; };\n\t\t1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; };\n\t\t1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; };\n\t\t1FD8CD341968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; };\n\t\t1FD8CD351968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; };\n\t\t1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; };\n\t\t1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; };\n\t\t1FD8CD381968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; };\n\t\t1FD8CD391968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; };\n\t\t1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; };\n\t\t1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; };\n\t\t1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; };\n\t\t1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; };\n\t\t1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; };\n\t\t1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; };\n\t\t1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; };\n\t\t1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; };\n\t\t1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; };\n\t\t1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; };\n\t\t1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; };\n\t\t1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; };\n\t\t1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; };\n\t\t1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; };\n\t\t1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; };\n\t\t1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; };\n\t\t1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; };\n\t\t1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; };\n\t\t1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; };\n\t\t1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; };\n\t\t1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; };\n\t\t1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; };\n\t\t1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; };\n\t\t1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; };\n\t\t1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; };\n\t\t1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; };\n\t\t1FD8CD561968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; };\n\t\t1FD8CD571968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; };\n\t\t1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; };\n\t\t1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; };\n\t\t1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; };\n\t\t1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; };\n\t\t1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; };\n\t\t1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; };\n\t\t1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; };\n\t\t1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; };\n\t\t1FD8CD601968AB07008ED995 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD201968AB07008ED995 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1FD8CD611968AB07008ED995 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD201968AB07008ED995 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1FD8CD621968AB07008ED995 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD211968AB07008ED995 /* DSL.m */; };\n\t\t1FD8CD631968AB07008ED995 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD211968AB07008ED995 /* DSL.m */; };\n\t\t1FD8CD641968AB07008ED995 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD221968AB07008ED995 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1FD8CD651968AB07008ED995 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD8CD221968AB07008ED995 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1FD8CD661968AB07008ED995 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD231968AB07008ED995 /* NMBExceptionCapture.m */; };\n\t\t1FD8CD671968AB07008ED995 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD231968AB07008ED995 /* NMBExceptionCapture.m */; };\n\t\t1FD8CD6A1968AB07008ED995 /* Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Poll.swift */; };\n\t\t1FD8CD6B1968AB07008ED995 /* Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Poll.swift */; };\n\t\t1FD8CD701968AB07008ED995 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2A1968AB07008ED995 /* AsyncMatcherWrapper.swift */; };\n\t\t1FD8CD711968AB07008ED995 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2A1968AB07008ED995 /* AsyncMatcherWrapper.swift */; };\n\t\t1FD8CD741968AB07008ED995 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2C1968AB07008ED995 /* MatcherFunc.swift */; };\n\t\t1FD8CD751968AB07008ED995 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2C1968AB07008ED995 /* MatcherFunc.swift */; };\n\t\t1FD8CD761968AB07008ED995 /* ObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2D1968AB07008ED995 /* ObjCMatcher.swift */; };\n\t\t1FD8CD771968AB07008ED995 /* ObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD2D1968AB07008ED995 /* ObjCMatcher.swift */; };\n\t\t1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; };\n\t\t1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; };\n\t\t29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; };\n\t\t29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; };\n\t\t29EA59661B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; };\n\t\t29EA59671B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; };\n\t\t472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; };\n\t\t472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; };\n\t\t472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; };\n\t\t472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; };\n\t\t4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; };\n\t\t4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; };\n\t\t965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; };\n\t\t965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; };\n\t\t965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; };\n\t\t965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; };\n\t\tDA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; };\n\t\tDA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; };\n\t\tDD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; };\n\t\tDD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; };\n\t\tDD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; };\n\t\tDD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; };\n\t\tDDB1BC791A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; };\n\t\tDDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; };\n\t\tDDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; };\n\t\tDDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; };\n\t\tDDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; };\n\t\tDDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; };\n\t\tDDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; };\n\t\tDDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t1F1A74361940169200FFFC47 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F1A74281940169200FFFC47;\n\t\t\tremoteInfo = \"Nimble-iOS\";\n\t\t};\n\t\t1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F5DF1541BDCA0CE00C3A531;\n\t\t\tremoteInfo = \"Nimble-tvOS\";\n\t\t};\n\t\t1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F1A74281940169200FFFC47;\n\t\t\tremoteInfo = \"Nimble-iOS\";\n\t\t};\n\t\t1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F1A74281940169200FFFC47;\n\t\t\tremoteInfo = Nimble;\n\t\t};\n\t\t1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F1A74281940169200FFFC47;\n\t\t\tremoteInfo = Nimble;\n\t\t};\n\t\t1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F925EAC195C0D6300ED456B;\n\t\t\tremoteInfo = \"Nimble-OSX\";\n\t\t};\n\t\t1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F925EAC195C0D6300ED456B;\n\t\t\tremoteInfo = \"Nimble-OSX\";\n\t\t};\n\t\t1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F925EAC195C0D6300ED456B;\n\t\t\tremoteInfo = \"Nimble-OSX\";\n\t\t};\n\t\t1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1F1A74201940169200FFFC47 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F925EAC195C0D6300ED456B;\n\t\t\tremoteInfo = \"Nimble-OSX\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectWithLazyProperty.swift; sourceTree = \"<group>\"; };\n\t\t1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronousTests.swift; sourceTree = \"<group>\"; };\n\t\t1F0FEA991AF32DA4001E554E /* ObjCExpectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjCExpectation.swift; sourceTree = \"<group>\"; };\n\t\t1F14FB63194180C5009F2A08 /* utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = utils.swift; sourceTree = \"<group>\"; };\n\t\t1F1A74291940169200FFFC47 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F1A742D1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t1F1A742E1940169200FFFC47 /* Nimble.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Nimble.h; sourceTree = \"<group>\"; };\n\t\t1F1A74341940169200FFFC47 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F1A743A1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAKindOfTest.swift; sourceTree = \"<group>\"; };\n\t\t1F2752D119445B8400052A26 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = README.md; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.markdown; };\n\t\t1F299EAA19627B2D002641AF /* BeEmptyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmptyTest.swift; sourceTree = \"<group>\"; };\n\t\t1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAsyncTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NimbleSpecHelper.h; sourceTree = \"<group>\"; };\n\t\t1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeAnInstanceOfTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeKindOfTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeCloseToTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeginWithTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanOrEqualToTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeIdenticalToTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanOrEqualToTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTruthyTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalsyTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTrueTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalseTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeNilTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56931A3B346F009E1637 /* ObjCContainTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCContainTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEndWithTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEqualTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCMatchTest.m; sourceTree = \"<group>\"; };\n\t\t1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCRaiseExceptionTest.m; sourceTree = \"<group>\"; };\n\t\t1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSyncTest.m; sourceTree = \"<group>\"; };\n\t\t1F925EAD195C0D6300ED456B /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F925EB7195C0D6300ED456B /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F925EE5195C121200ED456B /* AsynchronousTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsynchronousTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOfTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RaisesExceptionTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EEE195C136500ED456B /* BeLogicalTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLogicalTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EF5195C147800ED456B /* BeCloseToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseToTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EF8195C175000ED456B /* BeNilTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeNilTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EFB195C186800ED456B /* BeginWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeginWithTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925EFE195C187600ED456B /* EndWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWithTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F01195C189500ED456B /* ContainTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F04195C18B700ED456B /* EqualTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EqualTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F0A195C18E100ED456B /* BeLessThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanOrEqualToTest.swift; sourceTree = \"<group>\"; };\n\t\t1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanOrEqualToTest.swift; sourceTree = \"<group>\"; };\n\t\t1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeEmptyTest.m; sourceTree = \"<group>\"; };\n\t\t1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToTest.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionRecorder.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdapterProtocols.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleXCTestHandler.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD081968AB07008ED995 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD091968AB07008ED995 /* Expectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expectation.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD0A1968AB07008ED995 /* Expression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expression.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailureMessage.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOf.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeAKindOf.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseTo.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD101968AB07008ED995 /* BeEmpty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmpty.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD111968AB07008ED995 /* BeginWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeginWith.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThan.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThanOrEqualTo.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeIdenticalTo.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD151968AB07008ED995 /* BeLessThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThan.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThanOrEqual.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD171968AB07008ED995 /* BeLogical.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLogical.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD181968AB07008ED995 /* BeNil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeNil.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD1A1968AB07008ED995 /* Contain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contain.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD1B1968AB07008ED995 /* EndWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWith.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD1C1968AB07008ED995 /* Equal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Equal.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherProtocols.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD1E1968AB07008ED995 /* RaisesException.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RaisesException.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\t1FD8CD201968AB07008ED995 /* DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DSL.h; sourceTree = \"<group>\"; };\n\t\t1FD8CD211968AB07008ED995 /* DSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DSL.m; sourceTree = \"<group>\"; };\n\t\t1FD8CD221968AB07008ED995 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBExceptionCapture.h; sourceTree = \"<group>\"; };\n\t\t1FD8CD231968AB07008ED995 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBExceptionCapture.m; sourceTree = \"<group>\"; };\n\t\t1FD8CD251968AB07008ED995 /* Functional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Functional.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD261968AB07008ED995 /* Poll.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Poll.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD271968AB07008ED995 /* SourceLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SourceLocation.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD281968AB07008ED995 /* Stringers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stringers.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD2A1968AB07008ED995 /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncMatcherWrapper.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD2C1968AB07008ED995 /* MatcherFunc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherFunc.swift; sourceTree = \"<group>\"; };\n\t\t1FD8CD2D1968AB07008ED995 /* ObjCMatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjCMatcher.swift; sourceTree = \"<group>\"; };\n\t\t1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionDispatcher.swift; sourceTree = \"<group>\"; };\n\t\t1FFD729B1963FCAB00CD29A2 /* NimbleTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"NimbleTests-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t1FFD729C1963FCAB00CD29A2 /* Nimble-OSXTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Nimble-OSXTests-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t29EA59621B551ED2002D767E /* ThrowErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowErrorTest.swift; sourceTree = \"<group>\"; };\n\t\t29EA59651B551EE6002D767E /* ThrowError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowError.swift; sourceTree = \"<group>\"; };\n\t\t472FD1341B9E085700C7B8DA /* HaveCount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCount.swift; sourceTree = \"<group>\"; };\n\t\t472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCountTest.swift; sourceTree = \"<group>\"; };\n\t\t4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCHaveCount.m; sourceTree = \"<group>\"; };\n\t\t965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCUserDescriptionTest.m; sourceTree = \"<group>\"; };\n\t\t965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDescriptionTest.swift; sourceTree = \"<group>\"; };\n\t\tDA9E8C811A414BB9002633C2 /* DSL+Wait.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"DSL+Wait.swift\"; sourceTree = \"<group>\"; };\n\t\tDD72EC631A93874A002F7651 /* AllPassTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPassTest.swift; sourceTree = \"<group>\"; };\n\t\tDD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToObjectTest.swift; sourceTree = \"<group>\"; };\n\t\tDDB1BC781A92235600F743C3 /* AllPass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPass.swift; sourceTree = \"<group>\"; };\n\t\tDDB4D5EC19FE43C200E9D9FE /* Match.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Match.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\tDDB4D5EF19FE442800E9D9FE /* MatchTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchTest.swift; sourceTree = \"<group>\"; };\n\t\tDDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAllPassTest.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1F1A74251940169200FFFC47 /* 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\t\t1F1A74311940169200FFFC47 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F5DF1511BDCA0CE00C3A531 /* 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\t\t1F5DF15B1BDCA0CE00C3A531 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F925EA9195C0D6300ED456B /* 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\t\t1F925EB4195C0D6300ED456B /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t1F14FB61194180A7009F2A08 /* Helpers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F14FB63194180C5009F2A08 /* utils.swift */,\n\t\t\t\t1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */,\n\t\t\t);\n\t\t\tpath = Helpers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A741F1940169200FFFC47 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F2752D119445B8400052A26 /* README.md */,\n\t\t\t\t1F1A742B1940169200FFFC47 /* Nimble */,\n\t\t\t\t1F1A74381940169200FFFC47 /* NimbleTests */,\n\t\t\t\t1F1A742A1940169200FFFC47 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A742A1940169200FFFC47 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F1A74291940169200FFFC47 /* Nimble.framework */,\n\t\t\t\t1F1A74341940169200FFFC47 /* NimbleTests.xctest */,\n\t\t\t\t1F925EAD195C0D6300ED456B /* Nimble.framework */,\n\t\t\t\t1F925EB7195C0D6300ED456B /* NimbleTests.xctest */,\n\t\t\t\t1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */,\n\t\t\t\t1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A742B1940169200FFFC47 /* Nimble */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FD8CD041968AB07008ED995 /* Adapters */,\n\t\t\t\t1FD8CD081968AB07008ED995 /* DSL.swift */,\n\t\t\t\tDA9E8C811A414BB9002633C2 /* DSL+Wait.swift */,\n\t\t\t\t1FD8CD091968AB07008ED995 /* Expectation.swift */,\n\t\t\t\t1F0FEA991AF32DA4001E554E /* ObjCExpectation.swift */,\n\t\t\t\t1FD8CD0A1968AB07008ED995 /* Expression.swift */,\n\t\t\t\t1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */,\n\t\t\t\t1FD8CD0C1968AB07008ED995 /* Matchers */,\n\t\t\t\t1F1A742E1940169200FFFC47 /* Nimble.h */,\n\t\t\t\t1FD8CD1F1968AB07008ED995 /* objc */,\n\t\t\t\t1F1A742C1940169200FFFC47 /* Supporting Files */,\n\t\t\t\t1FD8CD241968AB07008ED995 /* Utils */,\n\t\t\t\t1FD8CD291968AB07008ED995 /* Wrappers */,\n\t\t\t);\n\t\t\tpath = Nimble;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A742C1940169200FFFC47 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F1A742D1940169200FFFC47 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A74381940169200FFFC47 /* NimbleTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F925EE5195C121200ED456B /* AsynchronousTest.swift */,\n\t\t\t\t1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */,\n\t\t\t\t965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */,\n\t\t\t\t1FFD729A1963FC8200CD29A2 /* objc */,\n\t\t\t\t1F14FB61194180A7009F2A08 /* Helpers */,\n\t\t\t\t1F925EE3195C11B000ED456B /* Matchers */,\n\t\t\t\t1F1A74391940169200FFFC47 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = NimbleTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F1A74391940169200FFFC47 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F1A743A1940169200FFFC47 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F925EE3195C11B000ED456B /* Matchers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDD72EC631A93874A002F7651 /* AllPassTest.swift */,\n\t\t\t\t1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */,\n\t\t\t\t1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */,\n\t\t\t\t1F925EF5195C147800ED456B /* BeCloseToTest.swift */,\n\t\t\t\t1F299EAA19627B2D002641AF /* BeEmptyTest.swift */,\n\t\t\t\t1F925EFB195C186800ED456B /* BeginWithTest.swift */,\n\t\t\t\t1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */,\n\t\t\t\t1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */,\n\t\t\t\tDD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */,\n\t\t\t\t1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */,\n\t\t\t\t1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */,\n\t\t\t\t1F925F0A195C18E100ED456B /* BeLessThanTest.swift */,\n\t\t\t\t1F925EEE195C136500ED456B /* BeLogicalTest.swift */,\n\t\t\t\t1F925EF8195C175000ED456B /* BeNilTest.swift */,\n\t\t\t\t1F925F01195C189500ED456B /* ContainTest.swift */,\n\t\t\t\t1F925EFE195C187600ED456B /* EndWithTest.swift */,\n\t\t\t\t1F925F04195C18B700ED456B /* EqualTest.swift */,\n\t\t\t\t472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */,\n\t\t\t\tDDB4D5EF19FE442800E9D9FE /* MatchTest.swift */,\n\t\t\t\t1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */,\n\t\t\t\t29EA59621B551ED2002D767E /* ThrowErrorTest.swift */,\n\t\t\t);\n\t\t\tpath = Matchers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FD8CD041968AB07008ED995 /* Adapters */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */,\n\t\t\t\t1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */,\n\t\t\t\t1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */,\n\t\t\t\t1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */,\n\t\t\t);\n\t\t\tpath = Adapters;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FD8CD0C1968AB07008ED995 /* Matchers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDDB1BC781A92235600F743C3 /* AllPass.swift */,\n\t\t\t\t1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */,\n\t\t\t\t1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */,\n\t\t\t\t1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */,\n\t\t\t\t1FD8CD101968AB07008ED995 /* BeEmpty.swift */,\n\t\t\t\t1FD8CD111968AB07008ED995 /* BeginWith.swift */,\n\t\t\t\t1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */,\n\t\t\t\t1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */,\n\t\t\t\t1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */,\n\t\t\t\t1FD8CD151968AB07008ED995 /* BeLessThan.swift */,\n\t\t\t\t1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */,\n\t\t\t\t1FD8CD171968AB07008ED995 /* BeLogical.swift */,\n\t\t\t\t1FD8CD181968AB07008ED995 /* BeNil.swift */,\n\t\t\t\t1FD8CD1A1968AB07008ED995 /* Contain.swift */,\n\t\t\t\t1FD8CD1B1968AB07008ED995 /* EndWith.swift */,\n\t\t\t\t1FD8CD1C1968AB07008ED995 /* Equal.swift */,\n\t\t\t\t472FD1341B9E085700C7B8DA /* HaveCount.swift */,\n\t\t\t\tDDB4D5EC19FE43C200E9D9FE /* Match.swift */,\n\t\t\t\t1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */,\n\t\t\t\t1FD8CD1E1968AB07008ED995 /* RaisesException.swift */,\n\t\t\t\t29EA59651B551EE6002D767E /* ThrowError.swift */,\n\t\t\t);\n\t\t\tpath = Matchers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FD8CD1F1968AB07008ED995 /* objc */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FD8CD201968AB07008ED995 /* DSL.h */,\n\t\t\t\t1FD8CD211968AB07008ED995 /* DSL.m */,\n\t\t\t\t1FD8CD221968AB07008ED995 /* NMBExceptionCapture.h */,\n\t\t\t\t1FD8CD231968AB07008ED995 /* NMBExceptionCapture.m */,\n\t\t\t);\n\t\t\tpath = objc;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FD8CD241968AB07008ED995 /* Utils */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FD8CD251968AB07008ED995 /* Functional.swift */,\n\t\t\t\t1FD8CD261968AB07008ED995 /* Poll.swift */,\n\t\t\t\t1FD8CD271968AB07008ED995 /* SourceLocation.swift */,\n\t\t\t\t1FD8CD281968AB07008ED995 /* Stringers.swift */,\n\t\t\t);\n\t\t\tpath = Utils;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FD8CD291968AB07008ED995 /* Wrappers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FD8CD2A1968AB07008ED995 /* AsyncMatcherWrapper.swift */,\n\t\t\t\t1FD8CD2C1968AB07008ED995 /* MatcherFunc.swift */,\n\t\t\t\t1FD8CD2D1968AB07008ED995 /* ObjCMatcher.swift */,\n\t\t\t);\n\t\t\tpath = Wrappers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FFD729A1963FC8200CD29A2 /* objc */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FFD729C1963FCAB00CD29A2 /* Nimble-OSXTests-Bridging-Header.h */,\n\t\t\t\t1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */,\n\t\t\t\t1FFD729B1963FCAB00CD29A2 /* NimbleTests-Bridging-Header.h */,\n\t\t\t\t1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */,\n\t\t\t\t1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */,\n\t\t\t\t1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */,\n\t\t\t\t1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */,\n\t\t\t\t1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */,\n\t\t\t\t1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */,\n\t\t\t\t1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */,\n\t\t\t\t1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */,\n\t\t\t\t1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */,\n\t\t\t\t1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */,\n\t\t\t\t1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */,\n\t\t\t\t1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */,\n\t\t\t\t1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */,\n\t\t\t\t1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */,\n\t\t\t\t1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */,\n\t\t\t\t1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */,\n\t\t\t\t1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */,\n\t\t\t\t1F4A56931A3B346F009E1637 /* ObjCContainTest.m */,\n\t\t\t\t1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */,\n\t\t\t\t1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */,\n\t\t\t\t4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */,\n\t\t\t\t1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */,\n\t\t\t\t1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */,\n\t\t\t\t965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */,\n\t\t\t\tDDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */,\n\t\t\t);\n\t\t\tpath = objc;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t1F1A74261940169200FFFC47 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1FD8CD601968AB07008ED995 /* DSL.h in Headers */,\n\t\t\t\t1FD8CD641968AB07008ED995 /* NMBExceptionCapture.h in Headers */,\n\t\t\t\t1F1A742F1940169200FFFC47 /* Nimble.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F5DF1521BDCA0CE00C3A531 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F5DF1AF1BDCA17600C3A531 /* DSL.h in Headers */,\n\t\t\t\t1F5DF1B01BDCA17600C3A531 /* NMBExceptionCapture.h in Headers */,\n\t\t\t\t1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F925EAA195C0D6300ED456B /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1FD8CD611968AB07008ED995 /* DSL.h in Headers */,\n\t\t\t\t1FD8CD651968AB07008ED995 /* NMBExceptionCapture.h in Headers */,\n\t\t\t\t1F925EC7195C0DD100ED456B /* Nimble.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t1F1A74281940169200FFFC47 /* Nimble-iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget \"Nimble-iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F1A74241940169200FFFC47 /* Sources */,\n\t\t\t\t1F1A74251940169200FFFC47 /* Frameworks */,\n\t\t\t\t1F1A74261940169200FFFC47 /* Headers */,\n\t\t\t\t1F1A74271940169200FFFC47 /* 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 = \"Nimble-iOS\";\n\t\t\tproductName = \"Nimble-iOS\";\n\t\t\tproductReference = 1F1A74291940169200FFFC47 /* Nimble.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t1F1A74331940169200FFFC47 /* Nimble-iOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget \"Nimble-iOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F1A74301940169200FFFC47 /* Sources */,\n\t\t\t\t1F1A74311940169200FFFC47 /* Frameworks */,\n\t\t\t\t1F1A74321940169200FFFC47 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t1F1A74371940169200FFFC47 /* PBXTargetDependency */,\n\t\t\t\t1F925EA5195C0C8500ED456B /* PBXTargetDependency */,\n\t\t\t\t1F925EA7195C0C8500ED456B /* PBXTargetDependency */,\n\t\t\t\t1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Nimble-iOSTests\";\n\t\t\tproductName = \"Nimble-iOSTests\";\n\t\t\tproductReference = 1F1A74341940169200FFFC47 /* NimbleTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget \"Nimble-tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F5DF1501BDCA0CE00C3A531 /* Sources */,\n\t\t\t\t1F5DF1511BDCA0CE00C3A531 /* Frameworks */,\n\t\t\t\t1F5DF1521BDCA0CE00C3A531 /* Headers */,\n\t\t\t\t1F5DF1531BDCA0CE00C3A531 /* 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 = \"Nimble-tvOS\";\n\t\t\tproductName = \"Nimble-tvOS\";\n\t\t\tproductReference = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget \"Nimble-tvOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F5DF15A1BDCA0CE00C3A531 /* Sources */,\n\t\t\t\t1F5DF15B1BDCA0CE00C3A531 /* Frameworks */,\n\t\t\t\t1F5DF15C1BDCA0CE00C3A531 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Nimble-tvOSTests\";\n\t\t\tproductName = \"Nimble-tvOSTests\";\n\t\t\tproductReference = 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t1F925EAC195C0D6300ED456B /* Nimble-OSX */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget \"Nimble-OSX\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F925EA8195C0D6300ED456B /* Sources */,\n\t\t\t\t1F925EA9195C0D6300ED456B /* Frameworks */,\n\t\t\t\t1F925EAA195C0D6300ED456B /* Headers */,\n\t\t\t\t1F925EAB195C0D6300ED456B /* 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 = \"Nimble-OSX\";\n\t\t\tproductName = \"Nimble-OSX\";\n\t\t\tproductReference = 1F925EAD195C0D6300ED456B /* Nimble.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t1F925EB6195C0D6300ED456B /* Nimble-OSXTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget \"Nimble-OSXTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F925EB3195C0D6300ED456B /* Sources */,\n\t\t\t\t1F925EB4195C0D6300ED456B /* Frameworks */,\n\t\t\t\t1F925EB5195C0D6300ED456B /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t1F925EBA195C0D6300ED456B /* PBXTargetDependency */,\n\t\t\t\t1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */,\n\t\t\t\t1F9B7C001968AD760094EB8F /* PBXTargetDependency */,\n\t\t\t\t1F9B7C021968AD820094EB8F /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Nimble-OSXTests\";\n\t\t\tproductName = \"Nimble-OSXTests\";\n\t\t\tproductReference = 1F925EB7195C0D6300ED456B /* NimbleTests.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\t1F1A74201940169200FFFC47 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0710;\n\t\t\t\tLastUpgradeCheck = 0710;\n\t\t\t\tORGANIZATIONNAME = \"Jeff Hui\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t1F1A74281940169200FFFC47 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t};\n\t\t\t\t\t1F1A74331940169200FFFC47 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t\tTestTargetID = 1F1A74281940169200FFFC47;\n\t\t\t\t\t};\n\t\t\t\t\t1F5DF1541BDCA0CE00C3A531 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1;\n\t\t\t\t\t};\n\t\t\t\t\t1F5DF15D1BDCA0CE00C3A531 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1;\n\t\t\t\t\t};\n\t\t\t\t\t1F925EAC195C0D6300ED456B = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t};\n\t\t\t\t\t1F925EB6195C0D6300ED456B = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t\tTestTargetID = 1F925EAC195C0D6300ED456B;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject \"Nimble\" */;\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 = 1F1A741F1940169200FFFC47;\n\t\t\tproductRefGroup = 1F1A742A1940169200FFFC47 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1F1A74281940169200FFFC47 /* Nimble-iOS */,\n\t\t\t\t1F1A74331940169200FFFC47 /* Nimble-iOSTests */,\n\t\t\t\t1F925EAC195C0D6300ED456B /* Nimble-OSX */,\n\t\t\t\t1F925EB6195C0D6300ED456B /* Nimble-OSXTests */,\n\t\t\t\t1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */,\n\t\t\t\t1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1F1A74271940169200FFFC47 /* 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\t\t1F1A74321940169200FFFC47 /* 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\t\t1F5DF1531BDCA0CE00C3A531 /* 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\t\t1F5DF15C1BDCA0CE00C3A531 /* 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\t\t1F925EAB195C0D6300ED456B /* 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\t\t1F925EB5195C0D6300ED456B /* 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\t1F1A74241940169200FFFC47 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */,\n\t\t\t\t1FD8CD741968AB07008ED995 /* MatcherFunc.swift in Sources */,\n\t\t\t\t1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */,\n\t\t\t\t1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */,\n\t\t\t\t1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */,\n\t\t\t\t1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */,\n\t\t\t\t1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */,\n\t\t\t\t1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */,\n\t\t\t\t1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */,\n\t\t\t\t1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */,\n\t\t\t\t1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */,\n\t\t\t\t1F0FEA9A1AF32DA4001E554E /* ObjCExpectation.swift in Sources */,\n\t\t\t\t1FD8CD661968AB07008ED995 /* NMBExceptionCapture.m in Sources */,\n\t\t\t\tDA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */,\n\t\t\t\tDDB1BC791A92235600F743C3 /* AllPass.swift in Sources */,\n\t\t\t\t1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */,\n\t\t\t\tDDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */,\n\t\t\t\t1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */,\n\t\t\t\t29EA59661B551EE6002D767E /* ThrowError.swift in Sources */,\n\t\t\t\t1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */,\n\t\t\t\t1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */,\n\t\t\t\t1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */,\n\t\t\t\t1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */,\n\t\t\t\t1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */,\n\t\t\t\t1FD8CD561968AB07008ED995 /* Contain.swift in Sources */,\n\t\t\t\t1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */,\n\t\t\t\t1FD8CD701968AB07008ED995 /* AsyncMatcherWrapper.swift in Sources */,\n\t\t\t\t1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */,\n\t\t\t\t1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */,\n\t\t\t\t1FD8CD621968AB07008ED995 /* DSL.m in Sources */,\n\t\t\t\t1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */,\n\t\t\t\t1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */,\n\t\t\t\t1FD8CD6A1968AB07008ED995 /* Poll.swift in Sources */,\n\t\t\t\t1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */,\n\t\t\t\t1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */,\n\t\t\t\t1FD8CD761968AB07008ED995 /* ObjCMatcher.swift in Sources */,\n\t\t\t\t1FD8CD341968AB07008ED995 /* DSL.swift in Sources */,\n\t\t\t\t1FD8CD381968AB07008ED995 /* Expression.swift in Sources */,\n\t\t\t\t1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */,\n\t\t\t\t472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F1A74301940169200FFFC47 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */,\n\t\t\t\t1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */,\n\t\t\t\t1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */,\n\t\t\t\t1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */,\n\t\t\t\t1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */,\n\t\t\t\t1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */,\n\t\t\t\t1F14FB64194180C5009F2A08 /* utils.swift in Sources */,\n\t\t\t\tDDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */,\n\t\t\t\t1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */,\n\t\t\t\t1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */,\n\t\t\t\t1F925F02195C189500ED456B /* ContainTest.swift in Sources */,\n\t\t\t\t1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */,\n\t\t\t\t1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */,\n\t\t\t\t1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */,\n\t\t\t\t1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */,\n\t\t\t\t1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */,\n\t\t\t\t1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */,\n\t\t\t\t1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */,\n\t\t\t\t1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */,\n\t\t\t\t1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */,\n\t\t\t\t1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */,\n\t\t\t\t1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */,\n\t\t\t\t1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */,\n\t\t\t\t965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */,\n\t\t\t\t965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */,\n\t\t\t\t1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */,\n\t\t\t\t1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */,\n\t\t\t\t1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */,\n\t\t\t\t1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */,\n\t\t\t\t1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */,\n\t\t\t\t1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */,\n\t\t\t\t1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */,\n\t\t\t\tDDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */,\n\t\t\t\t1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */,\n\t\t\t\t1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */,\n\t\t\t\t1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */,\n\t\t\t\t1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */,\n\t\t\t\tDD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */,\n\t\t\t\t1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */,\n\t\t\t\t4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */,\n\t\t\t\t1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */,\n\t\t\t\t1F925F05195C18B700ED456B /* EqualTest.swift in Sources */,\n\t\t\t\t1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */,\n\t\t\t\tDD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */,\n\t\t\t\t1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */,\n\t\t\t\t1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */,\n\t\t\t\t29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */,\n\t\t\t\t1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */,\n\t\t\t\t472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F5DF1501BDCA0CE00C3A531 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */,\n\t\t\t\t1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */,\n\t\t\t\t1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */,\n\t\t\t\t1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */,\n\t\t\t\t1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */,\n\t\t\t\t1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */,\n\t\t\t\t1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */,\n\t\t\t\t1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */,\n\t\t\t\t1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */,\n\t\t\t\t1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */,\n\t\t\t\t1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */,\n\t\t\t\t1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */,\n\t\t\t\t1F5DF1911BDCA0F500C3A531 /* ObjCMatcher.swift in Sources */,\n\t\t\t\t1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */,\n\t\t\t\t1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */,\n\t\t\t\t1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */,\n\t\t\t\t1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */,\n\t\t\t\t1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */,\n\t\t\t\t1F5DF1731BDCA0F500C3A531 /* ObjCExpectation.swift in Sources */,\n\t\t\t\t1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */,\n\t\t\t\t1F5DF18F1BDCA0F500C3A531 /* AsyncMatcherWrapper.swift in Sources */,\n\t\t\t\t1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */,\n\t\t\t\t1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */,\n\t\t\t\t1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */,\n\t\t\t\t1F5DF1AD1BDCA16E00C3A531 /* NMBExceptionCapture.m in Sources */,\n\t\t\t\t1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */,\n\t\t\t\t1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */,\n\t\t\t\t1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */,\n\t\t\t\t1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */,\n\t\t\t\t1F5DF18C1BDCA0F500C3A531 /* Poll.swift in Sources */,\n\t\t\t\t1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */,\n\t\t\t\t1F5DF1AC1BDCA16E00C3A531 /* DSL.m in Sources */,\n\t\t\t\t1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */,\n\t\t\t\t1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */,\n\t\t\t\t1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */,\n\t\t\t\t1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */,\n\t\t\t\t1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */,\n\t\t\t\t1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */,\n\t\t\t\t1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */,\n\t\t\t\t1F5DF1901BDCA0F500C3A531 /* MatcherFunc.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F5DF15A1BDCA0CE00C3A531 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */,\n\t\t\t\t1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */,\n\t\t\t\t1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */,\n\t\t\t\t1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */,\n\t\t\t\t1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */,\n\t\t\t\t1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */,\n\t\t\t\t1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */,\n\t\t\t\t1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */,\n\t\t\t\t1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */,\n\t\t\t\t1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */,\n\t\t\t\t1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */,\n\t\t\t\t1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */,\n\t\t\t\t1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */,\n\t\t\t\t1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */,\n\t\t\t\t1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */,\n\t\t\t\t1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */,\n\t\t\t\t1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */,\n\t\t\t\t1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */,\n\t\t\t\t1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */,\n\t\t\t\t1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */,\n\t\t\t\t1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */,\n\t\t\t\t1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */,\n\t\t\t\t1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */,\n\t\t\t\t1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F925EA8195C0D6300ED456B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */,\n\t\t\t\t1FD8CD751968AB07008ED995 /* MatcherFunc.swift in Sources */,\n\t\t\t\t1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */,\n\t\t\t\t1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */,\n\t\t\t\t1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */,\n\t\t\t\t1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */,\n\t\t\t\t1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */,\n\t\t\t\t1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */,\n\t\t\t\t1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */,\n\t\t\t\t1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */,\n\t\t\t\t1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */,\n\t\t\t\t1F0FEA9B1AF32DA4001E554E /* ObjCExpectation.swift in Sources */,\n\t\t\t\t1FD8CD671968AB07008ED995 /* NMBExceptionCapture.m in Sources */,\n\t\t\t\tDA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */,\n\t\t\t\tDDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */,\n\t\t\t\t1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */,\n\t\t\t\t1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */,\n\t\t\t\tDDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */,\n\t\t\t\t29EA59671B551EE6002D767E /* ThrowError.swift in Sources */,\n\t\t\t\t1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */,\n\t\t\t\t1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */,\n\t\t\t\t1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */,\n\t\t\t\t1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */,\n\t\t\t\t1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */,\n\t\t\t\t1FD8CD571968AB07008ED995 /* Contain.swift in Sources */,\n\t\t\t\t1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */,\n\t\t\t\t1FD8CD711968AB07008ED995 /* AsyncMatcherWrapper.swift in Sources */,\n\t\t\t\t1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */,\n\t\t\t\t1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */,\n\t\t\t\t1FD8CD631968AB07008ED995 /* DSL.m in Sources */,\n\t\t\t\t1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */,\n\t\t\t\t1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */,\n\t\t\t\t1FD8CD6B1968AB07008ED995 /* Poll.swift in Sources */,\n\t\t\t\t1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */,\n\t\t\t\t1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */,\n\t\t\t\t1FD8CD771968AB07008ED995 /* ObjCMatcher.swift in Sources */,\n\t\t\t\t1FD8CD351968AB07008ED995 /* DSL.swift in Sources */,\n\t\t\t\t1FD8CD391968AB07008ED995 /* Expression.swift in Sources */,\n\t\t\t\t1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */,\n\t\t\t\t472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F925EB3195C0D6300ED456B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */,\n\t\t\t\t1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */,\n\t\t\t\t1F925F00195C187600ED456B /* EndWithTest.swift in Sources */,\n\t\t\t\t1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */,\n\t\t\t\t1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */,\n\t\t\t\t1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */,\n\t\t\t\t1F925EE2195C0DFD00ED456B /* utils.swift in Sources */,\n\t\t\t\tDDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */,\n\t\t\t\t1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */,\n\t\t\t\t1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */,\n\t\t\t\t1F925F03195C189500ED456B /* ContainTest.swift in Sources */,\n\t\t\t\t1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */,\n\t\t\t\t1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */,\n\t\t\t\t1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */,\n\t\t\t\t1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */,\n\t\t\t\t1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */,\n\t\t\t\t1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */,\n\t\t\t\t1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */,\n\t\t\t\t1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */,\n\t\t\t\t1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */,\n\t\t\t\t1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */,\n\t\t\t\t1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */,\n\t\t\t\t1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */,\n\t\t\t\t1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */,\n\t\t\t\t965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */,\n\t\t\t\t965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */,\n\t\t\t\t1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */,\n\t\t\t\t1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */,\n\t\t\t\t1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */,\n\t\t\t\t1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */,\n\t\t\t\t1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */,\n\t\t\t\t1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */,\n\t\t\t\t1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */,\n\t\t\t\tDDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */,\n\t\t\t\t1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */,\n\t\t\t\t1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */,\n\t\t\t\t1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */,\n\t\t\t\t1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */,\n\t\t\t\tDD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */,\n\t\t\t\t1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */,\n\t\t\t\t4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */,\n\t\t\t\t1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */,\n\t\t\t\t1F925F06195C18B700ED456B /* EqualTest.swift in Sources */,\n\t\t\t\t1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */,\n\t\t\t\tDD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */,\n\t\t\t\t1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */,\n\t\t\t\t1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */,\n\t\t\t\t29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */,\n\t\t\t\t1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */,\n\t\t\t\t472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift 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\t1F1A74371940169200FFFC47 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F1A74281940169200FFFC47 /* Nimble-iOS */;\n\t\t\ttargetProxy = 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */;\n\t\t\ttargetProxy = 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F1A74281940169200FFFC47 /* Nimble-iOS */;\n\t\t\ttargetProxy = 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F925EA5195C0C8500ED456B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F1A74281940169200FFFC47 /* Nimble-iOS */;\n\t\t\ttargetProxy = 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F925EA7195C0C8500ED456B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F1A74281940169200FFFC47 /* Nimble-iOS */;\n\t\t\ttargetProxy = 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F925EBA195C0D6300ED456B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F925EAC195C0D6300ED456B /* Nimble-OSX */;\n\t\t\ttargetProxy = 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F925EAC195C0D6300ED456B /* Nimble-OSX */;\n\t\t\ttargetProxy = 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F9B7C001968AD760094EB8F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F925EAC195C0D6300ED456B /* Nimble-OSX */;\n\t\t\ttargetProxy = 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F9B7C021968AD820094EB8F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F925EAC195C0D6300ED456B /* Nimble-OSX */;\n\t\t\ttargetProxy = 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1F1A743D1940169200FFFC47 /* 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_MODULES_AUTOLINK = NO;\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\tCURRENT_PROJECT_VERSION = 1;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F1A743E1940169200FFFC47 /* 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_MODULES_AUTOLINK = NO;\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 = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F1A74401940169200FFFC47 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_TREAT_WARNINGS_AS_ERRORS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tONLY_ACTIVE_ARCH = NO;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F1A74411940169200FFFC47 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_TREAT_WARNINGS_AS_ERRORS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F1A74431940169200FFFC47 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/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 = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos appletvsimulator appletvos\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"NimbleTests/objc/NimbleTests-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F1A74441940169200FFFC47 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos appletvsimulator appletvos\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"NimbleTests/objc/NimbleTests-Bridging-Header.h\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F5DF1661BDCA0CE00C3A531 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F5DF1671BDCA0CE00C3A531 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F5DF1681BDCA0CE00C3A531 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F5DF1691BDCA0CE00C3A531 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F925EC1195C0D6300ED456B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tFRAMEWORK_VERSION = A;\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_TREAT_WARNINGS_AS_ERRORS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tVALID_ARCHS = x86_64;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F925EC2195C0D6300ED456B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tGCC_TREAT_WARNINGS_AS_ERRORS = YES;\n\t\t\t\tINFOPLIST_FILE = Nimble/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-weak_framework\",\n\t\t\t\t\tXCTest,\n\t\t\t\t\t\"-weak-lswiftXCTest\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Nimble;\n\t\t\t\tPRODUCT_NAME = Nimble;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tVALID_ARCHS = x86_64;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F925EC4195C0D6300ED456B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\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 = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"NimbleTests/objc/Nimble-OSXTests-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F925EC5195C0D6300ED456B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = NimbleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"net.jeffhui.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = NimbleTests;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"NimbleTests/objc/Nimble-OSXTests-Bridging-Header.h\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1F1A74231940169200FFFC47 /* Build configuration list for PBXProject \"Nimble\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F1A743D1940169200FFFC47 /* Debug */,\n\t\t\t\t1F1A743E1940169200FFFC47 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget \"Nimble-iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F1A74401940169200FFFC47 /* Debug */,\n\t\t\t\t1F1A74411940169200FFFC47 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget \"Nimble-iOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F1A74431940169200FFFC47 /* Debug */,\n\t\t\t\t1F1A74441940169200FFFC47 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget \"Nimble-tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F5DF1661BDCA0CE00C3A531 /* Debug */,\n\t\t\t\t1F5DF1671BDCA0CE00C3A531 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget \"Nimble-tvOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F5DF1681BDCA0CE00C3A531 /* Debug */,\n\t\t\t\t1F5DF1691BDCA0CE00C3A531 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget \"Nimble-OSX\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F925EC1195C0D6300ED456B /* Debug */,\n\t\t\t\t1F925EC2195C0D6300ED456B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget \"Nimble-OSXTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F925EC4195C0D6300ED456B /* Debug */,\n\t\t\t\t1F925EC5195C0D6300ED456B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 1F1A74201940169200FFFC47 /* Project object */;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"2.0\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F925EAC195C0D6300ED456B\"\n               BuildableName = \"Nimble.framework\"\n               BlueprintName = \"Nimble-OSX\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F925EB6195C0D6300ED456B\"\n               BuildableName = \"NimbleTests.xctest\"\n               BlueprintName = \"Nimble-OSXTests\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"\"\n      selectedLauncherIdentifier = \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugXPCServices = \"NO\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F925EAC195C0D6300ED456B\"\n            BuildableName = \"Nimble.framework\"\n            BlueprintName = \"Nimble-OSX\"\n            ReferencedContainer = \"container:Nimble.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"2.0\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F1A74281940169200FFFC47\"\n               BuildableName = \"Nimble.framework\"\n               BlueprintName = \"Nimble-iOS\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F1A74331940169200FFFC47\"\n               BuildableName = \"NimbleTests.xctest\"\n               BlueprintName = \"Nimble-iOSTests\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"\"\n      selectedLauncherIdentifier = \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugXPCServices = \"NO\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F1A74281940169200FFFC47\"\n            BuildableName = \"Nimble.framework\"\n            BlueprintName = \"Nimble-iOS\"\n            ReferencedContainer = \"container:Nimble.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F5DF1541BDCA0CE00C3A531\"\n               BuildableName = \"Nimble.framework\"\n               BlueprintName = \"Nimble-tvOS\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F5DF15D1BDCA0CE00C3A531\"\n               BuildableName = \"NimbleTests.xctest\"\n               BlueprintName = \"Nimble-tvOSTests\"\n               ReferencedContainer = \"container:Nimble.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F5DF1541BDCA0CE00C3A531\"\n            BuildableName = \"Nimble.framework\"\n            BlueprintName = \"Nimble-tvOS\"\n            ReferencedContainer = \"container:Nimble.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F5DF1541BDCA0CE00C3A531\"\n            BuildableName = \"Nimble.framework\"\n            BlueprintName = \"Nimble-tvOS\"\n            ReferencedContainer = \"container:Nimble.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F5DF1541BDCA0CE00C3A531\"\n            BuildableName = \"Nimble.framework\"\n            BlueprintName = \"Nimble-tvOS\"\n            ReferencedContainer = \"container:Nimble.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/AsynchronousTest.swift",
    "content": "import XCTest\nimport Nimble\nimport Swift\n\nclass AsyncTest: XCTestCase {\n    let errorToThrow = NSError(domain: NSInternalInconsistencyException, code: 42, userInfo: nil)\n\n    private func doThrowError() throws -> Int {\n        throw errorToThrow\n    }\n\n    func testAsyncTestingViaEventuallyPositiveMatches() {\n        var value = 0\n        deferToMainQueue { value = 1 }\n        expect { value }.toEventually(equal(1))\n\n        deferToMainQueue { value = 0 }\n        expect { value }.toEventuallyNot(equal(1))\n    }\n\n    func testAsyncTestingViaEventuallyNegativeMatches() {\n        let value = 0\n        failsWithErrorMessage(\"expected to eventually not equal <0>, got <0>\") {\n            expect { value }.toEventuallyNot(equal(0))\n        }\n        failsWithErrorMessage(\"expected to eventually equal <1>, got <0>\") {\n            expect { value }.toEventually(equal(1))\n        }\n        failsWithErrorMessage(\"expected to eventually equal <1>, got an unexpected error thrown: <\\(errorToThrow)>\") {\n            expect { try self.doThrowError() }.toEventually(equal(1))\n        }\n        failsWithErrorMessage(\"expected to eventually not equal <0>, got an unexpected error thrown: <\\(errorToThrow)>\") {\n            expect { try self.doThrowError() }.toEventuallyNot(equal(0))\n        }\n    }\n\n    func testAsyncTestingViaWaitUntilPositiveMatches() {\n        waitUntil { done in\n            done()\n        }\n        waitUntil { done in\n            deferToMainQueue {\n                done()\n            }\n        }\n    }\n\n    func testAsyncTestingViaWaitUntilNegativeMatches() {\n        failsWithErrorMessage(\"Waited more than 1.0 second\") {\n            waitUntil(timeout: 1) { done in return }\n        }\n        failsWithErrorMessage(\"Waited more than 0.01 seconds\") {\n            waitUntil(timeout: 0.01) { done in\n                NSThread.sleepForTimeInterval(0.1)\n                done()\n            }\n        }\n\n        failsWithErrorMessage(\"expected to equal <2>, got <1>\") {\n            waitUntil { done in\n                NSThread.sleepForTimeInterval(0.1)\n                expect(1).to(equal(2))\n                done()\n            }\n        }\n        // \"clear\" runloop to ensure this test doesn't poison other tests\n        NSRunLoop.mainRunLoop().runUntilDate(NSDate().dateByAddingTimeInterval(0.2))\n    }\n\n    func testWaitUntilDetectsStalledMainThreadActivity() {\n        dispatch_async(dispatch_get_main_queue()) {\n            NSThread.sleepForTimeInterval(2.0)\n        }\n\n        failsWithErrorMessage(\"Stall on main thread - too much enqueued on main run loop before waitUntil executes.\") {\n            waitUntil { done in\n                done()\n            }\n        }\n\n        // \"clear\" runloop to ensure this test doesn't poison other tests\n        NSRunLoop.mainRunLoop().runUntilDate(NSDate().dateByAddingTimeInterval(2.0))\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Helpers/ObjectWithLazyProperty.swift",
    "content": "import Foundation\n\nclass ObjectWithLazyProperty {\n    init() {}\n    lazy var value: String = \"hello\"\n    lazy var anotherValue: String = { return \"world\" }()\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Helpers/utils.swift",
    "content": "import Foundation\nimport Nimble\nimport XCTest\n\nfunc failsWithErrorMessage(messages: [String], file: String = __FILE__, line: UInt = __LINE__, preferOriginalSourceLocation: Bool = false, closure: () throws -> Void) {\n    var filePath = file\n    var lineNumber = line\n\n    let recorder = AssertionRecorder()\n    withAssertionHandler(recorder, closure: closure)\n\n    for msg in messages {\n        var lastFailure: AssertionRecord?\n        var foundFailureMessage = false\n\n        for assertion in recorder.assertions {\n            lastFailure = assertion\n            if assertion.message.stringValue == msg {\n                foundFailureMessage = true\n                break\n            }\n        }\n\n        if foundFailureMessage {\n            continue\n        }\n\n        if preferOriginalSourceLocation {\n            if let failure = lastFailure {\n                filePath = failure.location.file\n                lineNumber = failure.location.line\n            }\n        }\n\n        if let lastFailure = lastFailure {\n            let msg = \"Got failure message: \\\"\\(lastFailure.message.stringValue)\\\", but expected \\\"\\(msg)\\\"\"\n            XCTFail(msg, file: filePath, line: lineNumber)\n        } else {\n            XCTFail(\"expected failure message, but got none\", file: filePath, line: lineNumber)\n        }\n    }\n}\n\nfunc failsWithErrorMessage(message: String, file: String = __FILE__, line: UInt = __LINE__, preferOriginalSourceLocation: Bool = false, closure: () -> Void) {\n    return failsWithErrorMessage(\n        [message],\n        file: file,\n        line: line,\n        preferOriginalSourceLocation: preferOriginalSourceLocation,\n        closure: closure\n    )\n}\n\nfunc failsWithErrorMessageForNil(message: String, file: String = __FILE__, line: UInt = __LINE__, preferOriginalSourceLocation: Bool = false, closure: () -> Void) {\n    failsWithErrorMessage(\"\\(message) (use beNil() to match nils)\", file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure)\n}\n\nfunc deferToMainQueue(action: () -> Void) {\n    dispatch_async(dispatch_get_main_queue()) {\n        NSThread.sleepForTimeInterval(0.01)\n        action()\n    }\n}\n\npublic class NimbleHelper : NSObject {\n    class func expectFailureMessage(message: NSString, block: () -> Void, file: String, line: UInt) {\n        failsWithErrorMessage(message as String, file: file, line: line, preferOriginalSourceLocation: true, closure: block)\n    }\n\n    class func expectFailureMessages(messages: [NSString], block: () -> Void, file: String, line: UInt) {\n        failsWithErrorMessage(messages as! [String], file: file, line: line, preferOriginalSourceLocation: true, closure: block)\n    }\n\n    class func expectFailureMessageForNil(message: NSString, block: () -> Void, file: String, line: UInt) {\n        failsWithErrorMessageForNil(message as String, file: file, line: line, preferOriginalSourceLocation: true, closure: block)\n    }\n}\n\nextension NSDate {\n    convenience init(dateTimeString:String) {\n        let dateFormatter = NSDateFormatter()\n        dateFormatter.dateFormat = \"yyyy-MM-dd HH:mm:ss\"\n        dateFormatter.locale = NSLocale(localeIdentifier: \"en_US_POSIX\")\n        let date = dateFormatter.dateFromString(dateTimeString)!\n        self.init(timeInterval:0, sinceDate:date)\n    }\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/AllPassTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass AllPassTest: XCTestCase {\n    func testAllPassArray() {\n        expect([1,2,3,4]).to(allPass({$0 < 5}))\n        expect([1,2,3,4]).toNot(allPass({$0 > 5}))\n\n        failsWithErrorMessage(\n            \"expected to all pass a condition, but failed first at element <3> in <[1, 2, 3, 4]>\") {\n                expect([1,2,3,4]).to(allPass({$0 < 3}))\n        }\n        failsWithErrorMessage(\"expected to not all pass a condition\") {\n            expect([1,2,3,4]).toNot(allPass({$0 < 5}))\n        }\n        failsWithErrorMessage(\n            \"expected to all be something, but failed first at element <3> in <[1, 2, 3, 4]>\") {\n                expect([1,2,3,4]).to(allPass(\"be something\", {$0 < 3}))\n        }\n        failsWithErrorMessage(\"expected to not all be something\") {\n            expect([1,2,3,4]).toNot(allPass(\"be something\", {$0 < 5}))\n        }\n    }\n\n    func testAllPassMatcher() {\n        expect([1,2,3,4]).to(allPass(beLessThan(5)))\n        expect([1,2,3,4]).toNot(allPass(beGreaterThan(5)))\n        \n        failsWithErrorMessage(\n            \"expected to all be less than <3>, but failed first at element <3> in <[1, 2, 3, 4]>\") {\n                expect([1,2,3,4]).to(allPass(beLessThan(3)))\n        }\n        failsWithErrorMessage(\"expected to not all be less than <5>\") {\n            expect([1,2,3,4]).toNot(allPass(beLessThan(5)))\n        }\n    }\n\n    func testAllPassCollectionsWithOptionalsDontWork() {\n        failsWithErrorMessage(\"expected to all be nil, but failed first at element <nil> in <[nil, nil, nil]>\") {\n            expect([nil, nil, nil] as [Int?]).to(allPass(beNil()))\n        }\n        failsWithErrorMessage(\"expected to all pass a condition, but failed first at element <nil> in <[nil, nil, nil]>\") {\n            expect([nil, nil, nil] as [Int?]).to(allPass({$0 == nil}))\n        }\n    }\n\n    func testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer() {\n        expect([nil, nil, nil] as [Int?]).to(allPass({$0! == nil}))\n        expect([nil, 1, nil] as [Int?]).toNot(allPass({$0! == nil}))\n        expect([1, 1, 1] as [Int?]).to(allPass({$0! == 1}))\n        expect([1, 1, nil] as [Int?]).toNot(allPass({$0! == 1}))\n        expect([1, 2, 3] as [Int?]).to(allPass({$0! < 4}))\n        expect([1, 2, 3] as [Int?]).toNot(allPass({$0! < 3}))\n        expect([1, 2, nil] as [Int?]).to(allPass({$0! < 3}))\n    }\n\n    func testAllPassSet() {\n        expect(Set([1,2,3,4])).to(allPass({$0 < 5}))\n        expect(Set([1,2,3,4])).toNot(allPass({$0 > 5}))\n\n        failsWithErrorMessage(\"expected to not all pass a condition\") {\n            expect(Set([1,2,3,4])).toNot(allPass({$0 < 5}))\n        }\n        failsWithErrorMessage(\"expected to not all be something\") {\n            expect(Set([1,2,3,4])).toNot(allPass(\"be something\", {$0 < 5}))\n        }\n    }\n\n    func testAllPassWithNilAsExpectedValue() {\n        failsWithErrorMessageForNil(\"expected to all pass\") {\n            expect(nil as [Int]?).to(allPass(beLessThan(5)))\n        }\n    }\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeAKindOfTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass TestNull : NSNull {}\n\nclass BeAKindOfTest: XCTestCase {\n    func testPositiveMatch() {\n        expect(TestNull()).to(beAKindOf(NSNull))\n        expect(NSObject()).to(beAKindOf(NSObject))\n        expect(NSNumber(integer:1)).toNot(beAKindOf(NSDate))\n    }\n\n    func testFailureMessages() {\n        failsWithErrorMessageForNil(\"expected to not be a kind of NSNull, got <nil>\") {\n            expect(nil as NSNull?).toNot(beAKindOf(NSNull))\n        }\n        failsWithErrorMessageForNil(\"expected to be a kind of NSString, got <nil>\") {\n            expect(nil as NSString?).to(beAKindOf(NSString))\n        }\n        failsWithErrorMessage(\"expected to be a kind of NSString, got <__NSCFNumber instance>\") {\n            expect(NSNumber(integer:1)).to(beAKindOf(NSString))\n        }\n        failsWithErrorMessage(\"expected to not be a kind of NSNumber, got <__NSCFNumber instance>\") {\n            expect(NSNumber(integer:1)).toNot(beAKindOf(NSNumber))\n        }\n    }\n    \n    func testSwiftTypesFailureMessages() {\n        enum TestEnum {\n            case One, Two\n        }\n        failsWithErrorMessage(\"beAKindOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(1).to(beAKindOf(Int))\n        }\n        failsWithErrorMessage(\"beAKindOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(\"test\").to(beAKindOf(String))\n        }\n        failsWithErrorMessage(\"beAKindOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(TestEnum.One).to(beAKindOf(TestEnum))\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeAnInstanceOfTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeAnInstanceOfTest: XCTestCase {\n    func testPositiveMatch() {\n        expect(NSNull()).to(beAnInstanceOf(NSNull))\n        expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSDate))\n    }\n\n    func testFailureMessages() {\n        failsWithErrorMessageForNil(\"expected to not be an instance of NSNull, got <nil>\") {\n            expect(nil as NSNull?).toNot(beAnInstanceOf(NSNull))\n        }\n        failsWithErrorMessageForNil(\"expected to be an instance of NSString, got <nil>\") {\n            expect(nil as NSString?).to(beAnInstanceOf(NSString))\n        }\n        failsWithErrorMessage(\"expected to be an instance of NSString, got <__NSCFNumber instance>\") {\n            expect(NSNumber(integer:1)).to(beAnInstanceOf(NSString))\n        }\n        failsWithErrorMessage(\"expected to not be an instance of NSNumber, got <__NSCFNumber instance>\") {\n            expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSNumber))\n        }\n    }\n    \n    func testSwiftTypesFailureMessages() {\n        enum TestEnum {\n            case One, Two\n        }\n\n        failsWithErrorMessage(\"beAnInstanceOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(1).to(beAnInstanceOf(Int))\n        }\n        failsWithErrorMessage(\"beAnInstanceOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(\"test\").to(beAnInstanceOf(String))\n        }\n        failsWithErrorMessage(\"beAnInstanceOf only works on Objective-C types since the Swift compiler\"\n            + \" will automatically type check Swift-only types. This expectation is redundant.\") {\n            expect(TestEnum.One).to(beAnInstanceOf(TestEnum))\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeCloseToTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeCloseToTest: XCTestCase {\n    func testBeCloseTo() {\n        expect(1.2).to(beCloseTo(1.2001))\n        expect(1.2 as CDouble).to(beCloseTo(1.2001))\n        expect(1.2 as Float).to(beCloseTo(1.2001))\n\n        failsWithErrorMessage(\"expected to not be close to <1.2001> (within 0.0001), got <1.2000>\") {\n            expect(1.2).toNot(beCloseTo(1.2001))\n        }\n    }\n\n    func testBeCloseToWithin() {\n        expect(1.2).to(beCloseTo(9.300, within: 10))\n\n        failsWithErrorMessage(\"expected to not be close to <1.2001> (within 1.0000), got <1.2000>\") {\n            expect(1.2).toNot(beCloseTo(1.2001, within: 1.0))\n        }\n    }\n\n    func testBeCloseToWithNSNumber() {\n        expect(NSNumber(double:1.2)).to(beCloseTo(9.300, within: 10))\n        expect(NSNumber(double:1.2)).to(beCloseTo(NSNumber(double:9.300), within: 10))\n        expect(1.2).to(beCloseTo(NSNumber(double:9.300), within: 10))\n\n        failsWithErrorMessage(\"expected to not be close to <1.2001> (within 1.0000), got <1.2000>\") {\n            expect(NSNumber(double:1.2)).toNot(beCloseTo(1.2001, within: 1.0))\n        }\n    }\n    \n    func testBeCloseToWithNSDate() {\n        expect(NSDate(dateTimeString: \"2015-08-26 11:43:00\")).to(beCloseTo(NSDate(dateTimeString: \"2015-08-26 11:43:05\"), within: 10))\n        \n        failsWithErrorMessage(\"expected to not be close to <2015-08-26 11:43:00.0050> (within 0.0040), got <2015-08-26 11:43:00.0000>\") {\n\n            let expectedDate = NSDate(dateTimeString: \"2015-08-26 11:43:00\").dateByAddingTimeInterval(0.005)\n            expect(NSDate(dateTimeString: \"2015-08-26 11:43:00\")).toNot(beCloseTo(expectedDate, within: 0.004))\n        }\n    }\n    \n    func testBeCloseToOperator() {\n        expect(1.2) ≈ 1.2001\n        expect(1.2 as CDouble) ≈ 1.2001\n        \n        failsWithErrorMessage(\"expected to be close to <1.2002> (within 0.0001), got <1.2000>\") {\n            expect(1.2) ≈ 1.2002\n        }\n    }\n\n    func testBeCloseToWithinOperator() {\n        expect(1.2) ≈ (9.300, 10)\n        expect(1.2) == (9.300, 10)\n        \n        failsWithErrorMessage(\"expected to be close to <1.0000> (within 0.1000), got <1.2000>\") {\n            expect(1.2) ≈ (1.0, 0.1)\n        }\n        failsWithErrorMessage(\"expected to be close to <1.0000> (within 0.1000), got <1.2000>\") {\n            expect(1.2) == (1.0, 0.1)\n        }\n    }\n    \n    func testPlusMinusOperator() {\n        expect(1.2) ≈ 9.300 ± 10\n        expect(1.2) == 9.300 ± 10\n        \n        failsWithErrorMessage(\"expected to be close to <1.0000> (within 0.1000), got <1.2000>\") {\n            expect(1.2) ≈ 1.0 ± 0.1\n        }\n        failsWithErrorMessage(\"expected to be close to <1.0000> (within 0.1000), got <1.2000>\") {\n            expect(1.2) == 1.0 ± 0.1\n        }\n    }\n\n    func testBeCloseToArray() {\n        expect([0.0, 1.1, 2.2]) ≈ [0.0001, 1.1001, 2.2001]\n        expect([0.0, 1.1, 2.2]).to(beCloseTo([0.1, 1.2, 2.3], within: 0.1))\n        \n        failsWithErrorMessage(\"expected to be close to <[0.0000, 1.0000]> (each within 0.0001), got <[0.0, 1.1]>\") {\n            expect([0.0, 1.1]) ≈ [0.0, 1.0]\n        }\n        failsWithErrorMessage(\"expected to be close to <[0.2000, 1.2000]> (each within 0.1000), got <[0.0, 1.1]>\") {\n            expect([0.0, 1.1]).to(beCloseTo([0.2, 1.2], within: 0.1))\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeEmptyTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeEmptyTest: XCTestCase {\n    func testBeEmptyPositive() {\n        expect([] as [Int]).to(beEmpty())\n        expect([1]).toNot(beEmpty())\n\n        expect([] as [CInt]).to(beEmpty())\n        expect([1] as [CInt]).toNot(beEmpty())\n\n        expect(NSDictionary() as? [Int:Int]).to(beEmpty())\n        expect(NSDictionary(object: 1, forKey: 1) as? [Int:Int]).toNot(beEmpty())\n\n        expect(Dictionary<Int, Int>()).to(beEmpty())\n        expect([\"hi\": 1]).toNot(beEmpty())\n\n        expect(NSArray() as? [Int]).to(beEmpty())\n        expect(NSArray(array: [1]) as? [Int]).toNot(beEmpty())\n\n        expect(NSSet()).to(beEmpty())\n        expect(NSSet(array: [1])).toNot(beEmpty())\n\n        expect(NSString()).to(beEmpty())\n        expect(NSString(string: \"hello\")).toNot(beEmpty())\n\n        expect(\"\").to(beEmpty())\n        expect(\"foo\").toNot(beEmpty())\n    }\n\n    func testBeEmptyNegative() {\n        failsWithErrorMessageForNil(\"expected to be empty, got <nil>\") {\n            expect(nil as NSString?).to(beEmpty())\n        }\n        failsWithErrorMessageForNil(\"expected to not be empty, got <nil>\") {\n            expect(nil as [CInt]?).toNot(beEmpty())\n        }\n\n        failsWithErrorMessage(\"expected to not be empty, got <()>\") {\n            expect([]).toNot(beEmpty())\n        }\n        failsWithErrorMessage(\"expected to be empty, got <[1]>\") {\n            expect([1]).to(beEmpty())\n        }\n\n        failsWithErrorMessage(\"expected to not be empty, got <>\") {\n            expect(\"\").toNot(beEmpty())\n        }\n        failsWithErrorMessage(\"expected to be empty, got <foo>\") {\n            expect(\"foo\").to(beEmpty())\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeGreaterThanOrEqualToTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeGreaterThanOrEqualToTest: XCTestCase {\n\n    func testGreaterThanOrEqualTo() {\n        expect(10).to(beGreaterThanOrEqualTo(10))\n        expect(10).to(beGreaterThanOrEqualTo(2))\n        expect(1).toNot(beGreaterThanOrEqualTo(2))\n        expect(NSNumber(int:1)).toNot(beGreaterThanOrEqualTo(2))\n        expect(NSNumber(int:2)).to(beGreaterThanOrEqualTo(NSNumber(int:2)))\n        expect(1).to(beGreaterThanOrEqualTo(NSNumber(int:0)))\n\n        failsWithErrorMessage(\"expected to be greater than or equal to <2>, got <0>\") {\n            expect(0).to(beGreaterThanOrEqualTo(2))\n            return\n        }\n        failsWithErrorMessage(\"expected to not be greater than or equal to <1>, got <1>\") {\n            expect(1).toNot(beGreaterThanOrEqualTo(1))\n            return\n        }\n        failsWithErrorMessageForNil(\"expected to be greater than or equal to <-2>, got <nil>\") {\n            expect(nil as Int?).to(beGreaterThanOrEqualTo(-2))\n        }\n        failsWithErrorMessageForNil(\"expected to not be greater than or equal to <1>, got <nil>\") {\n            expect(nil as Int?).toNot(beGreaterThanOrEqualTo(1))\n        }\n    }\n\n    func testGreaterThanOrEqualToOperator() {\n        expect(0) >= 0\n        expect(1) >= 0\n        expect(NSNumber(int:1)) >= 1\n        expect(NSNumber(int:1)) >= NSNumber(int:1)\n\n        failsWithErrorMessage(\"expected to be greater than or equal to <2>, got <1>\") {\n            expect(1) >= 2\n            return\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeGreaterThanTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeGreaterThanTest: XCTestCase {\n    func testGreaterThan() {\n        expect(10).to(beGreaterThan(2))\n        expect(1).toNot(beGreaterThan(2))\n        expect(NSNumber(int:3)).to(beGreaterThan(2))\n        expect(NSNumber(int:1)).toNot(beGreaterThan(NSNumber(int:2)))\n\n        failsWithErrorMessage(\"expected to be greater than <2>, got <0>\") {\n            expect(0).to(beGreaterThan(2))\n        }\n        failsWithErrorMessage(\"expected to not be greater than <0>, got <1>\") {\n            expect(1).toNot(beGreaterThan(0))\n        }\n        failsWithErrorMessageForNil(\"expected to be greater than <-2>, got <nil>\") {\n            expect(nil as Int?).to(beGreaterThan(-2))\n        }\n        failsWithErrorMessageForNil(\"expected to not be greater than <0>, got <nil>\") {\n            expect(nil as Int?).toNot(beGreaterThan(0))\n        }\n    }\n\n    func testGreaterThanOperator() {\n        expect(1) > 0\n        expect(NSNumber(int:1)) > NSNumber(int:0)\n        expect(NSNumber(int:1)) > 0\n\n        failsWithErrorMessage(\"expected to be greater than <2.0000>, got <1.0000>\") {\n            expect(1) > 2\n            return\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeIdenticalToObjectTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeIdenticalToObjectTest: XCTestCase {\n    private class BeIdenticalToObjectTester {}\n    private let testObjectA = BeIdenticalToObjectTester()\n    private let testObjectB = BeIdenticalToObjectTester()\n\n    func testBeIdenticalToPositive() {\n        expect(self.testObjectA).to(beIdenticalTo(testObjectA))\n    }\n    \n    func testBeIdenticalToNegative() {\n        expect(self.testObjectA).toNot(beIdenticalTo(testObjectB))\n    }\n    \n    func testBeIdenticalToPositiveMessage() {\n        let message = String(format: \"expected to be identical to <%p>, got <%p>\",\n            unsafeBitCast(testObjectB, Int.self), unsafeBitCast(testObjectA, Int.self))\n        failsWithErrorMessage(message) {\n            expect(self.testObjectA).to(beIdenticalTo(self.testObjectB))\n        }\n    }\n    \n    func testBeIdenticalToNegativeMessage() {\n        let message = String(format: \"expected to not be identical to <%p>, got <%p>\",\n            unsafeBitCast(testObjectA, Int.self), unsafeBitCast(testObjectA, Int.self))\n        failsWithErrorMessage(message) {\n            expect(self.testObjectA).toNot(beIdenticalTo(self.testObjectA))\n        }\n    }\n\n    func testFailsOnNils() {\n        let message1 = String(format: \"expected to be identical to <%p>, got nil\",\n            unsafeBitCast(testObjectA, Int.self))\n        failsWithErrorMessageForNil(message1) {\n            expect(nil as BeIdenticalToObjectTester?).to(beIdenticalTo(self.testObjectA))\n        }\n\n        let message2 = String(format: \"expected to not be identical to <%p>, got nil\",\n            unsafeBitCast(testObjectA, Int.self))\n        failsWithErrorMessageForNil(message2) {\n            expect(nil as BeIdenticalToObjectTester?).toNot(beIdenticalTo(self.testObjectA))\n        }\n    }\n    \n    func testOperators() {\n        expect(self.testObjectA) === testObjectA\n        expect(self.testObjectA) !== testObjectB\n    }\n\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeIdenticalToTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeIdenticalToTest: XCTestCase {\n    func testBeIdenticalToPositive() {\n        expect(NSNumber(integer:1)).to(beIdenticalTo(NSNumber(integer:1)))\n    }\n\n    func testBeIdenticalToNegative() {\n        expect(NSNumber(integer:1)).toNot(beIdenticalTo(\"yo\"))\n        expect([1]).toNot(beIdenticalTo([1]))\n    }\n\n    func testBeIdenticalToPositiveMessage() {\n        let num1 = NSNumber(integer:1)\n        let num2 = NSNumber(integer:2)\n        let message = NSString(format: \"expected to be identical to <%p>, got <%p>\", num2, num1)\n        failsWithErrorMessage(message.description) {\n            expect(num1).to(beIdenticalTo(num2))\n        }\n    }\n\n    func testBeIdenticalToNegativeMessage() {\n        let value1 = NSArray(array: [])\n        let value2 = NSArray(array: [])\n        let message = NSString(format: \"expected to not be identical to <%p>, got <%p>\", value2, value1)\n        failsWithErrorMessage(message.description) {\n            expect(value1).toNot(beIdenticalTo(value2))\n        }\n    }\n    \n    func testOperators() {\n        expect(NSNumber(integer:1)) === NSNumber(integer:1)\n        expect(NSNumber(integer:1)) !== NSNumber(integer:2)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeLessThanOrEqualToTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeLessThanOrEqualToTest: XCTestCase {\n    func testLessThanOrEqualTo() {\n        expect(10).to(beLessThanOrEqualTo(10))\n        expect(2).to(beLessThanOrEqualTo(10))\n        expect(2).toNot(beLessThanOrEqualTo(1))\n\n        expect(NSNumber(int:2)).to(beLessThanOrEqualTo(10))\n        expect(NSNumber(int:2)).toNot(beLessThanOrEqualTo(1))\n        expect(2).to(beLessThanOrEqualTo(NSNumber(int:10)))\n        expect(2).toNot(beLessThanOrEqualTo(NSNumber(int:1)))\n\n        failsWithErrorMessage(\"expected to be less than or equal to <0>, got <2>\") {\n            expect(2).to(beLessThanOrEqualTo(0))\n            return\n        }\n        failsWithErrorMessage(\"expected to not be less than or equal to <0>, got <0>\") {\n            expect(0).toNot(beLessThanOrEqualTo(0))\n            return\n        }\n        failsWithErrorMessageForNil(\"expected to be less than or equal to <2>, got <nil>\") {\n            expect(nil as Int?).to(beLessThanOrEqualTo(2))\n            return\n        }\n        failsWithErrorMessageForNil(\"expected to not be less than or equal to <-2>, got <nil>\") {\n            expect(nil as Int?).toNot(beLessThanOrEqualTo(-2))\n            return\n        }\n    }\n\n    func testLessThanOrEqualToOperator() {\n        expect(0) <= 1\n        expect(1) <= 1\n\n        failsWithErrorMessage(\"expected to be less than or equal to <1>, got <2>\") {\n            expect(2) <= 1\n            return\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeLessThanTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeLessThanTest: XCTestCase {\n\n    func testLessThan() {\n        expect(2).to(beLessThan(10))\n        expect(2).toNot(beLessThan(1))\n        expect(NSNumber(integer:2)).to(beLessThan(10))\n        expect(NSNumber(integer:2)).toNot(beLessThan(1))\n\n        expect(2).to(beLessThan(NSNumber(integer:10)))\n        expect(2).toNot(beLessThan(NSNumber(integer:1)))\n\n        failsWithErrorMessage(\"expected to be less than <0>, got <2>\") {\n            expect(2).to(beLessThan(0))\n        }\n        failsWithErrorMessage(\"expected to not be less than <1>, got <0>\") {\n            expect(0).toNot(beLessThan(1))\n        }\n\n        failsWithErrorMessageForNil(\"expected to be less than <2>, got <nil>\") {\n            expect(nil as Int?).to(beLessThan(2))\n        }\n        failsWithErrorMessageForNil(\"expected to not be less than <-1>, got <nil>\") {\n            expect(nil as Int?).toNot(beLessThan(-1))\n        }\n    }\n\n    func testLessThanOperator() {\n        expect(0) < 1\n        expect(NSNumber(int:0)) < 1\n\n        failsWithErrorMessage(\"expected to be less than <1.0000>, got <2.0000>\") {\n            expect(2) < 1\n            return\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeLogicalTest.swift",
    "content": "import XCTest\nimport Nimble\n\nenum ConvertsToBool : BooleanType, CustomStringConvertible {\n    case TrueLike, FalseLike\n\n    var boolValue : Bool {\n        switch self {\n        case .TrueLike: return true\n        case .FalseLike: return false\n        }\n    }\n\n    var description : String {\n        switch self {\n        case .TrueLike: return \"TrueLike\"\n        case .FalseLike: return \"FalseLike\"\n        }\n    }\n}\n\nclass BeTruthyTest : XCTestCase {\n    func testShouldMatchNonNilTypes() {\n        expect(true as Bool?).to(beTruthy())\n        expect(1 as Int?).to(beTruthy())\n    }\n\n    func testShouldMatchTrue() {\n        expect(true).to(beTruthy())\n\n        failsWithErrorMessage(\"expected to not be truthy, got <true>\") {\n            expect(true).toNot(beTruthy())\n        }\n    }\n\n    func testShouldNotMatchNilTypes() {\n        expect(false as Bool?).toNot(beTruthy())\n        expect(nil as Bool?).toNot(beTruthy())\n        expect(nil as Int?).toNot(beTruthy())\n    }\n\n    func testShouldNotMatchFalse() {\n        expect(false).toNot(beTruthy())\n\n        failsWithErrorMessage(\"expected to be truthy, got <false>\") {\n            expect(false).to(beTruthy())\n        }\n    }\n\n    func testShouldNotMatchNilBools() {\n        expect(nil as Bool?).toNot(beTruthy())\n\n        failsWithErrorMessage(\"expected to be truthy, got <nil>\") {\n            expect(nil as Bool?).to(beTruthy())\n        }\n    }\n\n    func testShouldMatchBoolConvertibleTypesThatConvertToTrue() {\n        expect(ConvertsToBool.TrueLike).to(beTruthy())\n\n        failsWithErrorMessage(\"expected to not be truthy, got <TrueLike>\") {\n            expect(ConvertsToBool.TrueLike).toNot(beTruthy())\n        }\n    }\n\n    func testShouldNotMatchBoolConvertibleTypesThatConvertToFalse() {\n        expect(ConvertsToBool.FalseLike).toNot(beTruthy())\n\n        failsWithErrorMessage(\"expected to be truthy, got <FalseLike>\") {\n            expect(ConvertsToBool.FalseLike).to(beTruthy())\n        }\n    }\n}\n\nclass BeTrueTest : XCTestCase {\n    func testShouldMatchTrue() {\n        expect(true).to(beTrue())\n\n        failsWithErrorMessage(\"expected to not be true, got <true>\") {\n            expect(true).toNot(beTrue())\n        }\n    }\n\n    func testShouldNotMatchFalse() {\n        expect(false).toNot(beTrue())\n\n        failsWithErrorMessage(\"expected to be true, got <false>\") {\n            expect(false).to(beTrue())\n        }\n    }\n\n    func testShouldNotMatchNilBools() {\n        failsWithErrorMessageForNil(\"expected to not be true, got <nil>\") {\n            expect(nil as Bool?).toNot(beTrue())\n        }\n\n        failsWithErrorMessageForNil(\"expected to be true, got <nil>\") {\n            expect(nil as Bool?).to(beTrue())\n        }\n    }\n}\n\nclass BeFalsyTest : XCTestCase {\n    func testShouldMatchNilTypes() {\n        expect(false as Bool?).to(beFalsy())\n        expect(nil as Bool?).to(beFalsy())\n        expect(nil as Int?).to(beFalsy())\n    }\n\n    func testShouldNotMatchTrue() {\n        expect(true).toNot(beFalsy())\n\n        failsWithErrorMessage(\"expected to be falsy, got <true>\") {\n            expect(true).to(beFalsy())\n        }\n    }\n\n    func testShouldNotMatchNonNilTypes() {\n        expect(true as Bool?).toNot(beFalsy())\n        expect(1 as Int?).toNot(beFalsy())\n    }\n\n    func testShouldMatchFalse() {\n        expect(false).to(beFalsy())\n\n        failsWithErrorMessage(\"expected to not be falsy, got <false>\") {\n            expect(false).toNot(beFalsy())\n        }\n    }\n\n    func testShouldMatchNilBools() {\n        expect(nil as Bool?).to(beFalsy())\n\n        failsWithErrorMessage(\"expected to not be falsy, got <nil>\") {\n            expect(nil as Bool?).toNot(beFalsy())\n        }\n    }\n}\n\nclass BeFalseTest : XCTestCase {\n    func testShouldNotMatchTrue() {\n        expect(true).toNot(beFalse())\n\n        failsWithErrorMessage(\"expected to be false, got <true>\") {\n            expect(true).to(beFalse())\n        }\n    }\n\n    func testShouldMatchFalse() {\n        expect(false).to(beFalse())\n\n        failsWithErrorMessage(\"expected to not be false, got <false>\") {\n            expect(false).toNot(beFalse())\n        }\n    }\n\n    func testShouldNotMatchNilBools() {\n        failsWithErrorMessageForNil(\"expected to be false, got <nil>\") {\n            expect(nil as Bool?).to(beFalse())\n        }\n\n        failsWithErrorMessageForNil(\"expected to not be false, got <nil>\") {\n            expect(nil as Bool?).toNot(beFalse())\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeNilTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeNilTest: XCTestCase {\n    func producesNil() -> Array<Int>? {\n        return nil\n    }\n\n    func testBeNil() {\n        expect(nil as Int?).to(beNil())\n        expect(1 as Int?).toNot(beNil())\n        expect(self.producesNil()).to(beNil())\n\n        failsWithErrorMessage(\"expected to not be nil, got <nil>\") {\n            expect(nil as Int?).toNot(beNil())\n        }\n\n        failsWithErrorMessage(\"expected to be nil, got <1>\") {\n            expect(1 as Int?).to(beNil())\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/BeginWithTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass BeginWithTest: XCTestCase {\n\n    func testPositiveMatches() {\n        expect([1, 2, 3]).to(beginWith(1))\n        expect([1, 2, 3]).toNot(beginWith(2))\n\n        expect(\"foobar\").to(beginWith(\"foo\"))\n        expect(\"foobar\").toNot(beginWith(\"oo\"))\n\n        expect(NSString(string: \"foobar\").description).to(beginWith(\"foo\"))\n        expect(NSString(string: \"foobar\").description).toNot(beginWith(\"oo\"))\n\n        expect(NSArray(array: [\"a\", \"b\"])).to(beginWith(\"a\"))\n        expect(NSArray(array: [\"a\", \"b\"])).toNot(beginWith(\"b\"))\n    }\n\n    func testNegativeMatches() {\n        failsWithErrorMessageForNil(\"expected to begin with <b>, got <nil>\") {\n            expect(nil as NSArray?).to(beginWith(\"b\"))\n        }\n        failsWithErrorMessageForNil(\"expected to not begin with <b>, got <nil>\") {\n            expect(nil as NSArray?).toNot(beginWith(\"b\"))\n        }\n\n        failsWithErrorMessage(\"expected to begin with <2>, got <[1, 2, 3]>\") {\n            expect([1, 2, 3]).to(beginWith(2))\n        }\n        failsWithErrorMessage(\"expected to not begin with <1>, got <[1, 2, 3]>\") {\n            expect([1, 2, 3]).toNot(beginWith(1))\n        }\n        failsWithErrorMessage(\"expected to begin with <atm>, got <batman>\") {\n            expect(\"batman\").to(beginWith(\"atm\"))\n        }\n        failsWithErrorMessage(\"expected to not begin with <bat>, got <batman>\") {\n            expect(\"batman\").toNot(beginWith(\"bat\"))\n        }\n    }\n\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/ContainTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass ContainTest: XCTestCase {\n    func testContain() {\n        expect([1, 2, 3]).to(contain(1))\n        expect([1, 2, 3] as [CInt]).to(contain(1 as CInt))\n        expect([1, 2, 3] as Array<CInt>).to(contain(1 as CInt))\n        expect([\"foo\", \"bar\", \"baz\"]).to(contain(\"baz\"))\n        expect([1, 2, 3]).toNot(contain(4))\n        expect([\"foo\", \"bar\", \"baz\"]).toNot(contain(\"ba\"))\n        expect(NSArray(array: [\"a\"])).to(contain(\"a\"))\n        expect(NSArray(array: [\"a\"])).toNot(contain(\"b\"))\n        expect(NSArray(object: 1) as NSArray?).to(contain(1))\n\n        failsWithErrorMessage(\"expected to contain <bar>, got <[\\\"a\\\", \\\"b\\\", \\\"c\\\"]>\") {\n            expect([\"a\", \"b\", \"c\"]).to(contain(\"bar\"))\n        }\n        failsWithErrorMessage(\"expected to not contain <b>, got <[\\\"a\\\", \\\"b\\\", \\\"c\\\"]>\") {\n            expect([\"a\", \"b\", \"c\"]).toNot(contain(\"b\"))\n        }\n\n        failsWithErrorMessageForNil(\"expected to contain <bar>, got <nil>\") {\n            expect(nil as [String]?).to(contain(\"bar\"))\n        }\n        failsWithErrorMessageForNil(\"expected to not contain <b>, got <nil>\") {\n            expect(nil as [String]?).toNot(contain(\"b\"))\n        }\n    }\n\n    func testContainSubstring() {\n        expect(\"foo\").to(contain(\"o\"))\n        expect(\"foo\").to(contain(\"oo\"))\n        expect(\"foo\").toNot(contain(\"z\"))\n        expect(\"foo\").toNot(contain(\"zz\"))\n\n        failsWithErrorMessage(\"expected to contain <bar>, got <foo>\") {\n            expect(\"foo\").to(contain(\"bar\"))\n        }\n        failsWithErrorMessage(\"expected to not contain <oo>, got <foo>\") {\n            expect(\"foo\").toNot(contain(\"oo\"))\n        }\n    }\n\n    func testContainObjCSubstring() {\n        let str = NSString(string: \"foo\")\n        expect(str).to(contain(NSString(string: \"o\")))\n        expect(str).to(contain(NSString(string: \"oo\")))\n        expect(str).toNot(contain(NSString(string: \"z\")))\n        expect(str).toNot(contain(NSString(string: \"zz\")))\n    }\n\n    func testVariadicArguments() {\n        expect([1, 2, 3]).to(contain(1, 2))\n        expect([1, 2, 3]).toNot(contain(1, 4))\n\n        failsWithErrorMessage(\"expected to contain <a, bar>, got <[\\\"a\\\", \\\"b\\\", \\\"c\\\"]>\") {\n            expect([\"a\", \"b\", \"c\"]).to(contain(\"a\", \"bar\"))\n        }\n\n        failsWithErrorMessage(\"expected to not contain <bar, b>, got <[\\\"a\\\", \\\"b\\\", \\\"c\\\"]>\") {\n            expect([\"a\", \"b\", \"c\"]).toNot(contain(\"bar\", \"b\"))\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/EndWithTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass EndWithTest: XCTestCase {\n\n    func testEndWithPositives() {\n        expect([1, 2, 3]).to(endWith(3))\n        expect([1, 2, 3]).toNot(endWith(2))\n\n        expect(\"foobar\").to(endWith(\"bar\"))\n        expect(\"foobar\").toNot(endWith(\"oo\"))\n\n        expect(NSString(string: \"foobar\").description).to(endWith(\"bar\"))\n        expect(NSString(string: \"foobar\").description).toNot(endWith(\"oo\"))\n\n        expect(NSArray(array: [\"a\", \"b\"])).to(endWith(\"b\"))\n        expect(NSArray(array: [\"a\", \"b\"])).toNot(endWith(\"a\"))\n    }\n\n    func testEndWithNegatives() {\n        failsWithErrorMessageForNil(\"expected to end with <2>, got <nil>\") {\n            expect(nil as [Int]?).to(endWith(2))\n        }\n        failsWithErrorMessageForNil(\"expected to not end with <2>, got <nil>\") {\n            expect(nil as [Int]?).toNot(endWith(2))\n        }\n\n        failsWithErrorMessage(\"expected to end with <2>, got <[1, 2, 3]>\") {\n            expect([1, 2, 3]).to(endWith(2))\n        }\n        failsWithErrorMessage(\"expected to not end with <3>, got <[1, 2, 3]>\") {\n            expect([1, 2, 3]).toNot(endWith(3))\n        }\n        failsWithErrorMessage(\"expected to end with <atm>, got <batman>\") {\n            expect(\"batman\").to(endWith(\"atm\"))\n        }\n        failsWithErrorMessage(\"expected to not end with <man>, got <batman>\") {\n            expect(\"batman\").toNot(endWith(\"man\"))\n        }\n    }\n\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/EqualTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass EqualTest: XCTestCase {\n    func testEquality() {\n        expect(1 as CInt).to(equal(1 as CInt))\n        expect(1 as CInt).to(equal(1))\n        expect(1).to(equal(1))\n        expect(\"hello\").to(equal(\"hello\"))\n        expect(\"hello\").toNot(equal(\"world\"))\n\n        expect {\n            1\n        }.to(equal(1))\n\n        failsWithErrorMessage(\"expected to equal <world>, got <hello>\") {\n            expect(\"hello\").to(equal(\"world\"))\n        }\n        failsWithErrorMessage(\"expected to not equal <hello>, got <hello>\") {\n            expect(\"hello\").toNot(equal(\"hello\"))\n        }\n    }\n\n    func testArrayEquality() {\n        expect([1, 2, 3]).to(equal([1, 2, 3]))\n        expect([1, 2, 3]).toNot(equal([1, 2]))\n        expect([1, 2, 3]).toNot(equal([1, 2, 4]))\n\n        let array1: Array<Int> = [1, 2, 3]\n        let array2: Array<Int> = [1, 2, 3]\n        expect(array1).to(equal(array2))\n        expect(array1).to(equal([1, 2, 3]))\n        expect(array1).toNot(equal([1, 2] as Array<Int>))\n\n        expect(NSArray(array: [1, 2, 3])).to(equal(NSArray(array: [1, 2, 3])))\n\n        failsWithErrorMessage(\"expected to equal <[1, 2]>, got <[1, 2, 3]>\") {\n            expect([1, 2, 3]).to(equal([1, 2]))\n        }\n    }\n\n    func testSetEquality() {\n        expect(Set([1, 2])).to(equal(Set([1, 2])))\n        expect(Set<Int>()).to(equal(Set<Int>()))\n        expect(Set<Int>()) == Set<Int>()\n        expect(Set([1, 2])) != Set<Int>()\n\n        failsWithErrorMessageForNil(\"expected to equal <[1, 2]>, got <nil>\") {\n            expect(nil as Set<Int>?).to(equal(Set([1, 2])))\n        }\n\n        failsWithErrorMessage(\"expected to equal <[1, 2, 3]>, got <[2, 3]>, missing <[1]>\") {\n            expect(Set([2, 3])).to(equal(Set([1, 2, 3])))\n        }\n\n        failsWithErrorMessage(\"expected to equal <[1, 2, 3]>, got <[1, 2, 3, 4]>, extra <[4]>\") {\n            expect(Set([1, 2, 3, 4])).to(equal(Set([1, 2, 3])))\n        }\n\n        failsWithErrorMessage(\"expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>\") {\n            expect(Set([2, 3, 4])).to(equal(Set([1, 2, 3])))\n        }\n\n        failsWithErrorMessage(\"expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>\") {\n            expect(Set([2, 3, 4])) == Set([1, 2, 3])\n        }\n\n        failsWithErrorMessage(\"expected to not equal <[1, 2, 3]>, got <[1, 2, 3]>\") {\n            expect(Set([1, 2, 3])) != Set([1, 2, 3])\n        }\n    }\n\n    func testDoesNotMatchNils() {\n        failsWithErrorMessageForNil(\"expected to equal <nil>, got <nil>\") {\n            expect(nil as String?).to(equal(nil as String?))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <nil>, got <foo>\") {\n            expect(\"foo\").toNot(equal(nil as String?))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <bar>, got <nil>\") {\n            expect(nil as String?).toNot(equal(\"bar\"))\n        }\n\n        failsWithErrorMessageForNil(\"expected to equal <nil>, got <nil>\") {\n            expect(nil as [Int]?).to(equal(nil as [Int]?))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <[1]>, got <nil>\") {\n            expect(nil as [Int]?).toNot(equal([1]))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <nil>, got <[1]>\") {\n            expect([1]).toNot(equal(nil as [Int]?))\n        }\n\n        failsWithErrorMessageForNil(\"expected to equal <nil>, got <nil>\") {\n            expect(nil as [Int: Int]?).to(equal(nil as [Int: Int]?))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <[1: 1]>, got <nil>\") {\n            expect(nil as [Int: Int]?).toNot(equal([1: 1]))\n        }\n        failsWithErrorMessageForNil(\"expected to not equal <nil>, got <[1: 1]>\") {\n            expect([1: 1]).toNot(equal(nil as [Int: Int]?))\n        }\n    }\n\n    func testDictionaryEquality() {\n        expect([\"foo\": \"bar\"]).to(equal([\"foo\": \"bar\"]))\n        expect([\"foo\": \"bar\"]).toNot(equal([\"foo\": \"baz\"]))\n\n        let actual = [\"foo\": \"bar\"]\n        let expected = [\"foo\": \"bar\"]\n        let unexpected = [\"foo\": \"baz\"]\n        expect(actual).to(equal(expected))\n        expect(actual).toNot(equal(unexpected))\n\n        expect(NSDictionary(object: \"bar\", forKey: \"foo\")).to(equal([\"foo\": \"bar\"]))\n        expect(NSDictionary(object: \"bar\", forKey: \"foo\")).to(equal(expected))\n    }\n\n    func testNSObjectEquality() {\n        expect(NSNumber(integer:1)).to(equal(NSNumber(integer:1)))\n        expect(NSNumber(integer:1)) == NSNumber(integer:1)\n        expect(NSNumber(integer:1)) != NSNumber(integer:2)\n        expect { NSNumber(integer:1) }.to(equal(1))\n    }\n\n    func testOperatorEquality() {\n        expect(\"foo\") == \"foo\"\n        expect(\"foo\") != \"bar\"\n\n        failsWithErrorMessage(\"expected to equal <world>, got <hello>\") {\n            expect(\"hello\") == \"world\"\n            return\n        }\n        failsWithErrorMessage(\"expected to not equal <hello>, got <hello>\") {\n            expect(\"hello\") != \"hello\"\n            return\n        }\n    }\n\n    func testOperatorEqualityWithArrays() {\n        let array1: Array<Int> = [1, 2, 3]\n        let array2: Array<Int> = [1, 2, 3]\n        let array3: Array<Int> = [1, 2]\n        expect(array1) == array2\n        expect(array1) != array3\n    }\n\n    func testOperatorEqualityWithDictionaries() {\n        let dict1 = [\"foo\": \"bar\"]\n        let dict2 = [\"foo\": \"bar\"]\n        let dict3 = [\"foo\": \"baz\"]\n        expect(dict1) == dict2\n        expect(dict1) != dict3\n    }\n\n    func testOptionalEquality() {\n        expect(1 as CInt?).to(equal(1))\n        expect(1 as CInt?).to(equal(1 as CInt?))\n\n        expect(1).toNot(equal(nil))\n    }\n\n    func testDictionariesWithDifferentSequences() {\n        // see: https://github.com/Quick/Nimble/issues/61\n        // these dictionaries generate different orderings of sequences.\n        let result = [\"how\":1, \"think\":1, \"didnt\":2, \"because\":1,\n            \"interesting\":1, \"always\":1, \"right\":1, \"such\":1,\n            \"to\":3, \"say\":1, \"cool\":1, \"you\":1,\n            \"weather\":3, \"be\":1, \"went\":1, \"was\":2,\n            \"sometimes\":1, \"and\":3, \"mind\":1, \"rain\":1,\n            \"whole\":1, \"everything\":1, \"weather.\":1, \"down\":1,\n            \"kind\":1, \"mood.\":1, \"it\":2, \"everyday\":1, \"might\":1,\n            \"more\":1, \"have\":2, \"person\":1, \"could\":1, \"tenth\":2,\n            \"night\":1, \"write\":1, \"Youd\":1, \"affects\":1, \"of\":3,\n            \"Who\":1, \"us\":1, \"an\":1, \"I\":4, \"my\":1, \"much\":2,\n            \"wrong.\":1, \"peacefully.\":1, \"amazing\":3, \"would\":4,\n            \"just\":1, \"grade.\":1, \"Its\":2, \"The\":2, \"had\":1, \"that\":1,\n            \"the\":5, \"best\":1, \"but\":1, \"essay\":1, \"for\":1, \"summer\":2,\n            \"your\":1, \"grade\":1, \"vary\":1, \"pretty\":1, \"at\":1, \"rain.\":1,\n            \"about\":1, \"allow\":1, \"thought\":1, \"in\":1, \"sleep\":1, \"a\":1,\n            \"hot\":1, \"really\":1, \"beach\":1, \"life.\":1, \"we\":1, \"although\":1]\n\n        let storyCount = [\"The\":2, \"summer\":2, \"of\":3, \"tenth\":2, \"grade\":1,\n            \"was\":2, \"the\":5, \"best\":1, \"my\":1, \"life.\":1, \"I\":4,\n            \"went\":1, \"to\":3, \"beach\":1, \"everyday\":1, \"and\":3,\n            \"we\":1, \"had\":1, \"amazing\":3, \"weather.\":1, \"weather\":3,\n            \"didnt\":2, \"really\":1, \"vary\":1, \"much\":2, \"always\":1,\n            \"pretty\":1, \"hot\":1, \"although\":1, \"sometimes\":1, \"at\":1,\n            \"night\":1, \"it\":2, \"would\":4, \"rain.\":1, \"mind\":1, \"rain\":1,\n            \"because\":1, \"cool\":1, \"everything\":1, \"down\":1, \"allow\":1,\n            \"us\":1, \"sleep\":1, \"peacefully.\":1, \"Its\":2, \"how\":1,\n            \"affects\":1, \"your\":1, \"mood.\":1, \"Who\":1, \"have\":2,\n            \"thought\":1, \"that\":1, \"could\":1, \"write\":1, \"a\":1,\n            \"whole\":1, \"essay\":1, \"just\":1, \"about\":1, \"in\":1,\n            \"grade.\":1, \"kind\":1, \"right\":1, \"Youd\":1, \"think\":1,\n            \"for\":1, \"such\":1, \"an\":1, \"interesting\":1, \"person\":1,\n            \"might\":1, \"more\":1, \"say\":1, \"but\":1, \"you\":1, \"be\":1, \"wrong.\":1]\n\n        expect(result).to(equal(storyCount))\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/HaveCountTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass HaveCountTest: XCTestCase {\n    func testHaveCountForArray() {\n        expect([1, 2, 3]).to(haveCount(3))\n        expect([1, 2, 3]).notTo(haveCount(1))\n\n        failsWithErrorMessage(\"expected to have [1, 2, 3] with count 1, got 3\") {\n            expect([1, 2, 3]).to(haveCount(1))\n        }\n\n        failsWithErrorMessage(\"expected to not have [1, 2, 3] with count 3, got 3\") {\n            expect([1, 2, 3]).notTo(haveCount(3))\n        }\n    }\n\n    func testHaveCountForDictionary() {\n        expect([\"1\":1, \"2\":2, \"3\":3]).to(haveCount(3))\n        expect([\"1\":1, \"2\":2, \"3\":3]).notTo(haveCount(1))\n\n        failsWithErrorMessage(\"expected to have [\\\"2\\\": 2, \\\"1\\\": 1, \\\"3\\\": 3] with count 1, got 3\") {\n            expect([\"1\":1, \"2\":2, \"3\":3]).to(haveCount(1))\n        }\n\n        failsWithErrorMessage(\"expected to not have [\\\"2\\\": 2, \\\"1\\\": 1, \\\"3\\\": 3] with count 3, got 3\") {\n            expect([\"1\":1, \"2\":2, \"3\":3]).notTo(haveCount(3))\n        }\n    }\n\n    func testHaveCountForSet() {\n        expect(Set([1, 2, 3])).to(haveCount(3))\n        expect(Set([1, 2, 3])).notTo(haveCount(1))\n\n        failsWithErrorMessage(\"expected to have [2, 3, 1] with count 1, got 3\") {\n            expect(Set([1, 2, 3])).to(haveCount(1))\n        }\n\n        failsWithErrorMessage(\"expected to not have [2, 3, 1] with count 3, got 3\") {\n            expect(Set([1, 2, 3])).notTo(haveCount(3))\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/MatchTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass MatchTest:XCTestCase {\n    func testMatchPositive() {\n        expect(\"11:14\").to(match(\"\\\\d{2}:\\\\d{2}\"))\n    }\n    \n    func testMatchNegative() {\n        expect(\"hello\").toNot(match(\"\\\\d{2}:\\\\d{2}\"))\n    }\n    \n    func testMatchPositiveMessage() {\n        let message = \"expected to match <\\\\d{2}:\\\\d{2}>, got <hello>\"\n        failsWithErrorMessage(message) {\n            expect(\"hello\").to(match(\"\\\\d{2}:\\\\d{2}\"))\n        }\n    }\n    \n    func testMatchNegativeMessage() {\n        let message = \"expected to not match <\\\\d{2}:\\\\d{2}>, got <11:14>\"\n        failsWithErrorMessage(message) {\n            expect(\"11:14\").toNot(match(\"\\\\d{2}:\\\\d{2}\"))\n        }\n    }\n\n    func testMatchNils() {\n        failsWithErrorMessageForNil(\"expected to match <\\\\d{2}:\\\\d{2}>, got <nil>\") {\n            expect(nil as String?).to(match(\"\\\\d{2}:\\\\d{2}\"))\n        }\n\n        failsWithErrorMessageForNil(\"expected to not match <\\\\d{2}:\\\\d{2}>, got <nil>\") {\n            expect(nil as String?).toNot(match(\"\\\\d{2}:\\\\d{2}\"))\n        }\n    }\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/RaisesExceptionTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass RaisesExceptionTest: XCTestCase {\n    var anException = NSException(name: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"])\n\n    func testPositiveMatches() {\n        expect { self.anException.raise() }.to(raiseException())\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\"))\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\"))\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"]))\n    }\n\n    func testPositiveMatchesWithClosures() {\n        expect { self.anException.raise() }.to(raiseException { (exception: NSException) in\n            expect(exception.name).to(equal(\"laugh\"))\n        })\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\") { (exception: NSException) in\n            expect(exception.name).to(beginWith(\"lau\"))\n        })\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\") { (exception: NSException) in\n            expect(exception.name).to(beginWith(\"lau\"))\n        })\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"]) { (exception: NSException) in\n            expect(exception.name).to(beginWith(\"lau\"))\n        })\n\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\") { (exception: NSException) in\n            expect(exception.name).toNot(beginWith(\"as\"))\n        })\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\") { (exception: NSException) in\n            expect(exception.name).toNot(beginWith(\"df\"))\n        })\n        expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"]) { (exception: NSException) in\n            expect(exception.name).toNot(beginWith(\"as\"))\n        })\n    }\n\n    func testNegativeMatches() {\n        failsWithErrorMessage(\"expected to raise exception with name <foo>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.to(raiseException(named: \"foo\"))\n        }\n\n        failsWithErrorMessage(\"expected to raise exception with name <laugh> with reason <bar>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"bar\"))\n        }\n\n        failsWithErrorMessage(\n            \"expected to raise exception with name <laugh> with reason <Lulz> with userInfo <{k = v;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"k\": \"v\"]))\n        }\n\n        failsWithErrorMessage(\"expected to raise any exception, got no exception\") {\n            expect { self.anException }.to(raiseException())\n        }\n        failsWithErrorMessage(\"expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.toNot(raiseException())\n        }\n        failsWithErrorMessage(\"expected to raise exception with name <laugh> with reason <Lulz>, got no exception\") {\n            expect { self.anException }.to(raiseException(named: \"laugh\", reason: \"Lulz\"))\n        }\n\n        failsWithErrorMessage(\"expected to raise exception with name <bar> with reason <Lulz>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.to(raiseException(named: \"bar\", reason: \"Lulz\"))\n        }\n        failsWithErrorMessage(\"expected to not raise exception with name <laugh>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.toNot(raiseException(named: \"laugh\"))\n        }\n        failsWithErrorMessage(\"expected to not raise exception with name <laugh> with reason <Lulz>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.toNot(raiseException(named: \"laugh\", reason: \"Lulz\"))\n        }\n\n        failsWithErrorMessage(\"expected to not raise exception with name <laugh> with reason <Lulz> with userInfo <{key = value;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.toNot(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"]))\n        }\n    }\n\n    func testNegativeMatchesDoNotCallClosureWithoutException() {\n        failsWithErrorMessage(\"expected to raise exception that satisfies block, got no exception\") {\n            expect { self.anException }.to(raiseException { (exception: NSException) in\n                expect(exception.name).to(equal(\"foo\"))\n            })\n        }\n        \n        failsWithErrorMessage(\"expected to raise exception with name <foo> that satisfies block, got no exception\") {\n            expect { self.anException }.to(raiseException(named: \"foo\") { (exception: NSException) in\n                expect(exception.name).to(equal(\"foo\"))\n            })\n        }\n\n        failsWithErrorMessage(\"expected to raise exception with name <foo> with reason <ha> that satisfies block, got no exception\") {\n            expect { self.anException }.to(raiseException(named: \"foo\", reason: \"ha\") { (exception: NSException) in\n                expect(exception.name).to(equal(\"foo\"))\n            })\n        }\n\n        failsWithErrorMessage(\"expected to raise exception with name <foo> with reason <Lulz> with userInfo <{}> that satisfies block, got no exception\") {\n            expect { self.anException }.to(raiseException(named: \"foo\", reason: \"Lulz\", userInfo: [:]) { (exception: NSException) in\n                expect(exception.name).to(equal(\"foo\"))\n                })\n        }\n\n        failsWithErrorMessage(\"expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.toNot(raiseException())\n        }\n    }\n\n    func testNegativeMatchesWithClosure() {\n        failsWithErrorMessage(\"expected to raise exception that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\") {\n            expect { self.anException.raise() }.to(raiseException { (exception: NSException) in\n                expect(exception.name).to(equal(\"foo\"))\n            })\n        }\n\n        let innerFailureMessage = \"expected to begin with <fo>, got <laugh>\"\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <laugh> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"laugh\") { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <lol> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"lol\") { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <laugh> with reason <Lulz> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\") { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <lol> with reason <wrong> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"lol\", reason: \"wrong\") { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <laugh> with reason <Lulz> with userInfo <{key = value;}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"laugh\", reason: \"Lulz\", userInfo: [\"key\": \"value\"]) { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to raise exception with name <lol> with reason <Lulz> with userInfo <{}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }\"]) {\n            expect { self.anException.raise() }.to(raiseException(named: \"lol\", reason: \"Lulz\", userInfo: [:]) { (exception: NSException) in\n                expect(exception.name).to(beginWith(\"fo\"))\n            })\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/Matchers/ThrowErrorTest.swift",
    "content": "import XCTest\nimport Nimble\n\nenum Error : ErrorType {\n    case Laugh\n    case Cry\n}\n\nenum EquatableError : ErrorType {\n    case Parameterized(x: Int)\n}\n\nextension EquatableError : Equatable {\n}\n\nfunc ==(lhs: EquatableError, rhs: EquatableError) -> Bool {\n    switch (lhs, rhs) {\n    case (.Parameterized(let l), .Parameterized(let r)):\n        return l == r\n    }\n}\n\nenum CustomDebugStringConvertibleError : ErrorType {\n    case A\n    case B\n}\n\nextension CustomDebugStringConvertibleError : CustomDebugStringConvertible {\n    var debugDescription : String {\n        return \"code=\\(_code)\"\n    }\n}\n\nclass ThrowErrorTest: XCTestCase {\n    func testPositiveMatches() {\n        expect { throw Error.Laugh }.to(throwError())\n        expect { throw Error.Laugh }.to(throwError(Error.Laugh))\n        expect { throw Error.Laugh }.to(throwError(errorType: Error.self))\n        expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 1)))\n    }\n\n    func testPositiveMatchesWithClosures() {\n        // Generic typed closure\n        expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { error in\n            guard case EquatableError.Parameterized(let x) = error else { fail(); return }\n            expect(x) >= 1\n        })\n        // Explicit typed closure\n        expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { (error: EquatableError) in\n            guard case .Parameterized(let x) = error else { fail(); return }\n            expect(x) >= 1\n        })\n        // Typed closure over errorType argument\n        expect { throw EquatableError.Parameterized(x: 42) }.to(throwError(errorType: EquatableError.self) { error in\n            guard case .Parameterized(let x) = error else { fail(); return }\n            expect(x) >= 1\n        })\n        // Typed closure over error argument\n        expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in\n            expect(error._domain).to(beginWith(\"Nim\"))\n        })\n        // Typed closure over error argument\n        expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in\n            expect(error._domain).toNot(beginWith(\"as\"))\n        })\n    }\n\n    func testNegativeMatches() {\n        // Same case, different arguments\n        failsWithErrorMessage(\"expected to throw error <Parameterized(2)>, got <Parameterized(1)>\") {\n            expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2)))\n        }\n        // Same case, different arguments\n        failsWithErrorMessage(\"expected to throw error <Parameterized(2)>, got <Parameterized(1)>\") {\n            expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2)))\n        }\n        // Different case\n        failsWithErrorMessage(\"expected to throw error <Cry>, got <Laugh>\") {\n            expect { throw Error.Laugh }.to(throwError(Error.Cry))\n        }\n        // Different case with closure\n        failsWithErrorMessage(\"expected to throw error <Cry> that satisfies block, got <Laugh>\") {\n            expect { throw Error.Laugh }.to(throwError(Error.Cry) { _ in return })\n        }\n        // Different case, implementing CustomDebugStringConvertible\n        failsWithErrorMessage(\"expected to throw error <code=1>, got <code=0>\") {\n            expect { throw CustomDebugStringConvertibleError.A }.to(throwError(CustomDebugStringConvertibleError.B))\n        }\n    }\n\n    func testPositiveNegatedMatches() {\n        // No error at all\n        expect { return }.toNot(throwError())\n        // Different case\n        expect { throw Error.Laugh }.toNot(throwError(Error.Cry))\n    }\n\n    func testNegativeNegatedMatches() {\n        // No error at all\n        failsWithErrorMessage(\"expected to not throw any error, got <Laugh>\") {\n            expect { throw Error.Laugh }.toNot(throwError())\n        }\n        // Different error\n        failsWithErrorMessage(\"expected to not throw error <Laugh>, got <Laugh>\") {\n            expect { throw Error.Laugh }.toNot(throwError(Error.Laugh))\n        }\n    }\n\n    func testNegativeMatchesDoNotCallClosureWithoutError() {\n        failsWithErrorMessage(\"expected to throw error that satisfies block, got no error\") {\n            expect { return }.to(throwError { error in\n                fail()\n            })\n        }\n        \n        failsWithErrorMessage(\"expected to throw error <Laugh> that satisfies block, got no error\") {\n            expect { return }.to(throwError(Error.Laugh) { error in\n                fail()\n            })\n        }\n    }\n\n    func testNegativeMatchesWithClosure() {\n        let innerFailureMessage = \"expected to equal <foo>, got <NimbleTests.Error>\"\n        let closure = { (error: Error) in\n            expect(error._domain).to(equal(\"foo\"))\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to throw error from type <Error> that satisfies block, got <Laugh>\"]) {\n            expect { throw Error.Laugh }.to(throwError(closure: closure))\n        }\n\n        failsWithErrorMessage([innerFailureMessage, \"expected to throw error <Laugh> that satisfies block, got <Laugh>\"]) {\n            expect { throw Error.Laugh }.to(throwError(Error.Laugh, closure: closure))\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/SynchronousTests.swift",
    "content": "import XCTest\nimport Nimble\n\nclass SynchronousTest: XCTestCase {\n    let errorToThrow = NSError(domain: NSInternalInconsistencyException, code: 42, userInfo: nil)\n    private func doThrowError() throws -> Int {\n        throw errorToThrow\n    }\n\n    func testFailAlwaysFails() {\n        failsWithErrorMessage(\"My error message\") {\n            fail(\"My error message\")\n        }\n        failsWithErrorMessage(\"fail() always fails\") {\n            fail()\n        }\n    }\n\n    func testUnexpectedErrorsThrownFails() {\n        failsWithErrorMessage(\"expected to equal <1>, got an unexpected error thrown: <\\(errorToThrow)>\") {\n            expect { try self.doThrowError() }.to(equal(1))\n        }\n        failsWithErrorMessage(\"expected to not equal <1>, got an unexpected error thrown: <\\(errorToThrow)>\") {\n            expect { try self.doThrowError() }.toNot(equal(1))\n        }\n    }\n\n    func testToMatchesIfMatcherReturnsTrue() {\n        expect(1).to(MatcherFunc { expr, failure in true })\n        expect{1}.to(MatcherFunc { expr, failure in true })\n    }\n\n    func testToProvidesActualValueExpression() {\n        var value: Int?\n        expect(1).to(MatcherFunc { expr, failure in value = try expr.evaluate(); return true })\n        expect(value).to(equal(1))\n    }\n\n    func testToProvidesAMemoizedActualValueExpression() {\n        var callCount = 0\n        expect{ callCount++ }.to(MatcherFunc { expr, failure in\n            try expr.evaluate()\n            try expr.evaluate()\n            return true\n        })\n        expect(callCount).to(equal(1))\n    }\n\n    func testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() {\n        var callCount = 0\n        expect{ callCount++ }.to(MatcherFunc { expr, failure in\n            expect(callCount).to(equal(0))\n            try expr.evaluate()\n            return true\n        })\n        expect(callCount).to(equal(1))\n    }\n\n    func testToMatchAgainstLazyProperties() {\n        expect(ObjectWithLazyProperty().value).to(equal(\"hello\"))\n        expect(ObjectWithLazyProperty().value).toNot(equal(\"world\"))\n        expect(ObjectWithLazyProperty().anotherValue).to(equal(\"world\"))\n        expect(ObjectWithLazyProperty().anotherValue).toNot(equal(\"hello\"))\n    }\n\n    // repeated tests from to() for toNot()\n    func testToNotMatchesIfMatcherReturnsTrue() {\n        expect(1).toNot(MatcherFunc { expr, failure in false })\n        expect{1}.toNot(MatcherFunc { expr, failure in false })\n    }\n\n    func testToNotProvidesActualValueExpression() {\n        var value: Int?\n        expect(1).toNot(MatcherFunc { expr, failure in value = try expr.evaluate(); return false })\n        expect(value).to(equal(1))\n    }\n\n    func testToNotProvidesAMemoizedActualValueExpression() {\n        var callCount = 0\n        expect{ callCount++ }.toNot(MatcherFunc { expr, failure in\n            try expr.evaluate()\n            try expr.evaluate()\n            return false\n        })\n        expect(callCount).to(equal(1))\n    }\n\n    func testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() {\n        var callCount = 0\n        expect{ callCount++ }.toNot(MatcherFunc { expr, failure in\n            expect(callCount).to(equal(0))\n            try expr.evaluate()\n            return false\n        })\n        expect(callCount).to(equal(1))\n    }\n\n    func testToNotNegativeMatches() {\n        failsWithErrorMessage(\"expected to not match, got <1>\") {\n            expect(1).toNot(MatcherFunc { expr, failure in true })\n        }\n    }\n\n\n    func testNotToMatchesLikeToNot() {\n        expect(1).notTo(MatcherFunc { expr, failure in false })\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/UserDescriptionTest.swift",
    "content": "import XCTest\nimport Nimble\n\nclass UserDescriptionTest: XCTestCase {\n    \n    func testToMatcher_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These aren't equal!\\n\" +\n            \"expected to match, got <1>\") {\n                expect(1).to(MatcherFunc { expr, failure in false }, description: \"These aren't equal!\")\n        }\n    }\n    \n    func testNotToMatcher_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These aren't equal!\\n\" +\n            \"expected to not match, got <1>\") {\n                expect(1).notTo(MatcherFunc { expr, failure in true }, description: \"These aren't equal!\")\n        }\n    }\n    \n    func testToNotMatcher_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These aren't equal!\\n\" +\n            \"expected to not match, got <1>\") {\n                expect(1).toNot(MatcherFunc { expr, failure in true }, description: \"These aren't equal!\")\n        }\n    }\n    \n    func testToEventuallyMatch_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These aren't eventually equal!\\n\" +\n            \"expected to eventually equal <1>, got <0>\") {\n                expect { 0 }.toEventually(equal(1), description: \"These aren't eventually equal!\")\n        }\n    }\n    \n    func testToEventuallyNotMatch_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These are eventually equal!\\n\" +\n            \"expected to eventually not equal <1>, got <1>\") {\n                expect { 1 }.toEventuallyNot(equal(1), description: \"These are eventually equal!\")\n        }\n    }\n    \n    func testToNotEventuallyMatch_CustomFailureMessage() {\n        failsWithErrorMessage(\n            \"These are eventually equal!\\n\" +\n            \"expected to eventually not equal <1>, got <1>\") {\n                expect { 1 }.toEventuallyNot(equal(1), description: \"These are eventually equal!\")\n        }\n    }\n\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/Nimble-OSXTests-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/NimbleSpecHelper.h",
    "content": "@import Nimble;\n#import \"NimbleTests-Swift.h\"\n\n// Use this when you want to verify the failure message for when an expectation fails\n#define expectFailureMessage(MSG, BLOCK) \\\n[NimbleHelper expectFailureMessage:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__];\n\n#define expectFailureMessages(MSGS, BLOCK) \\\n[NimbleHelper expectFailureMessages:(MSGS) block:(BLOCK) file:@(__FILE__) line:__LINE__];\n\n\n// Use this when you want to verify the failure message with the nil message postfixed\n// to it: \" (use beNil() to match nils)\"\n#define expectNilFailureMessage(MSG, BLOCK) \\\n[NimbleHelper expectFailureMessageForNil:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__];\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/NimbleTests-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCAllPassTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCAllPassTest : XCTestCase\n\n@end\n\n@implementation ObjCAllPassTest\n\n- (void)testPositiveMatches {\n    expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5)));\n    expect(@[@1, @2, @3,@4]).toNot(allPass(beGreaterThan(@5)));\n    \n    expect([NSSet setWithArray:@[@1, @2, @3,@4]]).to(allPass(beLessThan(@5)));\n    expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beGreaterThan(@5)));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to all be less than <3.0000>, but failed first at element\"\n                         \" <3.0000> in <[1.0000, 2.0000, 3.0000, 4.0000]>\", ^{\n                             expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@3)));\n                         });\n    expectFailureMessage(@\"expected to not all be less than <5.0000>\", ^{\n        expect(@[@1, @2, @3,@4]).toNot(allPass(beLessThan(@5)));\n    });\n    expectFailureMessage(@\"expected to not all be less than <5.0000>\", ^{\n        expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beLessThan(@5)));\n    });\n    expectFailureMessage(@\"allPass only works with NSFastEnumeration\"\n                         \" (NSArray, NSSet, ...) of NSObjects, got <3.0000>\", ^{\n                             expect(@3).to(allPass(beLessThan(@5)));\n                         });\n    expectFailureMessage(@\"allPass only works with NSFastEnumeration\"\n                         \" (NSArray, NSSet, ...) of NSObjects, got <3.0000>\", ^{\n                             expect(@3).toNot(allPass(beLessThan(@5)));\n                         });\n}\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCAsyncTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Nimble/Nimble.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCAsyncTest : XCTestCase\n\n@end\n\n@implementation ObjCAsyncTest\n\n- (void)testAsync {\n    __block id obj = @1;\n    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n        obj = nil;\n    });\n    expect(obj).toEventually(beNil());\n}\n\n\n- (void)testAsyncWithCustomTimeout {\n    __block id obj = nil;\n    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n        obj = @1;\n    });\n    expect(obj).withTimeout(5).toEventuallyNot(beNil());\n}\n\n- (void)testAsyncCallback {\n    waitUntil(^(void (^done)(void)){\n        done();\n    });\n\n    expectFailureMessage(@\"Waited more than 1.0 second\", ^{\n        waitUntil(^(void (^done)(void)){ /* ... */ });\n    });\n\n    expectFailureMessage(@\"Waited more than 0.01 seconds\", ^{\n        waitUntilTimeout(0.01, ^(void (^done)(void)){\n            [NSThread sleepForTimeInterval:0.1];\n            done();\n        });\n    });\n\n    expectFailureMessage(@\"expected to equal <goodbye>, got <hello>\", ^{\n        waitUntil(^(void (^done)(void)){\n            [NSThread sleepForTimeInterval:0.1];\n            expect(@\"hello\").to(equal(@\"goodbye\"));\n            done();\n        });\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeAnInstanceOfTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeAnInstanceOfTest : XCTestCase\n@end\n\n@implementation ObjCBeAnInstanceOfTest\n\n- (void)testPositiveMatches {\n    NSNull *obj = [NSNull null];\n    expect(obj).to(beAnInstanceOf([NSNull class]));\n    expect(@1).toNot(beAnInstanceOf([NSNull class]));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be an instance of NSNull, got <__NSCFNumber instance>\", ^{\n        expect(@1).to(beAnInstanceOf([NSNull class]));\n    });\n    expectFailureMessage(@\"expected to not be an instance of NSNull, got <NSNull instance>\", ^{\n        expect([NSNull null]).toNot(beAnInstanceOf([NSNull class]));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be an instance of NSNull, got <nil>\", ^{\n        expect(nil).to(beAnInstanceOf([NSNull class]));\n    });\n\n    expectNilFailureMessage(@\"expected to not be an instance of NSNull, got <nil>\", ^{\n        expect(nil).toNot(beAnInstanceOf([NSNull class]));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeCloseToTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeCloseToTest : XCTestCase\n\n@end\n\n@implementation ObjCBeCloseToTest\n\n- (void)testPositiveMatches {\n    expect(@1.2).to(beCloseTo(@1.2001));\n    expect(@1.2).to(beCloseTo(@2).within(10));\n    expect(@2).toNot(beCloseTo(@1));\n    expect(@1.00001).toNot(beCloseTo(@1).within(0.00000001));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be close to <0.0000> (within 0.0010), got <1.0000>\", ^{\n        expect(@1).to(beCloseTo(@0));\n    });\n    expectFailureMessage(@\"expected to not be close to <0.0000> (within 0.0010), got <0.0001>\", ^{\n        expect(@(0.0001)).toNot(beCloseTo(@0));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be close to <0.0000> (within 0.0010), got <nil>\", ^{\n        expect(nil).to(beCloseTo(@0));\n    });\n    expectNilFailureMessage(@\"expected to not be close to <0.0000> (within 0.0010), got <nil>\", ^{\n        expect(nil).toNot(beCloseTo(@0));\n    });\n}\n\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeEmptyTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeEmptyTest : XCTestCase\n@end\n\n@implementation ObjCBeEmptyTest\n\n- (void)testPositiveMatches {\n    expect(@[]).to(beEmpty());\n    expect(@\"\").to(beEmpty());\n    expect(@{}).to(beEmpty());\n    expect([NSSet set]).to(beEmpty());\n    expect([NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]).to(beEmpty());\n\n    expect(@[@1, @2]).toNot(beEmpty());\n    expect(@\"a\").toNot(beEmpty());\n    expect(@{@\"key\": @\"value\"}).toNot(beEmpty());\n    expect([NSSet setWithObject:@1]).toNot(beEmpty());\n\n    NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory];\n    [table addObject:@1];\n    expect(table).toNot(beEmpty());\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be empty, got <foo>\", ^{\n        expect(@\"foo\").to(beEmpty());\n    });\n    expectFailureMessage(@\"expected to be empty, got <(1)>\", ^{\n        expect(@[@1]).to(beEmpty());\n    });\n    expectFailureMessage(@\"expected to be empty, got <{key = value;}>\", ^{\n        expect(@{@\"key\": @\"value\"}).to(beEmpty());\n    });\n    expectFailureMessage(@\"expected to be empty, got <{(1)}>\", ^{\n        expect([NSSet setWithObject:@1]).to(beEmpty());\n    });\n    NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory];\n    [table addObject:@1];\n    NSString *tableString = [[table description] stringByReplacingOccurrencesOfString:@\"\\n\" withString:@\"\"];\n    expectFailureMessage(([NSString stringWithFormat:@\"expected to be empty, got <%@>\", tableString]), ^{\n        expect(table).to(beEmpty());\n    });\n\n    expectFailureMessage(@\"expected to not be empty, got <>\", ^{\n        expect(@\"\").toNot(beEmpty());\n    });\n    expectFailureMessage(@\"expected to not be empty, got <()>\", ^{\n        expect(@[]).toNot(beEmpty());\n    });\n    expectFailureMessage(@\"expected to not be empty, got <{}>\", ^{\n        expect(@{}).toNot(beEmpty());\n    });\n    expectFailureMessage(@\"expected to not be empty, got <{(1)}>\", ^{\n        expect([NSSet setWithObject:@1]).toNot(beEmpty());\n    });\n    expectFailureMessage(@\"expected to not be empty, got <NSHashTable {}>\", ^{\n        expect([NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]).toNot(beEmpty());\n    });\n}\n\n- (void)testItDoesNotMatchNil {\n    expectNilFailureMessage(@\"expected to be empty, got <nil>\", ^{\n        expect(nil).to(beEmpty());\n    });\n    expectNilFailureMessage(@\"expected to not be empty, got <nil>\", ^{\n        expect(nil).toNot(beEmpty());\n    });\n}\n\n- (void)testItReportsTypesItMatchesAgainst {\n    expectFailureMessage(@\"expected to be empty (only works for NSArrays, NSSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type\", ^{\n        expect(@1).to(beEmpty());\n    });\n    expectFailureMessage(@\"expected to not be empty (only works for NSArrays, NSSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type\", ^{\n        expect(@1).toNot(beEmpty());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeFalseTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeFalseTest : XCTestCase\n\n@end\n\n@implementation ObjCBeFalseTest\n\n- (void)testPositiveMatches {\n    expect(@NO).to(beFalse());\n    expect(@YES).toNot(beFalse());\n}\n\n- (void)testNegativeMatches {\n    expectNilFailureMessage(@\"expected to be false, got <nil>\", ^{\n        expect(nil).to(beFalse());\n    });\n    expectNilFailureMessage(@\"expected to not be false, got <nil>\", ^{\n        expect(nil).toNot(beFalse());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeFalsyTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeFalsyTest : XCTestCase\n\n@end\n\n@implementation ObjCBeFalsyTest\n\n- (void)testPositiveMatches {\n    expect(@NO).to(beFalsy());\n    expect(@YES).toNot(beFalsy());\n    expect(nil).to(beFalsy());\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to not be falsy, got <nil>\", ^{\n        expect(nil).toNot(beFalsy());\n    });\n    expectFailureMessage(@\"expected to be falsy, got <1.0000>\", ^{\n        expect(@1).to(beFalsy());\n    });\n    expectFailureMessage(@\"expected to be truthy, got <0.0000>\", ^{\n        expect(@NO).to(beTruthy());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeGreaterThanOrEqualToTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeGreaterThanOrEqualToTest : XCTestCase\n\n@end\n\n@implementation ObjCBeGreaterThanOrEqualToTest\n\n- (void)testPositiveMatches {\n    expect(@2).to(beGreaterThanOrEqualTo(@2));\n    expect(@2).toNot(beGreaterThanOrEqualTo(@3));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be greater than or equal to <0.0000>, got <-1.0000>\", ^{\n        expect(@(-1)).to(beGreaterThanOrEqualTo(@0));\n    });\n    expectFailureMessage(@\"expected to not be greater than or equal to <1.0000>, got <2.0000>\", ^{\n        expect(@2).toNot(beGreaterThanOrEqualTo(@(1)));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be greater than or equal to <-1.0000>, got <nil>\", ^{\n        expect(nil).to(beGreaterThanOrEqualTo(@(-1)));\n    });\n    expectNilFailureMessage(@\"expected to not be greater than or equal to <1.0000>, got <nil>\", ^{\n        expect(nil).toNot(beGreaterThanOrEqualTo(@(1)));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeGreaterThanTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeGreaterThanTest : XCTestCase\n\n@end\n\n@implementation ObjCBeGreaterThanTest\n\n- (void)testPositiveMatches {\n    expect(@2).to(beGreaterThan(@1));\n    expect(@2).toNot(beGreaterThan(@2));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be greater than <0.0000>, got <-1.0000>\", ^{\n        expect(@(-1)).to(beGreaterThan(@(0)));\n    });\n    expectFailureMessage(@\"expected to not be greater than <1.0000>, got <0.0000>\", ^{\n        expect(@0).toNot(beGreaterThan(@(1)));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be greater than <-1.0000>, got <nil>\", ^{\n        expect(nil).to(beGreaterThan(@(-1)));\n    });\n    expectNilFailureMessage(@\"expected to not be greater than <1.0000>, got <nil>\", ^{\n        expect(nil).toNot(beGreaterThan(@(1)));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeIdenticalToTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeIdenticalToTest : XCTestCase\n\n@end\n\n@implementation ObjCBeIdenticalToTest\n\n- (void)testPositiveMatches {\n    NSNull *obj = [NSNull null];\n    expect(obj).to(beIdenticalTo([NSNull null]));\n    expect(@2).toNot(beIdenticalTo(@3));\n}\n\n- (void)testNegativeMatches {\n    NSNull *obj = [NSNull null];\n    expectFailureMessage(([NSString stringWithFormat:@\"expected to be identical to <%p>, got <%p>\", obj, @2]), ^{\n        expect(@2).to(beIdenticalTo(obj));\n    });\n    expectFailureMessage(([NSString stringWithFormat:@\"expected to not be identical to <%p>, got <%p>\", obj, obj]), ^{\n        expect(obj).toNot(beIdenticalTo(obj));\n    });\n}\n\n- (void)testNilMatches {\n    NSNull *obj = [NSNull null];\n    expectNilFailureMessage(@\"expected to be identical to nil, got nil\", ^{\n        expect(nil).to(beIdenticalTo(nil));\n    });\n    expectNilFailureMessage(([NSString stringWithFormat:@\"expected to not be identical to <%p>, got nil\", obj]), ^{\n        expect(nil).toNot(beIdenticalTo(obj));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeKindOfTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeKindOfTest : XCTestCase\n\n@end\n\n@implementation ObjCBeKindOfTest\n\n- (void)testPositiveMatches {\n    NSMutableArray *array = [NSMutableArray array];\n    expect(array).to(beAKindOf([NSArray class]));\n    expect(@1).toNot(beAKindOf([NSNull class]));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be a kind of NSNull, got <__NSCFNumber instance>\", ^{\n        expect(@1).to(beAKindOf([NSNull class]));\n    });\n    expectFailureMessage(@\"expected to not be a kind of NSNull, got <NSNull instance>\", ^{\n        expect([NSNull null]).toNot(beAKindOf([NSNull class]));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be a kind of NSNull, got <nil>\", ^{\n        expect(nil).to(beAKindOf([NSNull class]));\n    });\n    expectNilFailureMessage(@\"expected to not be a kind of NSNull, got <nil>\", ^{\n        expect(nil).toNot(beAKindOf([NSNull class]));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeLessThanOrEqualToTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeLessThanOrEqualToTest : XCTestCase\n\n@end\n\n@implementation ObjCBeLessThanOrEqualToTest\n\n- (void)testPositiveMatches {\n    expect(@2).to(beLessThanOrEqualTo(@2));\n    expect(@2).toNot(beLessThanOrEqualTo(@1));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be less than or equal to <1.0000>, got <2.0000>\", ^{\n        expect(@2).to(beLessThanOrEqualTo(@1));\n    });\n    expectFailureMessage(@\"expected to not be less than or equal to <1.0000>, got <1.0000>\", ^{\n        expect(@1).toNot(beLessThanOrEqualTo(@1));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be less than or equal to <1.0000>, got <nil>\", ^{\n        expect(nil).to(beLessThanOrEqualTo(@1));\n    });\n    expectNilFailureMessage(@\"expected to not be less than or equal to <-1.0000>, got <nil>\", ^{\n        expect(nil).toNot(beLessThanOrEqualTo(@(-1)));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeLessThanTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeLessThanTest : XCTestCase\n\n@end\n\n@implementation ObjCBeLessThanTest\n\n- (void)testPositiveMatches {\n    expect(@2).to(beLessThan(@3));\n    expect(@2).toNot(beLessThan(@2));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be less than <0.0000>, got <-1.0000>\", ^{\n        expect(@(-1)).to(beLessThan(@0));\n    });\n    expectFailureMessage(@\"expected to not be less than <1.0000>, got <0.0000>\", ^{\n        expect(@0).toNot(beLessThan(@1));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to be less than <-1.0000>, got <nil>\", ^{\n        expect(nil).to(beLessThan(@(-1)));\n    });\n    expectNilFailureMessage(@\"expected to not be less than <1.0000>, got <nil>\", ^{\n        expect(nil).toNot(beLessThan(@1));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeNilTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeNilTest : XCTestCase\n\n@end\n\n@implementation ObjCBeNilTest\n\n- (void)testPositiveMatches {\n    expect(nil).to(beNil());\n    expect(@NO).toNot(beNil());\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be nil, got <1.0000>\", ^{\n        expect(@1).to(beNil());\n    });\n    expectFailureMessage(@\"expected to not be nil, got <nil>\", ^{\n        expect(nil).toNot(beNil());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeTrueTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeTrueTest : XCTestCase\n\n@end\n\n@implementation ObjCBeTrueTest\n\n- (void)testPositiveMatches {\n    expect(@YES).to(beTrue());\n    expect(@NO).toNot(beTrue());\n    expect(nil).toNot(beTrue());\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be true, got <0.0000>\", ^{\n        expect(@NO).to(beTrue());\n    });\n    expectFailureMessage(@\"expected to be true, got <nil>\", ^{\n        expect(nil).to(beTrue());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeTruthyTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeTruthyTest : XCTestCase\n\n@end\n\n@implementation ObjCBeTruthyTest\n\n- (void)testPositiveMatches {\n    expect(@YES).to(beTruthy());\n    expect(@NO).toNot(beTruthy());\n    expect(nil).toNot(beTruthy());\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to be truthy, got <nil>\", ^{\n        expect(nil).to(beTruthy());\n    });\n    expectFailureMessage(@\"expected to not be truthy, got <1.0000>\", ^{\n        expect(@1).toNot(beTruthy());\n    });\n    expectFailureMessage(@\"expected to be truthy, got <0.0000>\", ^{\n        expect(@NO).to(beTruthy());\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCBeginWithTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCBeginWithTest : XCTestCase\n\n@end\n\n@implementation ObjCBeginWithTest\n\n- (void)testPositiveMatches {\n    expect(@\"hello world!\").to(beginWith(@\"hello\"));\n    expect(@\"hello world!\").toNot(beginWith(@\"world\"));\n\n    NSArray *array = @[@1, @2];\n    expect(array).to(beginWith(@1));\n    expect(array).toNot(beginWith(@2));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to begin with <bar>, got <foo>\", ^{\n        expect(@\"foo\").to(beginWith(@\"bar\"));\n    });\n    expectFailureMessage(@\"expected to not begin with <foo>, got <foo>\", ^{\n        expect(@\"foo\").toNot(beginWith(@\"foo\"));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to begin with <1>, got <nil>\", ^{\n        expect(nil).to(beginWith(@1));\n    });\n    expectNilFailureMessage(@\"expected to not begin with <1>, got <nil>\", ^{\n        expect(nil).toNot(beginWith(@1));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCContainTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCContainTest : XCTestCase\n\n@end\n\n@implementation ObjCContainTest\n\n- (void)testPositiveMatches {\n    NSArray *array = @[@1, @2];\n    expect(array).to(contain(@1));\n    expect(array).toNot(contain(@\"HI\"));\n    expect(@\"String\").to(contain(@\"Str\"));\n    expect(@\"Other\").toNot(contain(@\"Str\"));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to contain <Optional(3)>, got <(1,2)>\", ^{\n        expect((@[@1, @2])).to(contain(@3));\n    });\n    expectFailureMessage(@\"expected to not contain <Optional(2)>, got <(1,2)>\", ^{\n        expect((@[@1, @2])).toNot(contain(@2));\n    });\n\n    expectFailureMessage(@\"expected to contain <hi>, got <la>\", ^{\n        expect(@\"la\").to(contain(@\"hi\"));\n    });\n    expectFailureMessage(@\"expected to not contain <hi>, got <hihihi>\", ^{\n        expect(@\"hihihi\").toNot(contain(@\"hi\"));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to contain <3.0000>, got <nil>\", ^{\n        expect(nil).to(contain(@3));\n    });\n    expectNilFailureMessage(@\"expected to not contain <3.0000>, got <nil>\", ^{\n        expect(nil).toNot(contain(@3));\n    });\n\n    expectNilFailureMessage(@\"expected to contain <hi>, got <nil>\", ^{\n        expect(nil).to(contain(@\"hi\"));\n    });\n    expectNilFailureMessage(@\"expected to not contain <hi>, got <nil>\", ^{\n        expect(nil).toNot(contain(@\"hi\"));\n    });\n}\n\n- (void)testVariadicArguments {\n    NSArray *array = @[@1, @2];\n    expect(array).to(contain(@1, @2));\n    expect(array).toNot(contain(@\"HI\", @\"whale\"));\n    expect(@\"String\").to(contain(@\"Str\", @\"ng\"));\n    expect(@\"Other\").toNot(contain(@\"Str\", @\"Oth\"));\n\n\n    expectFailureMessage(@\"expected to contain <Optional(a), Optional(bar)>, got <(a,b,c)>\", ^{\n        expect(@[@\"a\", @\"b\", @\"c\"]).to(contain(@\"a\", @\"bar\"));\n    });\n\n    expectFailureMessage(@\"expected to not contain <Optional(bar), Optional(b)>, got <(a,b,c)>\", ^{\n        expect(@[@\"a\", @\"b\", @\"c\"]).toNot(contain(@\"bar\", @\"b\"));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCEndWithTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCEndWithTest : XCTestCase\n\n@end\n\n@implementation ObjCEndWithTest\n\n- (void)testPositiveMatches {\n    NSArray *array = @[@1, @2];\n    expect(@\"hello world!\").to(endWith(@\"world!\"));\n    expect(@\"hello world!\").toNot(endWith(@\"hello\"));\n    expect(array).to(endWith(@2));\n    expect(array).toNot(endWith(@1));\n    expect(@1).toNot(contain(@\"foo\"));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to end with <?>, got <hello world!>\", ^{\n        expect(@\"hello world!\").to(endWith(@\"?\"));\n    });\n    expectFailureMessage(@\"expected to not end with <!>, got <hello world!>\", ^{\n        expect(@\"hello world!\").toNot(endWith(@\"!\"));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to end with <1>, got <nil>\", ^{\n        expect(nil).to(endWith(@1));\n    });\n    expectNilFailureMessage(@\"expected to not end with <1>, got <nil>\", ^{\n        expect(nil).toNot(endWith(@1));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCEqualTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCEqualTest : XCTestCase\n\n@end\n\n@implementation ObjCEqualTest\n\n- (void)testPositiveMatches {\n    expect(@1).to(equal(@1));\n    expect(@1).toNot(equal(@2));\n    expect(@1).notTo(equal(@2));\n    expect(@\"hello\").to(equal(@\"hello\"));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to equal <2.0000>, got <1.0000>\", ^{\n        expect(@1).to(equal(@2));\n    });\n    expectFailureMessage(@\"expected to not equal <1.0000>, got <1.0000>\", ^{\n        expect(@1).toNot(equal(@1));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to equal <nil>, got <nil>\", ^{\n        expect(nil).to(equal(nil));\n    });\n    expectNilFailureMessage(@\"expected to not equal <nil>, got <nil>\", ^{\n        expect(nil).toNot(equal(nil));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCHaveCount.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCHaveCountTest : XCTestCase\n\n@end\n\n@implementation ObjCHaveCountTest\n\n- (void)testHaveCountForNSArray {\n    expect(@[@1, @2, @3]).to(haveCount(@3));\n    expect(@[@1, @2, @3]).notTo(haveCount(@1));\n\n    expect(@[]).to(haveCount(@0));\n    expect(@[@1]).notTo(haveCount(@0));\n\n    expectFailureMessage(@\"expected to have (1,2,3) with count 1, got 3\", ^{\n        expect(@[@1, @2, @3]).to(haveCount(@1));\n    });\n\n    expectFailureMessage(@\"expected to not have (1,2,3) with count 3, got 3\", ^{\n        expect(@[@1, @2, @3]).notTo(haveCount(@3));\n    });\n\n}\n\n- (void)testHaveCountForNSDictionary {\n    expect(@{@\"1\":@1, @\"2\":@2, @\"3\":@3}).to(haveCount(@3));\n    expect(@{@\"1\":@1, @\"2\":@2, @\"3\":@3}).notTo(haveCount(@1));\n\n    expectFailureMessage(@\"expected to have {1 = 1;2 = 2;3 = 3;} with count 1, got 3\", ^{\n        expect(@{@\"1\":@1, @\"2\":@2, @\"3\":@3}).to(haveCount(@1));\n    });\n\n    expectFailureMessage(@\"expected to not have {1 = 1;2 = 2;3 = 3;} with count 3, got 3\", ^{\n        expect(@{@\"1\":@1, @\"2\":@2, @\"3\":@3}).notTo(haveCount(@3));\n    });\n}\n\n- (void)testHaveCountForNSHashtable {\n    NSHashTable *const table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory];\n    [table addObject:@1];\n    [table addObject:@2];\n    [table addObject:@3];\n\n    expect(table).to(haveCount(@3));\n    expect(table).notTo(haveCount(@1));\n\n    expectFailureMessage(@\"expected to have NSHashTable {[2] 2[12] 1[13] 3}with count 1, got 3\", ^{\n        expect(table).to(haveCount(@1));\n    });\n\n    expectFailureMessage(@\"expected to not have NSHashTable {[2] 2[12] 1[13] 3}with count 3, got 3\", ^{\n        expect(table).notTo(haveCount(@3));\n    });\n}\n\n- (void)testHaveCountForNSSet {\n    NSSet *const set = [NSSet setWithArray:@[@1, @2, @3]];\n\n    expect(set).to(haveCount(@3));\n    expect(set).notTo(haveCount(@1));\n\n    expectFailureMessage(@\"expected to have {(3,1,2)} with count 1, got 3\", ^{\n        expect(set).to(haveCount(@1));\n    });\n\n    expectFailureMessage(@\"expected to not have {(3,1,2)} with count 3, got 3\", ^{\n        expect(set).notTo(haveCount(@3));\n    });\n}\n\n- (void)testHaveCountForUnsupportedTypes {\n    expectFailureMessage(@\"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFConstantString\", ^{\n        expect(@\"string\").to(haveCount(@6));\n    });\n\n    expectFailureMessage(@\"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFNumber\", ^{\n        expect(@1).to(haveCount(@6));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCMatchTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCMatchTest : XCTestCase\n\n@end\n\n@implementation ObjCMatchTest\n\n- (void)testPositiveMatches {\n    expect(@\"11:14\").to(match(@\"\\\\d{2}:\\\\d{2}\"));\n    expect(@\"hello\").toNot(match(@\"\\\\d{2}:\\\\d{2}\"));\n}\n\n- (void)testNegativeMatches {\n    expectFailureMessage(@\"expected to match <\\\\d{2}:\\\\d{2}>, got <hello>\", ^{\n        expect(@\"hello\").to(match(@\"\\\\d{2}:\\\\d{2}\"));\n    });\n    expectFailureMessage(@\"expected to not match <\\\\d{2}:\\\\d{2}>, got <11:22>\", ^{\n        expect(@\"11:22\").toNot(match(@\"\\\\d{2}:\\\\d{2}\"));\n    });\n}\n\n- (void)testNilMatches {\n    expectNilFailureMessage(@\"expected to match <\\\\d{2}:\\\\d{2}>, got <nil>\", ^{\n        expect(nil).to(match(@\"\\\\d{2}:\\\\d{2}\"));\n    });\n    expectNilFailureMessage(@\"expected to not match <\\\\d{2}:\\\\d{2}>, got <nil>\", ^{\n        expect(nil).toNot(match(@\"\\\\d{2}:\\\\d{2}\"));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCRaiseExceptionTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCRaiseExceptionTest : XCTestCase\n\n@end\n\n@implementation ObjCRaiseExceptionTest\n\n- (void)testPositiveMatches {\n    __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException\n                                                             reason:@\"No food\"\n                                                           userInfo:@{@\"key\": @\"value\"}];\n    expectAction(^{ @throw exception; }).to(raiseException());\n    expectAction(^{ [exception raise]; }).to(raiseException());\n    expectAction(^{ [exception raise]; }).to(raiseException().named(NSInvalidArgumentException));\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             named(NSInvalidArgumentException).\n                                             reason(@\"No food\"));\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             named(NSInvalidArgumentException).\n                                             reason(@\"No food\").\n                                             userInfo(@{@\"key\": @\"value\"}));\n\n    expectAction(^{ }).toNot(raiseException());\n}\n\n- (void)testPositiveMatchesWithBlocks {\n    __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException\n                                                             reason:@\"No food\"\n                                                           userInfo:@{@\"key\": @\"value\"}];\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             satisfyingBlock(^(NSException *exception) {\n        expect(exception.name).to(equal(NSInvalidArgumentException));\n    }));\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             named(NSInvalidArgumentException).\n                                             satisfyingBlock(^(NSException *exception) {\n        expect(exception.name).to(equal(NSInvalidArgumentException));\n    }));\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             named(NSInvalidArgumentException).\n                                             reason(@\"No food\").\n                                             satisfyingBlock(^(NSException *exception) {\n        expect(exception.name).to(equal(NSInvalidArgumentException));\n    }));\n    expectAction(^{ [exception raise]; }).to(raiseException().\n                                             named(NSInvalidArgumentException).\n                                             reason(@\"No food\").\n                                             userInfo(@{@\"key\": @\"value\"}).\n                                             satisfyingBlock(^(NSException *exception) {\n        expect(exception.name).to(equal(NSInvalidArgumentException));\n    }));\n}\n\n- (void)testNegativeMatches {\n    __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException\n                                                             reason:@\"No food\"\n                                                           userInfo:@{@\"key\": @\"value\"}];\n\n    expectFailureMessage(@\"expected to raise any exception, got no exception\", ^{\n        expectAction(^{ }).to(raiseException());\n    });\n\n    expectFailureMessage(@\"expected to raise exception with name <foo>, got no exception\", ^{\n        expectAction(^{ }).to(raiseException().\n                              named(@\"foo\"));\n    });\n\n    expectFailureMessage(@\"expected to raise exception with name <NSInvalidArgumentException> with reason <cakes>, got no exception\", ^{\n        expectAction(^{ }).to(raiseException().\n                              named(NSInvalidArgumentException).\n                              reason(@\"cakes\"));\n    });\n\n    expectFailureMessage(@\"expected to raise exception with name <NSInvalidArgumentException> with reason <No food> with userInfo <{k = v;}>, got no exception\", ^{\n        expectAction(^{ }).to(raiseException().\n                              named(NSInvalidArgumentException).\n                              reason(@\"No food\").\n                              userInfo(@{@\"k\": @\"v\"}));\n    });\n\n    expectFailureMessage(@\"expected to not raise any exception, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\", ^{\n        expectAction(^{ [exception raise]; }).toNot(raiseException());\n    });\n}\n\n- (void)testNegativeMatchesWithPassingBlocks {\n    __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException\n                                                             reason:@\"No food\"\n                                                           userInfo:@{@\"key\": @\"value\"}];\n    expectFailureMessage(@\"expected to raise exception that satisfies block, got no exception\", ^{\n        expect(exception).to(raiseException().\n                             satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(@\"LOL\"));\n        }));\n    });\n\n    NSString *outerFailureMessage = @\"expected to raise exception that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(NSInvalidArgumentException));\n        }));\n    });\n\n    outerFailureMessage = @\"expected to raise exception with name <foo> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(@\"foo\").\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(NSInvalidArgumentException));\n        }));\n    });\n\n    outerFailureMessage = @\"expected to raise exception with name <NSInvalidArgumentException> with reason <bar> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(NSInvalidArgumentException).\n                                                 reason(@\"bar\").\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(NSInvalidArgumentException));\n        }));\n    });\n\n    outerFailureMessage = @\"expected to raise exception with name <NSInvalidArgumentException> with reason <No food> with userInfo <{}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(NSInvalidArgumentException).\n                                                 reason(@\"No food\").\n                                                 userInfo(@{}).\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(NSInvalidArgumentException));\n        }));\n    });\n}\n\n- (void)testNegativeMatchesWithNegativeBlocks {\n    __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException\n                                                             reason:@\"No food\"\n                                                           userInfo:@{@\"key\": @\"value\"}];\n    NSString *outerFailureMessage;\n\n    NSString const *innerFailureMessage = @\"expected to equal <foo>, got <NSInvalidArgumentException>\";\n    outerFailureMessage = @\"expected to raise exception with name <NSInvalidArgumentException> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(NSInvalidArgumentException).\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(@\"foo\"));\n        }));\n    });\n\n\n    outerFailureMessage = @\"expected to raise exception with name <NSInvalidArgumentException> with reason <No food> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(NSInvalidArgumentException).\n                                                 reason(@\"No food\").\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(@\"foo\"));\n        }));\n    });\n\n\n    outerFailureMessage = @\"expected to raise exception with name <NSInvalidArgumentException> with reason <No food> with userInfo <{key = value;}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }\";\n    expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{\n        expectAction(^{ [exception raise]; }).to(raiseException().\n                                                 named(NSInvalidArgumentException).\n                                                 reason(@\"No food\").\n                                                 userInfo(@{@\"key\": @\"value\"}).\n                                                 satisfyingBlock(^(NSException *exception) {\n            expect(exception.name).to(equal(@\"foo\"));\n        }));\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCSyncTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Nimble/Nimble.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCSyncTest : XCTestCase\n\n@end\n\n@implementation ObjCSyncTest\n\n- (void)testFailureExpectation {\n    expectFailureMessage(@\"fail() always fails\", ^{\n        fail();\n    });\n\n    expectFailureMessage(@\"This always fails\", ^{\n        failWithMessage(@\"This always fails\");\n    });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/NimbleTests/objc/ObjCUserDescriptionTest.m",
    "content": "#import <XCTest/XCTest.h>\n#import \"NimbleSpecHelper.h\"\n\n@interface ObjCUserDescriptionTest : XCTestCase\n\n@end\n\n@implementation ObjCUserDescriptionTest\n\n- (void)testToWithDescription {\n    expectFailureMessage(@\"These are equal!\\n\"\n                         \"expected to equal <2.0000>, got <1.0000>\", ^{\n                             expect(@1).toWithDescription(equal(@2), @\"These are equal!\");\n                         });\n}\n\n- (void)testToNotWithDescription {\n    expectFailureMessage(@\"These aren't equal!\\n\"\n                         \"expected to not equal <1.0000>, got <1.0000>\", ^{\n                             expect(@1).toNotWithDescription(equal(@1), @\"These aren't equal!\");\n                         });\n}\n\n- (void)testNotToWithDescription {\n    expectFailureMessage(@\"These aren't equal!\\n\"\n                         \"expected to not equal <1.0000>, got <1.0000>\", ^{\n                             expect(@1).notToWithDescription(equal(@1), @\"These aren't equal!\");\n                         });\n}\n\n- (void)testToEventuallyWithDescription {\n    expectFailureMessage(@\"These are equal!\\n\"\n                         \"expected to eventually equal <2.0000>, got <1.0000>\", ^{\n                             expect(@1).toEventuallyWithDescription(equal(@2), @\"These are equal!\");\n                         });\n}\n\n- (void)testToEventuallyNotWithDescription {\n    expectFailureMessage(@\"These aren't equal!\\n\"\n                         \"expected to eventually not equal <1.0000>, got <1.0000>\", ^{\n                             expect(@1).toEventuallyNotWithDescription(equal(@1), @\"These aren't equal!\");\n                         });\n}\n\n- (void)testToNotEventuallyWithDescription {\n    expectFailureMessage(@\"These aren't equal!\\n\"\n                         \"expected to eventually not equal <1.0000>, got <1.0000>\", ^{\n                             expect(@1).toNotEventuallyWithDescription(equal(@1), @\"These aren't equal!\");\n                         });\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/README.md",
    "content": "# Nimble\n\nUse Nimble to express the expected outcomes of Swift\nor Objective-C expressions. Inspired by\n[Cedar](https://github.com/pivotal/cedar).\n\n```swift\n// Swift\n\nexpect(1 + 1).to(equal(2))\nexpect(1.2).to(beCloseTo(1.1, within: 0.1))\nexpect(3) > 2\nexpect(\"seahorse\").to(contain(\"sea\"))\nexpect([\"Atlantic\", \"Pacific\"]).toNot(contain(\"Mississippi\"))\nexpect(ocean.isClean).toEventually(beTruthy())\n```\n\n# How to Use Nimble\n\n<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n**Table of Contents**  *generated with [DocToc](https://github.com/thlorenz/doctoc)*\n\n- [Some Background: Expressing Outcomes Using Assertions in XCTest](#some-background-expressing-outcomes-using-assertions-in-xctest)\n- [Nimble: Expectations Using `expect(...).to`](#nimble-expectations-using-expectto)\n  - [Custom Failure Messages](#custom-failure-messages)\n  - [Type Checking](#type-checking)\n  - [Operator Overloads](#operator-overloads)\n  - [Lazily Computed Values](#lazily-computed-values)\n  - [C Primitives](#c-primitives)\n  - [Asynchronous Expectations](#asynchronous-expectations)\n  - [Objective-C Support](#objective-c-support)\n  - [Disabling Objective-C Shorthand](#disabling-objective-c-shorthand)\n- [Built-in Matcher Functions](#built-in-matcher-functions)\n  - [Equivalence](#equivalence)\n  - [Identity](#identity)\n  - [Comparisons](#comparisons)\n  - [Types/Classes](#typesclasses)\n  - [Truthiness](#truthiness)\n  - [Swift Error Handling](#swift-error-handling)\n  - [Exceptions](#exceptions)\n  - [Collection Membership](#collection-membership)\n  - [Strings](#strings)\n  - [Checking if all elements of a collection pass a condition](#checking-if-all-elements-of-a-collection-pass-a-condition)\n  - [Verify collection count](#verify-collection-count)\n- [Writing Your Own Matchers](#writing-your-own-matchers)\n  - [Lazy Evaluation](#lazy-evaluation)\n  - [Type Checking via Swift Generics](#type-checking-via-swift-generics)\n  - [Customizing Failure Messages](#customizing-failure-messages)\n  - [Supporting Objective-C](#supporting-objective-c)\n    - [Properly Handling `nil` in Objective-C Matchers](#properly-handling-nil-in-objective-c-matchers)\n- [Installing Nimble](#installing-nimble)\n  - [Installing Nimble as a Submodule](#installing-nimble-as-a-submodule)\n  - [Installing Nimble via CocoaPods](#installing-nimble-via-cocoapods)\n  - [Using Nimble without XCTest](#using-nimble-without-xctest)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n# Some Background: Expressing Outcomes Using Assertions in XCTest\n\nApple's Xcode includes the XCTest framework, which provides\nassertion macros to test whether code behaves properly.\nFor example, to assert that `1 + 1 = 2`, XCTest has you write:\n\n```swift\n// Swift\n\nXCTAssertEqual(1 + 1, 2, \"expected one plus one to equal two\")\n```\n\nOr, in Objective-C:\n\n```objc\n// Objective-C\n\nXCTAssertEqual(1 + 1, 2, @\"expected one plus one to equal two\");\n```\n\nXCTest assertions have a couple of drawbacks:\n\n1. **Not enough macros.** There's no easy way to assert that a string\n   contains a particular substring, or that a number is less than or\n   equal to another.\n2. **It's hard to write asynchronous tests.** XCTest forces you to write\n   a lot of boilerplate code.\n\nNimble addresses these concerns.\n\n# Nimble: Expectations Using `expect(...).to`\n\nNimble allows you to express expectations using a natural,\neasily understood language:\n\n```swift\n// Swift\n\nimport Nimble\n\nexpect(seagull.squawk).to(equal(\"Squee!\"))\n```\n\n```objc\n// Objective-C\n\n@import Nimble;\n\nexpect(seagull.squawk).to(equal(@\"Squee!\"));\n```\n\n> The `expect` function autocompletes to include `file:` and `line:`,\n  but these parameters are optional. Use the default values to have\n  Xcode highlight the correct line when an expectation is not met.\n\nTo perform the opposite expectation--to assert something is *not*\nequal--use `toNot` or `notTo`:\n\n```swift\n// Swift\n\nimport Nimble\n\nexpect(seagull.squawk).toNot(equal(\"Oh, hello there!\"))\nexpect(seagull.squawk).notTo(equal(\"Oh, hello there!\"))\n```\n\n```objc\n// Objective-C\n\n@import Nimble;\n\nexpect(seagull.squawk).toNot(equal(@\"Oh, hello there!\"));\nexpect(seagull.squawk).notTo(equal(@\"Oh, hello there!\"));\n```\n\n## Custom Failure Messages\n\nWould you like to add more information to the test's failure messages? Use the `description` optional argument to add your own text:\n\n```swift\n// Swift\n\nexpect(1 + 1).to(equal(3))\n// failed - expected to equal <3>, got <2>\n\nexpect(1 + 1).to(equal(3), description: \"Make sure libKindergartenMath is loaded\")\n// failed - Make sure libKindergartenMath is loaded\n// expected to equal <3>, got <2>\n```\n\nOr the *WithDescription version in Objective-C:\n\n```objc\n// Objective-C\n\n@import Nimble;\n\nexpect(@(1+1)).to(equal(@3));\n// failed - expected to equal <3.0000>, got <2.0000>\n\nexpect(@(1+1)).toWithDescription(equal(@3), @\"Make sure libKindergartenMath is loaded\");\n// failed - Make sure libKindergartenMath is loaded\n// expected to equal <3.0000>, got <2.0000>\n```\n\n## Type Checking\n\nNimble makes sure you don't compare two types that don't match:\n\n```swift\n// Swift\n\n// Does not compile:\nexpect(1 + 1).to(equal(\"Squee!\"))\n```\n\n> Nimble uses generics--only available in Swift--to ensure\n  type correctness. That means type checking is\n  not available when using Nimble in Objective-C. :sob:\n\n## Operator Overloads\n\nTired of so much typing? With Nimble, you can use overloaded operators\nlike `==` for equivalence, or `>` for comparisons:\n\n```swift\n// Swift\n\n// Passes if squawk does not equal \"Hi!\":\nexpect(seagull.squawk) != \"Hi!\"\n\n// Passes if 10 is greater than 2:\nexpect(10) > 2\n```\n\n> Operator overloads are only available in Swift, so you won't be able\n  to use this syntax in Objective-C. :broken_heart:\n\n## Lazily Computed Values\n\nThe `expect` function doesn't evalaute the value it's given until it's\ntime to match. So Nimble can test whether an expression raises an\nexception once evaluated:\n\n```swift\n// Swift\n\n// Note: Swift currently doesn't have exceptions.\n//       Only Objective-C code can raise exceptions\n//       that Nimble will catch.\nlet exception = NSException(\n  name: NSInternalInconsistencyException,\n  reason: \"Not enough fish in the sea.\",\n  userInfo: [\"something\": \"is fishy\"])\nexpect { exception.raise() }.to(raiseException())\n\n// Also, you can customize raiseException to be more specific\nexpect { exception.raise() }.to(raiseException(named: NSInternalInconsistencyException))\nexpect { exception.raise() }.to(raiseException(\n    named: NSInternalInconsistencyException,\n    reason: \"Not enough fish in the sea\"))\nexpect { exception.raise() }.to(raiseException(\n    named: NSInternalInconsistencyException,\n    reason: \"Not enough fish in the sea\",\n    userInfo: [\"something\": \"is fishy\"]))\n```\n\nObjective-C works the same way, but you must use the `expectAction`\nmacro when making an expectation on an expression that has no return\nvalue:\n\n```objc\n// Objective-C\n\nNSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException\n                                                 reason:@\"Not enough fish in the sea.\"\n                                               userInfo:nil];\nexpectAction(^{ [exception raise]; }).to(raiseException());\n\n// Use the property-block syntax to be more specific.\nexpectAction(^{ [exception raise]; }).to(raiseException().named(NSInternalInconsistencyException));\nexpectAction(^{ [exception raise]; }).to(raiseException().\n    named(NSInternalInconsistencyException).\n    reason(\"Not enough fish in the sea\"));\nexpectAction(^{ [exception raise]; }).to(raiseException().\n    named(NSInternalInconsistencyException).\n    reason(\"Not enough fish in the sea\").\n    userInfo(@{@\"something\": @\"is fishy\"}));\n\n// You can also pass a block for custom matching of the raised exception\nexpectAction(exception.raise()).to(raiseException().satisfyingBlock(^(NSException *exception) {\n    expect(exception.name).to(beginWith(NSInternalInconsistencyException));\n}));\n```\n\n## C Primitives\n\nSome testing frameworks make it hard to test primitive C values.\nIn Nimble, it just works:\n\n```swift\n// Swift\n\nlet actual: CInt = 1\nlet expectedValue: CInt = 1\nexpect(actual).to(equal(expectedValue))\n```\n\nIn fact, Nimble uses type inference, so you can write the above\nwithout explicitly specifying both types:\n\n```swift\n// Swift\n\nexpect(1 as CInt).to(equal(1))\n```\n\n> In Objective-C, Nimble only supports Objective-C objects. To\n  make expectations on primitive C values, wrap then in an object\n  literal:\n\n  ```objc\n  expect(@(1 + 1)).to(equal(@2));\n  ```\n\n## Asynchronous Expectations\n\nIn Nimble, it's easy to make expectations on values that are updated\nasynchronously. Just use `toEventually` or `toEventuallyNot`:\n\n```swift\n// Swift\n\ndispatch_async(dispatch_get_main_queue()) {\n  ocean.add(\"dolphins\")\n  ocean.add(\"whales\")\n}\nexpect(ocean).toEventually(contain(\"dolphins\", \"whales\"))\n```\n\n\n```objc\n// Objective-C\ndispatch_async(dispatch_get_main_queue(), ^{\n  [ocean add:@\"dolphins\"];\n  [ocean add:@\"whales\"];\n});\nexpect(ocean).toEventually(contain(@\"dolphins\", @\"whales\"));\n```\n\nIn the above example, `ocean` is constantly re-evaluated. If it ever\ncontains dolphins and whales, the expectation passes. If `ocean` still\ndoesn't contain them, even after being continuously re-evaluated for one\nwhole second, the expectation fails.\n\nSometimes it takes more than a second for a value to update. In those\ncases, use the `timeout` parameter:\n\n```swift\n// Swift\n\n// Waits three seconds for ocean to contain \"starfish\":\nexpect(ocean).toEventually(contain(\"starfish\"), timeout: 3)\n```\n\n```objc\n// Objective-C\n\n// Waits three seconds for ocean to contain \"starfish\":\nexpect(ocean).withTimeout(3).toEventually(contain(@\"starfish\"));\n```\n\nYou can also provide a callback by using the `waitUntil` function:\n\n```swift\n// Swift\n\nwaitUntil { done in\n  // do some stuff that takes a while...\n  NSThread.sleepForTimeInterval(0.5)\n  done()\n}\n```\n\n```objc\n// Objective-C\n\nwaitUntil(^(void (^done)(void)){\n  // do some stuff that takes a while...\n  [NSThread sleepForTimeInterval:0.5];\n  done();\n});\n```\n\n`waitUntil` also optionally takes a timeout parameter:\n\n```swift\n// Swift\n\nwaitUntil(timeout: 10) { done in\n  // do some stuff that takes a while...\n  NSThread.sleepForTimeInterval(1)\n  done()\n}\n```\n\n```objc\n// Objective-C\n\nwaitUntilTimeout(10, ^(void (^done)(void)){\n  // do some stuff that takes a while...\n  [NSThread sleepForTimeInterval:1];\n  done();\n});\n```\n\n## Objective-C Support\n\nNimble has full support for Objective-C. However, there are two things\nto keep in mind when using Nimble in Objective-C:\n\n1. All parameters passed to the `expect` function, as well as matcher\n   functions like `equal`, must be Objective-C objects:\n\n   ```objc\n   // Objective-C\n\n   @import Nimble;\n\n   expect(@(1 + 1)).to(equal(@2));\n   expect(@\"Hello world\").to(contain(@\"world\"));\n   ```\n\n2. To make an expectation on an expression that does not return a value,\n   such as `-[NSException raise]`, use `expectAction` instead of\n   `expect`:\n\n   ```objc\n   // Objective-C\n\n   expectAction(^{ [exception raise]; }).to(raiseException());\n   ```\n\n## Disabling Objective-C Shorthand\n\nNimble provides a shorthand for expressing expectations using the\n`expect` function. To disable this shorthand in Objective-C, define the\n`NIMBLE_DISABLE_SHORT_SYNTAX` macro somewhere in your code before\nimporting Nimble:\n\n```objc\n#define NIMBLE_DISABLE_SHORT_SYNTAX 1\n\n@import Nimble;\n\nNMB_expect(^{ return seagull.squawk; }, __FILE__, __LINE__).to(NMB_equal(@\"Squee!\"));\n```\n\n> Disabling the shorthand is useful if you're testing functions with\n  names that conflict with Nimble functions, such as `expect` or\n  `equal`. If that's not the case, there's no point in disabling the\n  shorthand.\n\n# Built-in Matcher Functions\n\nNimble includes a wide variety of matcher functions.\n\n## Equivalence\n\n```swift\n// Swift\n\n// Passes if actual is equivalent to expected:\nexpect(actual).to(equal(expected))\nexpect(actual) == expected\n\n// Passes if actual is not equivalent to expected:\nexpect(actual).toNot(equal(expected))\nexpect(actual) != expected\n```\n\n```objc\n// Objective-C\n\n// Passes if actual is equivalent to expected:\nexpect(actual).to(equal(expected))\n\n// Passes if actual is not equivalent to expected:\nexpect(actual).toNot(equal(expected))\n```\n\nValues must be `Equatable`, `Comparable`, or subclasses of `NSObject`.\n`equal` will always fail when used to compare one or more `nil` values.\n\n## Identity\n\n```swift\n// Swift\n\n// Passes if actual has the same pointer address as expected:\nexpect(actual).to(beIdenticalTo(expected))\nexpect(actual) === expected\n\n// Passes if actual does not have the same pointer address as expected:\nexpect(actual).toNot(beIdenticalTo(expected))\nexpect(actual) !== expected\n```\n\n```objc\n// Objective-C\n\n// Passes if actual has the same pointer address as expected:\nexpect(actual).to(beIdenticalTo(expected));\n\n// Passes if actual does not have the same pointer address as expected:\nexpect(actual).toNot(beIdenticalTo(expected));\n```\n\n## Comparisons\n\n```swift\n// Swift\n\nexpect(actual).to(beLessThan(expected))\nexpect(actual) < expected\n\nexpect(actual).to(beLessThanOrEqualTo(expected))\nexpect(actual) <= expected\n\nexpect(actual).to(beGreaterThan(expected))\nexpect(actual) > expected\n\nexpect(actual).to(beGreaterThanOrEqualTo(expected))\nexpect(actual) >= expected\n```\n\n```objc\n// Objective-C\n\nexpect(actual).to(beLessThan(expected));\nexpect(actual).to(beLessThanOrEqualTo(expected));\nexpect(actual).to(beGreaterThan(expected));\nexpect(actual).to(beGreaterThanOrEqualTo(expected));\n```\n\n> Values given to the comparison matchers above must implement\n  `Comparable`.\n\nBecause of how computers represent floating point numbers, assertions\nthat two floating point numbers be equal will sometimes fail. To express\nthat two numbers should be close to one another within a certain margin\nof error, use `beCloseTo`:\n\n```swift\n// Swift\n\nexpect(actual).to(beCloseTo(expected, within: delta))\n```\n\n```objc\n// Objective-C\n\nexpect(actual).to(beCloseTo(expected).within(delta));\n```\n\nFor example, to assert that `10.01` is close to `10`, you can write:\n\n```swift\n// Swift\n\nexpect(10.01).to(beCloseTo(10, within: 0.1))\n```\n\n```objc\n// Objective-C\n\nexpect(@(10.01)).to(beCloseTo(@10).within(0.1));\n```\n\nThere is also an operator shortcut available in Swift:\n\n```swift\n// Swift\n\nexpect(actual) ≈ expected\nexpect(actual) ≈ (expected, delta)\n\n```\n(Type Option-x to get ≈ on a U.S. keyboard)\n\nThe former version uses the default delta of 0.0001. Here is yet another way to do this:\n\n```swift\n// Swift\n\nexpect(actual) ≈ expected ± delta\nexpect(actual) == expected ± delta\n\n```\n(Type Option-Shift-= to get ± on a U.S. keyboard)\n\nIf you are comparing arrays of floating point numbers, you'll find the following useful:\n\n```swift\n// Swift\n\nexpect([0.0, 2.0]) ≈ [0.0001, 2.0001]\nexpect([0.0, 2.0]).to(beCloseTo([0.1, 2.1], within: 0.1))\n\n```\n\n> Values given to the `beCloseTo` matcher must be coercable into a\n  `Double`.\n\n## Types/Classes\n\n```swift\n// Swift\n\n// Passes if instance is an instance of aClass:\nexpect(instance).to(beAnInstanceOf(aClass))\n\n// Passes if instance is an instance of aClass or any of its subclasses:\nexpect(instance).to(beAKindOf(aClass))\n```\n\n```objc\n// Objective-C\n\n// Passes if instance is an instance of aClass:\nexpect(instance).to(beAnInstanceOf(aClass));\n\n// Passes if instance is an instance of aClass or any of its subclasses:\nexpect(instance).to(beAKindOf(aClass));\n```\n\n> Instances must be Objective-C objects: subclasses of `NSObject`,\n  or Swift objects bridged to Objective-C with the `@objc` prefix.\n\nFor example, to assert that `dolphin` is a kind of `Mammal`:\n\n```swift\n// Swift\n\nexpect(dolphin).to(beAKindOf(Mammal))\n```\n\n```objc\n// Objective-C\n\nexpect(dolphin).to(beAKindOf([Mammal class]));\n```\n\n> `beAnInstanceOf` uses the `-[NSObject isMemberOfClass:]` method to\n  test membership. `beAKindOf` uses `-[NSObject isKindOfClass:]`.\n\n## Truthiness\n\n```swift\n// Passes if actual is not nil, false, or an object with a boolean value of false:\nexpect(actual).to(beTruthy())\n\n// Passes if actual is only true (not nil or an object conforming to BooleanType true):\nexpect(actual).to(beTrue())\n\n// Passes if actual is nil, false, or an object with a boolean value of false:\nexpect(actual).to(beFalsy())\n\n// Passes if actual is only false (not nil or an object conforming to BooleanType false):\nexpect(actual).to(beFalse())\n\n// Passes if actual is nil:\nexpect(actual).to(beNil())\n```\n\n```objc\n// Objective-C\n\n// Passes if actual is not nil, false, or an object with a boolean value of false:\nexpect(actual).to(beTruthy());\n\n// Passes if actual is only true (not nil or an object conforming to BooleanType true):\nexpect(actual).to(beTrue());\n\n// Passes if actual is nil, false, or an object with a boolean value of false:\nexpect(actual).to(beFalsy());\n\n// Passes if actual is only false (not nil or an object conforming to BooleanType false):\nexpect(actual).to(beFalse());\n\n// Passes if actual is nil:\nexpect(actual).to(beNil());\n```\n\n## Swift Error Handling\n\nIf you're using Swift 2.0+, you can use the `throwError` matcher to check if an error is thrown.\n\n```swift\n// Swift\n\n// Passes if somethingThatThrows() throws an ErrorType:\nexpect{ try somethingThatThrows() }.to(throwError())\n\n// Passes if somethingThatThrows() throws an error with a given domain:\nexpect{ try somethingThatThrows() }.to(throwError { (error: ErrorType) in\n    expect(error._domain).to(equal(NSCocoaErrorDomain))\n})\n\n// Passes if somethingThatThrows() throws an error with a given case:\nexpect{ try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError))\n\n// Passes if somethingThatThrows() throws an error with a given type:\nexpect{ try somethingThatThrows() }.to(throwError(errorType: MyError.self))\n```\n\nNote: This feature is only available in Swift.\n\n## Exceptions\n\n```swift\n// Swift\n\n// Passes if actual, when evaluated, raises an exception:\nexpect(actual).to(raiseException())\n\n// Passes if actual raises an exception with the given name:\nexpect(actual).to(raiseException(named: name))\n\n// Passes if actual raises an exception with the given name and reason:\nexpect(actual).to(raiseException(named: name, reason: reason))\n\n// Passes if actual raises an exception and it passes expectations in the block\n// (in this case, if name begins with 'a r')\nexpect { exception.raise() }.to(raiseException { (exception: NSException) in\n    expect(exception.name).to(beginWith(\"a r\"))\n})\n```\n\n```objc\n// Objective-C\n\n// Passes if actual, when evaluated, raises an exception:\nexpect(actual).to(raiseException())\n\n// Passes if actual raises an exception with the given name\nexpect(actual).to(raiseException().named(name))\n\n// Passes if actual raises an exception with the given name and reason:\nexpect(actual).to(raiseException().named(name).reason(reason))\n\n// Passes if actual raises an exception and it passes expectations in the block\n// (in this case, if name begins with 'a r')\nexpect(actual).to(raiseException().satisfyingBlock(^(NSException *exception) {\n    expect(exception.name).to(beginWith(@\"a r\"));\n}));\n```\n\nNote: Swift currently doesn't have exceptions. Only Objective-C code can raise\nexceptions that Nimble will catch.\n\n## Collection Membership\n\n```swift\n// Swift\n\n// Passes if all of the expected values are members of actual:\nexpect(actual).to(contain(expected...))\n\n// Passes if actual is an empty collection (it contains no elements):\nexpect(actual).to(beEmpty())\n```\n\n```objc\n// Objective-C\n\n// Passes if expected is a member of actual:\nexpect(actual).to(contain(expected));\n\n// Passes if actual is an empty collection (it contains no elements):\nexpect(actual).to(beEmpty());\n```\n\n> In Swift `contain` takes any number of arguments. The expectation\n  passes if all of them are members of the collection. In Objective-C,\n  `contain` only takes one argument [for now](https://github.com/Quick/Nimble/issues/27).\n\nFor example, to assert that a list of sea creature names contains\n\"dolphin\" and \"starfish\":\n\n```swift\n// Swift\n\nexpect([\"whale\", \"dolphin\", \"starfish\"]).to(contain(\"dolphin\", \"starfish\"))\n```\n\n```objc\n// Objective-C\n\nexpect(@[@\"whale\", @\"dolphin\", @\"starfish\"]).to(contain(@\"dolphin\"));\nexpect(@[@\"whale\", @\"dolphin\", @\"starfish\"]).to(contain(@\"starfish\"));\n```\n\n> `contain` and `beEmpty` expect collections to be instances of\n  `NSArray`, `NSSet`, or a Swift collection composed of `Equatable` elements.\n\nTo test whether a set of elements is present at the beginning or end of\nan ordered collection, use `beginWith` and `endWith`:\n\n```swift\n// Swift\n\n// Passes if the elements in expected appear at the beginning of actual:\nexpect(actual).to(beginWith(expected...))\n\n// Passes if the the elements in expected come at the end of actual:\nexpect(actual).to(endWith(expected...))\n```\n\n```objc\n// Objective-C\n\n// Passes if the elements in expected appear at the beginning of actual:\nexpect(actual).to(beginWith(expected));\n\n// Passes if the the elements in expected come at the end of actual:\nexpect(actual).to(endWith(expected));\n```\n\n> `beginWith` and `endWith` expect collections to be instances of\n  `NSArray`, or ordered Swift collections composed of `Equatable`\n  elements.\n\n  Like `contain`, in Objective-C `beginWith` and `endWith` only support\n  a single argument [for now](https://github.com/Quick/Nimble/issues/27).\n\n## Strings\n\n```swift\n// Swift\n\n// Passes if actual contains substring expected:\nexpect(actual).to(contain(expected))\n\n// Passes if actual begins with substring:\nexpect(actual).to(beginWith(expected))\n\n// Passes if actual ends with substring:\nexpect(actual).to(endWith(expected))\n\n// Passes if actual is an empty string, \"\":\nexpect(actual).to(beEmpty())\n\n// Passes if actual matches the regular expression defined in expected:\nexpect(actual).to(match(expected))\n```\n\n```objc\n// Objective-C\n\n// Passes if actual contains substring expected:\nexpect(actual).to(contain(expected));\n\n// Passes if actual begins with substring:\nexpect(actual).to(beginWith(expected));\n\n// Passes if actual ends with substring:\nexpect(actual).to(endWith(expected));\n\n// Passes if actual is an empty string, \"\":\nexpect(actual).to(beEmpty());\n\n// Passes if actual matches the regular expression defined in expected:\nexpect(actual).to(match(expected))\n```\n\n## Checking if all elements of a collection pass a condition\n\n```swift\n// Swift\n\n// with a custom function:\nexpect([1,2,3,4]).to(allPass({$0 < 5}))\n\n// with another matcher:\nexpect([1,2,3,4]).to(allPass(beLessThan(5)))\n```\n\n```objc\n// Objective-C\n\nexpect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5)));\n```\n\nFor Swift the actual value has to be a SequenceType, e.g. an array, a set or a custom seqence type.\n\nFor Objective-C the actual value has to be a NSFastEnumeration, e.g. NSArray and NSSet, of NSObjects and only the variant which\nuses another matcher is available here.\n\n## Verify collection count\n\n```swift\n// passes if actual collection's count is equal to expected\nexpect(actual).to(haveCount(expected))\n\n// passes if actual collection's count is not equal to expected\nexpect(actual).notTo(haveCount(expected))\n```\n\n```objc\n// passes if actual collection's count is equal to expected\nexpect(actual).to(haveCount(expected))\n\n// passes if actual collection's count is not equal to expected\nexpect(actual).notTo(haveCount(expected))\n```\n\nFor Swift the actual value must be a `CollectionType` such as array, dictionary or set.\n\nFor Objective-C the actual value has to be one of the following classes `NSArray`, `NSDictionary`, `NSSet`, `NSHashTable` or one of their subclasses.\n\n# Writing Your Own Matchers\n\nIn Nimble, matchers are Swift functions that take an expected\nvalue and return a `MatcherFunc` closure. Take `equal`, for example:\n\n```swift\n// Swift\n\npublic func equal<T: Equatable>(expectedValue: T?) -> MatcherFunc<T?> {\n  return MatcherFunc { actualExpression, failureMessage in\n    failureMessage.postfixMessage = \"equal <\\(expectedValue)>\"\n    return actualExpression.evaluate() == expectedValue\n  }\n}\n```\n\nThe return value of a `MatcherFunc` closure is a `Bool` that indicates\nwhether the actual value matches the expectation: `true` if it does, or\n`false` if it doesn't.\n\n> The actual `equal` matcher function does not match when either\n  `actual` or `expected` are nil; the example above has been edited for\n  brevity.\n\nSince matchers are just Swift functions, you can define them anywhere:\nat the top of your test file, in a file shared by all of your tests, or\nin an Xcode project you distribute to others.\n\n> If you write a matcher you think everyone can use, consider adding it\n  to Nimble's built-in set of matchers by sending a pull request! Or\n  distribute it yourself via GitHub.\n\nFor examples of how to write your own matchers, just check out the\n[`Matchers` directory](https://github.com/Quick/Nimble/tree/master/Nimble/Matchers)\nto see how Nimble's built-in set of matchers are implemented. You can\nalso check out the tips below.\n\n## Lazy Evaluation\n\n`actualExpression` is a lazy, memoized closure around the value provided to the\n`expect` function. The expression can either be a closure or a value directly\npassed to `expect(...)`. In order to determine whether that value matches,\ncustom matchers should call `actualExpression.evaluate()`:\n\n```swift\n// Swift\n\npublic func beNil<T>() -> MatcherFunc<T?> {\n  return MatcherFunc { actualExpression, failureMessage in\n    failureMessage.postfixMessage = \"be nil\"\n    return actualExpression.evaluate() == nil\n  }\n}\n```\n\nIn the above example, `actualExpression` is not `nil`--it is a closure\nthat returns a value. The value it returns, which is accessed via the\n`evaluate()` method, may be `nil`. If that value is `nil`, the `beNil`\nmatcher function returns `true`, indicating that the expectation passed.\n\nUse `expression.isClosure` to determine if the expression will be invoking\na closure to produce its value.\n\n## Type Checking via Swift Generics\n\nUsing Swift's generics, matchers can constrain the type of the actual value\npassed to the `expect` function by modifying the return type.\n\nFor example, the following matcher, `haveDescription`, only accepts actual\nvalues that implement the `Printable` protocol. It checks their `description`\nagainst the one provided to the matcher function, and passes if they are the same:\n\n```swift\n// Swift\n\npublic func haveDescription(description: String) -> MatcherFunc<Printable?> {\n  return MatcherFunc { actual, failureMessage in\n    return actual.evaluate().description == description\n  }\n}\n```\n\n## Customizing Failure Messages\n\nBy default, Nimble outputs the following failure message when an\nexpectation fails:\n\n```\nexpected to match, got <\\(actual)>\n```\n\nYou can customize this message by modifying the `failureMessage` struct\nfrom within your `MatcherFunc` closure. To change the verb \"match\" to\nsomething else, update the `postfixMessage` property:\n\n```swift\n// Swift\n\n// Outputs: expected to be under the sea, got <\\(actual)>\nfailureMessage.postfixMessage = \"be under the sea\"\n```\n\nYou can change how the `actual` value is displayed by updating\n`failureMessage.actualValue`. Or, to remove it altogether, set it to\n`nil`:\n\n```swift\n// Swift\n\n// Outputs: expected to be under the sea\nfailureMessage.actualValue = nil\nfailureMessage.postfixMessage = \"be under the sea\"\n```\n\n## Supporting Objective-C\n\nTo use a custom matcher written in Swift from Objective-C, you'll have\nto extend the `NMBObjCMatcher` class, adding a new class method for your\ncustom matcher. The example below defines the class method\n`+[NMBObjCMatcher beNilMatcher]`:\n\n```swift\n// Swift\n\nextension NMBObjCMatcher {\n  public class func beNilMatcher() -> NMBObjCMatcher {\n    return NMBObjCMatcher { actualBlock, failureMessage, location in\n      let block = ({ actualBlock() as NSObject? })\n      let expr = Expression(expression: block, location: location)\n      return beNil().matches(expr, failureMessage: failureMessage)\n    }\n  }\n}\n```\n\nThe above allows you to use the matcher from Objective-C:\n\n```objc\n// Objective-C\n\nexpect(actual).to([NMBObjCMatcher beNilMatcher]());\n```\n\nTo make the syntax easier to use, define a C function that calls the\nclass method:\n\n```objc\n// Objective-C\n\nFOUNDATION_EXPORT id<NMBMatcher> beNil() {\n  return [NMBObjCMatcher beNilMatcher];\n}\n```\n\n### Properly Handling `nil` in Objective-C Matchers\n\nWhen supporting Objective-C, make sure you handle `nil` appropriately.\nLike [Cedar](https://github.com/pivotal/cedar/issues/100),\n**most matchers do not match with nil**. This is to bring prevent test\nwriters from being surprised by `nil` values where they did not expect\nthem.\n\nNimble provides the `beNil` matcher function for test writer that want\nto make expectations on `nil` objects:\n\n```objc\n// Objective-C\n\nexpect(nil).to(equal(nil)); // fails\nexpect(nil).to(beNil());    // passes\n```\n\nIf your matcher does not want to match with nil, you use `NonNilMatcherFunc`\nand the `canMatchNil` constructor on `NMBObjCMatcher`. Using both types will\nautomatically generate expected value failure messages when they're nil.\n\n```swift\n\npublic func beginWith<S: SequenceType, T: Equatable where S.Generator.Element == T>(startingElement: T) -> NonNilMatcherFunc<S> {\n    return NonNilMatcherFunc { actualExpression, failureMessage in\n        failureMessage.postfixMessage = \"begin with <\\(startingElement)>\"\n        if let actualValue = actualExpression.evaluate() {\n            var actualGenerator = actualValue.generate()\n            return actualGenerator.next() == startingElement\n        }\n        return false\n    }\n}\n\nextension NMBObjCMatcher {\n    public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher {\n        return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in\n            let actual = actualExpression.evaluate()\n            let expr = actualExpression.cast { $0 as? NMBOrderedCollection }\n            return beginWith(expected).matches(expr, failureMessage: failureMessage)\n        }\n    }\n}\n```\n\n# Installing Nimble\n\n> Nimble can be used on its own, or in conjunction with its sister\n  project, [Quick](https://github.com/Quick/Quick). To install both\n  Quick and Nimble, follow [the installation instructions in the Quick\n  README](https://github.com/Quick/Quick#how-to-install-quick).\n\nNimble can currently be installed in one of two ways: using CocoaPods, or with\ngit submodules.\n\n- The `swift-2.0` branch support Swift 2.0.\n- The `master` branch of Nimble supports Swift 1.2.\n- For Swift 1.1 support, use the `swift-1.1` branch.\n\n## Installing Nimble as a Submodule\n\nTo use Nimble as a submodule to test your iOS or OS X applications, follow these\n4 easy steps:\n\n1. Clone the Nimble repository\n2. Add Nimble.xcodeproj to the Xcode workspace for your project\n3. Link Nimble.framework to your test target\n4. Start writing expectations!\n\nFor more detailed instructions on each of these steps,\nread [How to Install Quick](https://github.com/Quick/Quick#how-to-install-quick).\nIgnore the steps involving adding Quick to your project in order to\ninstall just Nimble.\n\n## Installing Nimble via CocoaPods\n\nTo use Nimble in CocoaPods to test your iOS or OS X applications, add Nimble to\nyour podfile and add the ```use_frameworks!``` line to enable Swift support for\nCocoapods.\n\n```ruby\nplatform :ios, '8.0'\n\nsource 'https://github.com/CocoaPods/Specs.git'\n\n# Whatever pods you need for your app go here\n\ntarget 'YOUR_APP_NAME_HERE_Tests', :exclusive => true do\n  use_frameworks!\n  # If you're using Swift 2.0 (Xcode 7), use this:\n  pod 'Nimble', '~> 2.0.0'\n  # If you're using Swift 1.2 (Xcode 6), use this:\n  pod 'Nimble', '~> 1.0.0'\nend\n```\n\nFinally run `pod install`.\n\n## Using Nimble without XCTest\n\nNimble is integrated with XCTest to allow it work well when used in Xcode test\nbundles, however it can also be used in a standalone app. After installing\nNimble using one of the above methods, there are two additional steps required\nto make this work.\n\n1. Create a custom assertion handler and assign an instance of it to the\n   global `NimbleAssertionHandler` variable. For example:\n\n```swift\nclass MyAssertionHandler : AssertionHandler {\n    func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {\n        if (!assertion) {\n            print(\"Expectation failed: \\(message.stringValue)\")\n        }\n    }\n}\n```\n```swift\n// Somewhere before you use any assertions\nNimbleAssertionHandler = MyAssertionHandler()\n```\n\n2. Add a post-build action to fix an issue with the Swift XCTest support\n   library being unnecessarily copied into your app\n  * Edit your scheme in Xcode, and navigate to Build -> Post-actions\n  * Click the \"+\" icon and select \"New Run Script Action\"\n  * Open the \"Provide build settings from\" dropdown and select your target\n  * Enter the following script contents:\n```\nrm \"${SWIFT_STDLIB_TOOL_DESTINATION_DIR}/libswiftXCTest.dylib\"\n```\n\nYou can now use Nimble assertions in your code and handle failures as you see\nfit.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/circle.yml",
    "content": "machine:\n  xcode:\n    version: \"7.0\"\n\ntest:\n  override:\n    - NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 ./test ios\n    - NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 ./test osx\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/script/release",
    "content": "#!/usr/bin/env sh\nREMOTE_BRANCH=master\nPOD_NAME=Nimble\nPODSPEC=Nimble.podspec\nGITHUB_TAGS_URL=https://github.com/Quick/Nimble/tags\nCARTHAGE_FRAMEWORK_NAME=Nimble\n\nCARTHAGE=${CARTHAGE:-carthage}\nPOD=${COCOAPODS:-pod}\n\nfunction help {\n    echo \"Usage: release VERSION RELEASE_NOTES [-f]\"\n    echo\n    echo \"VERSION should be the version to release, should not include the 'v' prefix\"\n    echo \"RELEASE_NOTES should be a file that lists all the release notes for this version\"\n    echo \"              if file does not exist, creates a git-style commit with a diff as a comment\"\n    echo\n    echo \"FLAGS\"\n    echo \"  -f  Forces override of tag\"\n    echo\n    echo \"  Example: ./release 1.0.0-rc.2 ./release-notes.txt\"\n    echo\n    echo \"HINT: use 'git diff <PREVIOUS_TAG>...HEAD' to build the release notes\"\n    echo\n    exit 2\n}\n\nfunction die {\n    echo \"[ERROR] $@\"\n    echo\n    exit 1\n}\n\nif [ $# -lt 2 ]; then\n    help\nfi\n\nVERSION=$1\nRELEASE_NOTES=$2\nFORCE_TAG=$3\n\nVERSION_TAG=\"v$VERSION\"\n\necho \"-> Verifying Local Directory for Release\"\n\nif [ -z \"`which $CARTHAGE`\" ]; then\n    die \"Carthage is required to produce a release. Aborting.\"\nfi\necho \" > Carthage is installed\"\n\nif [ -z \"`which $POD`\" ]; then\n    die \"Cocoapods is required to produce a release. Aborting.\"\nfi\necho \" > Cocoapods is installed\"\n\necho \" > Is this a reasonable tag?\"\n\necho $VERSION_TAG | grep -q \"^vv\"\nif [ $? -eq 0 ]; then\n    die \"This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix.\"\nfi\n\necho $VERSION_TAG | grep -q -E \"^v\\d+\\.\\d+\\.\\d+(-\\w+(\\.\\d)?)?\\$\"\nif [ $? -ne 0 ]; then\n    die \"This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form.\"\nfi\n\necho \" > Is this version ($VERSION) unique?\"\ngit describe --exact-match \"$VERSION_TAG\" > /dev/null 2>&1\nif [ $? -eq 0 ]; then\n    if [ -z \"$FORCE_TAG\" ]; then\n        die \"This tag ($VERSION) already exists. Aborting. Append '-f' to override\"\n    else\n        echo \" > NO, but force was specified.\"\n    fi\nelse\n    echo \" > Yes, tag is unique\"\nfi\n\nif [ ! -f \"$RELEASE_NOTES\" ]; then\n    echo \" > Failed to find $RELEASE_NOTES. Prompting editor\"\n    RELEASE_NOTES=.release-changes\n    LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format=\"%(refname:short)\" | grep -E \"^v\\d+\\.\\d+\\.\\d+(-\\w+(\\.\\d)?)?\\$\" | ruby -e 'puts STDIN.read.split(\"\\n\").sort { |a,b| Gem::Version.new(a.gsub(/^v/, \"\")) <=> Gem::Version.new(b.gsub(/^v/, \"\")) }.last'`\n    echo \" > Latest tag ${LATEST_TAG}\"\n    echo \"${POD_NAME} v$VERSION\" > $RELEASE_NOTES\n    echo \"================\" >> $RELEASE_NOTES\n    echo >> $RELEASE_NOTES\n    echo \"# Changelog from ${LATEST_TAG}..HEAD\" >> $RELEASE_NOTES\n    git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES\n    $EDITOR $RELEASE_NOTES\n    diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1\n    STATUS=$?\n    rm ${RELEASE_NOTES}.backup\n    if [ $STATUS -eq 0 ]; then\n        rm $RELEASE_NOTES\n        die \"No changes in release notes file. Aborting.\"\n    fi\nfi\necho \" > Release notes: $RELEASE_NOTES\"\n\nif [ ! -f \"$PODSPEC\" ]; then\n    die \"Cannot find podspec: $PODSPEC. Aborting.\"\nfi\necho \" > Podspec exists\"\n\ngit config --get user.signingkey > /dev/null || {\n    echo \"[ERROR] No PGP found to sign tag. Aborting.\"\n    echo\n    echo \"  Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source.\"\n    echo \"  From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any\"\n    echo \"  intermediate between you and the end-users to modify the git repository.\"\n    echo\n    echo \"  While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'\"\n    echo \"  from the official maintainers.\"\n    echo\n    echo \"  If you're creating your PGP key for the first time, use RSA with at least 4096 bits.\"\n    echo\n    echo \"Related resources:\"\n    echo \" - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work\"\n    echo \" - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a\"\n    echo\n    exit 2\n}\necho \" > Found PGP key for git\"\n\n# Verify cocoapods trunk ownership\npod trunk me | grep -q \"$POD_NAME\" || die \"You do not have access to pod repository $POD_NAME. Aborting.\"\necho \" > Verified ownership to $POD_NAME pod\"\n\n\necho \"--- Releasing version $VERSION (tag: $VERSION_TAG)...\"\n\nfunction restore_podspec {\n    if [ -f \"${PODSPEC}.backup\" ]; then\n        mv -f ${PODSPEC}{.backup,}\n    fi\n}\n\necho \"-> Ensuring no differences to origin/$REMOTE_BRANCH\"\ngit fetch origin || die \"Failed to fetch origin\"\ngit diff --quiet HEAD \"origin/$REMOTE_BRANCH\" || die \"HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely\"\n\necho \"-> Building Carthage release\"\n$CARTHAGE build --no-skip-current || die \"Failed to build framework for carthage\"\n\necho \"-> Setting podspec version\"\ncat \"$PODSPEC\" | grep 's.version' | grep -q \"\\\"$VERSION\\\"\"\nSET_PODSPEC_VERSION=$?\nif [ $SET_PODSPEC_VERSION -eq 0 ]; then\n    echo \" > Podspec already set to $VERSION. Skipping.\"\nelse\n    sed -i.backup \"s/s.version *= *\\\".*\\\"/s.version      = \\\"$VERSION\\\"/g\" \"$PODSPEC\" || {\n        restore_podspec\n        die \"Failed to update version in podspec\"\n    }\n\n    git add ${PODSPEC} || { restore_podspec; die \"Failed to add ${PODSPEC} to INDEX\"; }\n    git commit -m \"Bumping version to $VERSION\" || { restore_podspec; die \"Failed to push updated version: $VERSION\"; }\nfi\n\nif [ -z \"$FORCE_TAG\" ]; then\n    echo \"-> Tagging version\"\n    git tag -s \"$VERSION_TAG\" -F \"$RELEASE_NOTES\" || die \"Failed to tag version\"\n    echo \"-> Pushing tag to origin\"\n    git push origin \"$VERSION_TAG\" || die \"Failed to push tag '$VERSION_TAG' to origin\"\nelse\n    echo \"-> Tagging version (force)\"\n    git tag -f -s \"$VERSION_TAG\" -F \"$RELEASE_NOTES\" || die \"Failed to tag version\"\n    echo \"-> Pushing tag to origin (force)\"\n    git push origin \"$VERSION_TAG\" -f || die \"Failed to push tag '$VERSION_TAG' to origin\"\nfi\n\nif [ $SET_PODSPEC_VERSION -ne 0 ]; then\n    rm $RELEASE_NOTES\n    git push origin \"$REMOTE_BRANCH\" || die \"Failed to push to origin\"\n    echo \" > Pushed version to origin\"\nfi\n\necho\necho \"---------------- Released as $VERSION_TAG ----------------\"\necho \necho \"Archiving carthage release...\"\n\n$CARTHAGE archive \"$CARTHAGE_FRAMEWORK_NAME\" || die \"Failed to archive framework for carthage\"\n\necho\necho \"Pushing to pod trunk...\"\n\n$POD trunk push \"$PODSPEC\"\n\necho\necho \"================ Finalizing the Release ================\"\necho\necho \" - Go to $GITHUB_TAGS_URL and mark this as a release.\"\necho \"   - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for Github styling.\"\necho \"   - Attach ${CARTHAGE_FRAMEWORK_NAME}.framework.zip to it.\"\necho \" - Announce!\"\n\nrm ${PODSPEC}.backup\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Externals/Nimble/test",
    "content": "#!/bin/sh\n\nBUILD_DIR=`pwd`/build\nLATEST_IOS_SDK_VERSION=`xcodebuild -showsdks | grep iphonesimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split(\"\\n\").last'`\nLATEST_OSX_SDK_VERSION=`xcodebuild -showsdks | grep 'macosx' | cut -d ' ' -f 3 | ruby -e 'puts STDIN.read.chomp.split(\"\\n\").last'`\nBUILD_IOS_SDK_VERSION=${NIMBLE_BUILD_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION}\nRUNTIME_IOS_SDK_VERSION=${NIMBLE_RUNTIME_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION}\nBUILD_OSX_SDK_VERSION=${NIMBLE_BUILD_OSX_SDK_VERSION:-$LATEST_OSX_SDK_VERSION}\n\nset -e\n\nGREEN=\"\\x1B[01;92m\"\nCLEAR=\"\\x1B[0m\"\n\nfunction color_if_overridden {\n    local actual=$1\n    local env_var=$2\n    if [ -z \"$env_var\" ]; then\n        printf \"$actual\"\n    else\n        printf \"$GREEN$actual$CLEAR\"\n    fi\n}\n\nfunction print_env {\n    echo \"=== Environment ===\"\n    echo \" iOS:\"\n    echo \"   Latest iOS SDK: $LATEST_IOS_SDK_VERSION\"\n    echo \"   Building with iOS SDK: `color_if_overridden $BUILD_IOS_SDK_VERSION $NIMBLE_BUILD_IOS_SDK_VERSION`\"\n    echo \"   Running with iOS SDK: `color_if_overridden $RUNTIME_IOS_SDK_VERSION $NIMBLE_RUNTIME_IOS_SDK_VERSION`\"\n    echo\n    echo \" Mac OS X:\"\n    echo \"   Latest OS X SDK: $LATEST_OSX_SDK_VERSION\"\n    echo \"   Building with OS X SDK: `color_if_overridden $BUILD_OSX_SDK_VERSION $NIMBLE_BUILD_OSX_SDK_VERSION`\"\n    echo\n    echo \"======= END =======\"\n    echo\n}\n\nfunction run {\n    echo \"$GREEN==>$CLEAR $@\"\n    \"$@\"\n}\n\nfunction test_ios {\n    run osascript -e 'tell app \"iOS Simulator\" to quit'\n    run xcodebuild -project Nimble.xcodeproj -scheme \"Nimble-iOS\" -configuration \"Debug\" -sdk \"iphonesimulator$BUILD_IOS_SDK_VERSION\" -destination \"name=iPad Air,OS=$RUNTIME_IOS_SDK_VERSION\" build test\n\n    run osascript -e 'tell app \"iOS Simulator\" to quit'\n    run xcodebuild -project Nimble.xcodeproj -scheme \"Nimble-iOS\" -configuration \"Debug\" -sdk \"iphonesimulator$BUILD_IOS_SDK_VERSION\" -destination \"name=iPhone 5s,OS=$RUNTIME_IOS_SDK_VERSION\" build test\n}\n\nfunction test_osx {\n    run xcodebuild -project Nimble.xcodeproj -scheme \"Nimble-OSX\" -configuration \"Debug\" -sdk \"macosx$BUILD_OSX_SDK_VERSION\" build test\n}\n\nfunction test() {\n    test_ios\n    test_osx\n}\n\nfunction clean {\n    run rm -rf ~/Library/Developer/Xcode/DerivedData\\; true\n}\n\nfunction help {\n    echo \"Usage: $0 COMMANDS\"\n    echo\n    echo \"COMMANDS:\"\n    echo \" clean        - Cleans the derived data directory of Xcode. Assumes default location\"\n    echo \" ios          - Runs the tests as an iOS device\"\n    echo \" osx          - Runs the tests on Mac OS X 10.10 (Yosemite and newer only)\"\n    echo \" all          - Runs both ios and osx tests\"\n    echo \" help         - Displays this help\"\n    echo\n    exit 1\n}\n\nfunction main {\n    print_env\n    for arg in $@\n    do\n        case \"$arg\" in\n            clean) clean ;;\n            ios) test_ios ;;\n            osx) test_osx ;;\n            test) test ;;\n            all) test ;;\n            help) help ;;\n        esac\n    done\n\n    if [ $# -eq 0 ]; then\n        clean\n        test\n    fi\n}\n\nmain $@\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/LICENSE",
    "content": "Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2014, Quick Team\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/Callsite.swift",
    "content": "/**\n    An object encapsulating the file and line number at which\n    a particular example is defined.\n*/\nfinal public class Callsite: NSObject {\n    /**\n        The absolute path of the file in which an example is defined.\n    */\n    public let file: String\n\n    /**\n        The line number on which an example is defined.\n    */\n    public let line: UInt\n\n    internal init(file: String, line: UInt) {\n        self.file = file\n        self.line = line\n    }\n}\n\n/**\n    Returns a boolean indicating whether two Callsite objects are equal.\n    If two callsites are in the same file and on the same line, they must be equal.\n*/\npublic func ==(lhs: Callsite, rhs: Callsite) -> Bool {\n    return lhs.file == rhs.file && lhs.line == rhs.line\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/Configuration/Configuration.swift",
    "content": "/**\n    A closure that temporarily exposes a Configuration object within\n    the scope of the closure.\n*/\npublic typealias QuickConfigurer = (configuration: Configuration) -> ()\n\n/**\n    A closure that, given metadata about an example, returns a boolean value\n    indicating whether that example should be run.\n*/\npublic typealias ExampleFilter = (example: Example) -> Bool\n\n/**\n    A configuration encapsulates various options you can use\n    to configure Quick's behavior.\n*/\nfinal public class Configuration: NSObject {\n    internal let exampleHooks = ExampleHooks()\n    internal let suiteHooks = SuiteHooks()\n    internal var exclusionFilters: [ExampleFilter] = [{ example in\n        if let pending = example.filterFlags[Filter.pending] {\n            return pending\n        } else {\n            return false\n        }\n    }]\n    internal var inclusionFilters: [ExampleFilter] = [{ example in\n        if let focused = example.filterFlags[Filter.focused] {\n            return focused\n        } else {\n            return false\n        }\n    }]\n\n    /**\n        Run all examples if none match the configured filters. True by default.\n    */\n    public var runAllWhenEverythingFiltered = true\n\n    /**\n        Registers an inclusion filter.\n\n        All examples are filtered using all inclusion filters.\n        The remaining examples are run. If no examples remain, all examples are run.\n\n        - parameter filter: A filter that, given an example, returns a value indicating\n                       whether that example should be included in the examples\n                       that are run.\n    */\n    public func include(filter: ExampleFilter) {\n        inclusionFilters.append(filter)\n    }\n\n    /**\n        Registers an exclusion filter.\n\n        All examples that remain after being filtered by the inclusion filters are\n        then filtered via all exclusion filters.\n\n        - parameter filter: A filter that, given an example, returns a value indicating\n                       whether that example should be excluded from the examples\n                       that are run.\n    */\n    public func exclude(filter: ExampleFilter) {\n        exclusionFilters.append(filter)\n    }\n\n    /**\n        Identical to Quick.Configuration.beforeEach, except the closure is\n        provided with metadata on the example that the closure is being run\n        prior to.\n    */\n    @objc(beforeEachWithMetadata:)\n    public func beforeEach(closure: BeforeExampleWithMetadataClosure) {\n        exampleHooks.appendBefore(closure)\n    }\n\n    /**\n        Like Quick.DSL.beforeEach, this configures Quick to execute the\n        given closure before each example that is run. The closure\n        passed to this method is executed before each example Quick runs,\n        globally across the test suite. You may call this method multiple\n        times across mulitple +[QuickConfigure configure:] methods in order\n        to define several closures to run before each example.\n\n        Note that, since Quick makes no guarantee as to the order in which\n        +[QuickConfiguration configure:] methods are evaluated, there is no\n        guarantee as to the order in which beforeEach closures are evaluated\n        either. Mulitple beforeEach defined on a single configuration, however,\n        will be executed in the order they're defined.\n\n        - parameter closure: The closure to be executed before each example\n                        in the test suite.\n    */\n    public func beforeEach(closure: BeforeExampleClosure) {\n        exampleHooks.appendBefore(closure)\n    }\n\n    /**\n        Identical to Quick.Configuration.afterEach, except the closure\n        is provided with metadata on the example that the closure is being\n        run after.\n    */\n    @objc(afterEachWithMetadata:)\n    public func afterEach(closure: AfterExampleWithMetadataClosure) {\n        exampleHooks.appendAfter(closure)\n    }\n\n    /**\n        Like Quick.DSL.afterEach, this configures Quick to execute the\n        given closure after each example that is run. The closure\n        passed to this method is executed after each example Quick runs,\n        globally across the test suite. You may call this method multiple\n        times across mulitple +[QuickConfigure configure:] methods in order\n        to define several closures to run after each example.\n\n        Note that, since Quick makes no guarantee as to the order in which\n        +[QuickConfiguration configure:] methods are evaluated, there is no\n        guarantee as to the order in which afterEach closures are evaluated\n        either. Mulitple afterEach defined on a single configuration, however,\n        will be executed in the order they're defined.\n\n        - parameter closure: The closure to be executed before each example\n                        in the test suite.\n    */\n    public func afterEach(closure: AfterExampleClosure) {\n        exampleHooks.appendAfter(closure)\n    }\n\n    /**\n        Like Quick.DSL.beforeSuite, this configures Quick to execute\n        the given closure prior to any and all examples that are run.\n        The two methods are functionally equivalent.\n    */\n    public func beforeSuite(closure: BeforeSuiteClosure) {\n        suiteHooks.appendBefore(closure)\n    }\n\n    /**\n        Like Quick.DSL.afterSuite, this configures Quick to execute\n        the given closure after all examples have been run.\n        The two methods are functionally equivalent.\n    */\n    public func afterSuite(closure: AfterSuiteClosure) {\n        suiteHooks.appendAfter(closure)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/Configuration/QuickConfiguration.h",
    "content": "#import <Foundation/Foundation.h>\n\n@class Configuration;\n\n/**\n Subclass QuickConfiguration and override the +[QuickConfiguration configure:]\n method in order to configure how Quick behaves when running specs, or to define\n shared examples that are used across spec files.\n */\n@interface QuickConfiguration : NSObject\n\n/**\n This method is executed on each subclass of this class before Quick runs\n any examples. You may override this method on as many subclasses as you like, but\n there is no guarantee as to the order in which these methods are executed.\n\n You can override this method in order to:\n\n 1. Configure how Quick behaves, by modifying properties on the Configuration object.\n    Setting the same properties in several methods has undefined behavior.\n\n 2. Define shared examples using `sharedExamples`.\n\n @param configuration A mutable object that is used to configure how Quick behaves on\n                      a framework level. For details on all the options, see the\n                      documentation in Configuration.swift.\n */\n+ (void)configure:(Configuration *)configuration;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/Configuration/QuickConfiguration.m",
    "content": "#import \"QuickConfiguration.h\"\n#import \"World.h\"\n#import <objc/runtime.h>\n\ntypedef void (^QCKClassEnumerationBlock)(Class klass);\n\n/**\n Finds all direct subclasses of the given class and passes them to the block provided.\n The classes are iterated over in the order that objc_getClassList returns them.\n\n @param klass The base class to find subclasses of.\n @param block A block that takes a Class. This block will be executed once for each subclass of klass.\n */\nvoid qck_enumerateSubclasses(Class klass, QCKClassEnumerationBlock block) {\n    Class *classes = NULL;\n    int classesCount = objc_getClassList(NULL, 0);\n\n    if (classesCount > 0) {\n        classes = (Class *)calloc(sizeof(Class), classesCount);\n        classesCount = objc_getClassList(classes, classesCount);\n\n        Class subclass, superclass;\n        for(int i = 0; i < classesCount; i++) {\n            subclass = classes[i];\n            superclass = class_getSuperclass(subclass);\n            if (superclass == klass && block) {\n                block(subclass);\n            }\n        }\n\n        free(classes);\n    }\n}\n\n@implementation QuickConfiguration\n\n#pragma mark - Object Lifecycle\n\n/**\n QuickConfiguration is not meant to be instantiated; it merely provides a hook\n for users to configure how Quick behaves. Raise an exception if an instance of\n QuickConfiguration is created.\n */\n- (instancetype)init {\n    NSString *className = NSStringFromClass([self class]);\n    NSString *selectorName = NSStringFromSelector(@selector(configure:));\n    [NSException raise:NSInternalInconsistencyException\n                format:@\"%@ is not meant to be instantiated; \"\n     @\"subclass %@ and override %@ to configure Quick.\",\n     className, className, selectorName];\n    return nil;\n}\n\n#pragma mark - NSObject Overrides\n\n/**\n Hook into when QuickConfiguration is initialized in the runtime in order to\n call +[QuickConfiguration configure:] on each of its subclasses.\n */\n+ (void)initialize {\n    // Only enumerate over the subclasses of QuickConfiguration, not any of its subclasses.\n    if ([self class] == [QuickConfiguration class]) {\n\n        // Only enumerate over subclasses once, even if +[QuickConfiguration initialize]\n        // were to be called several times. This is necessary because +[QuickSpec initialize]\n        // manually calls +[QuickConfiguration initialize].\n        static dispatch_once_t onceToken;\n        dispatch_once(&onceToken, ^{\n            qck_enumerateSubclasses([QuickConfiguration class], ^(__unsafe_unretained Class klass) {\n                [[World sharedWorld] configure:^(Configuration *configuration) {\n                    [klass configure:configuration];\n                }];\n            });\n            [[World sharedWorld] finalizeConfiguration];\n        });\n    }\n}\n\n#pragma mark - Public Interface\n\n+ (void)configure:(Configuration *)configuration { }\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/DSL/DSL.swift",
    "content": "/**\n    Defines a closure to be run prior to any examples in the test suite.\n    You may define an unlimited number of these closures, but there is no\n    guarantee as to the order in which they're run.\n\n    If the test suite crashes before the first example is run, this closure\n    will not be executed.\n\n    - parameter closure: The closure to be run prior to any examples in the test suite.\n*/\npublic func beforeSuite(closure: BeforeSuiteClosure) {\n    World.sharedWorld().beforeSuite(closure)\n}\n\n/**\n    Defines a closure to be run after all of the examples in the test suite.\n    You may define an unlimited number of these closures, but there is no\n    guarantee as to the order in which they're run.\n\n    If the test suite crashes before all examples are run, this closure\n    will not be executed.\n\n    - parameter closure: The closure to be run after all of the examples in the test suite.\n*/\npublic func afterSuite(closure: AfterSuiteClosure) {\n    World.sharedWorld().afterSuite(closure)\n}\n\n/**\n    Defines a group of shared examples. These examples can be re-used in several locations\n    by using the `itBehavesLike` function.\n\n    - parameter name: The name of the shared example group. This must be unique across all shared example\n                 groups defined in a test suite.\n    - parameter closure: A closure containing the examples. This behaves just like an example group defined\n                    using `describe` or `context`--the closure may contain any number of `beforeEach`\n                    and `afterEach` closures, as well as any number of examples (defined using `it`).\n*/\npublic func sharedExamples(name: String, closure: () -> ()) {\n    World.sharedWorld().sharedExamples(name, closure: { (NSDictionary) in closure() })\n}\n\n/**\n    Defines a group of shared examples. These examples can be re-used in several locations\n    by using the `itBehavesLike` function.\n\n    - parameter name: The name of the shared example group. This must be unique across all shared example\n                 groups defined in a test suite.\n    - parameter closure: A closure containing the examples. This behaves just like an example group defined\n                    using `describe` or `context`--the closure may contain any number of `beforeEach`\n                    and `afterEach` closures, as well as any number of examples (defined using `it`).\n\n                    The closure takes a SharedExampleContext as an argument. This context is a function\n                    that can be executed to retrieve parameters passed in via an `itBehavesLike` function.\n*/\npublic func sharedExamples(name: String, closure: SharedExampleClosure) {\n    World.sharedWorld().sharedExamples(name, closure: closure)\n}\n\n/**\n    Defines an example group. Example groups are logical groupings of examples.\n    Example groups can share setup and teardown code.\n\n    - parameter description: An arbitrary string describing the example group.\n    - parameter closure: A closure that can contain other examples.\n    - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups.\n*/\npublic func describe(description: String, flags: FilterFlags = [:], closure: () -> ()) {\n    World.sharedWorld().describe(description, flags: flags, closure: closure)\n}\n\n/**\n    Defines an example group. Equivalent to `describe`.\n*/\npublic func context(description: String, flags: FilterFlags = [:], closure: () -> ()) {\n    describe(description, flags: flags, closure: closure)\n}\n\n/**\n    Defines a closure to be run prior to each example in the current example\n    group. This closure is not run for pending or otherwise disabled examples.\n    An example group may contain an unlimited number of beforeEach. They'll be\n    run in the order they're defined, but you shouldn't rely on that behavior.\n\n    - parameter closure: The closure to be run prior to each example.\n*/\npublic func beforeEach(closure: BeforeExampleClosure) {\n    World.sharedWorld().beforeEach(closure)\n}\n\n/**\n    Identical to Quick.DSL.beforeEach, except the closure is provided with\n    metadata on the example that the closure is being run prior to.\n*/\npublic func beforeEach(closure: BeforeExampleWithMetadataClosure) {\n    World.sharedWorld().beforeEach(closure: closure)\n}\n\n/**\n    Defines a closure to be run after each example in the current example\n    group. This closure is not run for pending or otherwise disabled examples.\n    An example group may contain an unlimited number of afterEach. They'll be\n    run in the order they're defined, but you shouldn't rely on that behavior.\n\n    - parameter closure: The closure to be run after each example.\n*/\npublic func afterEach(closure: AfterExampleClosure) {\n    World.sharedWorld().afterEach(closure)\n}\n\n/**\n    Identical to Quick.DSL.afterEach, except the closure is provided with\n    metadata on the example that the closure is being run after.\n*/\npublic func afterEach(closure: AfterExampleWithMetadataClosure) {\n    World.sharedWorld().afterEach(closure: closure)\n}\n\n/**\n    Defines an example. Examples use assertions to demonstrate how code should\n    behave. These are like \"tests\" in XCTest.\n\n    - parameter description: An arbitrary string describing what the example is meant to specify.\n    - parameter closure: A closure that can contain assertions.\n    - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups.\n                  Empty by default.\n    - parameter file: The absolute path to the file containing the example. A sensible default is provided.\n    - parameter line: The line containing the example. A sensible default is provided.\n*/\npublic func it(description: String, flags: FilterFlags = [:], file: String = __FILE__, line: UInt = __LINE__, closure: () -> ()) {\n    World.sharedWorld().it(description, flags: flags, file: file, line: line, closure: closure)\n}\n\n/**\n    Inserts the examples defined using a `sharedExamples` function into the current example group.\n    The shared examples are executed at this location, as if they were written out manually.\n\n    - parameter name: The name of the shared examples group to be executed. This must be identical to the\n                 name of a shared examples group defined using `sharedExamples`. If there are no shared\n                 examples that match the name given, an exception is thrown and the test suite will crash.\n    - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups.\n                  Empty by default.\n    - parameter file: The absolute path to the file containing the current example group. A sensible default is provided.\n    - parameter line: The line containing the current example group. A sensible default is provided.\n*/\npublic func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = __FILE__, line: UInt = __LINE__) {\n    itBehavesLike(name, flags: flags, file: file, line: line, sharedExampleContext: { return [:] })\n}\n\n/**\n    Inserts the examples defined using a `sharedExamples` function into the current example group.\n    The shared examples are executed at this location, as if they were written out manually.\n    This function also passes those shared examples a context that can be evaluated to give the shared\n    examples extra information on the subject of the example.\n\n    - parameter name: The name of the shared examples group to be executed. This must be identical to the\n                 name of a shared examples group defined using `sharedExamples`. If there are no shared\n                 examples that match the name given, an exception is thrown and the test suite will crash.\n    - parameter sharedExampleContext: A closure that, when evaluated, returns key-value pairs that provide the\n                                 shared examples with extra information on the subject of the example.\n    - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups.\n                  Empty by default.\n    - parameter file: The absolute path to the file containing the current example group. A sensible default is provided.\n    - parameter line: The line containing the current example group. A sensible default is provided.\n*/\npublic func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = __FILE__, line: UInt = __LINE__, sharedExampleContext: SharedExampleContext) {\n    World.sharedWorld().itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line)\n}\n\n/**\n    Defines an example or example group that should not be executed. Use `pending` to temporarily disable\n    examples or groups that should not be run yet.\n\n    - parameter description: An arbitrary string describing the example or example group.\n    - parameter closure: A closure that will not be evaluated.\n*/\npublic func pending(description: String, closure: () -> ()) {\n    World.sharedWorld().pending(description, closure: closure)\n}\n\n/**\n    Use this to quickly mark a `describe` closure as pending.\n    This disables all examples within the closure.\n*/\npublic func xdescribe(description: String, flags: FilterFlags, closure: () -> ()) {\n    World.sharedWorld().xdescribe(description, flags: flags, closure: closure)\n}\n\n/**\n    Use this to quickly mark a `context` closure as pending.\n    This disables all examples within the closure.\n*/\npublic func xcontext(description: String, flags: FilterFlags, closure: () -> ()) {\n    xdescribe(description, flags: flags, closure: closure)\n}\n\n/**\n    Use this to quickly mark an `it` closure as pending.\n    This disables the example and ensures the code within the closure is never run.\n*/\npublic func xit(description: String, flags: FilterFlags = [:], file: String = __FILE__, line: UInt = __LINE__, closure: () -> ()) {\n    World.sharedWorld().xit(description, flags: flags, file: file, line: line, closure: closure)\n}\n\n/**\n    Use this to quickly focus a `describe` closure, focusing the examples in the closure.\n    If any examples in the test suite are focused, only those examples are executed.\n    This trumps any explicitly focused or unfocused examples within the closure--they are all treated as focused.\n*/\npublic func fdescribe(description: String, flags: FilterFlags = [:], closure: () -> ()) {\n    World.sharedWorld().fdescribe(description, flags: flags, closure: closure)\n}\n\n/**\n    Use this to quickly focus a `context` closure. Equivalent to `fdescribe`.\n*/\npublic func fcontext(description: String, flags: FilterFlags = [:], closure: () -> ()) {\n    fdescribe(description, flags: flags, closure: closure)\n}\n\n/**\n    Use this to quickly focus an `it` closure, focusing the example.\n    If any examples in the test suite are focused, only those examples are executed.\n*/\npublic func fit(description: String, flags: FilterFlags = [:], file: String = __FILE__, line: UInt = __LINE__, closure: () -> ()) {\n    World.sharedWorld().fit(description, flags: flags, file: file, line: line, closure: closure)\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/DSL/QCKDSL.h",
    "content": "#import <Foundation/Foundation.h>\n\n@class ExampleMetadata;\n\n/**\n Provides a hook for Quick to be configured before any examples are run.\n Within this scope, override the +[QuickConfiguration configure:] method\n to set properties on a configuration object to customize Quick behavior.\n For details, see the documentation for Configuraiton.swift.\n\n @param name The name of the configuration class. Like any Objective-C\n             class name, this must be unique to the current runtime\n             environment.\n */\n#define QuickConfigurationBegin(name) \\\n    @interface name : QuickConfiguration; @end \\\n    @implementation name \\\n\n\n/**\n Marks the end of a Quick configuration.\n Make sure you put this after `QuickConfigurationBegin`.\n */\n#define QuickConfigurationEnd \\\n    @end \\\n\n\n/**\n Defines a new QuickSpec. Define examples and example groups within the space\n between this and `QuickSpecEnd`.\n\n @param name The name of the spec class. Like any Objective-C class name, this\n             must be unique to the current runtime environment.\n */\n#define QuickSpecBegin(name) \\\n    @interface name : QuickSpec; @end \\\n    @implementation name \\\n    - (void)spec { \\\n\n\n/**\n Marks the end of a QuickSpec. Make sure you put this after `QuickSpecBegin`.\n */\n#define QuickSpecEnd \\\n    } \\\n    @end \\\n\ntypedef NSDictionary *(^QCKDSLSharedExampleContext)(void);\ntypedef void (^QCKDSLSharedExampleBlock)(QCKDSLSharedExampleContext);\ntypedef void (^QCKDSLEmptyBlock)(void);\ntypedef void (^QCKDSLExampleMetadataBlock)(ExampleMetadata *exampleMetadata);\n\n#define QUICK_EXPORT FOUNDATION_EXPORT\n\nQUICK_EXPORT void qck_beforeSuite(QCKDSLEmptyBlock closure);\nQUICK_EXPORT void qck_afterSuite(QCKDSLEmptyBlock closure);\nQUICK_EXPORT void qck_sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure);\nQUICK_EXPORT void qck_describe(NSString *description, QCKDSLEmptyBlock closure);\nQUICK_EXPORT void qck_context(NSString *description, QCKDSLEmptyBlock closure);\nQUICK_EXPORT void qck_beforeEach(QCKDSLEmptyBlock closure);\nQUICK_EXPORT void qck_beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure);\nQUICK_EXPORT void qck_afterEach(QCKDSLEmptyBlock closure);\nQUICK_EXPORT void qck_afterEachWithMetadata(QCKDSLExampleMetadataBlock closure);\nQUICK_EXPORT void qck_pending(NSString *description, QCKDSLEmptyBlock closure);\nQUICK_EXPORT void qck_xdescribe(NSString *description, QCKDSLEmptyBlock closure);\nQUICK_EXPORT void qck_xcontext(NSString *description, QCKDSLEmptyBlock closure);\nQUICK_EXPORT void qck_fdescribe(NSString *description, QCKDSLEmptyBlock closure);\nQUICK_EXPORT void qck_fcontext(NSString *description, QCKDSLEmptyBlock closure);\n\n#ifndef QUICK_DISABLE_SHORT_SYNTAX\n/**\n    Defines a closure to be run prior to any examples in the test suite.\n    You may define an unlimited number of these closures, but there is no\n    guarantee as to the order in which they're run.\n \n    If the test suite crashes before the first example is run, this closure\n    will not be executed.\n \n    @param closure The closure to be run prior to any examples in the test suite.\n */\nstatic inline void beforeSuite(QCKDSLEmptyBlock closure) {\n    qck_beforeSuite(closure);\n}\n\n\n/**\n    Defines a closure to be run after all of the examples in the test suite.\n    You may define an unlimited number of these closures, but there is no\n    guarantee as to the order in which they're run.\n     \n    If the test suite crashes before all examples are run, this closure\n    will not be executed.\n \n    @param closure The closure to be run after all of the examples in the test suite.\n */\nstatic inline void afterSuite(QCKDSLEmptyBlock closure) {\n    qck_afterSuite(closure);\n}\n\n/**\n    Defines a group of shared examples. These examples can be re-used in several locations\n    by using the `itBehavesLike` function.\n \n    @param name The name of the shared example group. This must be unique across all shared example\n                groups defined in a test suite.\n    @param closure A closure containing the examples. This behaves just like an example group defined\n                   using `describe` or `context`--the closure may contain any number of `beforeEach`\n                   and `afterEach` closures, as well as any number of examples (defined using `it`).\n */\nstatic inline void sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure) {\n    qck_sharedExamples(name, closure);\n}\n\n/**\n    Defines an example group. Example groups are logical groupings of examples.\n    Example groups can share setup and teardown code.\n \n    @param description An arbitrary string describing the example group.\n    @param closure A closure that can contain other examples.\n */\nstatic inline void describe(NSString *description, QCKDSLEmptyBlock closure) {\n    qck_describe(description, closure);\n}\n\n/**\n    Defines an example group. Equivalent to `describe`.\n */\nstatic inline void context(NSString *description, QCKDSLEmptyBlock closure) {\n    qck_context(description, closure);\n}\n\n/**\n    Defines a closure to be run prior to each example in the current example\n    group. This closure is not run for pending or otherwise disabled examples.\n    An example group may contain an unlimited number of beforeEach. They'll be\n    run in the order they're defined, but you shouldn't rely on that behavior.\n \n    @param closure The closure to be run prior to each example.\n */\nstatic inline void beforeEach(QCKDSLEmptyBlock closure) {\n    qck_beforeEach(closure);\n}\n\n/**\n    Identical to QCKDSL.beforeEach, except the closure is provided with\n    metadata on the example that the closure is being run prior to.\n */\nstatic inline void beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure) {\n    qck_beforeEachWithMetadata(closure);\n}\n\n/**\n    Defines a closure to be run after each example in the current example\n    group. This closure is not run for pending or otherwise disabled examples.\n    An example group may contain an unlimited number of afterEach. They'll be\n    run in the order they're defined, but you shouldn't rely on that behavior.\n \n    @param closure The closure to be run after each example.\n */\nstatic inline void afterEach(QCKDSLEmptyBlock closure) {\n    qck_afterEach(closure);\n}\n\n/**\n    Identical to QCKDSL.afterEach, except the closure is provided with\n    metadata on the example that the closure is being run after.\n */\nstatic inline void afterEachWithMetadata(QCKDSLExampleMetadataBlock closure) {\n    qck_afterEachWithMetadata(closure);\n}\n\n/**\n    Defines an example or example group that should not be executed. Use `pending` to temporarily disable\n    examples or groups that should not be run yet.\n \n    @param description An arbitrary string describing the example or example group.\n    @param closure A closure that will not be evaluated.\n */\nstatic inline void pending(NSString *description, QCKDSLEmptyBlock closure) {\n    qck_pending(description, closure);\n}\n\n/**\n    Use this to quickly mark a `describe` block as pending.\n    This disables all examples within the block.\n */\nstatic inline void xdescribe(NSString *description, QCKDSLEmptyBlock closure) {\n    qck_xdescribe(description, closure);\n}\n\n/**\n    Use this to quickly mark a `context` block as pending.\n    This disables all examples within the block.\n */\nstatic inline void xcontext(NSString *description, QCKDSLEmptyBlock closure) {\n    qck_xcontext(description, closure);\n}\n\n/**\n    Use this to quickly focus a `describe` block, focusing the examples in the block.\n    If any examples in the test suite are focused, only those examples are executed.\n    This trumps any explicitly focused or unfocused examples within the block--they are all treated as focused.\n */\nstatic inline void fdescribe(NSString *description, QCKDSLEmptyBlock closure) {\n    qck_fdescribe(description, closure);\n}\n\n/**\n    Use this to quickly focus a `context` block. Equivalent to `fdescribe`.\n */\nstatic inline void fcontext(NSString *description, QCKDSLEmptyBlock closure) {\n    qck_fcontext(description, closure);\n}\n\n#define it qck_it\n#define xit qck_xit\n#define fit qck_fit\n#define itBehavesLike qck_itBehavesLike\n#define xitBehavesLike qck_xitBehavesLike\n#define fitBehavesLike qck_fitBehavesLike\n#endif\n\n#define qck_it qck_it_builder(@{}, @(__FILE__), __LINE__)\n#define qck_xit qck_it_builder(@{Filter.pending: @YES}, @(__FILE__), __LINE__)\n#define qck_fit qck_it_builder(@{Filter.focused: @YES}, @(__FILE__), __LINE__)\n#define qck_itBehavesLike qck_itBehavesLike_builder(@{}, @(__FILE__), __LINE__)\n#define qck_xitBehavesLike qck_itBehavesLike_builder(@{Filter.pending: @YES}, @(__FILE__), __LINE__)\n#define qck_fitBehavesLike qck_itBehavesLike_builder(@{Filter.focused: @YES}, @(__FILE__), __LINE__)\n\ntypedef void (^QCKItBlock)(NSString *description, QCKDSLEmptyBlock closure);\ntypedef void (^QCKItBehavesLikeBlock)(NSString *description, QCKDSLSharedExampleContext context);\n\nQUICK_EXPORT QCKItBlock qck_it_builder(NSDictionary *flags, NSString *file, NSUInteger line);\nQUICK_EXPORT QCKItBehavesLikeBlock qck_itBehavesLike_builder(NSDictionary *flags, NSString *file, NSUInteger line);\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/DSL/QCKDSL.m",
    "content": "#import \"QCKDSL.h\"\n#import \"World.h\"\n#import \"World+DSL.h\"\n\nvoid qck_beforeSuite(QCKDSLEmptyBlock closure) {\n    [[World sharedWorld] beforeSuite:closure];\n}\n\nvoid qck_afterSuite(QCKDSLEmptyBlock closure) {\n    [[World sharedWorld] afterSuite:closure];\n}\n\nvoid qck_sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure) {\n    [[World sharedWorld] sharedExamples:name closure:closure];\n}\n\nvoid qck_describe(NSString *description, QCKDSLEmptyBlock closure) {\n    [[World sharedWorld] describe:description flags:@{} closure:closure];\n}\n\nvoid qck_context(NSString *description, QCKDSLEmptyBlock closure) {\n    qck_describe(description, closure);\n}\n\nvoid qck_beforeEach(QCKDSLEmptyBlock closure) {\n    [[World sharedWorld] beforeEach:closure];\n}\n\nvoid qck_beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure) {\n    [[World sharedWorld] beforeEachWithMetadata:closure];\n}\n\nvoid qck_afterEach(QCKDSLEmptyBlock closure) {\n    [[World sharedWorld] afterEach:closure];\n}\n\nvoid qck_afterEachWithMetadata(QCKDSLExampleMetadataBlock closure) {\n    [[World sharedWorld] afterEachWithMetadata:closure];\n}\n\nQCKItBlock qck_it_builder(NSDictionary *flags, NSString *file, NSUInteger line) {\n    return ^(NSString *description, QCKDSLEmptyBlock closure) {\n        [[World sharedWorld] itWithDescription:description\n                                         flags:flags\n                                          file:file\n                                          line:line\n                                       closure:closure];\n    };\n}\n\nQCKItBehavesLikeBlock qck_itBehavesLike_builder(NSDictionary *flags, NSString *file, NSUInteger line) {\n    return ^(NSString *name, QCKDSLSharedExampleContext context) {\n        [[World sharedWorld] itBehavesLikeSharedExampleNamed:name\n                                        sharedExampleContext:context\n                                                       flags:flags\n                                                        file:file\n                                                        line:line];\n    };\n}\n\nvoid qck_pending(NSString *description, QCKDSLEmptyBlock closure) {\n    [[World sharedWorld] pending:description closure:closure];\n}\n\nvoid qck_xdescribe(NSString *description, QCKDSLEmptyBlock closure) {\n    [[World sharedWorld] xdescribe:description flags:@{} closure:closure];\n}\n\nvoid qck_xcontext(NSString *description, QCKDSLEmptyBlock closure) {\n    qck_xdescribe(description, closure);\n}\n\nvoid qck_fdescribe(NSString *description, QCKDSLEmptyBlock closure) {\n    [[World sharedWorld] fdescribe:description flags:@{} closure:closure];\n}\n\nvoid qck_fcontext(NSString *description, QCKDSLEmptyBlock closure) {\n    qck_fdescribe(description, closure);\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/DSL/World+DSL.h",
    "content": "#import <Quick/Quick-Swift.h>\n\n@interface World (SWIFT_EXTENSION(Quick))\n- (void)beforeSuite:(void (^ __nonnull)(void))closure;\n- (void)afterSuite:(void (^ __nonnull)(void))closure;\n- (void)sharedExamples:(NSString * __nonnull)name closure:(void (^ __nonnull)(NSDictionary * __nonnull (^ __nonnull)(void)))closure;\n- (void)describe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure;\n- (void)context:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure;\n- (void)fdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure;\n- (void)xdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure;\n- (void)beforeEach:(void (^ __nonnull)(void))closure;\n- (void)beforeEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure;\n- (void)afterEach:(void (^ __nonnull)(void))closure;\n- (void)afterEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure;\n- (void)itWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure;\n- (void)fitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure;\n- (void)xitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure;\n- (void)itBehavesLikeSharedExampleNamed:(NSString * __nonnull)name sharedExampleContext:(NSDictionary * __nonnull (^ __nonnull)(void))sharedExampleContext flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line;\n- (void)pending:(NSString * __nonnull)description closure:(void (^ __nonnull)(void))closure;\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/DSL/World+DSL.swift",
    "content": "/**\n    Adds methods to World to support top-level DSL functions (Swift) and\n    macros (Objective-C). These functions map directly to the DSL that test\n    writers use in their specs.\n*/\nextension World {\n    internal func beforeSuite(closure: BeforeSuiteClosure) {\n        suiteHooks.appendBefore(closure)\n    }\n\n    internal func afterSuite(closure: AfterSuiteClosure) {\n        suiteHooks.appendAfter(closure)\n    }\n\n    internal func sharedExamples(name: String, closure: SharedExampleClosure) {\n        registerSharedExample(name, closure: closure)\n    }\n\n    internal func describe(description: String, flags: FilterFlags, closure: () -> ()) {\n        let group = ExampleGroup(description: description, flags: flags)\n        currentExampleGroup!.appendExampleGroup(group)\n        currentExampleGroup = group\n        closure()\n        currentExampleGroup = group.parent\n    }\n\n    internal func context(description: String, flags: FilterFlags, closure: () -> ()) {\n        self.describe(description, flags: flags, closure: closure)\n    }\n\n    internal func fdescribe(description: String, flags: FilterFlags, closure: () -> ()) {\n        var focusedFlags = flags\n        focusedFlags[Filter.focused] = true\n        self.describe(description, flags: focusedFlags, closure: closure)\n    }\n\n    internal func xdescribe(description: String, flags: FilterFlags, closure: () -> ()) {\n        var pendingFlags = flags\n        pendingFlags[Filter.pending] = true\n        self.describe(description, flags: pendingFlags, closure: closure)\n    }\n\n    internal func beforeEach(closure: BeforeExampleClosure) {\n        currentExampleGroup!.hooks.appendBefore(closure)\n    }\n\n    @objc(beforeEachWithMetadata:)\n    internal func beforeEach(closure closure: BeforeExampleWithMetadataClosure) {\n        currentExampleGroup!.hooks.appendBefore(closure)\n    }\n\n    internal func afterEach(closure: AfterExampleClosure) {\n        currentExampleGroup!.hooks.appendAfter(closure)\n    }\n\n    @objc(afterEachWithMetadata:)\n    internal func afterEach(closure closure: AfterExampleWithMetadataClosure) {\n        currentExampleGroup!.hooks.appendAfter(closure)\n    }\n\n    @objc(itWithDescription:flags:file:line:closure:)\n    internal func it(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) {\n        let callsite = Callsite(file: file, line: line)\n        let example = Example(description: description, callsite: callsite, flags: flags, closure: closure)\n        currentExampleGroup!.appendExample(example)\n    }\n\n    @objc(fitWithDescription:flags:file:line:closure:)\n    internal func fit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) {\n        var focusedFlags = flags\n        focusedFlags[Filter.focused] = true\n        self.it(description, flags: focusedFlags, file: file, line: line, closure: closure)\n    }\n\n    @objc(xitWithDescription:flags:file:line:closure:)\n    internal func xit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) {\n        var pendingFlags = flags\n        pendingFlags[Filter.pending] = true\n        self.it(description, flags: pendingFlags, file: file, line: line, closure: closure)\n    }\n\n    @objc(itBehavesLikeSharedExampleNamed:sharedExampleContext:flags:file:line:)\n    internal func itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags, file: String, line: UInt) {\n        let callsite = Callsite(file: file, line: line)\n        let closure = World.sharedWorld().sharedExample(name)\n\n        let group = ExampleGroup(description: name, flags: flags)\n        currentExampleGroup!.appendExampleGroup(group)\n        currentExampleGroup = group\n        closure(sharedExampleContext)\n        currentExampleGroup!.walkDownExamples { (example: Example) in\n            example.isSharedExample = true\n            example.callsite = callsite\n        }\n\n        currentExampleGroup = group.parent\n    }\n\n    internal func pending(description: String, closure: () -> ()) {\n        print(\"Pending: \\(description)\")\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/Example.swift",
    "content": "private var numberOfExamplesRun = 0\n\n/**\n    Examples, defined with the `it` function, use assertions to\n    demonstrate how code should behave. These are like \"tests\" in XCTest.\n*/\nfinal public class Example: NSObject {\n    /**\n        A boolean indicating whether the example is a shared example;\n        i.e.: whether it is an example defined with `itBehavesLike`.\n    */\n    public var isSharedExample = false\n\n    /**\n        The site at which the example is defined.\n        This must be set correctly in order for Xcode to highlight\n        the correct line in red when reporting a failure.\n    */\n    public var callsite: Callsite\n\n    weak internal var group: ExampleGroup?\n\n    private let internalDescription: String\n    private let closure: () -> ()\n    private let flags: FilterFlags\n\n    internal init(description: String, callsite: Callsite, flags: FilterFlags, closure: () -> ()) {\n        self.internalDescription = description\n        self.closure = closure\n        self.callsite = callsite\n        self.flags = flags\n    }\n    \n    public override var description: String {\n        return internalDescription\n    }\n\n    /**\n        The example name. A name is a concatenation of the name of\n        the example group the example belongs to, followed by the\n        description of the example itself.\n\n        The example name is used to generate a test method selector\n        to be displayed in Xcode's test navigator.\n    */\n    public var name: String {\n        switch group!.name {\n        case .Some(let groupName): return \"\\(groupName), \\(description)\"\n        case .None: return description\n        }\n    }\n\n    /**\n        Executes the example closure, as well as all before and after\n        closures defined in the its surrounding example groups.\n    */\n    public func run() {\n        let world = World.sharedWorld()\n\n        if numberOfExamplesRun == 0 {\n            world.suiteHooks.executeBefores()\n        }\n\n        let exampleMetadata = ExampleMetadata(example: self, exampleIndex: numberOfExamplesRun)\n        world.currentExampleMetadata = exampleMetadata\n\n        world.exampleHooks.executeBefores(exampleMetadata)\n        for before in group!.befores {\n            before(exampleMetadata: exampleMetadata)\n        }\n\n        closure()\n\n        for after in group!.afters {\n            after(exampleMetadata: exampleMetadata)\n        }\n        world.exampleHooks.executeAfters(exampleMetadata)\n\n        ++numberOfExamplesRun\n\n        if !world.isRunningAdditionalSuites && numberOfExamplesRun >= world.exampleCount {\n            world.suiteHooks.executeAfters()\n        }\n    }\n\n    /**\n        Evaluates the filter flags set on this example and on the example groups\n        this example belongs to. Flags set on the example are trumped by flags on\n        the example group it belongs to. Flags on inner example groups are trumped\n        by flags on outer example groups.\n    */\n    internal var filterFlags: FilterFlags {\n        var aggregateFlags = flags\n        for (key, value) in group!.filterFlags {\n            aggregateFlags[key] = value\n        }\n        return aggregateFlags\n    }\n}\n\n/**\n    Returns a boolean indicating whether two Example objects are equal.\n    If two examples are defined at the exact same callsite, they must be equal.\n*/\npublic func ==(lhs: Example, rhs: Example) -> Bool {\n    return lhs.callsite == rhs.callsite\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/ExampleGroup.swift",
    "content": "/**\n    Example groups are logical groupings of examples, defined with\n    the `describe` and `context` functions. Example groups can share\n    setup and teardown code.\n*/\nfinal public class ExampleGroup: NSObject {\n    weak internal var parent: ExampleGroup?\n    internal let hooks = ExampleHooks()\n\n    private let internalDescription: String\n    private let flags: FilterFlags\n    private let isInternalRootExampleGroup: Bool\n    private var childGroups = [ExampleGroup]()\n    private var childExamples = [Example]()\n\n    internal init(description: String, flags: FilterFlags, isInternalRootExampleGroup: Bool = false) {\n        self.internalDescription = description\n        self.flags = flags\n        self.isInternalRootExampleGroup = isInternalRootExampleGroup\n    }\n    \n    public override var description: String {\n        return internalDescription\n    }\n\n    /**\n        Returns a list of examples that belong to this example group,\n        or to any of its descendant example groups.\n    */\n    public var examples: [Example] {\n        var examples = childExamples\n        for group in childGroups {\n            examples.appendContentsOf(group.examples)\n        }\n        return examples\n    }\n\n    internal var name: String? {\n        if let parent = parent {\n            switch(parent.name) {\n            case .Some(let name): return \"\\(name), \\(description)\"\n            case .None: return description\n            }\n        } else {\n            return isInternalRootExampleGroup ? nil : description\n        }\n    }\n\n    internal var filterFlags: FilterFlags {\n        var aggregateFlags = flags\n        walkUp() { (group: ExampleGroup) -> () in\n            for (key, value) in group.flags {\n                aggregateFlags[key] = value\n            }\n        }\n        return aggregateFlags\n    }\n\n    internal var befores: [BeforeExampleWithMetadataClosure] {\n        var closures = Array(hooks.befores.reverse())\n        walkUp() { (group: ExampleGroup) -> () in\n            closures.appendContentsOf(Array(group.hooks.befores.reverse()))\n        }\n        return Array(closures.reverse())\n    }\n\n    internal var afters: [AfterExampleWithMetadataClosure] {\n        var closures = hooks.afters\n        walkUp() { (group: ExampleGroup) -> () in\n            closures.appendContentsOf(group.hooks.afters)\n        }\n        return closures\n    }\n\n    internal func walkDownExamples(callback: (example: Example) -> ()) {\n        for example in childExamples {\n            callback(example: example)\n        }\n        for group in childGroups {\n            group.walkDownExamples(callback)\n        }\n    }\n\n    internal func appendExampleGroup(group: ExampleGroup) {\n        group.parent = self\n        childGroups.append(group)\n    }\n\n    internal func appendExample(example: Example) {\n        example.group = self\n        childExamples.append(example)\n    }\n\n    private func walkUp(callback: (group: ExampleGroup) -> ()) {\n        var group = self\n        while let parent = group.parent {\n            callback(group: parent)\n            group = parent\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/ExampleMetadata.swift",
    "content": "/**\n    A class that encapsulates information about an example,\n    including the index at which the example was executed, as\n    well as the example itself.\n*/\nfinal public class ExampleMetadata: NSObject {\n    /**\n        The example for which this metadata was collected.\n    */\n    public let example: Example\n\n    /**\n        The index at which this example was executed in the\n        test suite.\n    */\n    public let exampleIndex: Int\n\n    internal init(example: Example, exampleIndex: Int) {\n        self.example = example\n        self.exampleIndex = exampleIndex\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/Filter.swift",
    "content": "import Foundation\n\n/**\n    A mapping of string keys to booleans that can be used to\n    filter examples or example groups. For example, a \"focused\"\n    example would have the flags [Focused: true].\n*/\npublic typealias FilterFlags = [String: Bool]\n\n/**\n    A namespace for filter flag keys, defined primarily to make the\n    keys available in Objective-C.\n*/\nfinal public class Filter: NSObject {\n    /**\n        Example and example groups with [Focused: true] are included in test runs,\n        excluding all other examples without this flag. Use this to only run one or\n        two tests that you're currently focusing on.\n    */\n    public class var focused: String {\n        return \"focused\"\n    }\n\n    /**\n        Example and example groups with [Pending: true] are excluded from test runs.\n        Use this to temporarily suspend examples that you know do not pass yet.\n    */\n    public class var pending: String {\n        return \"pending\"\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/Hooks/Closures.swift",
    "content": "// MARK: Example Hooks\n\n/**\n    A closure executed before an example is run.\n*/\npublic typealias BeforeExampleClosure = () -> ()\n\n/**\n    A closure executed before an example is run. The closure is given example metadata,\n    which contains information about the example that is about to be run.\n*/\npublic typealias BeforeExampleWithMetadataClosure = (exampleMetadata: ExampleMetadata) -> ()\n\n/**\n    A closure executed after an example is run.\n*/\npublic typealias AfterExampleClosure = BeforeExampleClosure\n\n/**\n    A closure executed after an example is run. The closure is given example metadata,\n    which contains information about the example that has just finished running.\n*/\npublic typealias AfterExampleWithMetadataClosure = BeforeExampleWithMetadataClosure\n\n// MARK: Suite Hooks\n\n/**\n    A closure executed before any examples are run.\n*/\npublic typealias BeforeSuiteClosure = () -> ()\n\n/**\n    A closure executed after all examples have finished running.\n*/\npublic typealias AfterSuiteClosure = BeforeSuiteClosure\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/Hooks/ExampleHooks.swift",
    "content": "/**\n    A container for closures to be executed before and after each example.\n*/\nfinal internal class ExampleHooks {\n\n    internal var befores: [BeforeExampleWithMetadataClosure] = []\n    internal var afters: [AfterExampleWithMetadataClosure] = []\n\n    internal func appendBefore(closure: BeforeExampleWithMetadataClosure) {\n        befores.append(closure)\n    }\n\n    internal func appendBefore(closure: BeforeExampleClosure) {\n        befores.append { (exampleMetadata: ExampleMetadata) in closure() }\n    }\n\n    internal func appendAfter(closure: AfterExampleWithMetadataClosure) {\n        afters.append(closure)\n    }\n\n    internal func appendAfter(closure: AfterExampleClosure) {\n        afters.append { (exampleMetadata: ExampleMetadata) in closure() }\n    }\n\n    internal func executeBefores(exampleMetadata: ExampleMetadata) {\n        for before in befores {\n            before(exampleMetadata: exampleMetadata)\n        }\n    }\n\n    internal func executeAfters(exampleMetadata: ExampleMetadata) {\n        for after in afters {\n            after(exampleMetadata: exampleMetadata)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/Hooks/SuiteHooks.swift",
    "content": "/**\n    A container for closures to be executed before and after all examples.\n*/\nfinal internal class SuiteHooks {\n    internal var befores: [BeforeSuiteClosure] = []\n    internal var beforesAlreadyExecuted = false\n\n    internal var afters: [AfterSuiteClosure] = []\n    internal var aftersAlreadyExecuted = false\n\n    internal func appendBefore(closure: BeforeSuiteClosure) {\n        befores.append(closure)\n    }\n\n    internal func appendAfter(closure: AfterSuiteClosure) {\n        afters.append(closure)\n    }\n\n    internal func executeBefores() {\n        assert(!beforesAlreadyExecuted)\n        for before in befores {\n            before()\n        }\n        beforesAlreadyExecuted = true\n    }\n\n    internal func executeAfters() {\n        assert(!aftersAlreadyExecuted)\n        for after in afters {\n            after()\n        }\n        aftersAlreadyExecuted = true\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</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>${CURRENT_PROJECT_VERSION}</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2014 - present, Quick Team. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/NSString+QCKSelectorName.h",
    "content": "#import <Foundation/Foundation.h>\n\n/**\n QuickSpec converts example names into test methods.\n Those test methods need valid selector names, which means no whitespace,\n control characters, etc. This category gives NSString objects an easy way\n to replace those illegal characters with underscores.\n */\n@interface NSString (QCKSelectorName)\n\n/**\n Returns a string with underscores in place of all characters that cannot\n be included in a selector (SEL) name.\n */\n@property (nonatomic, readonly) NSString *qck_selectorName;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/NSString+QCKSelectorName.m",
    "content": "#import \"NSString+QCKSelectorName.h\"\n\n@implementation NSString (QCKSelectorName)\n\n- (NSString *)qck_selectorName {\n    static NSMutableCharacterSet *invalidCharacters = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        invalidCharacters = [NSMutableCharacterSet new];\n\n        NSCharacterSet *whitespaceCharacterSet = [NSCharacterSet whitespaceCharacterSet];\n        NSCharacterSet *newlineCharacterSet = [NSCharacterSet newlineCharacterSet];\n        NSCharacterSet *illegalCharacterSet = [NSCharacterSet illegalCharacterSet];\n        NSCharacterSet *controlCharacterSet = [NSCharacterSet controlCharacterSet];\n        NSCharacterSet *punctuationCharacterSet = [NSCharacterSet punctuationCharacterSet];\n        NSCharacterSet *nonBaseCharacterSet = [NSCharacterSet nonBaseCharacterSet];\n        NSCharacterSet *symbolCharacterSet = [NSCharacterSet symbolCharacterSet];\n\n        [invalidCharacters formUnionWithCharacterSet:whitespaceCharacterSet];\n        [invalidCharacters formUnionWithCharacterSet:newlineCharacterSet];\n        [invalidCharacters formUnionWithCharacterSet:illegalCharacterSet];\n        [invalidCharacters formUnionWithCharacterSet:controlCharacterSet];\n        [invalidCharacters formUnionWithCharacterSet:punctuationCharacterSet];\n        [invalidCharacters formUnionWithCharacterSet:nonBaseCharacterSet];\n        [invalidCharacters formUnionWithCharacterSet:symbolCharacterSet];\n    });\n\n    NSArray *validComponents = [self componentsSeparatedByCharactersInSet:invalidCharacters];\n\n    return [validComponents componentsJoinedByString:@\"_\"];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/Quick.h",
    "content": "#import <Foundation/Foundation.h>\n\n//! Project version number for Quick.\nFOUNDATION_EXPORT double QuickVersionNumber;\n\n//! Project version string for Quick.\nFOUNDATION_EXPORT const unsigned char QuickVersionString[];\n\n#import \"QuickSpec.h\"\n#import \"QCKDSL.h\"\n#import \"QuickConfiguration.h\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/QuickSpec.h",
    "content": "#import <XCTest/XCTest.h>\n\n/**\n QuickSpec is a base class all specs written in Quick inherit from.\n They need to inherit from QuickSpec, a subclass of XCTestCase, in\n order to be discovered by the XCTest framework.\n\n XCTest automatically compiles a list of XCTestCase subclasses included\n in the test target. It iterates over each class in that list, and creates\n a new instance of that class for each test method. It then creates an\n \"invocation\" to execute that test method. The invocation is an instance of\n NSInvocation, which represents a single message send in Objective-C.\n The invocation is set on the XCTestCase instance, and the test is run.\n\n Most of the code in QuickSpec is dedicated to hooking into XCTest events.\n First, when the spec is first loaded and before it is sent any messages,\n the +[NSObject initialize] method is called. QuickSpec overrides this method\n to call +[QuickSpec spec]. This builds the example group stacks and\n registers them with Quick.World, a global register of examples.\n\n Then, XCTest queries QuickSpec for a list of test methods. Normally, XCTest\n automatically finds all methods whose selectors begin with the string \"test\".\n However, QuickSpec overrides this default behavior by implementing the\n +[XCTestCase testInvocations] method. This method iterates over each example\n registered in Quick.World, defines a new method for that example, and\n returns an invocation to call that method to XCTest. Those invocations are\n the tests that are run by XCTest. Their selector names are displayed in\n the Xcode test navigation bar.\n */\n@interface QuickSpec : XCTestCase\n\n/**\n Override this method in your spec to define a set of example groups\n and examples.\n\n     override class func spec() {\n         describe(\"winter\") {\n             it(\"is coming\") {\n                 // ...\n             }\n         }\n     }\n\n See DSL.swift for more information on what syntax is available.\n */\n- (void)spec;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/QuickSpec.m",
    "content": "#import \"QuickSpec.h\"\n#import \"QuickConfiguration.h\"\n#import \"NSString+QCKSelectorName.h\"\n#import \"World.h\"\n#import <objc/runtime.h>\n\nstatic QuickSpec *currentSpec = nil;\n\nconst void * const QCKExampleKey = &QCKExampleKey;\n\n@interface QuickSpec ()\n@property (nonatomic, strong) Example *example;\n@end\n\n@implementation QuickSpec\n\n#pragma mark - XCTestCase Overrides\n\n/**\n The runtime sends initialize to each class in a program just before the class, or any class\n that inherits from it, is sent its first message from within the program. QuickSpec hooks into\n this event to compile the example groups for this spec subclass.\n\n If an exception occurs when compiling the examples, report it to the user. Chances are they\n included an expectation outside of a \"it\", \"describe\", or \"context\" block.\n */\n+ (void)initialize {\n    [QuickConfiguration initialize];\n\n    World *world = [World sharedWorld];\n    world.currentExampleGroup = [world rootExampleGroupForSpecClass:[self class]];\n    QuickSpec *spec = [self new];\n\n    @try {\n        [spec spec];\n    }\n    @catch (NSException *exception) {\n        [NSException raise:NSInternalInconsistencyException\n                    format:@\"An exception occurred when building Quick's example groups.\\n\"\n                           @\"Some possible reasons this might happen include:\\n\\n\"\n                           @\"- An 'expect(...).to' expectation was evaluated outside of \"\n                           @\"an 'it', 'context', or 'describe' block\\n\"\n                           @\"- 'sharedExamples' was called twice with the same name\\n\"\n                           @\"- 'itBehavesLike' was called with a name that is not registered as a shared example\\n\\n\"\n                           @\"Here's the original exception: '%@', reason: '%@', userInfo: '%@'\",\n                           exception.name, exception.reason, exception.userInfo];\n    }\n    [self testInvocations];\n}\n\n/**\n Invocations for each test method in the test case. QuickSpec overrides this method to define a\n new method for each example defined in +[QuickSpec spec].\n\n @return An array of invocations that execute the newly defined example methods.\n */\n+ (NSArray *)testInvocations {\n    NSArray *examples = [[World sharedWorld] examplesForSpecClass:[self class]];\n    NSMutableArray *invocations = [NSMutableArray arrayWithCapacity:[examples count]];\n    for (Example *example in examples) {\n        SEL selector = [self addInstanceMethodForExample:example];\n        NSInvocation *invocation = [self invocationForInstanceMethodWithSelector:selector\n                                                                         example:example];\n        [invocations addObject:invocation];\n    }\n\n    return invocations;\n}\n\n/**\n XCTest sets the invocation for the current test case instance using this setter.\n QuickSpec hooks into this event to give the test case a reference to the current example.\n It will need this reference to correctly report its name to XCTest.\n */\n- (void)setInvocation:(NSInvocation *)invocation {\n    self.example = objc_getAssociatedObject(invocation, QCKExampleKey);\n    [super setInvocation:invocation];\n}\n\n#pragma mark - Public Interface\n\n- (void)spec { }\n\n#pragma mark - Internal Methods\n\n/**\n QuickSpec uses this method to dynamically define a new instance method for the\n given example. The instance method runs the example, catching any exceptions.\n The exceptions are then reported as test failures.\n\n In order to report the correct file and line number, examples must raise exceptions\n containing following keys in their userInfo:\n\n - \"SenTestFilenameKey\": A String representing the file name\n - \"SenTestLineNumberKey\": An Int representing the line number\n\n These keys used to be used by SenTestingKit, and are still used by some testing tools\n in the wild. See: https://github.com/Quick/Quick/pull/41\n\n @return The selector of the newly defined instance method.\n */\n+ (SEL)addInstanceMethodForExample:(Example *)example {\n    IMP implementation = imp_implementationWithBlock(^(QuickSpec *self){\n        currentSpec = self;\n        [example run];\n    });\n    NSCharacterSet *characterSet = [NSCharacterSet alphanumericCharacterSet];\n    NSMutableString *sanitizedFileName = [NSMutableString string];\n    for (NSUInteger i = 0; i < example.callsite.file.length; i++) {\n        unichar ch = [example.callsite.file characterAtIndex:i];\n        if ([characterSet characterIsMember:ch]) {\n            [sanitizedFileName appendFormat:@\"%c\", ch];\n        }\n    }\n\n    const char *types = [[NSString stringWithFormat:@\"%s%s%s\", @encode(id), @encode(id), @encode(SEL)] UTF8String];\n    NSString *selectorName = [NSString stringWithFormat:@\"%@_%@_%ld\",\n                              example.name.qck_selectorName,\n                              sanitizedFileName,\n                              (long)example.callsite.line];\n    SEL selector = NSSelectorFromString(selectorName);\n    class_addMethod(self, selector, implementation, types);\n\n    return selector;\n}\n\n+ (NSInvocation *)invocationForInstanceMethodWithSelector:(SEL)selector\n                                                  example:(Example *)example {\n    NSMethodSignature *signature = [self instanceMethodSignatureForSelector:selector];\n    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];\n    invocation.selector = selector;\n    objc_setAssociatedObject(invocation,\n                             QCKExampleKey,\n                             example,\n                             OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n    return invocation;\n}\n\n/**\n This method is used to record failures, whether they represent example\n expectations that were not met, or exceptions raised during test setup\n and teardown. By default, the failure will be reported as an\n XCTest failure, and the example will be highlighted in Xcode.\n */\n- (void)recordFailureWithDescription:(NSString *)description\n                              inFile:(NSString *)filePath\n                              atLine:(NSUInteger)lineNumber\n                            expected:(BOOL)expected {\n    if (self.example.isSharedExample) {\n        filePath = self.example.callsite.file;\n        lineNumber = self.example.callsite.line;\n    }\n    [currentSpec.testRun recordFailureWithDescription:description\n                                               inFile:filePath\n                                               atLine:lineNumber\n                                             expected:expected];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/World.h",
    "content": "#import <Quick/Quick-Swift.h>\n\n@class ExampleGroup;\n@class ExampleMetadata;\n\nSWIFT_CLASS(\"_TtC5Quick5World\")\n@interface World\n\n@property (nonatomic) ExampleGroup * __nullable currentExampleGroup;\n@property (nonatomic) ExampleMetadata * __nullable currentExampleMetadata;\n@property (nonatomic) BOOL isRunningAdditionalSuites;\n+ (World * __nonnull)sharedWorld;\n- (void)configure:(void (^ __nonnull)(Configuration * __nonnull))closure;\n- (void)finalizeConfiguration;\n- (ExampleGroup * __nonnull)rootExampleGroupForSpecClass:(Class __nonnull)cls;\n- (NSArray * __nonnull)examplesForSpecClass:(Class __nonnull)specClass;\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick/World.swift",
    "content": "import Foundation\n\n/**\n    A closure that, when evaluated, returns a dictionary of key-value\n    pairs that can be accessed from within a group of shared examples.\n*/\npublic typealias SharedExampleContext = () -> (NSDictionary)\n\n/**\n    A closure that is used to define a group of shared examples. This\n    closure may contain any number of example and example groups.\n*/\npublic typealias SharedExampleClosure = (SharedExampleContext) -> ()\n\n/**\n    A collection of state Quick builds up in order to work its magic.\n    World is primarily responsible for maintaining a mapping of QuickSpec\n    classes to root example groups for those classes.\n\n    It also maintains a mapping of shared example names to shared\n    example closures.\n\n    You may configure how Quick behaves by calling the -[World configure:]\n    method from within an overridden +[QuickConfiguration configure:] method.\n*/\nfinal internal class World: NSObject {\n    /**\n        The example group that is currently being run.\n        The DSL requires that this group is correctly set in order to build a\n        correct hierarchy of example groups and their examples.\n    */\n    internal var currentExampleGroup: ExampleGroup?\n\n    /**\n        The example metadata of the test that is currently being run.\n        This is useful for using the Quick test metadata (like its name) at\n        runtime.\n    */\n\n    internal var currentExampleMetadata: ExampleMetadata?\n\n    /**\n        A flag that indicates whether additional test suites are being run\n        within this test suite. This is only true within the context of Quick\n        functional tests.\n    */\n    internal var isRunningAdditionalSuites = false\n\n    private var specs: Dictionary<String, ExampleGroup> = [:]\n    private var sharedExamples: [String: SharedExampleClosure] = [:]\n    private let configuration = Configuration()\n    private var isConfigurationFinalized = false\n\n    internal var exampleHooks: ExampleHooks {return configuration.exampleHooks }\n    internal var suiteHooks: SuiteHooks { return configuration.suiteHooks }\n\n    // MARK: Singleton Constructor\n\n    private override init() {}\n    private struct Shared {\n        static let instance = World()\n    }\n    internal class func sharedWorld() -> World {\n        return Shared.instance\n    }\n\n    // MARK: Public Interface\n\n    /**\n        Exposes the World's Configuration object within the scope of the closure\n        so that it may be configured. This method must not be called outside of\n        an overridden +[QuickConfiguration configure:] method.\n\n        - parameter closure:  A closure that takes a Configuration object that can\n                         be mutated to change Quick's behavior.\n    */\n    internal func configure(closure: QuickConfigurer) {\n        assert(!isConfigurationFinalized,\n               \"Quick cannot be configured outside of a +[QuickConfiguration configure:] method. You should not call -[World configure:] directly. Instead, subclass QuickConfiguration and override the +[QuickConfiguration configure:] method.\")\n        closure(configuration: configuration)\n    }\n\n    /**\n        Finalizes the World's configuration.\n        Any subsequent calls to World.configure() will raise.\n    */\n    internal func finalizeConfiguration() {\n        isConfigurationFinalized = true\n    }\n\n    /**\n        Returns an internally constructed root example group for the given\n        QuickSpec class.\n\n        A root example group with the description \"root example group\" is lazily\n        initialized for each QuickSpec class. This root example group wraps the\n        top level of a -[QuickSpec spec] method--it's thanks to this group that\n        users can define beforeEach and it closures at the top level, like so:\n\n            override func spec() {\n                // These belong to the root example group\n                beforeEach {}\n                it(\"is at the top level\") {}\n            }\n\n        - parameter cls: The QuickSpec class for which to retrieve the root example group.\n        - returns: The root example group for the class.\n    */\n    internal func rootExampleGroupForSpecClass(cls: AnyClass) -> ExampleGroup {\n        let name = NSStringFromClass(cls)\n        if let group = specs[name] {\n            return group\n        } else {\n            let group = ExampleGroup(\n                description: \"root example group\",\n                flags: [:],\n                isInternalRootExampleGroup: true\n            )\n            specs[name] = group\n            return group\n        }\n    }\n\n    /**\n        Returns all examples that should be run for a given spec class.\n        There are two filtering passes that occur when determining which examples should be run.\n        That is, these examples are the ones that are included by inclusion filters, and are\n        not excluded by exclusion filters.\n\n        - parameter specClass: The QuickSpec subclass for which examples are to be returned.\n        - returns: A list of examples to be run as test invocations.\n    */\n    @objc(examplesForSpecClass:)\n    internal func examples(specClass: AnyClass) -> [Example] {\n        // 1. Grab all included examples.\n        let included = includedExamples\n        // 2. Grab the intersection of (a) examples for this spec, and (b) included examples.\n        let spec = rootExampleGroupForSpecClass(specClass).examples.filter { included.contains($0) }\n        // 3. Remove all excluded examples.\n        return spec.filter { example in\n            !self.configuration.exclusionFilters.reduce(false) { $0 || $1(example: example) }\n        }\n    }\n\n    // MARK: Internal\n\n    internal func registerSharedExample(name: String, closure: SharedExampleClosure) {\n        raiseIfSharedExampleAlreadyRegistered(name)\n        sharedExamples[name] = closure\n    }\n\n    internal func sharedExample(name: String) -> SharedExampleClosure {\n        raiseIfSharedExampleNotRegistered(name)\n        return sharedExamples[name]!\n    }\n\n    internal var exampleCount: Int {\n        return allExamples.count\n    }\n\n    private var allExamples: [Example] {\n        var all: [Example] = []\n        for (_, group) in specs {\n            group.walkDownExamples { all.append($0) }\n        }\n        return all\n    }\n\n    private var includedExamples: [Example] {\n        let all = allExamples\n        let included = all.filter { example in\n            return self.configuration.inclusionFilters.reduce(false) { $0 || $1(example: example) }\n        }\n\n        if included.isEmpty && configuration.runAllWhenEverythingFiltered {\n            return all\n        } else {\n            return included\n        }\n    }\n\n    private func raiseIfSharedExampleAlreadyRegistered(name: String) {\n        if sharedExamples[name] != nil {\n            NSException(name: NSInternalInconsistencyException,\n                reason: \"A shared example named '\\(name)' has already been registered.\",\n                userInfo: nil).raise()\n        }\n    }\n\n    private func raiseIfSharedExampleNotRegistered(name: String) {\n        if sharedExamples[name] == nil {\n            NSException(name: NSInternalInconsistencyException,\n                reason: \"No shared example named '\\(name)' has been registered. Registered shared examples: '\\(Array(sharedExamples.keys))'\",\n                userInfo: nil).raise()\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.h",
    "content": "@import Quick;\n\n@interface ___FILEBASENAMEASIDENTIFIER___ : QuickConfiguration\n\n@end\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.m",
    "content": "#import \"___FILEBASENAMEASIDENTIFIER___.h\"\n\n@implementation ___FILEBASENAMEASIDENTIFIER___\n\n+ (void)configure:(Configuration *)configuration {\n\n}\n\n@end\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Swift/___FILEBASENAME___.swift",
    "content": "import Quick\n\nclass ___FILEBASENAMEASIDENTIFIER___: QuickConfiguration {\n    override class func configure(configuration: Configuration) {\n\n    }\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/TemplateInfo.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>Kind</key>\n\t<string>Xcode.IDEKit.TextSubstitutionFileTemplateKind</string>\n\t<key>Description</key>\n\t<string>A QuickConfiguration subclass.</string>\n\t<key>Summary</key>\n  <string>A QuickConfiguration subclass, overload +configure: to configure the behaviour when running specs, shared examples that are used across spec files.</string>\n\t<key>SortOrder</key>\n\t<integer>1</integer>\n\t<key>BuildableType</key>\n\t<string>Test</string>\n\t<key>DefaultCompletionName</key>\n\t<string>Spec</string>\n\t<key>Options</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>Description</key>\n\t\t\t<string>Name of the Quick Configuration</string>\n\t\t\t<key>Identifier</key>\n\t\t\t<string>productName</string>\n\t\t\t<key>Name</key>\n\t\t\t<string>QuickConfiguration Name:</string>\n\t\t\t<key>NotPersisted</key>\n\t\t\t<true/>\n\t\t\t<key>Required</key>\n\t\t\t<true/>\n\t\t\t<key>Type</key>\n\t\t\t<string>text</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>AllowedTypes</key>\n\t\t\t<dict>\n\t\t\t\t<key>Swift</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>public.swift-source</string>\n\t\t\t\t</array>\n\t\t\t\t<key>Objective-C</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>public.objective-c-source</string>\n\t\t\t\t\t<string>public.objective-c-plus-plus-source</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>Default</key>\n\t\t\t<string>Swift</string>\n\t\t\t<key>Description</key>\n\t\t\t<string>The implementation language</string>\n\t\t\t<key>Identifier</key>\n\t\t\t<string>languageChoice</string>\n\t\t\t<key>MainTemplateFiles</key>\n\t\t\t<dict>\n\t\t\t\t<key>Objective-C</key>\n\t\t\t\t<string>___FILEBASENAME___.m</string>\n\t\t\t\t<key>Swift</key>\n\t\t\t\t<string>___FILEBASENAME___.swift</string>\n\t\t\t</dict>\n\t\t\t<key>Name</key>\n\t\t\t<string>Language:</string>\n\t\t\t<key>Required</key>\n\t\t\t<string>Yes</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>popup</string>\n\t\t\t<key>Values</key>\n\t\t\t<array>\n\t\t\t\t<string>Swift</string>\n\t\t\t\t<string>Objective-C</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Objective-C/___FILEBASENAME___.m",
    "content": "#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\nQuickSpecBegin(___FILEBASENAMEASIDENTIFIER___)\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Swift/___FILEBASENAME___.swift",
    "content": "import Quick\nimport Nimble\n\nclass ___FILEBASENAMEASIDENTIFIER___: QuickSpec {\n    override func spec() {\n\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/TemplateInfo.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>Kind</key>\n\t<string>Xcode.IDEKit.TextSubstitutionFileTemplateKind</string>\n\t<key>Description</key>\n\t<string>A class implementing a Quick spec.</string>\n\t<key>Summary</key>\n\t<string>A class implementing a Quick spec</string>\n\t<key>SortOrder</key>\n\t<integer>1</integer>\n\t<key>BuildableType</key>\n\t<string>Test</string>\n\t<key>DefaultCompletionName</key>\n\t<string>Spec</string>\n\t<key>Options</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>Description</key>\n\t\t\t<string>Name of the Quick spec class</string>\n\t\t\t<key>Identifier</key>\n\t\t\t<string>productName</string>\n\t\t\t<key>Name</key>\n\t\t\t<string>Spec Name:</string>\n\t\t\t<key>NotPersisted</key>\n\t\t\t<true/>\n\t\t\t<key>Required</key>\n\t\t\t<true/>\n\t\t\t<key>Type</key>\n\t\t\t<string>text</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>AllowedTypes</key>\n\t\t\t<dict>\n\t\t\t\t<key>Swift</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>public.swift-source</string>\n\t\t\t\t</array>\n\t\t\t\t<key>Objective-C</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>public.objective-c-source</string>\n\t\t\t\t\t<string>public.objective-c-plus-plus-source</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>Default</key>\n\t\t\t<string>Swift</string>\n\t\t\t<key>Description</key>\n\t\t\t<string>The implementation language</string>\n\t\t\t<key>Identifier</key>\n\t\t\t<string>languageChoice</string>\n\t\t\t<key>MainTemplateFiles</key>\n\t\t\t<dict>\n\t\t\t\t<key>Objective-C</key>\n\t\t\t\t<string>___FILEBASENAME___.m</string>\n\t\t\t\t<key>Swift</key>\n\t\t\t\t<string>___FILEBASENAME___.swift</string>\n\t\t\t</dict>\n\t\t\t<key>Name</key>\n\t\t\t<string>Language:</string>\n\t\t\t<key>Required</key>\n\t\t\t<string>Yes</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>popup</string>\n\t\t\t<key>Values</key>\n\t\t\t<array>\n\t\t\t\t<string>Swift</string>\n\t\t\t\t<string>Objective-C</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = \"Quick\"\n  s.version      = \"0.8.0\"\n  s.summary      = \"The Swift (and Objective-C) testing framework.\"\n\n  s.description  = <<-DESC\n                   Quick is a behavior-driven development framework for Swift and Objective-C. Inspired by RSpec, Specta, and Ginkgo.\n                   DESC\n\n  s.homepage     = \"https://github.com/Quick/Quick\"\n  s.license      = { :type => \"Apache 2.0\", :file => \"LICENSE\" }\n\n  s.author       = \"Quick Contributors\"\n  s.ios.deployment_target = \"7.0\"\n  s.osx.deployment_target = \"10.9\"\n  s.tvos.deployment_target = '9.0'\n\n  s.source       = { :git => \"https://github.com/Quick/Quick.git\", :tag => \"v#{s.version}\" }\n  s.source_files  = \"Quick\", \"Quick/**/*.{swift,h,m}\"\n\n  s.public_header_files = [\n    'Quick/Configuration/QuickConfiguration.h',\n    'Quick/DSL/QCKDSL.h',\n    'Quick/Quick.h',\n    'Quick/QuickSpec.h',\n  ]\n\n  s.framework = \"XCTest\"\n  s.requires_arc = true\n  s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO' }\nend\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick.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\t1F118CDF1BDCA4AB005013A2 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118CD51BDCA4AB005013A2 /* Quick.framework */; };\n\t\t1F118CF51BDCA4BB005013A2 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118CD51BDCA4AB005013A2 /* Quick.framework */; };\n\t\t1F118CFB1BDCA536005013A2 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; };\n\t\t1F118CFC1BDCA536005013A2 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; };\n\t\t1F118CFD1BDCA536005013A2 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; };\n\t\t1F118CFE1BDCA536005013A2 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; };\n\t\t1F118CFF1BDCA536005013A2 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; };\n\t\t1F118D001BDCA536005013A2 /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; };\n\t\t1F118D011BDCA536005013A2 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; };\n\t\t1F118D021BDCA536005013A2 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; };\n\t\t1F118D031BDCA536005013A2 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; };\n\t\t1F118D041BDCA536005013A2 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; };\n\t\t1F118D051BDCA536005013A2 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; };\n\t\t1F118D061BDCA536005013A2 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; };\n\t\t1F118D071BDCA536005013A2 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; };\n\t\t1F118D081BDCA536005013A2 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; };\n\t\t1F118D091BDCA536005013A2 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; };\n\t\t1F118D0A1BDCA536005013A2 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; };\n\t\t1F118D0C1BDCA543005013A2 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; };\n\t\t1F118D0D1BDCA547005013A2 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; };\n\t\t1F118D0E1BDCA547005013A2 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; };\n\t\t1F118D0F1BDCA54B005013A2 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; };\n\t\t1F118D101BDCA556005013A2 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; };\n\t\t1F118D111BDCA556005013A2 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; };\n\t\t1F118D121BDCA556005013A2 /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; };\n\t\t1F118D131BDCA556005013A2 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; };\n\t\t1F118D141BDCA556005013A2 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; };\n\t\t1F118D151BDCA556005013A2 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; };\n\t\t1F118D161BDCA556005013A2 /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; };\n\t\t1F118D171BDCA556005013A2 /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; };\n\t\t1F118D181BDCA556005013A2 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; };\n\t\t1F118D191BDCA556005013A2 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; };\n\t\t1F118D1A1BDCA556005013A2 /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; };\n\t\t1F118D1B1BDCA556005013A2 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; };\n\t\t1F118D1C1BDCA556005013A2 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; };\n\t\t1F118D1D1BDCA556005013A2 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; };\n\t\t1F118D1E1BDCA556005013A2 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; };\n\t\t1F118D1F1BDCA556005013A2 /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; };\n\t\t1F118D201BDCA556005013A2 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; };\n\t\t1F118D211BDCA556005013A2 /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; };\n\t\t1F118D221BDCA556005013A2 /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; };\n\t\t1F118D231BDCA556005013A2 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; };\n\t\t1F118D241BDCA561005013A2 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; };\n\t\t1F118D251BDCA561005013A2 /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; };\n\t\t1F118D261BDCA5AF005013A2 /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; };\n\t\t1F118D271BDCA5AF005013A2 /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; };\n\t\t1F118D281BDCA5AF005013A2 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; };\n\t\t1F118D291BDCA5B6005013A2 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F118D2A1BDCA5B6005013A2 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F118D2B1BDCA5B6005013A2 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F118D2C1BDCA5B6005013A2 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1F118D351BDCA657005013A2 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118D341BDCA657005013A2 /* Nimble.framework */; };\n\t\t1F118D371BDCA65C005013A2 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118D361BDCA65C005013A2 /* Nimble.framework */; };\n\t\t1F118D381BDCA6E1005013A2 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; };\n\t\t1F118D391BDCA6E6005013A2 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; };\n\t\t1FD0CFAD1AFA0B8C00874CC1 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; };\n\t\t34F375A719515CA700CE1B99 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; };\n\t\t34F375A819515CA700CE1B99 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; };\n\t\t34F375AB19515CA700CE1B99 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; };\n\t\t34F375AC19515CA700CE1B99 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; };\n\t\t34F375AD19515CA700CE1B99 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; };\n\t\t34F375AE19515CA700CE1B99 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; };\n\t\t34F375AF19515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; };\n\t\t34F375B019515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; };\n\t\t34F375B119515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; };\n\t\t34F375B219515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; };\n\t\t34F375B719515CA700CE1B99 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t34F375B819515CA700CE1B99 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t34F375B919515CA700CE1B99 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; };\n\t\t34F375BA19515CA700CE1B99 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; };\n\t\t34F375BB19515CA700CE1B99 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; };\n\t\t34F375BC19515CA700CE1B99 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; };\n\t\t470D6ECB1A43442400043E50 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; };\n\t\t470D6ECC1A43442900043E50 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; };\n\t\t471590401A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; };\n\t\t471590411A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; };\n\t\t4728253B1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; };\n\t\t4728253C1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; };\n\t\t4748E8941A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; };\n\t\t4748E8951A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; };\n\t\t4772173A1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; };\n\t\t4772173B1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; };\n\t\t47876F7D1A49AD63002575C7 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; };\n\t\t47876F7E1A49AD71002575C7 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; };\n\t\t479C31E31A36171B00DA8718 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; };\n\t\t479C31E41A36172700DA8718 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; };\n\t\t47FAEA361A3F49E6005A1D2F /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; };\n\t\t47FAEA371A3F49EB005A1D2F /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; };\n\t\t5A5D118719473F2100F6D13D /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5D117C19473F2100F6D13D /* Quick.framework */; };\n\t\t5A5D11A7194740E000F6D13D /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tDA02C91919A8073100093156 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; };\n\t\tDA02C91A19A8073100093156 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; };\n\t\tDA05D61019F73A3800771050 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; };\n\t\tDA05D61119F73A3800771050 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; };\n\t\tDA07722E1A4E5B7B0098839D /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; };\n\t\tDA07722F1A4E5B7C0098839D /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; };\n\t\tDA169E4819FF5DF100619816 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; };\n\t\tDA169E4919FF5DF100619816 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; };\n\t\tDA3124E619FCAEE8002858A7 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; };\n\t\tDA3124E719FCAEE8002858A7 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; };\n\t\tDA3124E819FCAEE8002858A7 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tDA3124E919FCAEE8002858A7 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tDA3124EA19FCAEE8002858A7 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; };\n\t\tDA3124EB19FCAEE8002858A7 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; };\n\t\tDA3124EC19FCAEE8002858A7 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; };\n\t\tDA3124ED19FCAEE8002858A7 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; };\n\t\tDA3E7A341A1E66C600CCE408 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; };\n\t\tDA3E7A351A1E66CB00CCE408 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; };\n\t\tDA408BE219FF5599005DF92A /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; };\n\t\tDA408BE319FF5599005DF92A /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; };\n\t\tDA408BE419FF5599005DF92A /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; };\n\t\tDA408BE519FF5599005DF92A /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; };\n\t\tDA408BE619FF5599005DF92A /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; };\n\t\tDA408BE719FF5599005DF92A /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; };\n\t\tDA5663EE1A4C8D8500193C88 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEB6B8E1943873100289F44 /* Quick.framework */; };\n\t\tDA5663F41A4C8D9A00193C88 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; };\n\t\tDA6B30181A4DB0D500FFB148 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; };\n\t\tDA6B30191A4DB0D500FFB148 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; };\n\t\tDA7AE6F119FC493F000AFDCE /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; };\n\t\tDA7AE6F219FC493F000AFDCE /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; };\n\t\tDA8940F01B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; };\n\t\tDA8940F11B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; };\n\t\tDA8C00211A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; };\n\t\tDA8C00221A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; };\n\t\tDA8F919919F31680006F6675 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; };\n\t\tDA8F919A19F31680006F6675 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; };\n\t\tDA8F919D19F31921006F6675 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; };\n\t\tDA8F919E19F31921006F6675 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; };\n\t\tDA8F91A519F3208B006F6675 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; };\n\t\tDA8F91A619F3208B006F6675 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; };\n\t\tDA8F91A819F32556006F6675 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; };\n\t\tDA8F91A919F32556006F6675 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; };\n\t\tDA8F91AB19F3299E006F6675 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; };\n\t\tDA8F91AC19F3299E006F6675 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; };\n\t\tDA8F91AE19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; };\n\t\tDA8F91AF19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; };\n\t\tDA9876B81A4C70EB0004AA17 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5D117C19473F2100F6D13D /* Quick.framework */; };\n\t\tDA9876C11A4C87200004AA17 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; };\n\t\tDAA63EA319F7637300CD0A3B /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; };\n\t\tDAA63EA419F7637300CD0A3B /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; };\n\t\tDAA7C0D719F777EB0093D1D9 /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; };\n\t\tDAB0136F19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; };\n\t\tDAB0137019FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; };\n\t\tDAB067E919F7801C00F970AC /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; };\n\t\tDAD297651AA8129D001D25CD /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; };\n\t\tDAE714F019FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; };\n\t\tDAE714F119FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; };\n\t\tDAE714F319FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; };\n\t\tDAE714F419FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; };\n\t\tDAE714F719FF6812005905B8 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; };\n\t\tDAE714F819FF6812005905B8 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; };\n\t\tDAE714FA19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; };\n\t\tDAE714FB19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; };\n\t\tDAE714FE19FF6A62005905B8 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tDAE714FF19FF6A62005905B8 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tDAE7150019FF6A62005905B8 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; };\n\t\tDAE7150119FF6A62005905B8 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; };\n\t\tDAEB6B941943873100289F44 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tDAEB6B9A1943873100289F44 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEB6B8E1943873100289F44 /* Quick.framework */; };\n\t\tDAED1EC41B1105BC006F61EC /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; };\n\t\tDAED1EC51B1105BC006F61EC /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; };\n\t\tDAED1ECA1B110699006F61EC /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; };\n\t\tDAED1ECB1B110699006F61EC /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; };\n\t\tDAF28BC31A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; };\n\t\tDAF28BC41A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t047655511949F4CB00B288BB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\t047655531949F4CB00B288BB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\t04765555194A327000B288BB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\t04DC97E4194B4A6000CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\t04DC97E6194B4A6000CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\t04DC97E8194B4B7E00CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\t04DC97EA194B4B9B00CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\t04DC97F0194B82DB00CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\t04DC97F2194B82DE00CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\t04DC97F6194B831200CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\t04DC97F8194B834000CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\t04DC97FA194B834100CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\t04DC97FC194B834B00CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\t04DC97FE194B835E00CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\t04DC9800194B836100CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\t04DC9802194B836300CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\t04DC9804194B838400CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\t04DC9806194B838700CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\t04DC9808194B838B00CE00B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\t1F118CE01BDCA4AB005013A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F118CD41BDCA4AB005013A2;\n\t\t\tremoteInfo = \"Quick-tvOS\";\n\t\t};\n\t\t1F118CF61BDCA4BB005013A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1F118CD41BDCA4AB005013A2;\n\t\t\tremoteInfo = \"Quick-tvOS\";\n\t\t};\n\t\t5A5D118819473F2100F6D13D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\t5A5D11EF194741B500F6D13D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\t5A5D11F1194741B500F6D13D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\t93625F381951DDC8006B1FE1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n\t\tDA5663EF1A4C8D8500193C88 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = \"Quick-OSX\";\n\t\t};\n\t\tDA9876B91A4C70EB0004AA17 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5A5D117B19473F2100F6D13D;\n\t\t\tremoteInfo = \"Quick-iOS\";\n\t\t};\n\t\tDAEB6B9B1943873100289F44 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = DAEB6B851943873100289F44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAEB6B8D1943873100289F44;\n\t\t\tremoteInfo = Quick;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t1F118CD51BDCA4AB005013A2 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"Quick-tvOSTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"QuickFocused-tvOSTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F118D341BDCA657005013A2 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = \"Externals/Nimble/build/Debug-appletvos/Nimble.framework\"; sourceTree = \"<group>\"; };\n\t\t1F118D361BDCA65C005013A2 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = \"Externals/Nimble/build/Debug-appletvos/Nimble.framework\"; sourceTree = \"<group>\"; };\n\t\t34F3759C19515CA700CE1B99 /* Callsite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Callsite.swift; sourceTree = \"<group>\"; };\n\t\t34F3759E19515CA700CE1B99 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t34F3759F19515CA700CE1B99 /* ExampleGroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleGroup.swift; sourceTree = \"<group>\"; };\n\t\t34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSString+QCKSelectorName.h\"; sourceTree = \"<group>\"; };\n\t\t34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSString+QCKSelectorName.m\"; sourceTree = \"<group>\"; };\n\t\t34F375A419515CA700CE1B99 /* QuickSpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickSpec.h; sourceTree = \"<group>\"; };\n\t\t34F375A519515CA700CE1B99 /* QuickSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickSpec.m; sourceTree = \"<group>\"; };\n\t\t34F375A619515CA700CE1B99 /* World.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = World.swift; sourceTree = \"<group>\"; };\n\t\t470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"AfterEachTests+ObjC.m\"; sourceTree = \"<group>\"; };\n\t\t4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"PendingTests+ObjC.m\"; sourceTree = \"<group>\"; };\n\t\t4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"SharedExamplesTests+ObjC.m\"; sourceTree = \"<group>\"; };\n\t\t4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"SharedExamples+BeforeEachTests+ObjC.m\"; sourceTree = \"<group>\"; };\n\t\t477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"AfterSuiteTests+ObjC.m\"; sourceTree = \"<group>\"; };\n\t\t47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"BeforeSuiteTests+ObjC.m\"; sourceTree = \"<group>\"; };\n\t\t479C31E11A36156E00DA8718 /* ItTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"ItTests+ObjC.m\"; sourceTree = \"<group>\"; };\n\t\t47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"BeforeEachTests+ObjC.m\"; sourceTree = \"<group>\"; };\n\t\t5A5D117C19473F2100F6D13D /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"Quick-iOSTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tDA02C91819A8073100093156 /* ExampleMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleMetadata.swift; sourceTree = \"<group>\"; };\n\t\tDA05D60F19F73A3800771050 /* AfterEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AfterEachTests.swift; sourceTree = \"<group>\"; };\n\t\tDA169E4719FF5DF100619816 /* Configuration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Configuration.swift; sourceTree = \"<group>\"; };\n\t\tDA3124E219FCAEE8002858A7 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = \"<group>\"; };\n\t\tDA3124E319FCAEE8002858A7 /* QCKDSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QCKDSL.h; sourceTree = \"<group>\"; };\n\t\tDA3124E419FCAEE8002858A7 /* QCKDSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QCKDSL.m; sourceTree = \"<group>\"; };\n\t\tDA3124E519FCAEE8002858A7 /* World+DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"World+DSL.swift\"; sourceTree = \"<group>\"; };\n\t\tDA408BDF19FF5599005DF92A /* Closures.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Closures.swift; sourceTree = \"<group>\"; };\n\t\tDA408BE019FF5599005DF92A /* ExampleHooks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleHooks.swift; sourceTree = \"<group>\"; };\n\t\tDA408BE119FF5599005DF92A /* SuiteHooks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SuiteHooks.swift; sourceTree = \"<group>\"; };\n\t\tDA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"QuickFocused-OSXTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tDA6B30171A4DB0D500FFB148 /* Filter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Filter.swift; sourceTree = \"<group>\"; };\n\t\tDA7AE6F019FC493F000AFDCE /* ItTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItTests.swift; sourceTree = \"<group>\"; };\n\t\tDA87078219F48775008C04AC /* BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeforeEachTests.swift; sourceTree = \"<group>\"; };\n\t\tDA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"FailureUsingXCTAssertTests+ObjC.m\"; sourceTree = \"<group>\"; };\n\t\tDA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickConfigurationTests.m; sourceTree = \"<group>\"; };\n\t\tDA8F919519F31680006F6675 /* QCKSpecRunner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QCKSpecRunner.h; sourceTree = \"<group>\"; };\n\t\tDA8F919619F31680006F6675 /* QCKSpecRunner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QCKSpecRunner.m; sourceTree = \"<group>\"; };\n\t\tDA8F919719F31680006F6675 /* QuickTestsBridgingHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickTestsBridgingHeader.h; sourceTree = \"<group>\"; };\n\t\tDA8F919819F31680006F6675 /* XCTestObservationCenter+QCKSuspendObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"XCTestObservationCenter+QCKSuspendObservation.h\"; sourceTree = \"<group>\"; };\n\t\tDA8F919C19F31921006F6675 /* FailureTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"FailureTests+ObjC.m\"; sourceTree = \"<group>\"; };\n\t\tDA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeforeSuiteTests.swift; sourceTree = \"<group>\"; };\n\t\tDA8F91A719F32556006F6675 /* AfterSuiteTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AfterSuiteTests.swift; sourceTree = \"<group>\"; };\n\t\tDA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharedExamplesTests.swift; sourceTree = \"<group>\"; };\n\t\tDA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FunctionalTests_SharedExamplesTests_SharedExamples.swift; sourceTree = \"<group>\"; };\n\t\tDA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"QuickFocused-iOSTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tDA9876BF1A4C87200004AA17 /* FocusedTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FocusedTests.swift; sourceTree = \"<group>\"; };\n\t\tDA9876C01A4C87200004AA17 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tDAA63EA219F7637300CD0A3B /* PendingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PendingTests.swift; sourceTree = \"<group>\"; };\n\t\tDAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"SharedExamples+BeforeEachTests.swift\"; sourceTree = \"<group>\"; };\n\t\tDAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Configuration+BeforeEachTests.swift\"; sourceTree = \"<group>\"; };\n\t\tDAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Configuration+BeforeEach.swift\"; sourceTree = \"<group>\"; };\n\t\tDAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Configuration+AfterEach.swift\"; sourceTree = \"<group>\"; };\n\t\tDAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Configuration+AfterEachTests.swift\"; sourceTree = \"<group>\"; };\n\t\tDAE714FC19FF6A62005905B8 /* QuickConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickConfiguration.h; sourceTree = \"<group>\"; };\n\t\tDAE714FD19FF6A62005905B8 /* QuickConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickConfiguration.m; sourceTree = \"<group>\"; };\n\t\tDAEB6B8E1943873100289F44 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tDAEB6B921943873100289F44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tDAEB6B931943873100289F44 /* Quick.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Quick.h; sourceTree = \"<group>\"; };\n\t\tDAEB6B991943873100289F44 /* Quick-OSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"Quick-OSXTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tDAEB6B9F1943873100289F44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tDAED1EC21B1105BC006F61EC /* World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = World.h; sourceTree = \"<group>\"; };\n\t\tDAED1EC81B110699006F61EC /* World+DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"World+DSL.h\"; sourceTree = \"<group>\"; };\n\t\tDAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"FocusedTests+ObjC.m\"; sourceTree = \"<group>\"; };\n\t\tF8100E901A1E4447007595ED /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1F118CD11BDCA4AB005013A2 /* 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\t\t1F118CDB1BDCA4AB005013A2 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F118CDF1BDCA4AB005013A2 /* Quick.framework in Frameworks */,\n\t\t\t\t1F118D351BDCA657005013A2 /* Nimble.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F118CED1BDCA4BB005013A2 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F118CF51BDCA4BB005013A2 /* Quick.framework in Frameworks */,\n\t\t\t\t1F118D371BDCA65C005013A2 /* Nimble.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5A5D117819473F2100F6D13D /* 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\t\t5A5D118319473F2100F6D13D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5A5D118719473F2100F6D13D /* Quick.framework in Frameworks */,\n\t\t\t\tDA3E7A351A1E66CB00CCE408 /* Nimble.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDA5663E51A4C8D8500193C88 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDA5663EE1A4C8D8500193C88 /* Quick.framework in Frameworks */,\n\t\t\t\t1FD0CFAD1AFA0B8C00874CC1 /* Nimble.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDA9876AF1A4C70EB0004AA17 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDA9876B81A4C70EB0004AA17 /* Quick.framework in Frameworks */,\n\t\t\t\tDAD297651AA8129D001D25CD /* Nimble.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDAEB6B8A1943873100289F44 /* 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\t\tDAEB6B961943873100289F44 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDA3E7A341A1E66C600CCE408 /* Nimble.framework in Frameworks */,\n\t\t\t\tDAEB6B9A1943873100289F44 /* Quick.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t1F118D331BDCA645005013A2 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F118D361BDCA65C005013A2 /* Nimble.framework */,\n\t\t\t\t1F118D341BDCA657005013A2 /* Nimble.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDA169E4619FF5DF100619816 /* Configuration */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDAE714FC19FF6A62005905B8 /* QuickConfiguration.h */,\n\t\t\t\tDAE714FD19FF6A62005905B8 /* QuickConfiguration.m */,\n\t\t\t\tDA169E4719FF5DF100619816 /* Configuration.swift */,\n\t\t\t);\n\t\t\tpath = Configuration;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDA3124E119FCAEE8002858A7 /* DSL */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA3124E519FCAEE8002858A7 /* World+DSL.swift */,\n\t\t\t\tDAED1EC81B110699006F61EC /* World+DSL.h */,\n\t\t\t\tDA3124E219FCAEE8002858A7 /* DSL.swift */,\n\t\t\t\tDA3124E319FCAEE8002858A7 /* QCKDSL.h */,\n\t\t\t\tDA3124E419FCAEE8002858A7 /* QCKDSL.m */,\n\t\t\t);\n\t\t\tpath = DSL;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDA408BDE19FF5599005DF92A /* Hooks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA408BDF19FF5599005DF92A /* Closures.swift */,\n\t\t\t\tDA408BE019FF5599005DF92A /* ExampleHooks.swift */,\n\t\t\t\tDA408BE119FF5599005DF92A /* SuiteHooks.swift */,\n\t\t\t);\n\t\t\tpath = Hooks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDA8F919419F31680006F6675 /* Helpers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA8F919719F31680006F6675 /* QuickTestsBridgingHeader.h */,\n\t\t\t\tDA8F919519F31680006F6675 /* QCKSpecRunner.h */,\n\t\t\t\tDA8F919619F31680006F6675 /* QCKSpecRunner.m */,\n\t\t\t\tDA8F919819F31680006F6675 /* XCTestObservationCenter+QCKSuspendObservation.h */,\n\t\t\t);\n\t\t\tpath = Helpers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDA8F919B19F3189D006F6675 /* FunctionalTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDAE714E919FF65A6005905B8 /* Configuration */,\n\t\t\t\tDA7AE6F019FC493F000AFDCE /* ItTests.swift */,\n\t\t\t\t479C31E11A36156E00DA8718 /* ItTests+ObjC.m */,\n\t\t\t\tDA8F919C19F31921006F6675 /* FailureTests+ObjC.m */,\n\t\t\t\tDA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */,\n\t\t\t\tDA87078219F48775008C04AC /* BeforeEachTests.swift */,\n\t\t\t\t47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */,\n\t\t\t\tDA05D60F19F73A3800771050 /* AfterEachTests.swift */,\n\t\t\t\t470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */,\n\t\t\t\tDAA63EA219F7637300CD0A3B /* PendingTests.swift */,\n\t\t\t\t4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */,\n\t\t\t\tDA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */,\n\t\t\t\t47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */,\n\t\t\t\tDA8F91A719F32556006F6675 /* AfterSuiteTests.swift */,\n\t\t\t\t477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */,\n\t\t\t\tDA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */,\n\t\t\t\t4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */,\n\t\t\t\tDAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */,\n\t\t\t\t4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */,\n\t\t\t);\n\t\t\tpath = FunctionalTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDA9876BE1A4C87200004AA17 /* QuickFocusedTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA9876BF1A4C87200004AA17 /* FocusedTests.swift */,\n\t\t\t\tDAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */,\n\t\t\t\tDA9876C31A4C87310004AA17 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = QuickFocusedTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDA9876C31A4C87310004AA17 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA9876C01A4C87200004AA17 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDAE714E919FF65A6005905B8 /* Configuration */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDAE714F519FF67FF005905B8 /* AfterEach */,\n\t\t\t\tDAE714EA19FF65A6005905B8 /* BeforeEach */,\n\t\t\t);\n\t\t\tpath = Configuration;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDAE714EA19FF65A6005905B8 /* BeforeEach */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */,\n\t\t\t\tDAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */,\n\t\t\t);\n\t\t\tpath = BeforeEach;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDAE714F519FF67FF005905B8 /* AfterEach */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */,\n\t\t\t\tDAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */,\n\t\t\t);\n\t\t\tpath = AfterEach;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDAEB6B841943873100289F44 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDAEB6B901943873100289F44 /* Quick */,\n\t\t\t\tDAEB6B9D1943873100289F44 /* QuickTests */,\n\t\t\t\tDA9876BE1A4C87200004AA17 /* QuickFocusedTests */,\n\t\t\t\tDAEB6B8F1943873100289F44 /* Products */,\n\t\t\t\t1F118D331BDCA645005013A2 /* Frameworks */,\n\t\t\t);\n\t\t\tindentWidth = 4;\n\t\t\tsourceTree = \"<group>\";\n\t\t\ttabWidth = 4;\n\t\t};\n\t\tDAEB6B8F1943873100289F44 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDAEB6B8E1943873100289F44 /* Quick.framework */,\n\t\t\t\tDAEB6B991943873100289F44 /* Quick-OSXTests.xctest */,\n\t\t\t\t5A5D117C19473F2100F6D13D /* Quick.framework */,\n\t\t\t\t5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */,\n\t\t\t\tDA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */,\n\t\t\t\tDA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */,\n\t\t\t\t1F118CD51BDCA4AB005013A2 /* Quick.framework */,\n\t\t\t\t1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */,\n\t\t\t\t1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDAEB6B901943873100289F44 /* Quick */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA169E4619FF5DF100619816 /* Configuration */,\n\t\t\t\tDA3124E119FCAEE8002858A7 /* DSL */,\n\t\t\t\tDA408BDE19FF5599005DF92A /* Hooks */,\n\t\t\t\tDAEB6B931943873100289F44 /* Quick.h */,\n\t\t\t\t34F375A619515CA700CE1B99 /* World.swift */,\n\t\t\t\tDAED1EC21B1105BC006F61EC /* World.h */,\n\t\t\t\t34F3759E19515CA700CE1B99 /* Example.swift */,\n\t\t\t\tDA02C91819A8073100093156 /* ExampleMetadata.swift */,\n\t\t\t\t34F3759F19515CA700CE1B99 /* ExampleGroup.swift */,\n\t\t\t\t34F3759C19515CA700CE1B99 /* Callsite.swift */,\n\t\t\t\tDA6B30171A4DB0D500FFB148 /* Filter.swift */,\n\t\t\t\t34F375A419515CA700CE1B99 /* QuickSpec.h */,\n\t\t\t\t34F375A519515CA700CE1B99 /* QuickSpec.m */,\n\t\t\t\t34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */,\n\t\t\t\t34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */,\n\t\t\t\tDAEB6B911943873100289F44 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = Quick;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDAEB6B911943873100289F44 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDAEB6B921943873100289F44 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDAEB6B9D1943873100289F44 /* QuickTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */,\n\t\t\t\tDA8F919419F31680006F6675 /* Helpers */,\n\t\t\t\tDAEB6BCD194387D700289F44 /* Fixtures */,\n\t\t\t\tDA8F919B19F3189D006F6675 /* FunctionalTests */,\n\t\t\t\tF8100E941A1E4469007595ED /* Frameworks */,\n\t\t\t\tDAEB6B9E1943873100289F44 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = QuickTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDAEB6B9E1943873100289F44 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDAEB6B9F1943873100289F44 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDAEB6BCD194387D700289F44 /* Fixtures */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */,\n\t\t\t);\n\t\t\tpath = Fixtures;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF8100E941A1E4469007595ED /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF8100E901A1E4447007595ED /* Nimble.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t1F118CD21BDCA4AB005013A2 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F118D2B1BDCA5B6005013A2 /* Quick.h in Headers */,\n\t\t\t\t1F118D261BDCA5AF005013A2 /* World+DSL.h in Headers */,\n\t\t\t\t1F118D271BDCA5AF005013A2 /* World.h in Headers */,\n\t\t\t\t1F118D2A1BDCA5B6005013A2 /* QCKDSL.h in Headers */,\n\t\t\t\t1F118D2C1BDCA5B6005013A2 /* QuickSpec.h in Headers */,\n\t\t\t\t1F118D281BDCA5AF005013A2 /* NSString+QCKSelectorName.h in Headers */,\n\t\t\t\t1F118D291BDCA5B6005013A2 /* QuickConfiguration.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5A5D117919473F2100F6D13D /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t34F375B019515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */,\n\t\t\t\tDAE714FF19FF6A62005905B8 /* QuickConfiguration.h in Headers */,\n\t\t\t\tDA3124E919FCAEE8002858A7 /* QCKDSL.h in Headers */,\n\t\t\t\tDAED1ECB1B110699006F61EC /* World+DSL.h in Headers */,\n\t\t\t\tDAED1EC51B1105BC006F61EC /* World.h in Headers */,\n\t\t\t\t34F375B819515CA700CE1B99 /* QuickSpec.h in Headers */,\n\t\t\t\t5A5D11A7194740E000F6D13D /* Quick.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDAEB6B8B1943873100289F44 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t34F375AF19515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */,\n\t\t\t\tDAE714FE19FF6A62005905B8 /* QuickConfiguration.h in Headers */,\n\t\t\t\tDA3124E819FCAEE8002858A7 /* QCKDSL.h in Headers */,\n\t\t\t\tDAED1ECA1B110699006F61EC /* World+DSL.h in Headers */,\n\t\t\t\tDAED1EC41B1105BC006F61EC /* World.h in Headers */,\n\t\t\t\t34F375B719515CA700CE1B99 /* QuickSpec.h in Headers */,\n\t\t\t\tDAEB6B941943873100289F44 /* Quick.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t1F118CD41BDCA4AB005013A2 /* Quick-tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F118CE61BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget \"Quick-tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F118CD01BDCA4AB005013A2 /* Sources */,\n\t\t\t\t1F118CD11BDCA4AB005013A2 /* Frameworks */,\n\t\t\t\t1F118CD21BDCA4AB005013A2 /* Headers */,\n\t\t\t\t1F118CD31BDCA4AB005013A2 /* 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 = \"Quick-tvOS\";\n\t\t\tproductName = \"Quick-tvOS\";\n\t\t\tproductReference = 1F118CD51BDCA4AB005013A2 /* Quick.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t1F118CDD1BDCA4AB005013A2 /* Quick-tvOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F118CE91BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget \"Quick-tvOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F118CDA1BDCA4AB005013A2 /* Sources */,\n\t\t\t\t1F118CDB1BDCA4AB005013A2 /* Frameworks */,\n\t\t\t\t1F118CDC1BDCA4AB005013A2 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t1F118CE11BDCA4AB005013A2 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Quick-tvOSTests\";\n\t\t\tproductName = \"Quick-tvOSTests\";\n\t\t\tproductReference = 1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t1F118CEF1BDCA4BB005013A2 /* QuickFocused-tvOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F118CF81BDCA4BC005013A2 /* Build configuration list for PBXNativeTarget \"QuickFocused-tvOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F118CEC1BDCA4BB005013A2 /* Sources */,\n\t\t\t\t1F118CED1BDCA4BB005013A2 /* Frameworks */,\n\t\t\t\t1F118CEE1BDCA4BB005013A2 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t1F118CF71BDCA4BB005013A2 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"QuickFocused-tvOSTests\";\n\t\t\tproductName = \"QuickFocused-tvOSTests\";\n\t\t\tproductReference = 1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t5A5D117B19473F2100F6D13D /* Quick-iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 5A5D119319473F2100F6D13D /* Build configuration list for PBXNativeTarget \"Quick-iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5A5D117719473F2100F6D13D /* Sources */,\n\t\t\t\t5A5D117819473F2100F6D13D /* Frameworks */,\n\t\t\t\t5A5D117919473F2100F6D13D /* Headers */,\n\t\t\t\t5A5D117A19473F2100F6D13D /* 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 = \"Quick-iOS\";\n\t\t\tproductName = \"Quick-iOS\";\n\t\t\tproductReference = 5A5D117C19473F2100F6D13D /* Quick.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t5A5D118519473F2100F6D13D /* Quick-iOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 5A5D119419473F2100F6D13D /* Build configuration list for PBXNativeTarget \"Quick-iOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5A5D118219473F2100F6D13D /* Sources */,\n\t\t\t\t5A5D118319473F2100F6D13D /* Frameworks */,\n\t\t\t\t5A5D118419473F2100F6D13D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t5A5D118919473F2100F6D13D /* PBXTargetDependency */,\n\t\t\t\t5A5D11F0194741B500F6D13D /* PBXTargetDependency */,\n\t\t\t\t5A5D11F2194741B500F6D13D /* PBXTargetDependency */,\n\t\t\t\t04DC97E9194B4B7E00CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC97EB194B4B9B00CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC97F3194B82DE00CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC97F7194B831200CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC97FB194B834100CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC97FF194B835E00CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC9803194B836300CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC9807194B838700CE00B6 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Quick-iOSTests\";\n\t\t\tproductName = \"Quick-iOSTests\";\n\t\t\tproductReference = 5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tDA5663E71A4C8D8500193C88 /* QuickFocused-OSXTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = DA5663F31A4C8D8500193C88 /* Build configuration list for PBXNativeTarget \"QuickFocused-OSXTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tDA5663E41A4C8D8500193C88 /* Sources */,\n\t\t\t\tDA5663E51A4C8D8500193C88 /* Frameworks */,\n\t\t\t\tDA5663E61A4C8D8500193C88 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tDA5663F01A4C8D8500193C88 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"QuickFocused-OSXTests\";\n\t\t\tproductName = \"QuickFocused-OSXTests\";\n\t\t\tproductReference = DA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tDA9876B11A4C70EB0004AA17 /* QuickFocused-iOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = DA9876BD1A4C70EB0004AA17 /* Build configuration list for PBXNativeTarget \"QuickFocused-iOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tDA9876AE1A4C70EB0004AA17 /* Sources */,\n\t\t\t\tDA9876AF1A4C70EB0004AA17 /* Frameworks */,\n\t\t\t\tDA9876B01A4C70EB0004AA17 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tDA9876BA1A4C70EB0004AA17 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"QuickFocused-iOSTests\";\n\t\t\tproductName = \"QuickFocused-iOSTests\";\n\t\t\tproductReference = DA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tDAEB6B8D1943873100289F44 /* Quick-OSX */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = DAEB6BA41943873200289F44 /* Build configuration list for PBXNativeTarget \"Quick-OSX\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tDAEB6B891943873100289F44 /* Sources */,\n\t\t\t\tDAEB6B8A1943873100289F44 /* Frameworks */,\n\t\t\t\tDAEB6B8B1943873100289F44 /* Headers */,\n\t\t\t\tDAEB6B8C1943873100289F44 /* 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 = \"Quick-OSX\";\n\t\t\tproductName = Quick;\n\t\t\tproductReference = DAEB6B8E1943873100289F44 /* Quick.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tDAEB6B981943873100289F44 /* Quick-OSXTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = DAEB6BA71943873200289F44 /* Build configuration list for PBXNativeTarget \"Quick-OSXTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tDAEB6B951943873100289F44 /* Sources */,\n\t\t\t\tDAEB6B961943873100289F44 /* Frameworks */,\n\t\t\t\tDAEB6B971943873100289F44 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tDAEB6B9C1943873100289F44 /* PBXTargetDependency */,\n\t\t\t\t047655521949F4CB00B288BB /* PBXTargetDependency */,\n\t\t\t\t047655541949F4CB00B288BB /* PBXTargetDependency */,\n\t\t\t\t04765556194A327000B288BB /* PBXTargetDependency */,\n\t\t\t\t04DC97E5194B4A6000CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC97E7194B4A6000CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC97F1194B82DB00CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC97F9194B834000CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC97FD194B834B00CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC9801194B836100CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC9805194B838400CE00B6 /* PBXTargetDependency */,\n\t\t\t\t04DC9809194B838B00CE00B6 /* PBXTargetDependency */,\n\t\t\t\t93625F391951DDC8006B1FE1 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Quick-OSXTests\";\n\t\t\tproductName = QuickTests;\n\t\t\tproductReference = DAEB6B991943873100289F44 /* Quick-OSXTests.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\tDAEB6B851943873100289F44 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0710;\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t\tORGANIZATIONNAME = \"Brian Ivan Gesiak\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t1F118CD41BDCA4AB005013A2 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1;\n\t\t\t\t\t};\n\t\t\t\t\t1F118CDD1BDCA4AB005013A2 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1;\n\t\t\t\t\t};\n\t\t\t\t\t1F118CEF1BDCA4BB005013A2 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1;\n\t\t\t\t\t};\n\t\t\t\t\t5A5D117B19473F2100F6D13D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t};\n\t\t\t\t\t5A5D118519473F2100F6D13D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t\tTestTargetID = 5A5D117B19473F2100F6D13D;\n\t\t\t\t\t};\n\t\t\t\t\tDA5663E71A4C8D8500193C88 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.2;\n\t\t\t\t\t};\n\t\t\t\t\tDA9876B11A4C70EB0004AA17 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.2;\n\t\t\t\t\t};\n\t\t\t\t\tDAEB6B8D1943873100289F44 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t};\n\t\t\t\t\tDAEB6B981943873100289F44 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t\tTestTargetID = DAEB6B8D1943873100289F44;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = DAEB6B881943873100289F44 /* Build configuration list for PBXProject \"Quick\" */;\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 = DAEB6B841943873100289F44;\n\t\t\tproductRefGroup = DAEB6B8F1943873100289F44 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tDAEB6B8D1943873100289F44 /* Quick-OSX */,\n\t\t\t\tDAEB6B981943873100289F44 /* Quick-OSXTests */,\n\t\t\t\tDA5663E71A4C8D8500193C88 /* QuickFocused-OSXTests */,\n\t\t\t\t5A5D117B19473F2100F6D13D /* Quick-iOS */,\n\t\t\t\t5A5D118519473F2100F6D13D /* Quick-iOSTests */,\n\t\t\t\tDA9876B11A4C70EB0004AA17 /* QuickFocused-iOSTests */,\n\t\t\t\t1F118CD41BDCA4AB005013A2 /* Quick-tvOS */,\n\t\t\t\t1F118CDD1BDCA4AB005013A2 /* Quick-tvOSTests */,\n\t\t\t\t1F118CEF1BDCA4BB005013A2 /* QuickFocused-tvOSTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1F118CD31BDCA4AB005013A2 /* 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\t\t1F118CDC1BDCA4AB005013A2 /* 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\t\t1F118CEE1BDCA4BB005013A2 /* 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\t\t5A5D117A19473F2100F6D13D /* 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\t\t5A5D118419473F2100F6D13D /* 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\t\tDA5663E61A4C8D8500193C88 /* 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\t\tDA9876B01A4C70EB0004AA17 /* 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\t\tDAEB6B8C1943873100289F44 /* 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\t\tDAEB6B971943873100289F44 /* 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\t1F118CD01BDCA4AB005013A2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F118D031BDCA536005013A2 /* World.swift in Sources */,\n\t\t\t\t1F118CFC1BDCA536005013A2 /* Configuration.swift in Sources */,\n\t\t\t\t1F118D021BDCA536005013A2 /* SuiteHooks.swift in Sources */,\n\t\t\t\t1F118CFB1BDCA536005013A2 /* QuickConfiguration.m in Sources */,\n\t\t\t\t1F118D041BDCA536005013A2 /* Example.swift in Sources */,\n\t\t\t\t1F118CFF1BDCA536005013A2 /* QCKDSL.m in Sources */,\n\t\t\t\t1F118D071BDCA536005013A2 /* Callsite.swift in Sources */,\n\t\t\t\t1F118D081BDCA536005013A2 /* Filter.swift in Sources */,\n\t\t\t\t1F118CFD1BDCA536005013A2 /* World+DSL.swift in Sources */,\n\t\t\t\t1F118D0A1BDCA536005013A2 /* NSString+QCKSelectorName.m in Sources */,\n\t\t\t\t1F118CFE1BDCA536005013A2 /* DSL.swift in Sources */,\n\t\t\t\t1F118D001BDCA536005013A2 /* Closures.swift in Sources */,\n\t\t\t\t1F118D051BDCA536005013A2 /* ExampleMetadata.swift in Sources */,\n\t\t\t\t1F118D061BDCA536005013A2 /* ExampleGroup.swift in Sources */,\n\t\t\t\t1F118D091BDCA536005013A2 /* QuickSpec.m in Sources */,\n\t\t\t\t1F118D011BDCA536005013A2 /* ExampleHooks.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F118CDA1BDCA4AB005013A2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F118D381BDCA6E1005013A2 /* Configuration+BeforeEachTests.swift in Sources */,\n\t\t\t\t1F118D121BDCA556005013A2 /* ItTests.swift in Sources */,\n\t\t\t\t1F118D1C1BDCA556005013A2 /* BeforeSuiteTests.swift in Sources */,\n\t\t\t\t1F118D1D1BDCA556005013A2 /* BeforeSuiteTests+ObjC.m in Sources */,\n\t\t\t\t1F118D0E1BDCA547005013A2 /* QCKSpecRunner.m in Sources */,\n\t\t\t\t1F118D141BDCA556005013A2 /* FailureTests+ObjC.m in Sources */,\n\t\t\t\t1F118D0F1BDCA54B005013A2 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */,\n\t\t\t\t1F118D101BDCA556005013A2 /* Configuration+AfterEach.swift in Sources */,\n\t\t\t\t1F118D1F1BDCA556005013A2 /* AfterSuiteTests+ObjC.m in Sources */,\n\t\t\t\t1F118D1A1BDCA556005013A2 /* PendingTests.swift in Sources */,\n\t\t\t\t1F118D171BDCA556005013A2 /* BeforeEachTests+ObjC.m in Sources */,\n\t\t\t\t1F118D231BDCA556005013A2 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */,\n\t\t\t\t1F118D151BDCA556005013A2 /* FailureUsingXCTAssertTests+ObjC.m in Sources */,\n\t\t\t\t1F118D131BDCA556005013A2 /* ItTests+ObjC.m in Sources */,\n\t\t\t\t1F118D191BDCA556005013A2 /* AfterEachTests+ObjC.m in Sources */,\n\t\t\t\t1F118D221BDCA556005013A2 /* SharedExamples+BeforeEachTests.swift in Sources */,\n\t\t\t\t1F118D211BDCA556005013A2 /* SharedExamplesTests+ObjC.m in Sources */,\n\t\t\t\t1F118D201BDCA556005013A2 /* SharedExamplesTests.swift in Sources */,\n\t\t\t\t1F118D0C1BDCA543005013A2 /* QuickConfigurationTests.m in Sources */,\n\t\t\t\t1F118D391BDCA6E6005013A2 /* Configuration+BeforeEach.swift in Sources */,\n\t\t\t\t1F118D181BDCA556005013A2 /* AfterEachTests.swift in Sources */,\n\t\t\t\t1F118D1B1BDCA556005013A2 /* PendingTests+ObjC.m in Sources */,\n\t\t\t\t1F118D1E1BDCA556005013A2 /* AfterSuiteTests.swift in Sources */,\n\t\t\t\t1F118D111BDCA556005013A2 /* Configuration+AfterEachTests.swift in Sources */,\n\t\t\t\t1F118D161BDCA556005013A2 /* BeforeEachTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F118CEC1BDCA4BB005013A2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F118D0D1BDCA547005013A2 /* QCKSpecRunner.m in Sources */,\n\t\t\t\t1F118D241BDCA561005013A2 /* FocusedTests.swift in Sources */,\n\t\t\t\t1F118D251BDCA561005013A2 /* FocusedTests+ObjC.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5A5D117719473F2100F6D13D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t34F375B219515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */,\n\t\t\t\tDA3124EB19FCAEE8002858A7 /* QCKDSL.m in Sources */,\n\t\t\t\tDA408BE319FF5599005DF92A /* Closures.swift in Sources */,\n\t\t\t\tDA02C91A19A8073100093156 /* ExampleMetadata.swift in Sources */,\n\t\t\t\tDA408BE719FF5599005DF92A /* SuiteHooks.swift in Sources */,\n\t\t\t\t34F375BA19515CA700CE1B99 /* QuickSpec.m in Sources */,\n\t\t\t\tDAE7150119FF6A62005905B8 /* QuickConfiguration.m in Sources */,\n\t\t\t\t34F375A819515CA700CE1B99 /* Callsite.swift in Sources */,\n\t\t\t\t34F375AE19515CA700CE1B99 /* ExampleGroup.swift in Sources */,\n\t\t\t\t34F375BC19515CA700CE1B99 /* World.swift in Sources */,\n\t\t\t\tDA169E4919FF5DF100619816 /* Configuration.swift in Sources */,\n\t\t\t\tDA3124ED19FCAEE8002858A7 /* World+DSL.swift in Sources */,\n\t\t\t\tDA408BE519FF5599005DF92A /* ExampleHooks.swift in Sources */,\n\t\t\t\t34F375AC19515CA700CE1B99 /* Example.swift in Sources */,\n\t\t\t\tDA3124E719FCAEE8002858A7 /* DSL.swift in Sources */,\n\t\t\t\tDA6B30191A4DB0D500FFB148 /* Filter.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5A5D118219473F2100F6D13D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDAE714F819FF6812005905B8 /* Configuration+AfterEach.swift in Sources */,\n\t\t\t\tDAA7C0D719F777EB0093D1D9 /* BeforeEachTests.swift in Sources */,\n\t\t\t\tDA8F919A19F31680006F6675 /* QCKSpecRunner.m in Sources */,\n\t\t\t\tDA8940F11B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */,\n\t\t\t\t4728253C1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */,\n\t\t\t\tDAE714F119FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */,\n\t\t\t\tDA05D61119F73A3800771050 /* AfterEachTests.swift in Sources */,\n\t\t\t\tDAB0137019FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */,\n\t\t\t\tDA8F91A619F3208B006F6675 /* BeforeSuiteTests.swift in Sources */,\n\t\t\t\tDA8C00221A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */,\n\t\t\t\tDAA63EA419F7637300CD0A3B /* PendingTests.swift in Sources */,\n\t\t\t\tDA8F91AC19F3299E006F6675 /* SharedExamplesTests.swift in Sources */,\n\t\t\t\tDA7AE6F219FC493F000AFDCE /* ItTests.swift in Sources */,\n\t\t\t\t4748E8951A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */,\n\t\t\t\tDA8F91AF19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */,\n\t\t\t\tDAE714FB19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */,\n\t\t\t\t471590411A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */,\n\t\t\t\tDA8F919E19F31921006F6675 /* FailureTests+ObjC.m in Sources */,\n\t\t\t\tDAE714F419FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */,\n\t\t\t\tDA8F91A919F32556006F6675 /* AfterSuiteTests.swift in Sources */,\n\t\t\t\t4772173B1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */,\n\t\t\t\t479C31E41A36172700DA8718 /* ItTests+ObjC.m in Sources */,\n\t\t\t\t47FAEA371A3F49EB005A1D2F /* BeforeEachTests+ObjC.m in Sources */,\n\t\t\t\t470D6ECC1A43442900043E50 /* AfterEachTests+ObjC.m in Sources */,\n\t\t\t\t47876F7E1A49AD71002575C7 /* BeforeSuiteTests+ObjC.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDA5663E41A4C8D8500193C88 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDA07722E1A4E5B7B0098839D /* QCKSpecRunner.m in Sources */,\n\t\t\t\tDA5663F41A4C8D9A00193C88 /* FocusedTests.swift in Sources */,\n\t\t\t\tDAF28BC31A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDA9876AE1A4C70EB0004AA17 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDA07722F1A4E5B7C0098839D /* QCKSpecRunner.m in Sources */,\n\t\t\t\tDA9876C11A4C87200004AA17 /* FocusedTests.swift in Sources */,\n\t\t\t\tDAF28BC41A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDAEB6B891943873100289F44 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t34F375B119515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */,\n\t\t\t\tDA3124EA19FCAEE8002858A7 /* QCKDSL.m in Sources */,\n\t\t\t\tDA408BE219FF5599005DF92A /* Closures.swift in Sources */,\n\t\t\t\tDA02C91919A8073100093156 /* ExampleMetadata.swift in Sources */,\n\t\t\t\tDA408BE619FF5599005DF92A /* SuiteHooks.swift in Sources */,\n\t\t\t\t34F375B919515CA700CE1B99 /* QuickSpec.m in Sources */,\n\t\t\t\tDAE7150019FF6A62005905B8 /* QuickConfiguration.m in Sources */,\n\t\t\t\t34F375A719515CA700CE1B99 /* Callsite.swift in Sources */,\n\t\t\t\t34F375AD19515CA700CE1B99 /* ExampleGroup.swift in Sources */,\n\t\t\t\t34F375BB19515CA700CE1B99 /* World.swift in Sources */,\n\t\t\t\tDA169E4819FF5DF100619816 /* Configuration.swift in Sources */,\n\t\t\t\tDA3124EC19FCAEE8002858A7 /* World+DSL.swift in Sources */,\n\t\t\t\tDA408BE419FF5599005DF92A /* ExampleHooks.swift in Sources */,\n\t\t\t\t34F375AB19515CA700CE1B99 /* Example.swift in Sources */,\n\t\t\t\tDA3124E619FCAEE8002858A7 /* DSL.swift in Sources */,\n\t\t\t\tDA6B30181A4DB0D500FFB148 /* Filter.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDAEB6B951943873100289F44 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDAE714F719FF6812005905B8 /* Configuration+AfterEach.swift in Sources */,\n\t\t\t\tDAB067E919F7801C00F970AC /* BeforeEachTests.swift in Sources */,\n\t\t\t\tDA8F919919F31680006F6675 /* QCKSpecRunner.m in Sources */,\n\t\t\t\tDA8940F01B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */,\n\t\t\t\t4728253B1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */,\n\t\t\t\tDAE714F019FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */,\n\t\t\t\tDA05D61019F73A3800771050 /* AfterEachTests.swift in Sources */,\n\t\t\t\tDAB0136F19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */,\n\t\t\t\tDA8F91A519F3208B006F6675 /* BeforeSuiteTests.swift in Sources */,\n\t\t\t\tDA8C00211A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */,\n\t\t\t\tDAA63EA319F7637300CD0A3B /* PendingTests.swift in Sources */,\n\t\t\t\tDA8F91AB19F3299E006F6675 /* SharedExamplesTests.swift in Sources */,\n\t\t\t\tDA7AE6F119FC493F000AFDCE /* ItTests.swift in Sources */,\n\t\t\t\t4748E8941A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */,\n\t\t\t\tDA8F91AE19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */,\n\t\t\t\tDAE714FA19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */,\n\t\t\t\t471590401A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */,\n\t\t\t\tDA8F919D19F31921006F6675 /* FailureTests+ObjC.m in Sources */,\n\t\t\t\tDAE714F319FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */,\n\t\t\t\tDA8F91A819F32556006F6675 /* AfterSuiteTests.swift in Sources */,\n\t\t\t\t4772173A1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */,\n\t\t\t\t479C31E31A36171B00DA8718 /* ItTests+ObjC.m in Sources */,\n\t\t\t\t47FAEA361A3F49E6005A1D2F /* BeforeEachTests+ObjC.m in Sources */,\n\t\t\t\t470D6ECB1A43442400043E50 /* AfterEachTests+ObjC.m in Sources */,\n\t\t\t\t47876F7D1A49AD63002575C7 /* BeforeSuiteTests+ObjC.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\t047655521949F4CB00B288BB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 047655511949F4CB00B288BB /* PBXContainerItemProxy */;\n\t\t};\n\t\t047655541949F4CB00B288BB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 047655531949F4CB00B288BB /* PBXContainerItemProxy */;\n\t\t};\n\t\t04765556194A327000B288BB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 04765555194A327000B288BB /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC97E5194B4A6000CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 04DC97E4194B4A6000CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC97E7194B4A6000CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 04DC97E6194B4A6000CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC97E9194B4B7E00CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = 04DC97E8194B4B7E00CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC97EB194B4B9B00CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = 04DC97EA194B4B9B00CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC97F1194B82DB00CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 04DC97F0194B82DB00CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC97F3194B82DE00CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = 04DC97F2194B82DE00CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC97F7194B831200CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = 04DC97F6194B831200CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC97F9194B834000CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 04DC97F8194B834000CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC97FB194B834100CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = 04DC97FA194B834100CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC97FD194B834B00CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 04DC97FC194B834B00CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC97FF194B835E00CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = 04DC97FE194B835E00CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC9801194B836100CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 04DC9800194B836100CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC9803194B836300CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = 04DC9802194B836300CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC9805194B838400CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 04DC9804194B838400CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC9807194B838700CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = 04DC9806194B838700CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04DC9809194B838B00CE00B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 04DC9808194B838B00CE00B6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F118CE11BDCA4AB005013A2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */;\n\t\t\ttargetProxy = 1F118CE01BDCA4AB005013A2 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1F118CF71BDCA4BB005013A2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */;\n\t\t\ttargetProxy = 1F118CF61BDCA4BB005013A2 /* PBXContainerItemProxy */;\n\t\t};\n\t\t5A5D118919473F2100F6D13D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = 5A5D118819473F2100F6D13D /* PBXContainerItemProxy */;\n\t\t};\n\t\t5A5D11F0194741B500F6D13D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = 5A5D11EF194741B500F6D13D /* PBXContainerItemProxy */;\n\t\t};\n\t\t5A5D11F2194741B500F6D13D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = 5A5D11F1194741B500F6D13D /* PBXContainerItemProxy */;\n\t\t};\n\t\t93625F391951DDC8006B1FE1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = 93625F381951DDC8006B1FE1 /* PBXContainerItemProxy */;\n\t\t};\n\t\tDA5663F01A4C8D8500193C88 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = DA5663EF1A4C8D8500193C88 /* PBXContainerItemProxy */;\n\t\t};\n\t\tDA9876BA1A4C70EB0004AA17 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5A5D117B19473F2100F6D13D /* Quick-iOS */;\n\t\t\ttargetProxy = DA9876B91A4C70EB0004AA17 /* PBXContainerItemProxy */;\n\t\t};\n\t\tDAEB6B9C1943873100289F44 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = DAEB6B8D1943873100289F44 /* Quick-OSX */;\n\t\t\ttargetProxy = DAEB6B9B1943873100289F44 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1F118CE71BDCA4AB005013A2 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = Quick/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Quick;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F118CE81BDCA4AB005013A2 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = Quick/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Quick;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F118CEA1BDCA4AB005013A2 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = QuickTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F118CEB1BDCA4AB005013A2 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = QuickTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F118CF91BDCA4BC005013A2 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = QuickFocusedTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F118CFA1BDCA4BC005013A2 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos\",\n\t\t\t\t);\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = QuickFocusedTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t5A5D118F19473F2100F6D13D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/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 = Quick/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Quick;\n\t\t\t\tPRODUCT_NAME = Quick;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t5A5D119019473F2100F6D13D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Quick/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Quick;\n\t\t\t\tPRODUCT_NAME = Quick;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t5A5D119119473F2100F6D13D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\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 = QuickTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos appletvsos appletvsimulator\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t5A5D119219473F2100F6D13D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\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 = QuickTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tONLY_ACTIVE_ARCH = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphonesimulator iphoneos appletvsos appletvsimulator\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tDA5663F11A4C8D8500193C88 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\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 = QuickFocusedTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.10;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tDA5663F21A4C8D8500193C88 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = QuickFocusedTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.10;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tDA9876BB1A4C70EB0004AA17 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\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 = QuickFocusedTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tDA9876BC1A4C70EB0004AA17 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\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 = QuickFocusedTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tONLY_ACTIVE_ARCH = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tDAEB6BA21943873200289F44 /* 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\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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_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\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tDAEB6BA31943873200289F44 /* 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\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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_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.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tDAEB6BA51943873200289F44 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = Quick/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Quick;\n\t\t\t\tPRODUCT_NAME = Quick;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVALID_ARCHS = x86_64;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tDAEB6BA61943873200289F44 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = Quick/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_MODULE_NAME = Quick;\n\t\t\t\tPRODUCT_NAME = Quick;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVALID_ARCHS = x86_64;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tDAEB6BA81943873200289F44 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\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 = QuickTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tDAEB6BA91943873200289F44 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = QuickTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"io.quick.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = QuickTests/Helpers/QuickTestsBridgingHeader.h;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1F118CE61BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget \"Quick-tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F118CE71BDCA4AB005013A2 /* Debug */,\n\t\t\t\t1F118CE81BDCA4AB005013A2 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F118CE91BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget \"Quick-tvOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F118CEA1BDCA4AB005013A2 /* Debug */,\n\t\t\t\t1F118CEB1BDCA4AB005013A2 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F118CF81BDCA4BC005013A2 /* Build configuration list for PBXNativeTarget \"QuickFocused-tvOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F118CF91BDCA4BC005013A2 /* Debug */,\n\t\t\t\t1F118CFA1BDCA4BC005013A2 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t5A5D119319473F2100F6D13D /* Build configuration list for PBXNativeTarget \"Quick-iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t5A5D118F19473F2100F6D13D /* Debug */,\n\t\t\t\t5A5D119019473F2100F6D13D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t5A5D119419473F2100F6D13D /* Build configuration list for PBXNativeTarget \"Quick-iOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t5A5D119119473F2100F6D13D /* Debug */,\n\t\t\t\t5A5D119219473F2100F6D13D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tDA5663F31A4C8D8500193C88 /* Build configuration list for PBXNativeTarget \"QuickFocused-OSXTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tDA5663F11A4C8D8500193C88 /* Debug */,\n\t\t\t\tDA5663F21A4C8D8500193C88 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tDA9876BD1A4C70EB0004AA17 /* Build configuration list for PBXNativeTarget \"QuickFocused-iOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tDA9876BB1A4C70EB0004AA17 /* Debug */,\n\t\t\t\tDA9876BC1A4C70EB0004AA17 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tDAEB6B881943873100289F44 /* Build configuration list for PBXProject \"Quick\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tDAEB6BA21943873200289F44 /* Debug */,\n\t\t\t\tDAEB6BA31943873200289F44 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tDAEB6BA41943873200289F44 /* Build configuration list for PBXNativeTarget \"Quick-OSX\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tDAEB6BA51943873200289F44 /* Debug */,\n\t\t\t\tDAEB6BA61943873200289F44 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tDAEB6BA71943873200289F44 /* Build configuration list for PBXNativeTarget \"Quick-OSXTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tDAEB6BA81943873200289F44 /* Debug */,\n\t\t\t\tDAEB6BA91943873200289F44 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = DAEB6B851943873100289F44 /* Project object */;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-OSX.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"DAEB6B8D1943873100289F44\"\n               BuildableName = \"Quick.framework\"\n               BlueprintName = \"Quick-OSX\"\n               ReferencedContainer = \"container:Quick.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"DAEB6B981943873100289F44\"\n               BuildableName = \"Quick-OSXTests.xctest\"\n               BlueprintName = \"Quick-OSXTests\"\n               ReferencedContainer = \"container:Quick.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"DA5663E71A4C8D8500193C88\"\n               BuildableName = \"QuickFocused-OSXTests.xctest\"\n               BlueprintName = \"QuickFocused-OSXTests\"\n               ReferencedContainer = \"container:Quick.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"DAEB6B8D1943873100289F44\"\n            BuildableName = \"Quick.framework\"\n            BlueprintName = \"Quick-OSX\"\n            ReferencedContainer = \"container:Quick.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"DAEB6B8D1943873100289F44\"\n            BuildableName = \"Quick.framework\"\n            BlueprintName = \"Quick-OSX\"\n            ReferencedContainer = \"container:Quick.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"DAEB6B8D1943873100289F44\"\n            BuildableName = \"Quick.framework\"\n            BlueprintName = \"Quick-OSX\"\n            ReferencedContainer = \"container:Quick.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-iOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"5A5D117B19473F2100F6D13D\"\n               BuildableName = \"Quick.framework\"\n               BlueprintName = \"Quick-iOS\"\n               ReferencedContainer = \"container:Quick.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"5A5D118519473F2100F6D13D\"\n               BuildableName = \"Quick-iOSTests.xctest\"\n               BlueprintName = \"Quick-iOSTests\"\n               ReferencedContainer = \"container:Quick.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"DA9876B11A4C70EB0004AA17\"\n               BuildableName = \"QuickFocused-iOSTests.xctest\"\n               BlueprintName = \"QuickFocused-iOSTests\"\n               ReferencedContainer = \"container:Quick.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"5A5D117B19473F2100F6D13D\"\n            BuildableName = \"Quick.framework\"\n            BlueprintName = \"Quick-iOS\"\n            ReferencedContainer = \"container:Quick.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"5A5D117B19473F2100F6D13D\"\n            BuildableName = \"Quick.framework\"\n            BlueprintName = \"Quick-iOS\"\n            ReferencedContainer = \"container:Quick.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"5A5D117B19473F2100F6D13D\"\n            BuildableName = \"Quick.framework\"\n            BlueprintName = \"Quick-iOS\"\n            ReferencedContainer = \"container:Quick.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-tvOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F118CD41BDCA4AB005013A2\"\n               BuildableName = \"Quick.framework\"\n               BlueprintName = \"Quick-tvOS\"\n               ReferencedContainer = \"container:Quick.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F118CDD1BDCA4AB005013A2\"\n               BuildableName = \"Quick-tvOSTests.xctest\"\n               BlueprintName = \"Quick-tvOSTests\"\n               ReferencedContainer = \"container:Quick.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F118CEF1BDCA4BB005013A2\"\n               BuildableName = \"QuickFocused-tvOSTests.xctest\"\n               BlueprintName = \"QuickFocused-tvOSTests\"\n               ReferencedContainer = \"container:Quick.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F118CD41BDCA4AB005013A2\"\n            BuildableName = \"Quick.framework\"\n            BlueprintName = \"Quick-tvOS\"\n            ReferencedContainer = \"container:Quick.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F118CD41BDCA4AB005013A2\"\n            BuildableName = \"Quick.framework\"\n            BlueprintName = \"Quick-tvOS\"\n            ReferencedContainer = \"container:Quick.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1F118CD41BDCA4AB005013A2\"\n            BuildableName = \"Quick.framework\"\n            BlueprintName = \"Quick-tvOS\"\n            ReferencedContainer = \"container:Quick.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickFocusedTests/FocusedTests+ObjC.m",
    "content": "#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n#import <XCTest/XCTest.h>\n\n#import \"QCKSpecRunner.h\"\n\nQuickConfigurationBegin(FunctionalTests_SharedExamplesConfiguration_ObjC)\n\n+ (void)configure:(Configuration *)configuration {\n    sharedExamples(@\"two passing shared examples (Objective-C)\", ^(QCKDSLSharedExampleContext exampleContext) {\n        it(@\"has an example that passes (4)\", ^{});\n        it(@\"has another example that passes (5)\", ^{});\n    });\n}\n\nQuickConfigurationEnd\n\nQuickSpecBegin(FunctionalTests_FocusedSpec_Focused_ObjC)\n\nit(@\"has an unfocused example that fails, but is never run\", ^{ XCTFail(); });\nfit(@\"has a focused example that passes (1)\", ^{});\n\nfdescribe(@\"a focused example group\", ^{\n    it(@\"has an example that is not focused, but will be run, and passes (2)\", ^{});\n    fit(@\"has a focused example that passes (3)\", ^{});\n});\n\nfitBehavesLike(@\"two passing shared examples (Objective-C)\", ^NSDictionary *{ return @{}; });\n\nQuickSpecEnd\n\nQuickSpecBegin(FunctionalTests_FocusedSpec_Unfocused_ObjC)\n\nit(@\"has an unfocused example thay fails, but is never run\", ^{ XCTFail(); });\n\ndescribe(@\"an unfocused example group that is never run\", ^{\n    beforeEach(^{ [NSException raise:NSInternalInconsistencyException format:@\"\"]; });\n    it(@\"has an example that fails, but is never run\", ^{ XCTFail(); });\n});\n\nQuickSpecEnd\n\n@interface FocusedTests_ObjC: XCTestCase\n@end\n\n@implementation FocusedTests_ObjC\n\n- (void)testOnlyFocusedExamplesAreExecuted {\n    XCTestRun *result = qck_runSpecs(@[\n        [FunctionalTests_FocusedSpec_Focused_ObjC class],\n        [FunctionalTests_FocusedSpec_Unfocused_ObjC class]\n    ]);\n    XCTAssertEqual(result.executionCount, 5);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickFocusedTests/FocusedTests.swift",
    "content": "import Quick\nimport Nimble\nimport XCTest\n\nclass FunctionalTests_FocusedSpec_SharedExamplesConfiguration: QuickConfiguration {\n    override class func configure(configuration: Configuration) {\n        sharedExamples(\"two passing shared examples\") {\n            it(\"has an example that passes (4)\") {}\n            it(\"has another example that passes (5)\") {}\n        }\n    }\n}\n\nclass FunctionalTests_FocusedSpec_Focused: QuickSpec {\n    override func spec() {\n        it(\"has an unfocused example that fails, but is never run\") { fail() }\n        fit(\"has a focused example that passes (1)\") {}\n\n        fdescribe(\"a focused example group\") {\n            it(\"has an example that is not focused, but will be run, and passes (2)\") {}\n            fit(\"has a focused example that passes (3)\") {}\n        }\n\n        // TODO: Port fitBehavesLike to Swift.\n        itBehavesLike(\"two passing shared examples\", flags: [Filter.focused: true])\n    }\n}\n\nclass FunctionalTests_FocusedSpec_Unfocused: QuickSpec {\n    override func spec() {\n        it(\"has an unfocused example that fails, but is never run\") { fail() }\n\n        describe(\"an unfocused example group that is never run\") {\n            beforeEach { assert(false) }\n            it(\"has an example that fails, but is never run\") { fail() }\n        }\n    }\n}\n\nclass FocusedTests: XCTestCase {\n    func testOnlyFocusedExamplesAreExecuted() {\n        let result = qck_runSpecs([\n            FunctionalTests_FocusedSpec_Focused.classForCoder(),\n            FunctionalTests_FocusedSpec_Unfocused.classForCoder()\n        ])\n        XCTAssertEqual(result.executionCount, 5 as UInt)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickFocusedTests/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/Fixtures/FunctionalTests_SharedExamplesTests_SharedExamples.swift",
    "content": "import Quick\nimport Nimble\n\nclass FunctionalTests_SharedExamplesTests_SharedExamples: QuickConfiguration {\n    override class func configure(configuration: Configuration) {\n        sharedExamples(\"a group of three shared examples\") {\n            it(\"passes once\") { expect(true).to(beTruthy()) }\n            it(\"passes twice\") { expect(true).to(beTruthy()) }\n            it(\"passes three times\") { expect(true).to(beTruthy()) }\n        }\n\n        sharedExamples(\"shared examples that take a context\") { (sharedExampleContext: SharedExampleContext) in\n            it(\"is passed the correct parameters via the context\") {\n                let callsite = sharedExampleContext()[\"callsite\"] as! String\n                expect(callsite).to(equal(\"SharedExamplesSpec\"))\n            }\n        }\n    }\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/AfterEachTests+ObjC.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"QCKSpecRunner.h\"\n\ntypedef NS_ENUM(NSUInteger, AfterEachType) {\n    OuterOne,\n    OuterTwo,\n    OuterThree,\n    InnerOne,\n    InnerTwo,\n    NoExamples,\n};\n\nstatic NSMutableArray *afterEachOrder;\n\nQuickSpecBegin(FunctionalTests_AfterEachSpec_ObjC)\n\nafterEach(^{ [afterEachOrder addObject:@(OuterOne)]; });\nafterEach(^{ [afterEachOrder addObject:@(OuterTwo)]; });\nafterEach(^{ [afterEachOrder addObject:@(OuterThree)]; });\n\nit(@\"executes the outer afterEach closures once, but not before this closure [1]\", ^{\n    expect(afterEachOrder).to(equal(@[]));\n});\n\nit(@\"executes the outer afterEach closures a second time, but not before this closure [2]\", ^{\n    expect(afterEachOrder).to(equal(@[@(OuterOne), @(OuterTwo), @(OuterThree)]));\n});\n\ncontext(@\"when there are nested afterEach\", ^{\n    afterEach(^{ [afterEachOrder addObject:@(InnerOne)]; });\n    afterEach(^{ [afterEachOrder addObject:@(InnerTwo)]; });\n\n    it(@\"executes the outer and inner afterEach closures, but not before this closure [3]\", ^{\n        // The afterEach for the previous two examples should have been run.\n        // The list should contain the afterEach for those example, executed from top to bottom.\n        expect(afterEachOrder).to(equal(@[\n            @(OuterOne), @(OuterTwo), @(OuterThree),\n            @(OuterOne), @(OuterTwo), @(OuterThree),\n        ]));\n    });\n});\n\ncontext(@\"when there are nested afterEach without examples\", ^{\n    afterEach(^{ [afterEachOrder addObject:@(NoExamples)]; });\n});\n\nQuickSpecEnd\n\n@interface AfterEachTests_ObjC : XCTestCase; @end\n\n@implementation AfterEachTests_ObjC\n\n- (void)setUp {\n    [super setUp];\n    afterEachOrder = [NSMutableArray array];\n}\n\n- (void)tearDown {\n    afterEachOrder = [NSMutableArray array];\n    [super tearDown];\n}\n\n- (void)testAfterEachIsExecutedInTheCorrectOrder {\n    qck_runSpec([FunctionalTests_AfterEachSpec_ObjC class]);\n    NSArray *expectedOrder = @[\n        // [1] The outer afterEach closures are executed from top to bottom.\n        @(OuterOne), @(OuterTwo), @(OuterThree),\n        // [2] The outer afterEach closures are executed from top to bottom.\n        @(OuterOne), @(OuterTwo), @(OuterThree),\n        // [3] The outer afterEach closures are executed from top to bottom,\n        //     then the outer afterEach closures are executed from top to bottom.\n        @(InnerOne), @(InnerTwo), @(OuterOne), @(OuterTwo), @(OuterThree),\n    ];\n\n    XCTAssertEqualObjects(afterEachOrder, expectedOrder);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/AfterEachTests.swift",
    "content": "import XCTest\nimport Quick\nimport Nimble\n\nprivate enum AfterEachType {\n    case OuterOne\n    case OuterTwo\n    case OuterThree\n    case InnerOne\n    case InnerTwo\n    case NoExamples\n}\n\nprivate var afterEachOrder = [AfterEachType]()\n\nclass FunctionalTests_AfterEachSpec: QuickSpec {\n    override func spec() {\n        afterEach { afterEachOrder.append(AfterEachType.OuterOne) }\n        afterEach { afterEachOrder.append(AfterEachType.OuterTwo) }\n        afterEach { afterEachOrder.append(AfterEachType.OuterThree) }\n\n        it(\"executes the outer afterEach closures once, but not before this closure [1]\") {\n            // No examples have been run, so no afterEach will have been run either.\n            // The list should be empty.\n            expect(afterEachOrder).to(beEmpty())\n        }\n\n        it(\"executes the outer afterEach closures a second time, but not before this closure [2]\") {\n            // The afterEach for the previous example should have been run.\n            // The list should contain the afterEach for that example, executed from top to bottom.\n            expect(afterEachOrder).to(equal([AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree]))\n        }\n\n        context(\"when there are nested afterEach\") {\n            afterEach { afterEachOrder.append(AfterEachType.InnerOne) }\n            afterEach { afterEachOrder.append(AfterEachType.InnerTwo) }\n\n            it(\"executes the outer and inner afterEach closures, but not before this closure [3]\") {\n                // The afterEach for the previous two examples should have been run.\n                // The list should contain the afterEach for those example, executed from top to bottom.\n                expect(afterEachOrder).to(equal([\n                    AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree,\n                    AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree,\n                ]))\n            }\n        }\n\n        context(\"when there are nested afterEach without examples\") {\n            afterEach { afterEachOrder.append(AfterEachType.NoExamples) }\n        }\n    }\n}\n\nclass AfterEachTests: XCTestCase {\n    override func setUp() {\n        super.setUp()\n        afterEachOrder = []\n    }\n\n    override func tearDown() {\n        afterEachOrder = []\n        super.tearDown()\n    }\n\n    func testAfterEachIsExecutedInTheCorrectOrder() {\n        qck_runSpec(FunctionalTests_AfterEachSpec.classForCoder())\n        let expectedOrder = [\n            // [1] The outer afterEach closures are executed from top to bottom.\n            AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree,\n            // [2] The outer afterEach closures are executed from top to bottom.\n            AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree,\n            // [3] The inner afterEach closures are executed from top to bottom,\n            //     then the outer afterEach closures are executed from top to bottom.\n            AfterEachType.InnerOne, AfterEachType.InnerTwo,\n                AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree,\n        ]\n        XCTAssertEqual(afterEachOrder, expectedOrder)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/AfterSuiteTests+ObjC.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"QCKSpecRunner.h\"\n\nstatic BOOL afterSuiteWasExecuted = NO;\n\nQuickSpecBegin(FunctionalTests_AfterSuite_AfterSuiteSpec_ObjC)\n\nafterSuite(^{\n    afterSuiteWasExecuted = YES;\n});\n\nQuickSpecEnd\n\nQuickSpecBegin(FunctionalTests_AfterSuite_Spec_ObjC)\n\nit(@\"is executed before afterSuite\", ^{\n    expect(@(afterSuiteWasExecuted)).to(beFalsy());\n});\n\nQuickSpecEnd\n\n@interface AfterSuiteTests_ObjC : XCTestCase; @end\n\n@implementation AfterSuiteTests_ObjC\n\n- (void)testAfterSuiteIsNotExecutedBeforeAnyExamples {\n    // Execute the spec with an assertion after the one with an afterSuite.\n    NSArray *specs = @[\n        [FunctionalTests_AfterSuite_AfterSuiteSpec_ObjC class],\n        [FunctionalTests_AfterSuite_Spec_ObjC class]\n    ];\n    XCTestRun *result = qck_runSpecs(specs);\n\n    // Although this ensures that afterSuite is not called before any\n    // examples, it doesn't test that it's ever called in the first place.\n    XCTAssert(result.hasSucceeded);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/AfterSuiteTests.swift",
    "content": "import XCTest\nimport Quick\nimport Nimble\n\nvar afterSuiteWasExecuted = false\n\nclass FunctionalTests_AfterSuite_AfterSuiteSpec: QuickSpec {\n    override func spec() {\n        afterSuite {\n            afterSuiteWasExecuted = true\n        }\n    }\n}\n\nclass FunctionalTests_AfterSuite_Spec: QuickSpec {\n    override func spec() {\n        it(\"is executed before afterSuite\") {\n            expect(afterSuiteWasExecuted).to(beFalsy())\n        }\n    }\n}\n\nclass AfterSuiteTests: XCTestCase {\n    func testAfterSuiteIsNotExecutedBeforeAnyExamples() {\n        // Execute the spec with an assertion after the one with an afterSuite.\n        let specs = NSArray(objects: FunctionalTests_AfterSuite_AfterSuiteSpec.classForCoder(),\n                                     FunctionalTests_AfterSuite_Spec.classForCoder())\n        let result = qck_runSpecs(specs as [AnyObject])\n\n        // Although this ensures that afterSuite is not called before any\n        // examples, it doesn't test that it's ever called in the first place.\n        XCTAssert(result.hasSucceeded)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/BeforeEachTests+ObjC.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Quick/Quick.h>\n\n#import \"QCKSpecRunner.h\"\n\ntypedef NS_ENUM(NSUInteger, BeforeEachType) {\n    OuterOne,\n    OuterTwo,\n    InnerOne,\n    InnerTwo,\n    InnerThree,\n    NoExamples,\n};\n\nstatic NSMutableArray *beforeEachOrder;\n\nQuickSpecBegin(FunctionalTests_BeforeEachSpec_ObjC)\n\nbeforeEach(^{ [beforeEachOrder addObject:@(OuterOne)]; });\nbeforeEach(^{ [beforeEachOrder addObject:@(OuterTwo)]; });\n\nit(@\"executes the outer beforeEach closures once [1]\", ^{});\nit(@\"executes the outer beforeEach closures a second time [2]\", ^{});\n\ncontext(@\"when there are nested beforeEach\", ^{\n    beforeEach(^{ [beforeEachOrder addObject:@(InnerOne)];   });\n    beforeEach(^{ [beforeEachOrder addObject:@(InnerTwo)];   });\n    beforeEach(^{ [beforeEachOrder addObject:@(InnerThree)]; });\n\n    it(@\"executes the outer and inner beforeEach closures [3]\", ^{});\n});\n\ncontext(@\"when there are nested beforeEach without examples\", ^{\n    beforeEach(^{ [beforeEachOrder addObject:@(NoExamples)]; });\n});\n\nQuickSpecEnd\n\n@interface BeforeEachTests_ObjC : XCTestCase; @end\n\n@implementation BeforeEachTests_ObjC\n\n- (void)setUp {\n    beforeEachOrder = [NSMutableArray array];\n    [super setUp];\n}\n\n- (void)tearDown {\n    beforeEachOrder = [NSMutableArray array];\n    [super tearDown];\n}\n\n- (void)testBeforeEachIsExecutedInTheCorrectOrder {\n    qck_runSpec([FunctionalTests_BeforeEachSpec_ObjC class]);\n    NSArray *expectedOrder = @[\n        // [1] The outer beforeEach closures are executed from top to bottom.\n        @(OuterOne), @(OuterTwo),\n        // [2] The outer beforeEach closures are executed from top to bottom.\n        @(OuterOne), @(OuterTwo),\n        // [3] The outer beforeEach closures are executed from top to bottom,\n        //     then the inner beforeEach closures are executed from top to bottom.\n        @(OuterOne), @(OuterTwo), @(InnerOne), @(InnerTwo), @(InnerThree),\n    ];\n\n    XCTAssertEqualObjects(beforeEachOrder, expectedOrder);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/BeforeEachTests.swift",
    "content": "import XCTest\nimport Quick\nimport Nimble\n\nprivate enum BeforeEachType {\n    case OuterOne\n    case OuterTwo\n    case InnerOne\n    case InnerTwo\n    case InnerThree\n    case NoExamples\n}\n\nprivate var beforeEachOrder = [BeforeEachType]()\n\nclass FunctionalTests_BeforeEachSpec: QuickSpec {\n    override func spec() {\n        beforeEach { beforeEachOrder.append(BeforeEachType.OuterOne) }\n        beforeEach { beforeEachOrder.append(BeforeEachType.OuterTwo) }\n\n        it(\"executes the outer beforeEach closures once [1]\") {}\n        it(\"executes the outer beforeEach closures a second time [2]\") {}\n\n        context(\"when there are nested beforeEach\") {\n            beforeEach { beforeEachOrder.append(BeforeEachType.InnerOne) }\n            beforeEach { beforeEachOrder.append(BeforeEachType.InnerTwo) }\n            beforeEach { beforeEachOrder.append(BeforeEachType.InnerThree) }\n\n            it(\"executes the outer and inner beforeEach closures [3]\") {}\n        }\n\n        context(\"when there are nested beforeEach without examples\") {\n            beforeEach { beforeEachOrder.append(BeforeEachType.NoExamples) }\n        }\n    }\n}\n\nclass BeforeEachTests: XCTestCase {\n    override func setUp() {\n        super.setUp()\n        beforeEachOrder = []\n    }\n\n    override func tearDown() {\n        beforeEachOrder = []\n        super.tearDown()\n    }\n\n    func testBeforeEachIsExecutedInTheCorrectOrder() {\n        qck_runSpec(FunctionalTests_BeforeEachSpec.classForCoder())\n        let expectedOrder = [\n            // [1] The outer beforeEach closures are executed from top to bottom.\n            BeforeEachType.OuterOne, BeforeEachType.OuterTwo,\n            // [2] The outer beforeEach closures are executed from top to bottom.\n            BeforeEachType.OuterOne, BeforeEachType.OuterTwo,\n            // [3] The outer beforeEach closures are executed from top to bottom,\n            //     then the inner beforeEach closures are executed from top to bottom.\n            BeforeEachType.OuterOne, BeforeEachType.OuterTwo,\n                BeforeEachType.InnerOne, BeforeEachType.InnerTwo, BeforeEachType.InnerThree,\n        ]\n        XCTAssertEqual(beforeEachOrder, expectedOrder)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/BeforeSuiteTests+ObjC.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"QCKSpecRunner.h\"\n\nstatic BOOL beforeSuiteWasExecuted = NO;\n\nQuickSpecBegin(FunctionalTests_BeforeSuite_BeforeSuiteSpec_ObjC)\n\nbeforeSuite(^{\n    beforeSuiteWasExecuted = YES;\n});\n\nQuickSpecEnd\n\nQuickSpecBegin(FunctionalTests_BeforeSuite_Spec_ObjC)\n\nit(@\"is executed after beforeSuite\", ^{\n    expect(@(beforeSuiteWasExecuted)).to(beTruthy());\n});\n\nQuickSpecEnd\n\n@interface BeforeSuiteTests_ObjC : XCTestCase; @end\n\n@implementation BeforeSuiteTests_ObjC\n\n- (void)testBeforeSuiteIsExecutedBeforeAnyExamples {\n    // Execute the spec with an assertion before the one with a beforeSuite\n    NSArray *specs = @[\n        [FunctionalTests_BeforeSuite_Spec_ObjC class],\n        [FunctionalTests_BeforeSuite_BeforeSuiteSpec_ObjC class]\n    ];\n    XCTestRun *result = qck_runSpecs(specs);\n    XCTAssert(result.hasSucceeded);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/BeforeSuiteTests.swift",
    "content": "import XCTest\nimport Quick\nimport Nimble\n\nvar beforeSuiteWasExecuted = false\n\nclass FunctionalTests_BeforeSuite_BeforeSuiteSpec: QuickSpec {\n    override func spec() {\n        beforeSuite {\n            beforeSuiteWasExecuted = true\n        }\n    }\n}\n\nclass FunctionalTests_BeforeSuite_Spec: QuickSpec {\n    override func spec() {\n        it(\"is executed after beforeSuite\") {\n            expect(beforeSuiteWasExecuted).to(beTruthy())\n        }\n    }\n}\n\nclass BeforeSuiteTests: XCTestCase {\n    func testBeforeSuiteIsExecutedBeforeAnyExamples() {\n        // Execute the spec with an assertion before the one with a beforeSuite\n        let specs = NSArray(objects: FunctionalTests_BeforeSuite_Spec.classForCoder(),\n                                     FunctionalTests_BeforeSuite_BeforeSuiteSpec.classForCoder())\n        let result = qck_runSpecs(specs as [AnyObject])\n\n        XCTAssert(result.hasSucceeded)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEach.swift",
    "content": "import Quick\n\npublic var FunctionalTests_Configuration_AfterEachWasExecuted = false\n\nclass FunctionalTests_Configuration_AfterEach: QuickConfiguration {\n    override class func configure(configuration: Configuration) {\n        configuration.afterEach {\n            FunctionalTests_Configuration_AfterEachWasExecuted = true\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEachTests.swift",
    "content": "import XCTest\nimport Quick\nimport Nimble\n\nclass Configuration_AfterEachSpec: QuickSpec {\n    override func spec() {\n        beforeEach {\n            FunctionalTests_Configuration_AfterEachWasExecuted = false\n        }\n        it(\"is executed before the configuration afterEach\") {\n            expect(FunctionalTests_Configuration_AfterEachWasExecuted).to(beFalsy())\n        }\n    }\n}\n\nclass Configuration_AfterEachTests: XCTestCase {\n    override func setUp() {\n        super.setUp()\n        FunctionalTests_Configuration_AfterEachWasExecuted = false\n    }\n\n    override func tearDown() {\n        FunctionalTests_Configuration_AfterEachWasExecuted = false\n        super.tearDown()\n    }\n\n    func testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted() {\n        qck_runSpec(Configuration_BeforeEachSpec.classForCoder())\n        XCTAssert(FunctionalTests_Configuration_AfterEachWasExecuted)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEach.swift",
    "content": "import Quick\n\npublic var FunctionalTests_Configuration_BeforeEachWasExecuted = false\n\nclass FunctionalTests_Configuration_BeforeEach: QuickConfiguration {\n    override class func configure(configuration: Configuration) {\n        configuration.beforeEach {\n            FunctionalTests_Configuration_BeforeEachWasExecuted = true\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEachTests.swift",
    "content": "import XCTest\nimport Quick\nimport Nimble\n\nclass Configuration_BeforeEachSpec: QuickSpec {\n    override func spec() {\n        it(\"is executed after the configuration beforeEach\") {\n            expect(FunctionalTests_Configuration_BeforeEachWasExecuted).to(beTruthy())\n        }\n    }\n}\n\nclass Configuration_BeforeEachTests: XCTestCase {\n    override func setUp() {\n        super.setUp()\n        FunctionalTests_Configuration_BeforeEachWasExecuted = false\n    }\n\n    override func tearDown() {\n        FunctionalTests_Configuration_BeforeEachWasExecuted = false\n        super.tearDown()\n    }\n\n    func testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted() {\n        qck_runSpec(Configuration_BeforeEachSpec.classForCoder())\n        XCTAssert(FunctionalTests_Configuration_BeforeEachWasExecuted)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/FailureTests+ObjC.m",
    "content": "#import <XCTest/XCTest.h>\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"QCKSpecRunner.h\"\n\nstatic BOOL isRunningFunctionalTests = NO;\n\n#pragma mark - Spec\n\nQuickSpecBegin(FunctionalTests_FailureSpec_ObjC)\n\ndescribe(@\"a group of failing examples\", ^{\n    it(@\"passes\", ^{\n        expect(@YES).to(beTruthy());\n    });\n\n    it(@\"fails (but only when running the functional tests)\", ^{\n        expect(@(isRunningFunctionalTests)).to(beFalsy());\n    });\n\n    it(@\"fails again (but only when running the functional tests)\", ^{\n        expect(@(isRunningFunctionalTests)).to(beFalsy());\n    });\n});\n\nQuickSpecEnd\n\n#pragma mark - Tests\n\n@interface FailureTests_ObjC : XCTestCase; @end\n\n@implementation FailureTests_ObjC\n\n- (void)setUp {\n    [super setUp];\n    isRunningFunctionalTests = YES;\n}\n\n- (void)tearDown {\n    isRunningFunctionalTests = NO;\n    [super tearDown];\n}\n\n- (void)testFailureSpecHasSucceededIsFalse {\n    XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]);\n    XCTAssertFalse(result.hasSucceeded);\n}\n\n- (void)testFailureSpecExecutedAllExamples {\n    XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]);\n    XCTAssertEqual(result.executionCount, 3);\n}\n\n- (void)testFailureSpecFailureCountIsEqualToTheNumberOfFailingExamples {\n    XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]);\n    XCTAssertEqual(result.failureCount, 2);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/FailureUsingXCTAssertTests+ObjC.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Quick/Quick.h>\n\n#import \"QCKSpecRunner.h\"\n\nstatic BOOL isRunningFunctionalTests = NO;\n\nQuickSpecBegin(FunctionalTests_FailureUsingXCTAssertSpec_ObjC)\n\nit(@\"fails using an XCTAssert (but only when running the functional tests)\", ^{\n    XCTAssertFalse(isRunningFunctionalTests);\n});\n\nit(@\"fails again using an XCTAssert (but only when running the functional tests)\", ^{\n    XCTAssertFalse(isRunningFunctionalTests);\n});\n\nit(@\"succeeds using an XCTAssert\", ^{\n    XCTAssertTrue(YES);\n});\n\nQuickSpecEnd\n\n#pragma mark - Tests\n\n@interface FailureUsingXCTAssertTests_ObjC : XCTestCase; @end\n\n@implementation FailureUsingXCTAssertTests_ObjC\n\n- (void)setUp {\n    [super setUp];\n    isRunningFunctionalTests = YES;\n}\n\n- (void)tearDown {\n    isRunningFunctionalTests = NO;\n    [super tearDown];\n}\n\n- (void)testFailureUsingXCTAssertSpecHasSucceededIsFalse {\n    XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]);\n    XCTAssertFalse(result.hasSucceeded);\n}\n\n- (void)testFailureUsingXCTAssertSpecExecutedAllExamples {\n    XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]);\n    XCTAssertEqual(result.executionCount, 3);\n}\n\n- (void)testFailureUsingXCTAssertSpecFailureCountIsEqualToTheNumberOfFailingExamples {\n    XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]);\n    XCTAssertEqual(result.failureCount, 2);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/ItTests+ObjC.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"QCKSpecRunner.h\"\n\nQuickSpecBegin(FunctionalTests_ItSpec_ObjC)\n\n__block ExampleMetadata *exampleMetadata = nil;\nbeforeEachWithMetadata(^(ExampleMetadata *metadata) {\n    exampleMetadata = metadata;\n});\n\nit(@\" \", ^{\n    expect(exampleMetadata.example.name).to(equal(@\" \"));\n});\n\nit(@\"has a description with セレクター名に使えない文字が入っている 👊💥\", ^{\n    NSString *name = @\"has a description with セレクター名に使えない文字が入っている 👊💥\";\n    expect(exampleMetadata.example.name).to(equal(name));\n});\n\nQuickSpecEnd\n\n@interface ItTests_ObjC : XCTestCase; @end\n\n@implementation ItTests_ObjC\n\n- (void)testAllExamplesAreExecuted {\n    XCTestRun *result = qck_runSpec([FunctionalTests_ItSpec_ObjC class]);\n    XCTAssertEqual(result.executionCount, 2);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/ItTests.swift",
    "content": "import XCTest\nimport Quick\nimport Nimble\n\nclass FunctionalTests_ItSpec: QuickSpec {\n    override func spec() {\n        var exampleMetadata: ExampleMetadata?\n        beforeEach { metadata in exampleMetadata = metadata }\n\n        it(\"\") {\n            expect(exampleMetadata!.example.name).to(equal(\"\"))\n        }\n\n        it(\"has a description with セレクター名に使えない文字が入っている 👊💥\") {\n            let name = \"has a description with セレクター名に使えない文字が入っている 👊💥\"\n            expect(exampleMetadata!.example.name).to(equal(name))\n        }\n    }\n}\n\nclass ItTests: XCTestCase {\n    func testAllExamplesAreExecuted() {\n        let result = qck_runSpec(FunctionalTests_ItSpec.classForCoder())\n        XCTAssertEqual(result.executionCount, 2 as UInt)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/PendingTests+ObjC.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"QCKSpecRunner.h\"\n\nstatic NSUInteger oneExampleBeforeEachExecutedCount = 0;\nstatic NSUInteger onlyPendingExamplesBeforeEachExecutedCount = 0;\n\nQuickSpecBegin(FunctionalTests_PendingSpec_ObjC)\n\npending(@\"an example that will not run\", ^{\n    expect(@YES).to(beFalsy());\n});\n\ndescribe(@\"a describe block containing only one enabled example\", ^{\n    beforeEach(^{ oneExampleBeforeEachExecutedCount += 1; });\n    it(@\"an example that will run\", ^{});\n    pending(@\"an example that will not run\", ^{});\n});\n\ndescribe(@\"a describe block containing only pending examples\", ^{\n    beforeEach(^{ onlyPendingExamplesBeforeEachExecutedCount += 1; });\n    pending(@\"an example that will not run\", ^{});\n});\n\nQuickSpecEnd\n\n@interface PendingTests_ObjC : XCTestCase; @end\n\n@implementation PendingTests_ObjC\n\n- (void)setUp {\n    [super setUp];\n    oneExampleBeforeEachExecutedCount = 0;\n    onlyPendingExamplesBeforeEachExecutedCount = 0;\n}\n\n- (void)tearDown {\n    oneExampleBeforeEachExecutedCount = 0;\n    onlyPendingExamplesBeforeEachExecutedCount = 0;\n    [super tearDown];\n}\n\n- (void)testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail {\n    XCTestRun *result = qck_runSpec([FunctionalTests_PendingSpec_ObjC class]);\n    XCTAssert(result.hasSucceeded);\n}\n\n- (void)testBeforeEachOnlyRunForEnabledExamples {\n    qck_runSpec([FunctionalTests_PendingSpec_ObjC class]);\n    XCTAssertEqual(oneExampleBeforeEachExecutedCount, 1);\n}\n\n- (void)testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples {\n    qck_runSpec([FunctionalTests_PendingSpec_ObjC class]);\n    XCTAssertEqual(onlyPendingExamplesBeforeEachExecutedCount, 0);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/PendingTests.swift",
    "content": "import XCTest\nimport Quick\nimport Nimble\n\nvar oneExampleBeforeEachExecutedCount = 0\nvar onlyPendingExamplesBeforeEachExecutedCount = 0\n\nclass FunctionalTests_PendingSpec: QuickSpec {\n    override func spec() {\n        xit(\"an example that will not run\") {\n            expect(true).to(beFalsy())\n        }\n\n        describe(\"a describe block containing only one enabled example\") {\n            beforeEach { oneExampleBeforeEachExecutedCount += 1 }\n            it(\"an example that will run\") {}\n            pending(\"an example that will not run\") {}\n        }\n\n        describe(\"a describe block containing only pending examples\") {\n            beforeEach { onlyPendingExamplesBeforeEachExecutedCount += 1 }\n            pending(\"an example that will not run\") {}\n        }\n    }\n}\n\nclass PendingTests: XCTestCase {\n    override func setUp() {\n        super.setUp()\n        oneExampleBeforeEachExecutedCount = 0\n        onlyPendingExamplesBeforeEachExecutedCount = 0\n    }\n\n    override func tearDown() {\n        oneExampleBeforeEachExecutedCount = 0\n        onlyPendingExamplesBeforeEachExecutedCount = 0\n        super.tearDown()\n    }\n\n    func testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail() {\n        let result = qck_runSpec(FunctionalTests_PendingSpec.classForCoder())\n        XCTAssert(result.hasSucceeded)\n    }\n\n    func testBeforeEachOnlyRunForEnabledExamples() {\n        qck_runSpec(FunctionalTests_PendingSpec.classForCoder())\n        XCTAssertEqual(oneExampleBeforeEachExecutedCount, 1)\n    }\n\n    func testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples() {\n        qck_runSpec(FunctionalTests_PendingSpec.classForCoder())\n        XCTAssertEqual(onlyPendingExamplesBeforeEachExecutedCount, 0)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests+ObjC.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"QCKSpecRunner.h\"\n\nstatic NSUInteger specBeforeEachExecutedCount = 0;\nstatic NSUInteger sharedExamplesBeforeEachExecutedCount = 0;\n\nQuickConfigurationBegin(FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples_ObjC)\n\n+ (void)configure:(Configuration *)configuration {\n    sharedExamples(@\"a group of three shared examples with a beforeEach in Obj-C\",\n                   ^(QCKDSLSharedExampleContext context) {\n        beforeEach(^{ sharedExamplesBeforeEachExecutedCount += 1; });\n        it(@\"passes once\", ^{});\n        it(@\"passes twice\", ^{});\n        it(@\"passes three times\", ^{});\n    });\n}\n\nQuickConfigurationEnd\n\nQuickSpecBegin(FunctionalTests_SharedExamples_BeforeEachSpec_ObjC)\n\nbeforeEach(^{ specBeforeEachExecutedCount += 1; });\nit(@\"executes the spec beforeEach once\", ^{});\nitBehavesLike(@\"a group of three shared examples with a beforeEach in Obj-C\",\n              ^NSDictionary*{ return @{}; });\n\nQuickSpecEnd\n\n@interface SharedExamples_BeforeEachTests_ObjC : XCTestCase; @end\n\n@implementation SharedExamples_BeforeEachTests_ObjC\n\n- (void)setUp {\n    [super setUp];\n    specBeforeEachExecutedCount = 0;\n    sharedExamplesBeforeEachExecutedCount = 0;\n}\n\n- (void)tearDown {\n    specBeforeEachExecutedCount = 0;\n    sharedExamplesBeforeEachExecutedCount = 0;\n    [super tearDown];\n}\n\n- (void)testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample {\n    qck_runSpec([FunctionalTests_SharedExamples_BeforeEachSpec_ObjC class]);\n    XCTAssertEqual(specBeforeEachExecutedCount, 4);\n}\n\n- (void)testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample {\n    qck_runSpec([FunctionalTests_SharedExamples_BeforeEachSpec_ObjC class]);\n    XCTAssertEqual(sharedExamplesBeforeEachExecutedCount, 3);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests.swift",
    "content": "import XCTest\nimport Quick\nimport Nimble\n\nvar specBeforeEachExecutedCount = 0\nvar sharedExamplesBeforeEachExecutedCount = 0\n\nclass FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples: QuickConfiguration {\n    override class func configure(configuration: Configuration) {\n        sharedExamples(\"a group of three shared examples with a beforeEach\") {\n            beforeEach { sharedExamplesBeforeEachExecutedCount += 1 }\n            it(\"passes once\") {}\n            it(\"passes twice\") {}\n            it(\"passes three times\") {}\n        }\n    }\n}\n\nclass FunctionalTests_SharedExamples_BeforeEachSpec: QuickSpec {\n    override func spec() {\n        beforeEach { specBeforeEachExecutedCount += 1 }\n        it(\"executes the spec beforeEach once\") {}\n        itBehavesLike(\"a group of three shared examples with a beforeEach\")\n    }\n}\n\nclass SharedExamples_BeforeEachTests: XCTestCase {\n    override func setUp() {\n        super.setUp()\n        specBeforeEachExecutedCount = 0\n        sharedExamplesBeforeEachExecutedCount = 0\n    }\n\n    override func tearDown() {\n        specBeforeEachExecutedCount = 0\n        sharedExamplesBeforeEachExecutedCount = 0\n        super.tearDown()\n    }\n\n    func testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample() {\n        qck_runSpec(FunctionalTests_SharedExamples_BeforeEachSpec.classForCoder())\n        XCTAssertEqual(specBeforeEachExecutedCount, 4)\n    }\n\n    func testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample() {\n        qck_runSpec(FunctionalTests_SharedExamples_BeforeEachSpec.classForCoder())\n        XCTAssertEqual(sharedExamplesBeforeEachExecutedCount, 3)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/SharedExamplesTests+ObjC.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"QCKSpecRunner.h\"\n\nQuickSpecBegin(FunctionalTests_SharedExamples_Spec_ObjC)\n\nitBehavesLike(@\"a group of three shared examples\", ^NSDictionary*{ return @{}; });\n\nQuickSpecEnd\n\nQuickSpecBegin(FunctionalTests_SharedExamples_ContextSpec_ObjC)\n\nitBehavesLike(@\"shared examples that take a context\", ^NSDictionary *{\n    return @{ @\"callsite\": @\"SharedExamplesSpec\" };\n});\n\nQuickSpecEnd\n\nQuickSpecBegin(FunctionalTests_SharedExamples_SameContextSpec_ObjC)\n\n__block NSInteger counter = 0;\n\nafterEach(^{\n    counter++;\n});\n\nsharedExamples(@\"gets called with a different context from within the same spec file\", ^(QCKDSLSharedExampleContext exampleContext) {\n    \n    it(@\"tracks correctly\", ^{\n        NSString *payload = exampleContext()[@\"payload\"];\n        BOOL expected = [payload isEqualToString:[NSString stringWithFormat:@\"%ld\", (long)counter]];\n        expect(@(expected)).to(beTrue());\n    });\n    \n});\n\nitBehavesLike(@\"gets called with a different context from within the same spec file\", ^{\n    return @{ @\"payload\" : @\"0\" };\n});\n\nitBehavesLike(@\"gets called with a different context from within the same spec file\", ^{\n    return @{ @\"payload\" : @\"1\" };\n});\n\nQuickSpecEnd\n\n\n@interface SharedExamplesTests_ObjC : XCTestCase; @end\n\n@implementation SharedExamplesTests_ObjC\n\n- (void)testAGroupOfThreeSharedExamplesExecutesThreeExamples {\n    XCTestRun *result = qck_runSpec([FunctionalTests_SharedExamples_Spec_ObjC class]);\n    XCTAssert(result.hasSucceeded);\n    XCTAssertEqual(result.executionCount, 3);\n}\n\n- (void)testSharedExamplesWithContextPassContextToExamples {\n    XCTestRun *result = qck_runSpec([FunctionalTests_SharedExamples_ContextSpec_ObjC class]);\n    XCTAssert(result.hasSucceeded);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/FunctionalTests/SharedExamplesTests.swift",
    "content": "import XCTest\nimport Quick\nimport Nimble\n\nclass FunctionalTests_SharedExamples_Spec: QuickSpec {\n    override func spec() {\n        itBehavesLike(\"a group of three shared examples\")\n    }\n}\n\nclass FunctionalTests_SharedExamples_ContextSpec: QuickSpec {\n    override func spec() {\n        itBehavesLike(\"shared examples that take a context\") { [\"callsite\": \"SharedExamplesSpec\"] }\n    }\n}\n\n// Shared examples are defined in QuickTests/Fixtures\nclass SharedExamplesTests: XCTestCase {\n    func testAGroupOfThreeSharedExamplesExecutesThreeExamples() {\n        let result = qck_runSpec(FunctionalTests_SharedExamples_Spec.classForCoder())\n        XCTAssert(result.hasSucceeded)\n        XCTAssertEqual(result.executionCount, 3 as UInt)\n    }\n\n    func testSharedExamplesWithContextPassContextToExamples() {\n        let result = qck_runSpec(FunctionalTests_SharedExamples_ContextSpec.classForCoder())\n        XCTAssert(result.hasSucceeded)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/Helpers/QCKSpecRunner.h",
    "content": "#import <XCTest/XCTest.h>\n\n/**\n Runs an XCTestSuite instance containing only the given XCTestCase subclass.\n Use this to run QuickSpec subclasses from within a set of unit tests.\n\n Due to implicit dependencies in _XCTFailureHandler, this function raises an\n exception when used in Swift to run a failing test case.\n\n @param specClass The class of the spec to be run.\n @return An XCTestRun instance that contains information such as the number of failures, etc.\n */\nextern XCTestRun *qck_runSpec(Class specClass);\n\n/**\n Runs an XCTestSuite instance containing the given XCTestCase subclasses, in the order provided.\n See the documentation for `qck_runSpec` for more details.\n\n @param specClasses An array of QuickSpec classes, in the order they should be run.\n @return An XCTestRun instance that contains information such as the number of failures, etc.\n */\nextern XCTestRun *qck_runSpecs(NSArray *specClasses);\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/Helpers/QCKSpecRunner.m",
    "content": "#import \"QCKSpecRunner.h\"\n#import \"XCTestObservationCenter+QCKSuspendObservation.h\"\n#import \"World.h\"\n#import <Quick/Quick.h>\n\nXCTestRun *qck_runSuite(XCTestSuite *suite) {\n    [World sharedWorld].isRunningAdditionalSuites = YES;\n\n    __block XCTestRun *result = nil;\n    [[XCTestObservationCenter sharedTestObservationCenter] _suspendObservationForBlock:^{\n        if ([suite respondsToSelector:@selector(runTest)]) {\n            [suite runTest];\n            result = suite.testRun;\n        } else {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n            result = [suite run];\n#pragma clang diagnostic pop\n        }\n    }];\n    return result;\n}\n\nXCTestRun *qck_runSpec(Class specClass) {\n    return qck_runSuite([XCTestSuite testSuiteForTestCaseClass:specClass]);\n}\n\nXCTestRun *qck_runSpecs(NSArray *specClasses) {\n    XCTestSuite *suite = [XCTestSuite testSuiteWithName:@\"MySpecs\"];\n    for (Class specClass in specClasses) {\n        [suite addTest:[XCTestSuite testSuiteForTestCaseClass:specClass]];\n    }\n\n    return qck_runSuite(suite);\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/Helpers/QuickTestsBridgingHeader.h",
    "content": "#import \"QCKSpecRunner.h\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/Helpers/XCTestObservationCenter+QCKSuspendObservation.h",
    "content": "#import <XCTest/XCTest.h>\n\n/**\n Expose internal XCTest class and methods in order to run isolated XCTestSuite\n instances while the QuickTests test suite is running.\n\n If an Xcode upgrade causes QuickTests to crash when executing, or for tests to fail\n with the message \"Timed out waiting for IDE barrier message to complete\", it is\n likely that this internal interface has been changed.\n */\n@interface XCTestObservationCenter (QCKSuspendObservation)\n\n/**\n Suspends test suite observation for the duration that the block is executing.\n Any test suites that are executed within the block do not generate any log output.\n Failures are still reported.\n\n Use this method to run XCTestSuite objects while another XCTestSuite is running.\n Without this method, tests fail with the message: \"Timed out waiting for IDE\n barrier message to complete\".\n */\n- (void)_suspendObservationForBlock:(void (^)(void))block;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/QuickTests/QuickConfigurationTests.m",
    "content": "#import <XCTest/XCTest.h>\n#import <Quick/Quick.h>\n\n@interface QuickConfigurationTests : XCTestCase; @end\n\n@implementation QuickConfigurationTests\n\n- (void)testInitThrows {\n    XCTAssertThrowsSpecificNamed([QuickConfiguration new], NSException, NSInternalInconsistencyException);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/README.md",
    "content": "![](http://f.cl.ly/items/0r1E192C1R0b2g2Q3h2w/QuickLogo_Color.png)\n\nQuick is a behavior-driven development framework for Swift and Objective-C.\nInspired by [RSpec](https://github.com/rspec/rspec), [Specta](https://github.com/specta/specta), and [Ginkgo](https://github.com/onsi/ginkgo).\n\n![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/QuickSpec%20screenshot.png)\n\n```swift\n// Swift\n\nimport Quick\nimport Nimble\n\nclass TableOfContentsSpec: QuickSpec {\n  override func spec() {\n    describe(\"the 'Documentation' directory\") {\n      it(\"has everything you need to get started\") {\n        let sections = Directory(\"Documentation\").sections\n        expect(sections).to(contain(\"Organized Tests with Quick Examples and Example Groups\"))\n        expect(sections).to(contain(\"Installing Quick\"))\n      }\n\n      context(\"if it doesn't have what you're looking for\") {\n        it(\"needs to be updated\") {\n          let you = You(awesome: true)\n          expect{you.submittedAnIssue}.toEventually(beTruthy())\n        }\n      }\n    }\n  }\n}\n```\n#### Nimble\nQuick comes together with [Nimble](https://github.com/Quick/Nimble) — a matcher framework for your tests. You can learn why `XCTAssert()` statements make your expectations unclear and how to fix that using Nimble assertions [here](./Documentation/NimbleAssertions.md).\n\n## Documentation\n\nAll documentation can be found in the [Documentation folder](./Documentation), including [detailed installation instructions](./Documentation/InstallingQuick.md) for CocoaPods, Carthage, Git submodules, and more. For example, you can install Quick and [Nimble](https://github.com/Quick/Nimble) using CocoaPods by adding the following to your Podfile:\n\n```rb\n# Podfile\n\nuse_frameworks!\n\ndef testing_pods\n    # If you're using Xcode 7 / Swift 2\n    pod 'Quick', '~> 0.6.0'\n    pod 'Nimble', '2.0.0-rc.3'\n\n    # If you're using Xcode 6 / Swift 1.2\n    pod 'Quick', '~> 0.3.0'\n    pod 'Nimble', '~> 1.0.0'\nend\n\ntarget 'MyTests' do\n    testing_pods\nend\n\ntarget 'MyUITests' do\n    testing_pods\nend\n```\n\n## License\n\nApache 2.0 license. See the `LICENSE` file for details.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/Rakefile",
    "content": "def run(command)\n  system(command) or raise \"RAKE TASK FAILED: #{command}\"\nend\n\nnamespace \"test\" do\n  desc \"Run unit tests for all iOS targets\"\n  task :ios do |t|\n    run \"xcodebuild -workspace Quick.xcworkspace -scheme Quick-iOS -destination 'platform=iOS Simulator,name=iPhone 6' clean test\"\n  end\n\n  desc \"Run unit tests for all OS X targets\"\n  task :osx do |t|\n    run \"xcodebuild -workspace Quick.xcworkspace -scheme Quick-OSX clean test\"\n  end\nend\n\nnamespace \"templates\" do\n  install_dir = File.expand_path(\"~/Library/Developer/Xcode/Templates/File Templates/Quick\")\n  src_dir = File.expand_path(\"../Quick Templates\", __FILE__)\n\n  desc \"Install Quick templates\"\n  task :install do\n    if File.exists? install_dir\n      raise \"RAKE TASK FAILED: Quick templates are already installed at #{install_dir}\"\n    else\n      mkdir_p install_dir\n      cp_r src_dir, install_dir\n    end\n  end\n\n  desc \"Uninstall Quick templates\"\n  task :uninstall do\n    rm_rf install_dir\n  end\nend\n\ntask default: [\"test:ios\", \"test:osx\"]\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/circle.yml",
    "content": "machine:\n  xcode:\n    version: \"7.0\"\n\ncheckout:\n  post:\n    - git submodule update --init --recursive\n\n# despite what circle ci says, xctool 0.2.3 cannot run\n# ios simulator tests on iOS frameworks for whatever reason.\n#\n# See: https://github.com/facebook/xctool/issues/415\ntest:\n  override:\n    - rake test:ios\n    - rake test:osx\n\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Quick/script/release",
    "content": "#!/usr/bin/env sh\nREMOTE_BRANCH=master\nPOD_NAME=Quick\nPODSPEC=Quick.podspec\nGITHUB_TAGS_URL=https://github.com/Quick/Quick/tags\nCARTHAGE_FRAMEWORK_NAME=Quick\n\nCARTHAGE=${CARTHAGE:-carthage}\nPOD=${COCOAPODS:-pod}\n\nfunction help {\n    echo \"Usage: release VERSION RELEASE_NOTES [-f]\"\n    echo\n    echo \"VERSION should be the version to release, should not include the 'v' prefix\"\n    echo \"RELEASE_NOTES should be a file that lists all the release notes for this version\"\n    echo \"              if file does not exist, creates a git-style commit with a diff as a comment\"\n    echo\n    echo \"FLAGS\"\n    echo \"  -f  Forces override of tag\"\n    echo\n    echo \"  Example: ./release 1.0.0-rc.2 ./release-notes.txt\"\n    echo\n    echo \"HINT: use 'git diff <PREVIOUS_TAG>...HEAD' to build the release notes\"\n    echo\n    exit 2\n}\n\nfunction die {\n    echo \"[ERROR] $@\"\n    echo\n    exit 1\n}\n\nif [ $# -lt 2 ]; then\n    help\nfi\n\nVERSION=$1\nRELEASE_NOTES=$2\nFORCE_TAG=$3\n\nVERSION_TAG=\"v$VERSION\"\n\necho \"-> Verifying Local Directory for Release\"\n\nif [ -z \"`which $CARTHAGE`\" ]; then\n    die \"Carthage is required to produce a release. Aborting.\"\nfi\necho \" > Carthage is installed\"\n\nif [ -z \"`which $POD`\" ]; then\n    die \"Cocoapods is required to produce a release. Aborting.\"\nfi\necho \" > Cocoapods is installed\"\n\necho \" > Is this a reasonable tag?\"\n\necho $VERSION_TAG | grep -q \"^vv\"\nif [ $? -eq 0 ]; then\n    die \"This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix.\"\nfi\n\necho $VERSION_TAG | grep -q -E \"^v\\d+\\.\\d+\\.\\d+(-\\w+(\\.\\d)?)?\\$\"\nif [ $? -ne 0 ]; then\n    die \"This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form.\"\nfi\n\necho \" > Is this version ($VERSION) unique?\"\ngit describe --exact-match \"$VERSION_TAG\" > /dev/null 2>&1\nif [ $? -eq 0 ]; then\n    if [ -z \"$FORCE_TAG\" ]; then\n        die \"This tag ($VERSION) already exists. Aborting. Append '-f' to override\"\n    else\n        echo \" > NO, but force was specified.\"\n    fi\nelse\n    echo \" > Yes, tag is unique\"\nfi\n\nif [ ! -f \"$RELEASE_NOTES\" ]; then\n    echo \" > Failed to find $RELEASE_NOTES. Prompting editor\"\n    RELEASE_NOTES=.release-changes\n    LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format=\"%(refname:short)\" | grep -E \"^v\\d+\\.\\d+\\.\\d+(-\\w+(\\.\\d)?)?\\$\" | ruby -e 'puts STDIN.read.split(\"\\n\").sort { |a,b| Gem::Version.new(a.gsub(/^v/, \"\")) <=> Gem::Version.new(b.gsub(/^v/, \"\")) }.last'`\n    echo \" > Latest tag ${LATEST_TAG}\"\n    echo \"${POD_NAME} v$VERSION\" > $RELEASE_NOTES\n    echo \"================\" >> $RELEASE_NOTES\n    echo >> $RELEASE_NOTES\n    echo \"# Changelog from ${LATEST_TAG}..HEAD\" >> $RELEASE_NOTES\n    git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES\n    $EDITOR $RELEASE_NOTES\n    diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1\n    STATUS=$?\n    rm ${RELEASE_NOTES}.backup\n    if [ $STATUS -eq 0 ]; then\n        rm $RELEASE_NOTES\n        die \"No changes in release notes file. Aborting.\"\n    fi\nfi\necho \" > Release notes: $RELEASE_NOTES\"\n\nif [ ! -f \"$PODSPEC\" ]; then\n    die \"Cannot find podspec: $PODSPEC. Aborting.\"\nfi\necho \" > Podspec exists\"\n\ngit config --get user.signingkey > /dev/null || {\n    echo \"[ERROR] No PGP found to sign tag. Aborting.\"\n    echo\n    echo \"  Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source.\"\n    echo \"  From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any\"\n    echo \"  intermediate between you and the end-users to modify the git repository.\"\n    echo\n    echo \"  While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'\"\n    echo \"  from the official maintainers.\"\n    echo\n    echo \"  If you're creating your PGP key for the first time, use RSA with at least 4096 bits.\"\n    echo\n    echo \"Related resources:\"\n    echo \" - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work\"\n    echo \" - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a\"\n    echo\n    exit 2\n}\necho \" > Found PGP key for git\"\n\n# Verify cocoapods trunk ownership\npod trunk me | grep -q \"$POD_NAME\" || die \"You do not have access to pod repository $POD_NAME. Aborting.\"\necho \" > Verified ownership to $POD_NAME pod\"\n\n\necho \"--- Releasing version $VERSION (tag: $VERSION_TAG)...\"\n\nfunction restore_podspec {\n    if [ -f \"${PODSPEC}.backup\" ]; then\n        mv -f ${PODSPEC}{.backup,}\n    fi\n}\n\necho \"-> Ensuring no differences to origin/$REMOTE_BRANCH\"\ngit fetch origin || die \"Failed to fetch origin\"\ngit diff --quiet HEAD \"origin/$REMOTE_BRANCH\" || die \"HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely\"\n\necho \"-> Building Carthage release\"\n$CARTHAGE build --no-skip-current || die \"Failed to build framework for carthage\"\n\necho \"-> Setting podspec version\"\ncat \"$PODSPEC\" | grep 's.version' | grep -q \"\\\"$VERSION\\\"\"\nSET_PODSPEC_VERSION=$?\nif [ $SET_PODSPEC_VERSION -eq 0 ]; then\n    echo \" > Podspec already set to $VERSION. Skipping.\"\nelse\n    sed -i.backup \"s/s.version *= *\\\".*\\\"/s.version      = \\\"$VERSION\\\"/g\" \"$PODSPEC\" || {\n        restore_podspec\n        die \"Failed to update version in podspec\"\n    }\n\n    git add ${PODSPEC} || { restore_podspec; die \"Failed to add ${PODSPEC} to INDEX\"; }\n    git commit -m \"Bumping version to $VERSION\" || { restore_podspec; die \"Failed to push updated version: $VERSION\"; }\nfi\n\nif [ -z \"$FORCE_TAG\" ]; then\n    echo \"-> Tagging version\"\n    git tag -s \"$VERSION_TAG\" -F \"$RELEASE_NOTES\" || die \"Failed to tag version\"\n    echo \"-> Pushing tag to origin\"\n    git push origin \"$VERSION_TAG\" || die \"Failed to push tag '$VERSION_TAG' to origin\"\nelse\n    echo \"-> Tagging version (force)\"\n    git tag -f -s \"$VERSION_TAG\" -F \"$RELEASE_NOTES\" || die \"Failed to tag version\"\n    echo \"-> Pushing tag to origin (force)\"\n    git push origin \"$VERSION_TAG\" -f || die \"Failed to push tag '$VERSION_TAG' to origin\"\nfi\n\nif [ $SET_PODSPEC_VERSION -ne 0 ]; then\n    rm $RELEASE_NOTES\n    git push origin \"$REMOTE_BRANCH\" || die \"Failed to push to origin\"\n    echo \" > Pushed version to origin\"\nfi\n\necho\necho \"---------------- Released as $VERSION_TAG ----------------\"\necho \necho \"Archiving carthage release...\"\n\n$CARTHAGE archive \"$CARTHAGE_FRAMEWORK_NAME\" || die \"Failed to archive framework for carthage\"\n\necho\necho \"Pushing to pod trunk...\"\n\n$POD trunk push \"$PODSPEC\"\n\necho\necho \"================ Finalizing the Release ================\"\necho\necho \" - Go to $GITHUB_TAGS_URL and mark this as a release.\"\necho \"   - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for Github styling.\"\necho \"   - Attach ${CARTHAGE_FRAMEWORK_NAME}.framework.zip to it.\"\necho \" - Announce!\"\n\nrm ${PODSPEC}.backup\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/.gitignore",
    "content": ".DS_Store\nxcuserdata\n*.xcuserdatad\n*.xccheckout\n*.mode*\n*.pbxuser\n\nCarthage/Build\n.build\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/.travis.yml",
    "content": "language: objective-c\nosx_image: xcode7.1\n\nscript:\n  - xcodebuild test -scheme Result-Mac\n  - xcodebuild test -scheme Result-iOS -sdk iphonesimulator\n  - xcodebuild test -scheme Result-tvOS -sdk appletvsimulator\n  - xcodebuild build -scheme Result-watchOS -sdk watchsimulator\n  - pod lib lint\n\nnotifications:\n  email: false\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/CONTRIBUTING.md",
    "content": "We love that you're interested in contributing to this project!\n\nTo make the process as painless as possible, we have just a couple of guidelines\nthat should make life easier for everyone involved.\n\n## Prefer Pull Requests\n\nIf you know exactly how to implement the feature being suggested or fix the bug\nbeing reported, please open a pull request instead of an issue. Pull requests are easier than\npatches or inline code blocks for discussing and merging the changes.\n\nIf you can't make the change yourself, please open an issue after making sure\nthat one isn't already logged.\n\n## Contributing Code\n\nFork this repository, make it awesomer (preferably in a branch named for the\ntopic), send a pull request!\n\nAll code contributions should match our [coding\nconventions](https://github.com/github/swift-style-guide).\n\nThanks for contributing! :boom::camel:\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Rob Rix\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."
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Package.swift",
    "content": "import PackageDescription\n\nlet package = Package(\n    name: \"Result\",\n    targets: [\n        Target(\n            name: \"Result\"\n        )\n    ]\n)\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/README.md",
    "content": "# Result\n\n[![Build Status](https://travis-ci.org/antitypical/Result.svg?branch=master)](https://travis-ci.org/antitypical/Result)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![CocoaPods](https://img.shields.io/cocoapods/v/Result.svg)](https://cocoapods.org/)\n[![Reference Status](https://www.versioneye.com/objective-c/result/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/result/references)\n\nThis is a Swift µframework providing `Result<Value, Error>`.\n\n`Result<Value, Error>` values are either successful (wrapping `Value`) or failed (wrapping `Error`). This is similar to Swift’s native `Optional` type: `Success` is like `Some`, and `Failure` is like `None` except with an associated `ErrorType` value. The addition of an associated `ErrorType` allows errors to be passed along for logging or displaying to the user.\n\nUsing this µframework instead of rolling your own `Result` type allows you to easily interface with other frameworks that also use `Result`.\n\n## Use\n\nUse `Result` whenever an operation has the possibility of failure. Consider the following example of a function that tries to extract a `String` for a given key from a JSON `Dictionary`.\n\n```swift\ntypealias JSONObject = [String:AnyObject]\n\nenum JSONError : ErrorType {\n    case NoSuchKey(String)\n    case TypeMismatch\n}\n\nfunc stringForKey(json: JSONObject, key: String) -> Result<String, JSONError> {\n    guard let value = json[key] else {\n        return .Failure(.NoSuchKey(key))\n    }\n    \n    if let value = value as? String {\n        return .Success(value)\n    }\n    else {\n        return .Failure(.TypeMismatch)\n    }\n}\n```\n\nThis function provides a more robust wrapper around the default subscripting provided by `Dictionary`. Rather than return `AnyObject?`, it returns a `Result` that either contains the `String` value for the given key, or an `ErrorType` detailing what went wrong.\n\nOne simple way to handle a `Result` is to deconstruct it using a `switch` statement.\n\n```swift\nswitch stringForKey(json, key: \"email\") {\n\ncase let .Success(email):\n    print(\"The email is \\(email)\")\n    \ncase let .Failure(JSONError.NoSuchKey(key)):\n    print(\"\\(key) is not a valid key\")\n    \ncase .Failure(JSONError.TypeMismatch):\n    print(\"Didn't have the right type\")\n}\n```\n\nUsing a `switch` statement allows powerful pattern matching, and ensures all possible results are covered. Swift 2.0 offers new ways to deconstruct enums like the `if-case` statement, but be wary as such methods do not ensure errors are handled.\n\nOther methods available for processing `Result` are detailed in the [API documentation](http://cocoadocs.org/docsets/Result/).\n\n## Result vs. Throws\n\nSwift 2.0 introduces error handling via throwing and catching `ErrorType`. `Result` accomplishes the same goal by encapsulating the result instead of hijacking control flow. The `Result` abstraction allows enables powerful functionality such as `map` and `flatMap`, making `Result` more composable than `throw`.\n\nSince dealing with APIs that throw is common, you can convert functions such functions into a `Result` by using the `materialize` method. Conversely, a `Result` can be used to throw an error by calling `dematerialize`. [Note: due to compiler issues, `materialize` is not currently available]\n\n## Higher Order Functions\n\n`map` and `flatMap` operate the same as `Optional.map` and `Optional.flatMap` except they apply to `Result`.\n\n`map` transforms a `Result` into a `Result` of a new type. It does this by taking a function that transforms the `Value` type into a new value. This transformation is only applied in the case of a `Success`. In the case of a `Failure`, the associated error is re-wrapped in the new `Result`.\n\n```swift\n// transforms a Result<Int, JSONError> to a Result<String, JSONError>\nlet idResult = intForKey(json, key:\"id\").map { id in String(id) }\n```\n\nHere, the final result is either the id as a `String`, or carries over the `.Failure` from the previous result.\n\n`flatMap` is similar to `map` in that in transforms the `Result` into another `Result`. However, the function passed into `flatMap` must return a `Result`.\n\nAn in depth discussion of `map` and `flatMap` is beyond the scope of this documentation. If you would like a deeper understanding, read about functors and monads. This article is a good place to [start](http://www.javiersoto.me/post/106875422394).\n\n## Integration\n\n1. Add this repository as a submodule and/or [add it to your Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile) if you’re using [carthage](https://github.com/Carthage/Carthage/) to manage your dependencies.\n2. Drag `Result.xcodeproj` into your project or workspace.\n3. Link your target against `Result.framework`.\n4. Application targets should ensure that the framework gets copied into their application bundle. (Framework targets should instead require the application linking them to include Result.)\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0.2</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2015 Rob Rix. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result/Result.h",
    "content": "//  Copyright (c) 2015 Rob Rix. All rights reserved.\n\n/// Project version number for Result.\nextern double ResultVersionNumber;\n\n/// Project version string for Result.\nextern const unsigned char ResultVersionString[];\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result/Result.swift",
    "content": "//  Copyright (c) 2015 Rob Rix. All rights reserved.\n\n/// An enum representing either a failure with an explanatory error, or a success with a result value.\npublic enum Result<T, Error: ErrorType>: ResultType, CustomStringConvertible, CustomDebugStringConvertible {\n\tcase Success(T)\n\tcase Failure(Error)\n\n\t// MARK: Constructors\n\n\t/// Constructs a success wrapping a `value`.\n\tpublic init(value: T) {\n\t\tself = .Success(value)\n\t}\n\n\t/// Constructs a failure wrapping an `error`.\n\tpublic init(error: Error) {\n\t\tself = .Failure(error)\n\t}\n\n\t/// Constructs a result from an Optional, failing with `Error` if `nil`.\n\tpublic init(_ value: T?, @autoclosure failWith: () -> Error) {\n\t\tself = value.map(Result.Success) ?? .Failure(failWith())\n\t}\n\n\t/// Constructs a result from a function that uses `throw`, failing with `Error` if throws.\n\tpublic init(@autoclosure _ f: () throws -> T) {\n\t\tself.init(attempt: f)\n\t}\n\n\t/// Constructs a result from a function that uses `throw`, failing with `Error` if throws.\n\tpublic init(@noescape attempt f: () throws -> T) {\n\t\tdo {\n\t\t\tself = .Success(try f())\n\t\t} catch {\n\t\t\tself = .Failure(error as! Error)\n\t\t}\n\t}\n\n\t// MARK: Deconstruction\n\n\t/// Returns the value from `Success` Results or `throw`s the error.\n\tpublic func dematerialize() throws -> T {\n\t\tswitch self {\n\t\tcase let .Success(value):\n\t\t\treturn value\n\t\tcase let .Failure(error):\n\t\t\tthrow error\n\t\t}\n\t}\n\n\t/// Case analysis for Result.\n\t///\n\t/// Returns the value produced by applying `ifFailure` to `Failure` Results, or `ifSuccess` to `Success` Results.\n\tpublic func analysis<Result>(@noescape ifSuccess ifSuccess: T -> Result, @noescape ifFailure: Error -> Result) -> Result {\n\t\tswitch self {\n\t\tcase let .Success(value):\n\t\t\treturn ifSuccess(value)\n\t\tcase let .Failure(value):\n\t\t\treturn ifFailure(value)\n\t\t}\n\t}\n\n\n\t// MARK: Higher-order functions\n\t\n\t/// Returns `self.value` if this result is a .Success, or the given value otherwise. Equivalent with `??`\n\tpublic func recover(@autoclosure value: () -> T) -> T {\n\t\treturn self.value ?? value()\n\t}\n\t\n\t/// Returns this result if it is a .Success, or the given result otherwise. Equivalent with `??`\n\tpublic func recoverWith(@autoclosure result: () -> Result<T,Error>) -> Result<T,Error> {\n\t\treturn analysis(\n\t\t\tifSuccess: { _ in self },\n\t\t\tifFailure: { _ in result() })\n\t}\n\n\t// MARK: Errors\n\n\t/// The domain for errors constructed by Result.\n\tpublic static var errorDomain: String { return \"com.antitypical.Result\" }\n\n\t/// The userInfo key for source functions in errors constructed by Result.\n\tpublic static var functionKey: String { return \"\\(errorDomain).function\" }\n\n\t/// The userInfo key for source file paths in errors constructed by Result.\n\tpublic static var fileKey: String { return \"\\(errorDomain).file\" }\n\n\t/// The userInfo key for source file line numbers in errors constructed by Result.\n\tpublic static var lineKey: String { return \"\\(errorDomain).line\" }\n\n\t/// Constructs an error.\n\tpublic static func error(message: String? = nil, function: String = __FUNCTION__, file: String = __FILE__, line: Int = __LINE__) -> NSError {\n\t\tvar userInfo: [String: AnyObject] = [\n\t\t\tfunctionKey: function,\n\t\t\tfileKey: file,\n\t\t\tlineKey: line,\n\t\t]\n\n\t\tif let message = message {\n\t\t\tuserInfo[NSLocalizedDescriptionKey] = message\n\t\t}\n\n\t\treturn NSError(domain: errorDomain, code: 0, userInfo: userInfo)\n\t}\n\n\n\t// MARK: CustomStringConvertible\n\n\tpublic var description: String {\n\t\treturn analysis(\n\t\t\tifSuccess: { \".Success(\\($0))\" },\n\t\t\tifFailure: { \".Failure(\\($0))\" })\n\t}\n\n\n\t// MARK: CustomDebugStringConvertible\n\n\tpublic var debugDescription: String {\n\t\treturn description\n\t}\n}\n\n\n/// Returns `true` if `left` and `right` are both `Success`es and their values are equal, or if `left` and `right` are both `Failure`s and their errors are equal.\npublic func == <T: Equatable, Error: Equatable> (left: Result<T, Error>, right: Result<T, Error>) -> Bool {\n\tif let left = left.value, right = right.value {\n\t\treturn left == right\n\t} else if let left = left.error, right = right.error {\n\t\treturn left == right\n\t}\n\treturn false\n}\n\n/// Returns `true` if `left` and `right` represent different cases, or if they represent the same case but different values.\npublic func != <T: Equatable, Error: Equatable> (left: Result<T, Error>, right: Result<T, Error>) -> Bool {\n\treturn !(left == right)\n}\n\n\n/// Returns the value of `left` if it is a `Success`, or `right` otherwise. Short-circuits.\npublic func ?? <T, Error> (left: Result<T, Error>, @autoclosure right: () -> T) -> T {\n\treturn left.recover(right())\n}\n\n/// Returns `left` if it is a `Success`es, or `right` otherwise. Short-circuits.\npublic func ?? <T, Error> (left: Result<T, Error>, @autoclosure right: () -> Result<T, Error>) -> Result<T, Error> {\n\treturn left.recoverWith(right())\n}\n\n// MARK: - Derive result from failable closure\n\npublic func materialize<T>(@noescape f: () throws -> T) -> Result<T, NSError> {\n\treturn materialize(try f())\n}\n\npublic func materialize<T>(@autoclosure f: () throws -> T) -> Result<T, NSError> {\n\tdo {\n\t\treturn .Success(try f())\n\t} catch {\n\t\treturn .Failure(error as NSError)\n\t}\n}\n\n// MARK: - Cocoa API conveniences\n\n/// Constructs a Result with the result of calling `try` with an error pointer.\n///\n/// This is convenient for wrapping Cocoa API which returns an object or `nil` + an error, by reference. e.g.:\n///\n///     Result.try { NSData(contentsOfURL: URL, options: .DataReadingMapped, error: $0) }\npublic func `try`<T>(function: String = __FUNCTION__, file: String = __FILE__, line: Int = __LINE__, `try`: NSErrorPointer -> T?) -> Result<T, NSError> {\n\tvar error: NSError?\n\treturn `try`(&error).map(Result.Success) ?? .Failure(error ?? Result<T, NSError>.error(function: function, file: file, line: line))\n}\n\n/// Constructs a Result with the result of calling `try` with an error pointer.\n///\n/// This is convenient for wrapping Cocoa API which returns a `Bool` + an error, by reference. e.g.:\n///\n///     Result.try { NSFileManager.defaultManager().removeItemAtURL(URL, error: $0) }\npublic func `try`(function: String = __FUNCTION__, file: String = __FILE__, line: Int = __LINE__, `try`: NSErrorPointer -> Bool) -> Result<(), NSError> {\n\tvar error: NSError?\n\treturn `try`(&error) ?\n\t\t.Success(())\n\t:\t.Failure(error ?? Result<(), NSError>.error(function: function, file: file, line: line))\n}\n\n\n// MARK: - Operators\n\ninfix operator >>- {\n\t// Left-associativity so that chaining works like you’d expect, and for consistency with Haskell, Runes, swiftz, etc.\n\tassociativity left\n\n\t// Higher precedence than function application, but lower than function composition.\n\tprecedence 100\n}\n\n/// Returns the result of applying `transform` to `Success`es’ values, or re-wrapping `Failure`’s errors.\n///\n/// This is a synonym for `flatMap`.\npublic func >>- <T, U, Error> (result: Result<T, Error>, @noescape transform: T -> Result<U, Error>) -> Result<U, Error> {\n\treturn result.flatMap(transform)\n}\n\n\n// MARK: - ErrorTypeConvertible conformance\n\n/// Make NSError conform to ErrorTypeConvertible\nextension NSError: ErrorTypeConvertible {\n\tpublic static func errorFromErrorType(error: ErrorType) -> NSError {\n\t\treturn error as NSError\n\t}\n}\n\n// MARK: -\n\n/// An “error” that is impossible to construct.\n///\n/// This can be used to describe `Result`s where failures will never\n/// be generated. For example, `Result<Int, NoError>` describes a result that\n/// contains an `Int`eger and is guaranteed never to be a `Failure`.\npublic enum NoError: ErrorType { }\n\nimport Foundation\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result/ResultType.swift",
    "content": "//  Copyright (c) 2015 Rob Rix. All rights reserved.\n\n/// A type that can represent either failure with an error or success with a result value.\npublic protocol ResultType {\n\ttypealias Value\n\ttypealias Error: ErrorType\n\t\n\t/// Constructs a successful result wrapping a `value`.\n\tinit(value: Value)\n\n\t/// Constructs a failed result wrapping an `error`.\n\tinit(error: Error)\n\t\n\t/// Case analysis for ResultType.\n\t///\n\t/// Returns the value produced by appliying `ifFailure` to the error if self represents a failure, or `ifSuccess` to the result value if self represents a success.\n\tfunc analysis<U>(@noescape ifSuccess ifSuccess: Value -> U, @noescape ifFailure: Error -> U) -> U\n\n\t/// Returns the value if self represents a success, `nil` otherwise.\n\t///\n\t/// A default implementation is provided by a protocol extension. Conforming types may specialize it.\n\tvar value: Value? { get }\n\n\t/// Returns the error if self represents a failure, `nil` otherwise.\n\t///\n\t/// A default implementation is provided by a protocol extension. Conforming types may specialize it.\n\tvar error: Error? { get }\n}\n\npublic extension ResultType {\n\t\n\t/// Returns the value if self represents a success, `nil` otherwise.\n\tpublic var value: Value? {\n\t\treturn analysis(ifSuccess: { $0 }, ifFailure: { _ in nil })\n\t}\n\t\n\t/// Returns the error if self represents a failure, `nil` otherwise.\n\tpublic var error: Error? {\n\t\treturn analysis(ifSuccess: { _ in nil }, ifFailure: { $0 })\n\t}\n\n\t/// Returns a new Result by mapping `Success`es’ values using `transform`, or re-wrapping `Failure`s’ errors.\n\tpublic func map<U>(@noescape transform: Value -> U) -> Result<U, Error> {\n\t\treturn flatMap { .Success(transform($0)) }\n\t}\n\n\t/// Returns the result of applying `transform` to `Success`es’ values, or re-wrapping `Failure`’s errors.\n\tpublic func flatMap<U>(@noescape transform: Value -> Result<U, Error>) -> Result<U, Error> {\n\t\treturn analysis(\n\t\t\tifSuccess: transform,\n\t\t\tifFailure: Result<U, Error>.Failure)\n\t}\n\t\n\t/// Returns a new Result by mapping `Failure`'s values using `transform`, or re-wrapping `Success`es’ values.\n\tpublic func mapError<Error2>(@noescape transform: Error -> Error2) -> Result<Value, Error2> {\n\t\treturn flatMapError { .Failure(transform($0)) }\n\t}\n\t\n\t/// Returns the result of applying `transform` to `Failure`’s errors, or re-wrapping `Success`es’ values.\n\tpublic func flatMapError<Error2>(@noescape transform: Error -> Result<Value, Error2>) -> Result<Value, Error2> {\n\t\treturn analysis(\n\t\t\tifSuccess: Result<Value, Error2>.Success,\n\t\t\tifFailure: transform)\n\t}\n}\n\n/// Protocol used to constrain `tryMap` to `Result`s with compatible `Error`s.\npublic protocol ErrorTypeConvertible: ErrorType {\n\ttypealias ConvertibleType = Self\n\tstatic func errorFromErrorType(error: ErrorType) -> ConvertibleType\n}\n\npublic extension ResultType where Error: ErrorTypeConvertible {\n\n\t/// Returns the result of applying `transform` to `Success`es’ values, or wrapping thrown errors.\n\tpublic func tryMap<U>(@noescape transform: Value throws -> U) -> Result<U, Error> {\n\t\treturn flatMap { value in\n\t\t\tdo {\n\t\t\t\treturn .Success(try transform(value))\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\tlet convertedError = Error.errorFromErrorType(error) as! Error\n\t\t\t\t// Revisit this in a future version of Swift. https://twitter.com/jckarter/status/672931114944696321\n\t\t\t\treturn .Failure(convertedError)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// MARK: - Operators\n\ninfix operator &&& {\n\t/// Same associativity as &&.\n\tassociativity left\n\n\t/// Same precedence as &&.\n\tprecedence 120\n}\n\n/// Returns a Result with a tuple of `left` and `right` values if both are `Success`es, or re-wrapping the error of the earlier `Failure`.\npublic func &&& <L: ResultType, R: ResultType where L.Error == R.Error> (left: L, @autoclosure right: () -> R) -> Result<(L.Value, R.Value), L.Error> {\n\treturn left.flatMap { left in right().map { right in (left, right) } }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = 'Result'\n  s.version      = '1.0.2'\n  s.summary      = 'Swift type modelling the success/failure of arbitrary operations'\n\n  s.homepage     = 'https://github.com/antitypical/Result'\n  s.license      = { :type => 'MIT', :file => 'LICENSE' }\n  s.author       = { 'Rob Rix' => 'rob.rix@github.com' }\n  s.source       = { :git => 'https://github.com/antitypical/Result.git', :tag => s.version }\n  s.source_files  = 'Result/*.swift'\n  s.requires_arc = true\n  s.ios.deployment_target = '8.0'\n  s.osx.deployment_target = '10.9'\n  s.watchos.deployment_target = '2.0'\n  s.tvos.deployment_target = '9.0'\nend\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.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\t45AE89E61B3A6564007B99D7 /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; };\n\t\t57FCDE3E1BA280DC00130C48 /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; };\n\t\t57FCDE3F1BA280DC00130C48 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; };\n\t\t57FCDE421BA280DC00130C48 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57FCDE4D1BA280E000130C48 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; };\n\t\t57FCDE561BA2814300130C48 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57FCDE471BA280DC00130C48 /* Result.framework */; };\n\t\tD035799B1B2B788F005D26AE /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; };\n\t\tD035799E1B2B788F005D26AE /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03579A91B2B78A1005D26AE /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; };\n\t\tD03579B41B2B78C4005D26AE /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03579A31B2B788F005D26AE /* Result.framework */; };\n\t\tD454805D1A9572F5009D7229 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD45480681A9572F5009D7229 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D45480571A9572F5009D7229 /* Result.framework */; };\n\t\tD454806F1A9572F5009D7229 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; };\n\t\tD45480881A957362009D7229 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D454807D1A957361009D7229 /* Result.framework */; };\n\t\tD45480971A957465009D7229 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; };\n\t\tD45480981A957465009D7229 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; };\n\t\tD45480991A9574B8009D7229 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; };\n\t\tD454809A1A9574BB009D7229 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE93621461B35596200948F2A /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; };\n\t\tE93621471B35596200948F2A /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t57FCDE571BA2814A00130C48 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D454804E1A9572F5009D7229 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 57FCDE3C1BA280DC00130C48;\n\t\t\tremoteInfo = \"Result-tvOS\";\n\t\t};\n\t\tD03579B21B2B78BB005D26AE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D454804E1A9572F5009D7229 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D03579991B2B788F005D26AE;\n\t\t\tremoteInfo = \"Result-watchOS\";\n\t\t};\n\t\tD45480691A9572F5009D7229 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D454804E1A9572F5009D7229 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D45480561A9572F5009D7229;\n\t\t\tremoteInfo = Result;\n\t\t};\n\t\tD45480891A957362009D7229 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D454804E1A9572F5009D7229 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D454807C1A957361009D7229;\n\t\t\tremoteInfo = \"Result-iOS\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t57FCDE471BA280DC00130C48 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"Result-tvOSTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD03579A31B2B788F005D26AE /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"Result-watchOSTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD45480571A9572F5009D7229 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD454805B1A9572F5009D7229 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD454805C1A9572F5009D7229 /* Result.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Result.h; sourceTree = \"<group>\"; };\n\t\tD45480671A9572F5009D7229 /* Result-MacTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"Result-MacTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD454806D1A9572F5009D7229 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD454806E1A9572F5009D7229 /* ResultTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultTests.swift; sourceTree = \"<group>\"; };\n\t\tD454807D1A957361009D7229 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD45480871A957362009D7229 /* Result-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"Result-iOSTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD45480961A957465009D7229 /* Result.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Result.swift; sourceTree = \"<group>\"; };\n\t\tE93621451B35596200948F2A /* ResultType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResultType.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t57FCDE401BA280DC00130C48 /* 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\t\t57FCDE4E1BA280E000130C48 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57FCDE561BA2814300130C48 /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD035799C1B2B788F005D26AE /* 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\t\tD03579AA1B2B78A1005D26AE /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD03579B41B2B78C4005D26AE /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480531A9572F5009D7229 /* 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\t\tD45480641A9572F5009D7229 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD45480681A9572F5009D7229 /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480791A957361009D7229 /* 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\t\tD45480841A957362009D7229 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD45480881A957362009D7229 /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tD454804D1A9572F5009D7229 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD45480591A9572F5009D7229 /* Result */,\n\t\t\t\tD454806B1A9572F5009D7229 /* ResultTests */,\n\t\t\t\tD45480581A9572F5009D7229 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t\tusesTabs = 1;\n\t\t};\n\t\tD45480581A9572F5009D7229 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD45480571A9572F5009D7229 /* Result.framework */,\n\t\t\t\tD45480671A9572F5009D7229 /* Result-MacTests.xctest */,\n\t\t\t\tD454807D1A957361009D7229 /* Result.framework */,\n\t\t\t\tD45480871A957362009D7229 /* Result-iOSTests.xctest */,\n\t\t\t\tD03579A31B2B788F005D26AE /* Result.framework */,\n\t\t\t\tD03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */,\n\t\t\t\t57FCDE471BA280DC00130C48 /* Result.framework */,\n\t\t\t\t57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD45480591A9572F5009D7229 /* Result */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD454805C1A9572F5009D7229 /* Result.h */,\n\t\t\t\tD45480961A957465009D7229 /* Result.swift */,\n\t\t\t\tE93621451B35596200948F2A /* ResultType.swift */,\n\t\t\t\tD454805A1A9572F5009D7229 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = Result;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD454805A1A9572F5009D7229 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD454805B1A9572F5009D7229 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD454806B1A9572F5009D7229 /* ResultTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD454806E1A9572F5009D7229 /* ResultTests.swift */,\n\t\t\t\tD454806C1A9572F5009D7229 /* Supporting Files */,\n\t\t\t);\n\t\t\tname = ResultTests;\n\t\t\tpath = Tests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD454806C1A9572F5009D7229 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD454806D1A9572F5009D7229 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t57FCDE411BA280DC00130C48 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57FCDE421BA280DC00130C48 /* Result.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD035799D1B2B788F005D26AE /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD035799E1B2B788F005D26AE /* Result.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480541A9572F5009D7229 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD454805D1A9572F5009D7229 /* Result.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD454807A1A957361009D7229 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD454809A1A9574BB009D7229 /* Result.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t57FCDE3C1BA280DC00130C48 /* Result-tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 57FCDE441BA280DC00130C48 /* Build configuration list for PBXNativeTarget \"Result-tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t57FCDE3D1BA280DC00130C48 /* Sources */,\n\t\t\t\t57FCDE401BA280DC00130C48 /* Frameworks */,\n\t\t\t\t57FCDE411BA280DC00130C48 /* Headers */,\n\t\t\t\t57FCDE431BA280DC00130C48 /* 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 = \"Result-tvOS\";\n\t\t\tproductName = \"Result-iOS\";\n\t\t\tproductReference = 57FCDE471BA280DC00130C48 /* Result.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t57FCDE491BA280E000130C48 /* Result-tvOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 57FCDE511BA280E000130C48 /* Build configuration list for PBXNativeTarget \"Result-tvOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t57FCDE4C1BA280E000130C48 /* Sources */,\n\t\t\t\t57FCDE4E1BA280E000130C48 /* Frameworks */,\n\t\t\t\t57FCDE501BA280E000130C48 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t57FCDE581BA2814A00130C48 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Result-tvOSTests\";\n\t\t\tproductName = \"Result-iOSTests\";\n\t\t\tproductReference = 57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tD03579991B2B788F005D26AE /* Result-watchOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D03579A01B2B788F005D26AE /* Build configuration list for PBXNativeTarget \"Result-watchOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD035799A1B2B788F005D26AE /* Sources */,\n\t\t\t\tD035799C1B2B788F005D26AE /* Frameworks */,\n\t\t\t\tD035799D1B2B788F005D26AE /* Headers */,\n\t\t\t\tD035799F1B2B788F005D26AE /* 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 = \"Result-watchOS\";\n\t\t\tproductName = Result;\n\t\t\tproductReference = D03579A31B2B788F005D26AE /* Result.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tD03579A51B2B78A1005D26AE /* Result-watchOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D03579AD1B2B78A1005D26AE /* Build configuration list for PBXNativeTarget \"Result-watchOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD03579A81B2B78A1005D26AE /* Sources */,\n\t\t\t\tD03579AA1B2B78A1005D26AE /* Frameworks */,\n\t\t\t\tD03579AC1B2B78A1005D26AE /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD03579B31B2B78BB005D26AE /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Result-watchOSTests\";\n\t\t\tproductName = ResultTests;\n\t\t\tproductReference = D03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tD45480561A9572F5009D7229 /* Result-Mac */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D45480721A9572F5009D7229 /* Build configuration list for PBXNativeTarget \"Result-Mac\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD45480521A9572F5009D7229 /* Sources */,\n\t\t\t\tD45480531A9572F5009D7229 /* Frameworks */,\n\t\t\t\tD45480541A9572F5009D7229 /* Headers */,\n\t\t\t\tD45480551A9572F5009D7229 /* 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 = \"Result-Mac\";\n\t\t\tproductName = Result;\n\t\t\tproductReference = D45480571A9572F5009D7229 /* Result.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tD45480661A9572F5009D7229 /* Result-MacTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D45480751A9572F5009D7229 /* Build configuration list for PBXNativeTarget \"Result-MacTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD45480631A9572F5009D7229 /* Sources */,\n\t\t\t\tD45480641A9572F5009D7229 /* Frameworks */,\n\t\t\t\tD45480651A9572F5009D7229 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD454806A1A9572F5009D7229 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Result-MacTests\";\n\t\t\tproductName = ResultTests;\n\t\t\tproductReference = D45480671A9572F5009D7229 /* Result-MacTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tD454807C1A957361009D7229 /* Result-iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D45480941A957362009D7229 /* Build configuration list for PBXNativeTarget \"Result-iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD45480781A957361009D7229 /* Sources */,\n\t\t\t\tD45480791A957361009D7229 /* Frameworks */,\n\t\t\t\tD454807A1A957361009D7229 /* Headers */,\n\t\t\t\tD454807B1A957361009D7229 /* 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 = \"Result-iOS\";\n\t\t\tproductName = \"Result-iOS\";\n\t\t\tproductReference = D454807D1A957361009D7229 /* Result.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tD45480861A957362009D7229 /* Result-iOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D45480951A957362009D7229 /* Build configuration list for PBXNativeTarget \"Result-iOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD45480831A957362009D7229 /* Sources */,\n\t\t\t\tD45480841A957362009D7229 /* Frameworks */,\n\t\t\t\tD45480851A957362009D7229 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD454808A1A957362009D7229 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Result-iOSTests\";\n\t\t\tproductName = \"Result-iOSTests\";\n\t\t\tproductReference = D45480871A957362009D7229 /* Result-iOSTests.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\tD454804E1A9572F5009D7229 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0700;\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t\tORGANIZATIONNAME = \"Rob Rix\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tD45480561A9572F5009D7229 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.3;\n\t\t\t\t\t};\n\t\t\t\t\tD45480661A9572F5009D7229 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.3;\n\t\t\t\t\t};\n\t\t\t\t\tD454807C1A957361009D7229 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.3;\n\t\t\t\t\t};\n\t\t\t\t\tD45480861A957362009D7229 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.3;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = D45480511A9572F5009D7229 /* Build configuration list for PBXProject \"Result\" */;\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 = D454804D1A9572F5009D7229;\n\t\t\tproductRefGroup = D45480581A9572F5009D7229 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tD45480561A9572F5009D7229 /* Result-Mac */,\n\t\t\t\tD45480661A9572F5009D7229 /* Result-MacTests */,\n\t\t\t\tD454807C1A957361009D7229 /* Result-iOS */,\n\t\t\t\tD45480861A957362009D7229 /* Result-iOSTests */,\n\t\t\t\t57FCDE3C1BA280DC00130C48 /* Result-tvOS */,\n\t\t\t\t57FCDE491BA280E000130C48 /* Result-tvOSTests */,\n\t\t\t\tD03579991B2B788F005D26AE /* Result-watchOS */,\n\t\t\t\tD03579A51B2B78A1005D26AE /* Result-watchOSTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t57FCDE431BA280DC00130C48 /* 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\t\t57FCDE501BA280E000130C48 /* 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\t\tD035799F1B2B788F005D26AE /* 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\t\tD03579AC1B2B78A1005D26AE /* 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\t\tD45480551A9572F5009D7229 /* 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\t\tD45480651A9572F5009D7229 /* 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\t\tD454807B1A957361009D7229 /* 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\t\tD45480851A957362009D7229 /* 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\t57FCDE3D1BA280DC00130C48 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57FCDE3E1BA280DC00130C48 /* ResultType.swift in Sources */,\n\t\t\t\t57FCDE3F1BA280DC00130C48 /* Result.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t57FCDE4C1BA280E000130C48 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57FCDE4D1BA280E000130C48 /* ResultTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD035799A1B2B788F005D26AE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t45AE89E61B3A6564007B99D7 /* ResultType.swift in Sources */,\n\t\t\t\tD035799B1B2B788F005D26AE /* Result.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD03579A81B2B78A1005D26AE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD03579A91B2B78A1005D26AE /* ResultTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480521A9572F5009D7229 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE93621461B35596200948F2A /* ResultType.swift in Sources */,\n\t\t\t\tD45480971A957465009D7229 /* Result.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480631A9572F5009D7229 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD454806F1A9572F5009D7229 /* ResultTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480781A957361009D7229 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE93621471B35596200948F2A /* ResultType.swift in Sources */,\n\t\t\t\tD45480981A957465009D7229 /* Result.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480831A957362009D7229 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD45480991A9574B8009D7229 /* ResultTests.swift 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\t57FCDE581BA2814A00130C48 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 57FCDE3C1BA280DC00130C48 /* Result-tvOS */;\n\t\t\ttargetProxy = 57FCDE571BA2814A00130C48 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD03579B31B2B78BB005D26AE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D03579991B2B788F005D26AE /* Result-watchOS */;\n\t\t\ttargetProxy = D03579B21B2B78BB005D26AE /* PBXContainerItemProxy */;\n\t\t};\n\t\tD454806A1A9572F5009D7229 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D45480561A9572F5009D7229 /* Result-Mac */;\n\t\t\ttargetProxy = D45480691A9572F5009D7229 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD454808A1A957362009D7229 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D454807C1A957361009D7229 /* Result-iOS */;\n\t\t\ttargetProxy = D45480891A957362009D7229 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t57FCDE451BA280DC00130C48 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvsimulator*]\" = \"\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\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 = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t57FCDE461BA280DC00130C48 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvsimulator*]\" = \"\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t57FCDE521BA280E000130C48 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\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 = Tests/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\tSDKROOT = appletvos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t57FCDE531BA280E000130C48 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = Tests/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\tSDKROOT = appletvos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD03579A11B2B788F005D26AE /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchsimulator*]\" = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD03579A21B2B788F005D26AE /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchsimulator*]\" = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD03579AE1B2B78A1005D26AE /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\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 = Tests/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\tSDKROOT = watchos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD03579AF1B2B78A1005D26AE /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Tests/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\tSDKROOT = watchos;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD45480701A9572F5009D7229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\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\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.antitypical.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 2.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD45480711A9572F5009D7229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\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\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.antitypical.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 2.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD45480731A9572F5009D7229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tVALID_ARCHS = x86_64;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD45480741A9572F5009D7229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVALID_ARCHS = x86_64;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD45480761A9572F5009D7229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\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 = Tests/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};\n\t\t\tname = Debug;\n\t\t};\n\t\tD45480771A9572F5009D7229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Tests/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};\n\t\t\tname = Release;\n\t\t};\n\t\tD45480901A957362009D7229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphonesimulator*]\" = \"\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = YES;\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 = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD45480911A957362009D7229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphonesimulator*]\" = \"\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = YES;\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD45480921A957362009D7229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\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 = Tests/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\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD45480931A957362009D7229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = Tests/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\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t57FCDE441BA280DC00130C48 /* Build configuration list for PBXNativeTarget \"Result-tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t57FCDE451BA280DC00130C48 /* Debug */,\n\t\t\t\t57FCDE461BA280DC00130C48 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t57FCDE511BA280E000130C48 /* Build configuration list for PBXNativeTarget \"Result-tvOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t57FCDE521BA280E000130C48 /* Debug */,\n\t\t\t\t57FCDE531BA280E000130C48 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD03579A01B2B788F005D26AE /* Build configuration list for PBXNativeTarget \"Result-watchOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD03579A11B2B788F005D26AE /* Debug */,\n\t\t\t\tD03579A21B2B788F005D26AE /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD03579AD1B2B78A1005D26AE /* Build configuration list for PBXNativeTarget \"Result-watchOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD03579AE1B2B78A1005D26AE /* Debug */,\n\t\t\t\tD03579AF1B2B78A1005D26AE /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD45480511A9572F5009D7229 /* Build configuration list for PBXProject \"Result\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD45480701A9572F5009D7229 /* Debug */,\n\t\t\t\tD45480711A9572F5009D7229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD45480721A9572F5009D7229 /* Build configuration list for PBXNativeTarget \"Result-Mac\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD45480731A9572F5009D7229 /* Debug */,\n\t\t\t\tD45480741A9572F5009D7229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD45480751A9572F5009D7229 /* Build configuration list for PBXNativeTarget \"Result-MacTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD45480761A9572F5009D7229 /* Debug */,\n\t\t\t\tD45480771A9572F5009D7229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD45480941A957362009D7229 /* Build configuration list for PBXNativeTarget \"Result-iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD45480901A957362009D7229 /* Debug */,\n\t\t\t\tD45480911A957362009D7229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD45480951A957362009D7229 /* Build configuration list for PBXNativeTarget \"Result-iOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD45480921A957362009D7229 /* Debug */,\n\t\t\t\tD45480931A957362009D7229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = D454804E1A9572F5009D7229 /* Project object */;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-Mac.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D45480561A9572F5009D7229\"\n               BuildableName = \"Result.framework\"\n               BlueprintName = \"Result-Mac\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D45480661A9572F5009D7229\"\n               BuildableName = \"Result-MacTests.xctest\"\n               BlueprintName = \"Result-MacTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D45480661A9572F5009D7229\"\n               BuildableName = \"Result-MacTests.xctest\"\n               BlueprintName = \"Result-MacTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D45480561A9572F5009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-Mac\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D45480561A9572F5009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-Mac\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D45480561A9572F5009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-Mac\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-iOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D454807C1A957361009D7229\"\n               BuildableName = \"Result.framework\"\n               BlueprintName = \"Result-iOS\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D45480861A957362009D7229\"\n               BuildableName = \"Result-iOSTests.xctest\"\n               BlueprintName = \"Result-iOSTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D45480861A957362009D7229\"\n               BuildableName = \"Result-iOSTests.xctest\"\n               BlueprintName = \"Result-iOSTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D454807C1A957361009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-iOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D454807C1A957361009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-iOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D454807C1A957361009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-iOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-tvOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"57FCDE3C1BA280DC00130C48\"\n               BuildableName = \"Result.framework\"\n               BlueprintName = \"Result-tvOS\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"57FCDE491BA280E000130C48\"\n               BuildableName = \"Result-tvOSTests.xctest\"\n               BlueprintName = \"Result-tvOSTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"57FCDE3C1BA280DC00130C48\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-tvOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"57FCDE3C1BA280DC00130C48\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-tvOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"57FCDE3C1BA280DC00130C48\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-tvOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-watchOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D03579991B2B788F005D26AE\"\n               BuildableName = \"Result.framework\"\n               BlueprintName = \"Result-watchOS\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D03579A51B2B78A1005D26AE\"\n               BuildableName = \"Result-watchOSTests.xctest\"\n               BlueprintName = \"Result-watchOSTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D03579991B2B788F005D26AE\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-watchOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D03579991B2B788F005D26AE\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-watchOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D03579991B2B788F005D26AE\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-watchOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Tests/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/Result/Tests/ResultTests.swift",
    "content": "//  Copyright (c) 2015 Rob Rix. All rights reserved.\n\nfinal class ResultTests: XCTestCase {\n\tfunc testMapTransformsSuccesses() {\n\t\tXCTAssertEqual(success.map { $0.characters.count } ?? 0, 7)\n\t}\n\n\tfunc testMapRewrapsFailures() {\n\t\tXCTAssertEqual(failure.map { $0.characters.count } ?? 0, 0)\n\t}\n\n\tfunc testInitOptionalSuccess() {\n\t\tXCTAssert(Result(\"success\" as String?, failWith: error) == success)\n\t}\n\n\tfunc testInitOptionalFailure() {\n\t\tXCTAssert(Result(nil, failWith: error) == failure)\n\t}\n\n\n\t// MARK: Errors\n\n\tfunc testErrorsIncludeTheSourceFile() {\n\t\tlet file = __FILE__\n\t\tXCTAssert(Result<(), NSError>.error().file == file)\n\t}\n\n\tfunc testErrorsIncludeTheSourceLine() {\n\t\tlet (line, error) = (__LINE__, Result<(), NSError>.error())\n\t\tXCTAssertEqual(error.line ?? -1, line)\n\t}\n\n\tfunc testErrorsIncludeTheCallingFunction() {\n\t\tlet function = __FUNCTION__\n\t\tXCTAssert(Result<(), NSError>.error().function == function)\n\t}\n\n\t// MARK: Try - Catch\n\t\n\tfunc testTryCatchProducesSuccesses() {\n\t\tlet result: Result<String, NSError> = Result(try tryIsSuccess(\"success\"))\n\t\tXCTAssert(result == success)\n\t}\n\t\n\tfunc testTryCatchProducesFailures() {\n\t\tlet result: Result<String, NSError> = Result(try tryIsSuccess(nil))\n\t\tXCTAssert(result.error == error)\n\t}\n\n\tfunc testTryCatchWithFunctionProducesSuccesses() {\n\t\tlet function = { try tryIsSuccess(\"success\") }\n\n\t\tlet result: Result<String, NSError> = Result(attempt: function)\n\t\tXCTAssert(result == success)\n\t}\n\n\tfunc testTryCatchWithFunctionCatchProducesFailures() {\n\t\tlet function = { try tryIsSuccess(nil) }\n\n\t\tlet result: Result<String, NSError> = Result(attempt: function)\n\t\tXCTAssert(result.error == error)\n\t}\n\n\tfunc testMaterializeProducesSuccesses() {\n\t\tlet result1 = materialize(try tryIsSuccess(\"success\"))\n\t\tXCTAssert(result1 == success)\n\n\t\tlet result2 = materialize { try tryIsSuccess(\"success\") }\n\t\tXCTAssert(result2 == success)\n\t}\n\n\tfunc testMaterializeProducesFailures() {\n\t\tlet result1 = materialize(try tryIsSuccess(nil))\n\t\tXCTAssert(result1.error == error)\n\n\t\tlet result2 = materialize { try tryIsSuccess(nil) }\n\t\tXCTAssert(result2.error == error)\n\t}\n\n\t// MARK: Cocoa API idioms\n\n\tfunc testTryProducesFailuresForBooleanAPIWithErrorReturnedByReference() {\n\t\tlet result = `try` { attempt(true, succeed: false, error: $0) }\n\t\tXCTAssertFalse(result ?? false)\n\t\tXCTAssertNotNil(result.error)\n\t}\n\n\tfunc testTryProducesFailuresForOptionalWithErrorReturnedByReference() {\n\t\tlet result = `try` { attempt(1, succeed: false, error: $0) }\n\t\tXCTAssertEqual(result ?? 0, 0)\n\t\tXCTAssertNotNil(result.error)\n\t}\n\n\tfunc testTryProducesSuccessesForBooleanAPI() {\n\t\tlet result = `try` { attempt(true, succeed: true, error: $0) }\n\t\tXCTAssertTrue(result ?? false)\n\t\tXCTAssertNil(result.error)\n\t}\n\n\tfunc testTryProducesSuccessesForOptionalAPI() {\n\t\tlet result = `try` { attempt(1, succeed: true, error: $0) }\n\t\tXCTAssertEqual(result ?? 0, 1)\n\t\tXCTAssertNil(result.error)\n\t}\n\n\tfunc testTryMapProducesSuccess() {\n\t\tlet result = success.tryMap(tryIsSuccess)\n\t\tXCTAssert(result == success)\n\t}\n\n\tfunc testTryMapProducesFailure() {\n\t\tlet result = Result<String, NSError>.Success(\"fail\").tryMap(tryIsSuccess)\n\t\tXCTAssert(result == failure)\n\t}\n\n\t// MARK: Operators\n\n\tfunc testConjunctionOperator() {\n\t\tlet resultSuccess = success &&& success\n\t\tif let (x, y) = resultSuccess.value {\n\t\t\tXCTAssertTrue(x == \"success\" && y == \"success\")\n\t\t} else {\n\t\t\tXCTFail()\n\t\t}\n\n\t\tlet resultFailureBoth = failure &&& failure2\n\t\tXCTAssert(resultFailureBoth.error == error)\n\n\t\tlet resultFailureLeft = failure &&& success\n\t\tXCTAssert(resultFailureLeft.error == error)\n\n\t\tlet resultFailureRight = success &&& failure2\n\t\tXCTAssert(resultFailureRight.error == error2)\n\t}\n}\n\n\n// MARK: - Fixtures\n\nlet success = Result<String, NSError>.Success(\"success\")\nlet error = NSError(domain: \"com.antitypical.Result\", code: 1, userInfo: nil)\nlet error2 = NSError(domain: \"com.antitypical.Result\", code: 2, userInfo: nil)\nlet failure = Result<String, NSError>.Failure(error)\nlet failure2 = Result<String, NSError>.Failure(error2)\n\n\n// MARK: - Helpers\n\nfunc attempt<T>(value: T, succeed: Bool, error: NSErrorPointer) -> T? {\n\tif succeed {\n\t\treturn value\n\t} else {\n\t\terror.memory = Result<(), NSError>.error()\n\t\treturn nil\n\t}\n}\n\nfunc tryIsSuccess(text: String?) throws -> String {\n\tguard let text = text where text == \"success\" else {\n\t\tthrow error\n\t}\n\t\n\treturn text\n}\n\nextension NSError {\n\tvar function: String? {\n\t\treturn userInfo[Result<(), NSError>.functionKey as NSString] as? String\n\t}\n\t\n\tvar file: String? {\n\t\treturn userInfo[Result<(), NSError>.fileKey as NSString] as? String\n\t}\n\n\tvar line: Int? {\n\t\treturn userInfo[Result<(), NSError>.lineKey as NSString] as? Int\n\t}\n}\n\n\nimport Result\nimport XCTest\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/.gitignore",
    "content": "Carthage/Build\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Common.xcconfig",
    "content": "// \n// This file defines common settings that should be enabled for every new\n// project. Typically, you want to use Debug, Release, or a similar variant\n// instead.\n//\n\n// Disable legacy-compatible header searching\nALWAYS_SEARCH_USER_PATHS = NO\n\n// Architectures to build\nARCHS = $(ARCHS_STANDARD)\n\n// Whether to warn when a floating-point value is used as a loop counter\nCLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES\n\n// Whether to warn about use of rand() and random() being used instead of arc4random()\nCLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES\n\n// Whether to warn about strcpy() and strcat()\nCLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES\n\n// Whether to enable module imports\nCLANG_ENABLE_MODULES = YES\n\n// Enable ARC\nCLANG_ENABLE_OBJC_ARC = YES\n\n// Warn about implicit conversions to boolean values that are suspicious.\n// For example, writing 'if (foo)' with 'foo' being the name a function will trigger a warning.\nCLANG_WARN_BOOL_CONVERSION = YES\n\n// Warn about implicit conversions of constant values that cause the constant value to change,\n// either through a loss of precision, or entirely in its meaning.\nCLANG_WARN_CONSTANT_CONVERSION = YES\n\n// Whether to warn when overriding deprecated methods\nCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES\n\n// Warn about direct accesses to the Objective-C 'isa' pointer instead of using a runtime API.\nCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR\n\n// Warn about declaring the same method more than once within the same @interface.\nCLANG_WARN__DUPLICATE_METHOD_MATCH = YES\n\n// Warn about loop bodies that are suspiciously empty.\nCLANG_WARN_EMPTY_BODY = YES\n\n// Warn about implicit conversions between different kinds of enum values.\n// For example, this can catch issues when using the wrong enum flag as an argument to a function or method.\nCLANG_WARN_ENUM_CONVERSION = YES\n\n// Whether to warn on implicit conversions between signed/unsigned types\nCLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO\n\n// Warn about implicit conversions between pointers and integers.\n// For example, this can catch issues when one incorrectly intermixes using NSNumbers and raw integers.\nCLANG_WARN_INT_CONVERSION = YES\n\n// Don't warn about repeatedly using a weak reference without assigning the weak reference to a strong reference. Too many false positives.\nCLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = NO\n\n// Warn about classes that unintentionally do not subclass a root class (such as NSObject).\nCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR\n\n// Whether to warn on suspicious implicit conversions\nCLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES\n\n// Warn about potentially unreachable code\nCLANG_WARN_UNREACHABLE_CODE = YES\n\n// The format of debugging symbols\nDEBUG_INFORMATION_FORMAT = dwarf-with-dsym\n\n// Whether to compile assertions in\nENABLE_NS_ASSERTIONS = YES\n\n// Whether to require objc_msgSend to be cast before invocation\nENABLE_STRICT_OBJC_MSGSEND = YES\n\n// Which C variant to use\nGCC_C_LANGUAGE_STANDARD = gnu99\n\n// Whether to enable exceptions for Objective-C\nGCC_ENABLE_OBJC_EXCEPTIONS = YES\n\n// Whether to generate debugging symbols\nGCC_GENERATE_DEBUGGING_SYMBOLS = YES\n\n// Whether to precompile the prefix header (if one is specified)\nGCC_PRECOMPILE_PREFIX_HEADER = YES\n\n// Whether to enable strict aliasing, meaning that two pointers of different\n// types (other than void * or any id type) cannot point to the same memory\n// location\nGCC_STRICT_ALIASING = YES\n\n// Whether symbols not explicitly exported are hidden by default (this primarily\n// only affects C++ code)\nGCC_SYMBOLS_PRIVATE_EXTERN = NO\n\n// Whether static variables are thread-safe by default\nGCC_THREADSAFE_STATICS = NO\n\n// Which compiler to use\nGCC_VERSION = com.apple.compilers.llvm.clang.1_0\n\n// Whether warnings are treated as errors\nGCC_TREAT_WARNINGS_AS_ERRORS = YES\n\n// Whether to warn about 64-bit values being implicitly shortened to 32 bits\nGCC_WARN_64_TO_32_BIT_CONVERSION = YES\n\n// Whether to warn about fields missing from structure initializers (only if\n// designated initializers aren't used)\nGCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES\n\n// Whether to warn about missing function prototypes\nGCC_WARN_ABOUT_MISSING_PROTOTYPES = NO\n\n// Whether to warn about implicit conversions in the signedness of the type\n// a pointer is pointing to (e.g., 'int *' getting converted to 'unsigned int *')\nGCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES\n\n// Whether to warn when the value returned from a function/method/block does not\n// match its return type\nGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR\n\n// Whether to warn on a class not implementing all the required methods of\n// a protocol it declares conformance to\nGCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES\n\n// Whether to warn when switching on an enum value, and all possibilities are\n// not accounted for\nGCC_WARN_CHECK_SWITCH_STATEMENTS = YES\n\n// Whether to warn about the use of four-character constants\nGCC_WARN_FOUR_CHARACTER_CONSTANTS = YES\n\n// Whether to warn about an aggregate data type's initializer not being fully\n// bracketed (e.g., array initializer syntax)\nGCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES\n\n// Whether to warn about missing braces or parentheses that make the meaning of\n// the code ambiguous\nGCC_WARN_MISSING_PARENTHESES = YES\n\n// Whether to warn about unsafe comparisons between values of different\n// signedness\nGCC_WARN_SIGN_COMPARE = YES\n\n// Whether to warn about the arguments to printf-style functions not matching\n// the format specifiers\nGCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES\n\n// Warn if a \"@selector(...)\" expression referring to an undeclared selector is found\nGCC_WARN_UNDECLARED_SELECTOR = YES\n\n// Warn if a variable might be clobbered by a setjmp call or if an automatic variable is used without prior initialization.\nGCC_WARN_UNINITIALIZED_AUTOS = YES\n\n// Whether to warn about static functions that are unused\nGCC_WARN_UNUSED_FUNCTION = YES\n\n// Whether to warn about labels that are unused\nGCC_WARN_UNUSED_LABEL = YES\n\n// Whether to warn about variables that are never used\nGCC_WARN_UNUSED_VARIABLE = YES\n\n// Whether to run the static analyzer with every build\nRUN_CLANG_STATIC_ANALYZER = YES\n\n// Don't treat unknown warnings as errors, and disable GCC compatibility warnings and unused static const variable warnings\nWARNING_CFLAGS = -Wno-error=unknown-warning-option -Wno-gcc-compat -Wno-unused-const-variable -Wno-nullability-completeness\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Configurations/Debug.xcconfig",
    "content": "// \n// This file defines the base configuration for a Debug build of any project.\n// This should be set at the project level for the Debug configuration.\n//\n\n#include \"../Common.xcconfig\"\n\n// Whether to strip debugging symbols when copying resources (like included\n// binaries)\nCOPY_PHASE_STRIP = NO\n\n// The optimization level (0, 1, 2, 3, s) for the produced binary\nGCC_OPTIMIZATION_LEVEL = 0\n\n// Preproccessor definitions to apply to each file compiled\nGCC_PREPROCESSOR_DEFINITIONS = DEBUG=1\n\n// Whether to enable link-time optimizations (such as inlining across translation\n// units)\nLLVM_LTO = NO\n\n// Whether to only build the active architecture\nONLY_ACTIVE_ARCH = YES\n\n// Other compiler flags\n// \n// These settings catch some errors in integer arithmetic\nOTHER_CFLAGS = -ftrapv\n\n// Other flags to pass to the Swift compiler\n//\n// This enables conditional compilation with #if DEBUG\nOTHER_SWIFT_FLAGS = -D DEBUG\n\n// Whether to strip debugging symbols when copying the built product to its\n// final installation location\nSTRIP_INSTALLED_PRODUCT = NO\n\n// The optimization level (-Onone, -O, -Ofast) for the produced Swift binary\nSWIFT_OPTIMIZATION_LEVEL = -Onone\n\n// Disable Developer ID timestamping\nOTHER_CODE_SIGN_FLAGS = --timestamp=none\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Configurations/Profile.xcconfig",
    "content": "// \n// This file defines the base configuration for an optional profiling-specific\n// build of any project. To use these settings, create a Profile configuration\n// in your project, and use this file at the project level for the new\n// configuration.\n//\n\n// based on the Release configuration, with some stuff related to debugging\n// symbols re-enabled\n#include \"Release.xcconfig\"\n\n// Whether to strip debugging symbols when copying resources (like included\n// binaries)\nCOPY_PHASE_STRIP = NO\n\n// Whether to only build the active architecture\nONLY_ACTIVE_ARCH = YES\n\n// Whether to strip debugging symbols when copying the built product to its\n// final installation location\nSTRIP_INSTALLED_PRODUCT = NO\n\n// Whether to perform App Store validation checks\nVALIDATE_PRODUCT = NO\n\n// Disable Developer ID timestamping\nOTHER_CODE_SIGN_FLAGS = --timestamp=none\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Configurations/Release.xcconfig",
    "content": "// \n// This file defines the base configuration for a Release build of any project.\n// This should be set at the project level for the Release configuration.\n//\n\n#include \"../Common.xcconfig\"\n\n// Whether to strip debugging symbols when copying resources (like included\n// binaries)\nCOPY_PHASE_STRIP = YES\n\n// The optimization level (0, 1, 2, 3, s) for the produced binary\nGCC_OPTIMIZATION_LEVEL = s\n\n// Preproccessor definitions to apply to each file compiled\nGCC_PREPROCESSOR_DEFINITIONS = NDEBUG=1\n\n// Whether to enable link-time optimizations (such as inlining across translation\n// units)\nLLVM_LTO = NO\n\n// Whether to only build the active architecture\nONLY_ACTIVE_ARCH = NO\n\n// Whether to strip debugging symbols when copying the built product to its\n// final installation location\nSTRIP_INSTALLED_PRODUCT = YES\n\n// The optimization level (-Onone, -O, -Owholemodule) for the produced Swift binary\nSWIFT_OPTIMIZATION_LEVEL = -Owholemodule\n\n// Whether to perform App Store validation checks\nVALIDATE_PRODUCT = YES\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Configurations/Test.xcconfig",
    "content": "// \n// This file defines the base configuration for a Test build of any project.\n// This should be set at the project level for the Test configuration.\n//\n\n#include \"Debug.xcconfig\"\n\n// Sandboxed apps can't be unit tested since they can't load some random \n// external bundle. So we disable sandboxing for testing.\nCODE_SIGN_ENTITLEMENTS = \n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Targets/Application.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for an application. Typically, you want to use a platform-specific variant\n// instead.\n//\n\n// Whether to strip out code that isn't called from anywhere\nDEAD_CODE_STRIPPING = NO\n\n// Sets the @rpath for the application such that it can include frameworks in\n// the application bundle (inside the \"Frameworks\" folder)\nLD_RUNPATH_SEARCH_PATHS = @executable_path/../Frameworks @loader_path/../Frameworks @executable_path/Frameworks\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Targets/Framework.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for a framework. Typically, you want to use a platform-specific variant\n// instead.\n//\n\n// Whether to strip out code that isn't called from anywhere\nDEAD_CODE_STRIPPING = NO\n\n// Whether this framework should define an LLVM module\nDEFINES_MODULE = YES\n\n// Whether function calls should be position-dependent (should always be\n// disabled for library code)\nGCC_DYNAMIC_NO_PIC = NO\n\n// Default frameworks to the name of the project, instead of any\n// platform-specific target\nPRODUCT_NAME = $(PROJECT_NAME)\n\n// Enables the framework to be included from any location as long as the\n// loader’s runpath search paths includes it. For example from an application\n// bundle (inside the \"Frameworks\" folder) or shared folder\nINSTALL_PATH = @rpath\nLD_DYLIB_INSTALL_NAME = @rpath/$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/$(PRODUCT_NAME)\nSKIP_INSTALL = YES\n\n// Disallows use of APIs that are not available\n// to app extensions and linking to frameworks\n// that have not been built with this setting enabled.\nAPPLICATION_EXTENSION_API_ONLY = YES\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Base/Targets/StaticLibrary.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for a static library. Typically, you want to use a platform-specific variant\n// instead.\n//\n\n// Whether to strip out code that isn't called from anywhere\nDEAD_CODE_STRIPPING = NO\n\n// Whether to strip debugging symbols when copying resources (like included\n// binaries).\n//\n// Overrides Release.xcconfig when used at the target level.\nCOPY_PHASE_STRIP = NO\n\n// Whether function calls should be position-dependent (should always be\n// disabled for library code)\nGCC_DYNAMIC_NO_PIC = NO\n\n// Copy headers to \"include/LibraryName\" in the build folder by default. This\n// lets consumers use #import <LibraryName/LibraryName.h> syntax even for static\n// libraries\nPUBLIC_HEADERS_FOLDER_PATH = include/$PRODUCT_NAME\n\n// Don't include in an xcarchive\nSKIP_INSTALL = YES\n\n// Disallows use of APIs that are not available\n// to app extensions and linking to frameworks\n// that have not been built with this setting enabled.\nAPPLICATION_EXTENSION_API_ONLY = YES\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Mac OS X/Mac-Application.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for an application on Mac OS X. This should be set at the target level for\n// each project configuration.\n//\n\n// Import base application settings\n#include \"../Base/Targets/Application.xcconfig\"\n\n// Apply common settings specific to Mac OS X\n#include \"Mac-Base.xcconfig\"\n\n// Whether function calls should be position-dependent (should always be\n// disabled for library code)\nGCC_DYNAMIC_NO_PIC = YES\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Mac OS X/Mac-Base.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for Mac OS X. This file is not standalone -- it is meant to be included into\n// a configuration file for a specific type of target.\n//\n\n// Whether to combine multiple image resolutions into a multirepresentational\n// TIFF\nCOMBINE_HIDPI_IMAGES = YES\n\n// Where to find embedded frameworks\nLD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\n\n// The base SDK to use (if no version is specified, the latest version is\n// assumed)\nSDKROOT = macosx\n\n// Supported build architectures\nVALID_ARCHS = x86_64\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Mac OS X/Mac-DynamicLibrary.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for a dynamic library on Mac OS X. This should be set at the target level\n// for each project configuration.\n//\n\n// Import common settings specific to Mac OS X\n#include \"Mac-Base.xcconfig\"\n\n// Whether to strip out code that isn't called from anywhere\nDEAD_CODE_STRIPPING = NO\n\n// Whether function calls should be position-dependent (should always be\n// disabled for library code)\nGCC_DYNAMIC_NO_PIC = NO\n\n// Don't include in an xcarchive\nSKIP_INSTALL = YES\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Mac OS X/Mac-Framework.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for a framework on OS X. This should be set at the target level for each\n// project configuration.\n//\n\n// Import base framework settings\n#include \"../Base/Targets/Framework.xcconfig\"\n\n// Import common settings specific to Mac OS X\n#include \"Mac-Base.xcconfig\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/Mac OS X/Mac-StaticLibrary.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for a static library on Mac OS X. This should be set at the target level for\n// each project configuration.\n//\n\n// Import base static library settings\n#include \"../Base/Targets/StaticLibrary.xcconfig\"\n\n// Apply common settings specific to Mac OS X\n#include \"Mac-Base.xcconfig\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/README.md",
    "content": "This project intends to aggregate common or universal Xcode configuration settings, keeping them in hierarchial Xcode configuration files for easy modification and reuse.\n\n## License\n\nThis is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.\n\nIn jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nFor more information, please refer to [unlicense.org](http://unlicense.org).\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/iOS/iOS-Application.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for an application on iOS. This should be set at the target level for each\n// project configuration.\n//\n\n// Import base application settings\n#include \"../Base/Targets/Application.xcconfig\"\n\n// Apply common settings specific to iOS\n#include \"iOS-Base.xcconfig\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/iOS/iOS-Base.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for iOS. This file is not standalone -- it is meant to be included into\n// a configuration file for a specific type of target.\n//\n\n// Xcode needs this to find archived headers if SKIP_INSTALL is set\nHEADER_SEARCH_PATHS = $(OBJROOT)/UninstalledProducts/include\n\n// Where to find embedded frameworks\nLD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @loader_path/Frameworks\n\n// The base SDK to use (if no version is specified, the latest version is\n// assumed)\nSDKROOT = iphoneos\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/iOS/iOS-Framework.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for a framework on iOS. This should be set at the target level for each\n// project configuration.\n//\n\n// Import base framework settings\n#include \"../Base/Targets/Framework.xcconfig\"\n\n// Import common settings specific to iOS\n#include \"iOS-Base.xcconfig\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/iOS/iOS-StaticLibrary.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for a static library on iOS. This should be set at the target level for each\n// project configuration.\n//\n\n// Import base static library settings\n#include \"../Base/Targets/StaticLibrary.xcconfig\"\n\n// Apply common settings specific to iOS\n#include \"iOS-Base.xcconfig\"\n\n// Supported device families (1 is iPhone, 2 is iPad)\nTARGETED_DEVICE_FAMILY = 1,2\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/tvOS/tvOS-Application.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for an application on watchOS. This should be set at the target level for\n// each project configuration.\n//\n\n// Import base application settings\n#include \"../Base/Targets/Application.xcconfig\"\n\n// Apply common settings specific to watchOS\n#include \"tvOS-Base.xcconfig\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/tvOS/tvOS-Base.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for watchOS. This file is not standalone -- it is meant to be included into\n// a configuration file for a specific type of target.\n//\n\n// Where to find embedded frameworks\nLD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @loader_path/Frameworks\n\n// The base SDK to use (if no version is specified, the latest version is\n// assumed)\nSDKROOT = appletvos\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/tvOS/tvOS-Framework.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for a framework on watchOS. This should be set at the target level for each\n// project configuration.\n//\n\n// Import base framework settings\n#include \"../Base/Targets/Framework.xcconfig\"\n\n// Import common settings specific to iOS\n#include \"tvOS-Base.xcconfig\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/tvOS/tvOS-StaticLibrary.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for a static library on watchOS. This should be set at the target level for\n// each project configuration.\n//\n\n// Import base static library settings\n#include \"../Base/Targets/StaticLibrary.xcconfig\"\n\n// Apply common settings specific to watchOS\n#include \"tvOS-Base.xcconfig\"\n\n// Supported device families\nTARGETED_DEVICE_FAMILY = 3\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/watchOS/watchOS-Application.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for an application on watchOS. This should be set at the target level for\n// each project configuration.\n//\n\n// Import base application settings\n#include \"../Base/Targets/Application.xcconfig\"\n\n// Apply common settings specific to watchOS\n#include \"watchOS-Base.xcconfig\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/watchOS/watchOS-Base.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for watchOS. This file is not standalone -- it is meant to be included into\n// a configuration file for a specific type of target.\n//\n\n// Where to find embedded frameworks\nLD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @loader_path/Frameworks\n\n// The base SDK to use (if no version is specified, the latest version is\n// assumed)\nSDKROOT = watchos\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/watchOS/watchOS-Framework.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for a framework on watchOS. This should be set at the target level for each\n// project configuration.\n//\n\n// Import base framework settings\n#include \"../Base/Targets/Framework.xcconfig\"\n\n// Import common settings specific to iOS\n#include \"watchOS-Base.xcconfig\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Carthage/Checkouts/xcconfigs/watchOS/watchOS-StaticLibrary.xcconfig",
    "content": "//\n// This file defines additional configuration options that are appropriate only\n// for a static library on watchOS. This should be set at the target level for\n// each project configuration.\n//\n\n// Import base static library settings\n#include \"../Base/Targets/StaticLibrary.xcconfig\"\n\n// Apply common settings specific to watchOS\n#include \"watchOS-Base.xcconfig\"\n\n// Supported device families\nTARGETED_DEVICE_FAMILY = 4\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Documentation/BasicOperators.md",
    "content": "# Basic Operators\n\nThis document explains some of the most common operators used in ReactiveCocoa,\nand includes examples demonstrating their use.\n\nNote that “operators”, in this context, refers to functions that transform\n[signals][] and [signal producers][], _not_ custom Swift operators. In other\nwords, these are composable primitives provided by ReactiveCocoa for working\nwith event streams.\n\nThis document will use the term “event stream” when dealing with concepts that\napply to both `Signal` and `SignalProducer`. When the distinction matters, the\ntypes will be referred to by name.\n\n**[Performing side effects with event streams](#performing-side-effects-with-event-streams)**\n\n  1. [Observation](#observation)\n  1. [Injecting effects](#injecting-effects)\n\n**[Operator composition](#operator-composition)**\n\n  1. [Lifting](#lifting)\n\n**[Transforming event streams](#transforming-event-streams)**\n\n  1. [Mapping](#mapping)\n  1. [Filtering](#filtering)\n  1. [Aggregating](#aggregating)\n\n**[Combining event streams](#combining-event-streams)**\n\n  1. [Combining latest values](#combining-latest-values)\n  1. [Zipping](#zipping)\n\n**[Flattening producers](#flattening-producers)**\n\n  1. [Concatenating](#concatenating)\n  1. [Merging](#merging)\n  1. [Switching to the latest](#switching-to-the-latest)\n\n**[Handling failures](#handling-failures)**\n\n  1. [Catching failures](#catch)\n  1. [Mapping errors](#mapping-errors)\n  1. [Retrying](#retrying)\n\n## Performing side effects with event streams\n\n### Observation\n\n`Signal`s can be observed with the `observe` function. It takes an `Observer` as argument to which any future events are sent. \n\n```Swift\nsignal.observe(Signal.Observer { event in\n    switch event {\n    case let .Next(next):\n        print(\"Next: \\(next)\")\n    case let .Failed(error):\n        print(\"Failed: \\(error)\")\n    case .Completed:\n        print(\"Completed\")\n    case .Interrupted:\n        print(\"Interrupted\")\n    }\n})\n```\n\nAlternatively, callbacks for the `Next`, `Failed`, `Completed` and `Interrupted` events can be provided which will be called when a corresponding event occurs.\n\n```Swift\nsignal.observeNext { next in \n  print(\"Next: \\(next)\") \n}\nsignal.observeFailed { error in\n  print(\"Failed: \\(error)\")\n}\nsignal.observeCompleted { \n  print(\"Completed\") \n}\nsignal.observeInterrupted { \n  print(\"Interrupted\")\n}\n```\n\nNote that it is not necessary to observe all four types of event - all of them are optional, you only need to provide callbacks for the events you care about.\n\n### Injecting effects\n\nSide effects can be injected on a `SignalProducer` with the `on` operator without actually subscribing to it. \n\n```Swift\nlet producer = signalProducer\n    .on(started: {\n        print(\"Started\")\n    }, event: { event in\n        print(\"Event: \\(event)\")\n    }, failed: { error in\n        print(\"Failed: \\(error)\")\n    }, completed: {\n        print(\"Completed\")\n    }, interrupted: {\n        print(\"Interrupted\")\n    }, terminated: {\n        print(\"Terminated\")\n    }, disposed: {\n        print(\"Disposed\")\n    }, next: { value in\n        print(\"Next: \\(value)\")\n    })\n```\n\nSimilar to `observe`, all the parameters are optional and you only need to provide callbacks for the events you care about.\n\nNote that nothing will be printed until `producer` is started (possibly somewhere else).\n\n## Operator composition\n\n### Lifting\n\n`Signal` operators can be _lifted_ to operate upon `SignalProducer`s using the\n`lift` method.\n\nThis will create a new `SignalProducer` which will apply the given operator to\n_every_ `Signal` created, just as if the operator had been applied to each\nproduced `Signal` individually.\n\n## Transforming event streams\n\nThese operators transform an event stream into a new stream.\n\n### Mapping\n\nThe `map` operator is used to transform the values in a event stream, creating\na new stream with the results.\n\n```Swift\nlet (signal, observer) = Signal<String, NoError>.pipe()\n\nsignal\n    .map { string in string.uppercaseString }\n    .observeNext { next in print(next) }\n\nobserver.sendNext(\"a\")     // Prints A\nobserver.sendNext(\"b\")     // Prints B\nobserver.sendNext(\"c\")     // Prints C\n```\n\n[Interactive visualisation of the `map` operator.](http://neilpa.me/rac-marbles/#map)\n\n### Filtering\n\nThe `filter` operator is used to only include values in an event stream that\nsatisfy a predicate.\n\n```Swift\nlet (signal, observer) = Signal<Int, NoError>.pipe()\n\nsignal\n    .filter { number in number % 2 == 0 }\n    .observeNext { next in print(next) }\n\nobserver.sendNext(1)     // Not printed\nobserver.sendNext(2)     // Prints 2\nobserver.sendNext(3)     // Not printed\nobserver.sendNext(4)     // prints 4\n```\n\n[Interactive visualisation of the `filter` operator.](http://neilpa.me/rac-marbles/#filter)\n\n### Aggregating\n\nThe `reduce` operator is used to aggregate a event stream’s values into a single\ncombined value. Note that the final value is only sent after the input stream\ncompletes.\n\n```Swift\nlet (signal, observer) = Signal<Int, NoError>.pipe()\n\nsignal\n    .reduce(1) { $0 * $1 }\n    .observeNext { next in print(next) }\n\nobserver.sendNext(1)     // nothing printed\nobserver.sendNext(2)     // nothing printed\nobserver.sendNext(3)     // nothing printed\nobserver.sendCompleted()   // prints 6\n```\n\nThe `collect` operator is used to aggregate a event stream’s values into\na single array value. Note that the final value is only sent after the input\nstream completes.\n\n```Swift\nlet (signal, observer) = Signal<Int, NoError>.pipe()\n\nsignal\n    .collect()\n    .observeNext { next in print(next) }\n\nobserver.sendNext(1)     // nothing printed\nobserver.sendNext(2)     // nothing printed\nobserver.sendNext(3)     // nothing printed\nobserver.sendCompleted()   // prints [1, 2, 3]\n```\n\n[Interactive visualisation of the `reduce` operator.](http://neilpa.me/rac-marbles/#reduce)\n\n## Combining event streams\n\nThese operators combine values from multiple event streams into a new, unified\nstream.\n\n### Combining latest values\n\nThe `combineLatest` function combines the latest values of two (or more) event\nstreams.\n\nThe resulting stream will only send its first value after each input has sent at\nleast one value. After that, new values on any of the inputs will result in\na new value on the output.\n\n```Swift\nlet (numbersSignal, numbersObserver) = Signal<Int, NoError>.pipe()\nlet (lettersSignal, lettersObserver) = Signal<String, NoError>.pipe()\n\nlet signal = combineLatest(numbersSignal, lettersSignal)\nsignal.observeNext { next in print(\"Next: \\(next)\") }\nsignal.observeCompleted { print(\"Completed\") }\n\nnumbersObserver.sendNext(0)      // nothing printed\nnumbersObserver.sendNext(1)      // nothing printed\nlettersObserver.sendNext(\"A\")    // prints (1, A)\nnumbersObserver.sendNext(2)      // prints (2, A)\nnumbersObserver.sendCompleted()  // nothing printed\nlettersObserver.sendNext(\"B\")    // prints (2, B)\nlettersObserver.sendNext(\"C\")    // prints (2, C)\nlettersObserver.sendCompleted()  // prints \"Completed\"\n```\n\nThe `combineLatestWith` operator works in the same way, but as an operator.\n\n[Interactive visualisation of the `combineLatest` operator.](http://neilpa.me/rac-marbles/#combineLatest)\n\n### Zipping\n\nThe `zip` function joins values of two (or more) event streams pair-wise. The\nelements of any Nth tuple correspond to the Nth elements of the input streams.\n\nThat means the Nth value of the output stream cannot be sent until each input\nhas sent at least N values.\n\n```Swift\nlet (numbersSignal, numbersObserver) = Signal<Int, NoError>.pipe()\nlet (lettersSignal, lettersObserver) = Signal<String, NoError>.pipe()\n\nlet signal = zip(numbersSignal, lettersSignal)\nsignal.observeNext { next in print(\"Next: \\(next)\") }\nsignal.observeCompleted { print(\"Completed\") }\n\nnumbersObserver.sendNext(0)      // nothing printed\nnumbersObserver.sendNext(1)      // nothing printed\nlettersObserver.sendNext(\"A\")    // prints (0, A)\nnumbersObserver.sendNext(2)      // nothing printed\nnumbersObserver.sendCompleted()  // nothing printed\nlettersObserver.sendNext(\"B\")    // prints (1, B)\nlettersObserver.sendNext(\"C\")    // prints (2, C) & \"Completed\"\n\n```\n\nThe `zipWith` operator works in the same way, but as an operator.\n\n[Interactive visualisation of the `zip` operator.](http://neilpa.me/rac-marbles/#zip)\n\n## Flattening producers\n\nThe `flatten` operator transforms a `SignalProducer`-of-`SignalProducer`s into a single `SignalProducer` whose values are forwarded from the inner producer in accordance with the provided `FlattenStrategy`.\n\nTo understand, why there are different strategies and how they compare to each other, take a look at this example and imagine the column offsets as time:\n\n```Swift\nlet values = [\n// imagine column offset as time\n[ 1,    2,      3 ],\n   [ 4,      5,     6 ],\n         [ 7,     8 ],\n]\n\nlet merge =\n[ 1, 4, 2, 7,5, 3,8,6 ]\n\nlet concat = \n[ 1,    2,      3,4,      5,     6,7,     8]\n\nlet latest =\n[ 1, 4,    7,     8 ]\n```\n\nNote, how the values interleave and which values are even included in the resulting array.\n\n\n### Merging\n\nThe `.Merge` strategy immediately forwards every value of the inner `SignalProducer`s to the outer `SignalProducer`. Any failure sent on the outer producer or any inner producer is immediately sent on the flattened producer and terminates it.\n\n```Swift\nlet (producerA, lettersObserver) = SignalProducer<String, NoError>.buffer(5)\nlet (producerB, numbersObserver) = SignalProducer<String, NoError>.buffer(5)\nlet (signal, observer) = SignalProducer<SignalProducer<String, NoError>, NoError>.buffer(5)\n\nsignal.flatten(.Merge).startWithNext { next in print(next) }\n\nobserver.sendNext(producerA)\nobserver.sendNext(producerB)\nobserver.sendCompleted()\n\nlettersObserver.sendNext(\"a\")    // prints \"a\"\nnumbersObserver.sendNext(\"1\")    // prints \"1\"\nlettersObserver.sendNext(\"b\")    // prints \"b\"\nnumbersObserver.sendNext(\"2\")    // prints \"2\"\nlettersObserver.sendNext(\"c\")    // prints \"c\"\nnumbersObserver.sendNext(\"3\")    // prints \"3\"\n```\n\n[Interactive visualisation of the `flatten(.Merge)` operator.](http://neilpa.me/rac-marbles/#merge)\n\n### Concatenating\n\nThe `.Concat` strategy is used to serialize work of the inner `SignalProducer`s. The outer producer is started immediately. Each subsequent producer is not started until the preceeding one has completed. Failures are immediately forwarded to the flattened producer.\n\n```Swift\nlet (producerA, lettersObserver) = SignalProducer<String, NoError>.buffer(5)\nlet (producerB, numbersObserver) = SignalProducer<String, NoError>.buffer(5)\nlet (signal, observer) = SignalProducer<SignalProducer<String, NoError>, NoError>.buffer(5)\n\nsignal.flatten(.Concat).startWithNext { next in print(next) }\n\nobserver.sendNext(producerA)\nobserver.sendNext(producerB)\nobserver.sendCompleted()\n\nnumbersObserver.sendNext(\"1\")    // nothing printed\nlettersObserver.sendNext(\"a\")    // prints \"a\"\nlettersObserver.sendNext(\"b\")    // prints \"b\"\nnumbersObserver.sendNext(\"2\")    // nothing printed\nlettersObserver.sendNext(\"c\")    // prints \"c\"\nlettersObserver.sendCompleted()    // prints \"1\", \"2\"\nnumbersObserver.sendNext(\"3\")    // prints \"3\"\nnumbersObserver.sendCompleted()\n```\n\n[Interactive visualisation of the `flatten(.Concat)` operator.](http://neilpa.me/rac-marbles/#concat)\n\n### Switching to the latest\n\nThe `.Latest` strategy forwards only values from the latest input `SignalProducer`.\n\n```Swift\nlet (producerA, observerA) = SignalProducer<String, NoError>.buffer(5)\nlet (producerB, observerB) = SignalProducer<String, NoError>.buffer(5)\nlet (producerC, observerC) = SignalProducer<String, NoError>.buffer(5)\nlet (signal, observer) = SignalProducer<SignalProducer<String, NoError>, NoError>.buffer(5)\n\nsignal.flatten(.Latest).startWithNext { next in print(next) }\n\nobserver.sendNext(producerA)   // nothing printed\nobserverC.sendNext(\"X\")        // nothing printed\nobserverA.sendNext(\"a\")        // prints \"a\"\nobserverB.sendNext(\"1\")        // nothing printed\nobserver.sendNext(producerB)   // prints \"1\"\nobserverA.sendNext(\"b\")        // nothing printed\nobserverB.sendNext(\"2\")        // prints \"2\"\nobserverC.sendNext(\"Y\")        // nothing printed\nobserverA.sendNext(\"c\")        // nothing printed\nobserver.sendNext(producerC)   // prints \"X\", \"Y\"\nobserverB.sendNext(\"3\")        // nothing printed\nobserverC.sendNext(\"Z\")        // prints \"Z\"\n```\n\n## Handling failures\n\nThese operators are used to handle failures that might occur on an event stream.\n\n### Catching failures\n\nThe `flatMapError` operator catches any failure that may occur on the input `SignalProducer`, then starts a new `SignalProducer` in its place.\n\n```Swift\nlet (producer, observer) = SignalProducer<String, NSError>.buffer(5)\nlet error = NSError(domain: \"domain\", code: 0, userInfo: nil)\n\nproducer\n    .flatMapError { _ in SignalProducer<String, NoError>(value: \"Default\") }\n    .startWithNext { next in print(next) }\n\n\nobserver.sendNext(\"First\")     // prints \"First\"\nobserver.sendNext(\"Second\")    // prints \"Second\"\nobserver.sendFailed(error)     // prints \"Default\"\n```\n\n### Retrying\n\nThe `retry` operator will restart the original `SignalProducer` on failure up to `count` times.\n\n```Swift\nvar tries = 0\nlet limit = 2\nlet error = NSError(domain: \"domain\", code: 0, userInfo: nil)\nlet producer = SignalProducer<String, NSError> { (observer, _) in\n    if tries++ < limit {\n        observer.sendFailed(error)\n    } else {\n        observer.sendNext(\"Success\")\n        observer.sendCompleted()\n    }\n}\n\nproducer\n    .on(failed: {e in print(\"Failure\")})    // prints \"Failure\" twice\n    .retry(2)\n    .start { event in\n        switch event {\n        case let .Next(next):\n            print(next)                     // prints \"Success\"\n        case let .Failed(error):\n            print(\"Failed: \\(error)\")\n        case .Completed:\n            print(\"Completed\")\n        case .Interrupted:\n            print(\"Interrupted\")\n        }\n    }\n```\n\nIf the `SignalProducer` does not succeed after `count` tries, the resulting `SignalProducer` will fail. E.g., if  `retry(1)` is used in the example above instead of `retry(2)`, `\"Signal Failure\"` will be printed instead of `\"Success\"`.\n\n### Mapping errors\n\nThe `mapError` operator transforms the error of any failure in an event stream into a new error.\n\n```Swift\nenum CustomError: String, ErrorType {\n    case Foo = \"Foo\"\n    case Bar = \"Bar\"\n    case Other = \"Other\"\n    \n    var nsError: NSError {\n        return NSError(domain: \"CustomError.\\(rawValue)\", code: 0, userInfo: nil)\n    }\n    \n    var description: String {\n        return \"\\(rawValue) Error\"\n    }\n}\n\nlet (signal, observer) = Signal<String, NSError>.pipe()\n\nsignal\n    .mapError { (error: NSError) -> CustomError in\n        switch error.domain {\n        case \"com.example.foo\":\n            return .Foo\n        case \"com.example.bar\":\n            return .Bar\n        default:\n            return .Other\n        }\n    }\n    .observeFailed { error in\n        print(error)\n    }\n\nobserver.sendFailed(NSError(domain: \"com.example.foo\", code: 42, userInfo: nil))    // prints \"Foo Error\"\n```\n\n### Promote\n\nThe `promoteErrors` operator promotes an event stream that does not generate failures into one that can. \n\n```Swift\nlet (numbersSignal, numbersObserver) = Signal<Int, NoError>.pipe()\nlet (lettersSignal, lettersObserver) = Signal<String, NSError>.pipe()\n\nnumbersSignal\n    .promoteErrors(NSError)\n    .combineLatestWith(lettersSignal)\n```\n\nThe given stream will still not _actually_ generate failures, but this is useful\nbecause some operators to [combine streams](#combining-event-streams) require\nthe inputs to have matching error types.\n\n\n[Signals]: FrameworkOverview.md#signals\n[Signal Producers]: FrameworkOverview.md#signal-producers\n[Observation]: FrameworkOverview.md#observation\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Documentation/DebuggingTechniques.md",
    "content": "# Debugging Techniques\n\nThis document lists debugging techniques and infrastructure helpful for debugging ReactiveCocoa applications.\n\n#### Unscrambling Swift compiler errors\n\nType inferrence can be a source of hard-to-debug compiler errors. There are two potential places to be wrong when type inferrence used:\n\n1. Definition of type inferred variable\n2. Consumption of type inferred variable\n\nIn both cases errors are related to incorrect assumptions about type. Such issues are common for ReactiveCocoa applications as it is all about operations over data and related types. The current state of the Swift compiler can cause misleading type errors, especially when error happens in the middle of a signal chain. \n\nBelow is an example of type-error scenario:\n\n```\nSignalProducer<Int, NoError>(value:42)\n    .on(next: { answer in\n        return _\n    })\n    .startWithCompleted {\n        print(\"Completed.\")\n    }\n```\n\nThe code above will not compile with the following error on a `print` call `error: ambiguous reference to member 'print'\nprint(\"Completed.\")` To find the actual source of errors signal chains need to be broken apart. Add explicit definitions of closure types on each of the steps:\n\n```\nlet initialProducer = SignalProducer<Int, NoError>.init(value:42)\nlet sideEffectProducer = initialProducer.on(next: { (answer: Int) in\n    return _\n})\nlet disposable = sideEffectProducer.startWithCompleted {\n    print(\"Completed.\")\n}\n```\n\nThe code above will not compile too, but with the error `error: cannot convert value of type '(_) -> _' to expected argument type '(Int -> ())?'` on definition of `on` closure. This gives enough of information to locate unexpected `return _` since `on` closure should not have any return value.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Documentation/DesignGuidelines.md",
    "content": "# Design Guidelines\n\nThis document contains guidelines for projects that want to make use of\nReactiveCocoa. The content here is heavily inspired by the [Rx Design\nGuidelines](http://blogs.msdn.com/b/rxteam/archive/2010/10/28/rx-design-guidelines.aspx).\n\nThis document assumes basic familiarity\nwith the features of ReactiveCocoa. The [Framework Overview][] is a better\nresource for getting up to speed on the main types and concepts provided by RAC.\n\n**[The `Event` contract](#the-event-contract)**\n\n 1. [`Next`s provide values or indicate the occurrence of events](#nexts-provide-values-or-indicate-the-occurrence-of-events)\n 1. [Failures behave like exceptions and propagate immediately](#failures-behave-like-exceptions-and-propagate-immediately)\n 1. [Completion indicates success](#completion-indicates-success)\n 1. [Interruption cancels outstanding work and usually propagates immediately](#interruption-cancels-outstanding-work-and-usually-propagates-immediately)\n 1. [Events are serial](#events-are-serial)\n 1. [Events cannot be sent recursively](#events-cannot-be-sent-recursively)\n 1. [Events are sent synchronously by default](#events-are-sent-synchronously-by-default)\n\n**[The `Signal` contract](#the-signal-contract)**\n\n 1. [Signals start work when instantiated](#signals-start-work-when-instantiated)\n 1. [Observing a signal does not have side effects](#observing-a-signal-does-not-have-side-effects)\n 1. [All observers of a signal see the same events in the same order](#all-observers-of-a-signal-see-the-same-events-in-the-same-order)\n 1. [A signal is retained until the underlying observer is released](#a-signal-is-retained-until-the-underlying-observer-is-released)\n 1. [Terminating events dispose of signal resources](#terminating-events-dispose-of-signal-resources)\n\n**[The `SignalProducer` contract](#the-signalproducer-contract)**\n\n 1. [Signal producers start work on demand by creating signals](#signal-producers-start-work-on-demand-by-creating-signals)\n 1. [Each produced signal may send different events at different times](#each-produced-signal-may-send-different-events-at-different-times)\n 1. [Signal operators can be lifted to apply to signal producers](#signal-operators-can-be-lifted-to-apply-to-signal-producers)\n 1. [Disposing of a produced signal will interrupt it](#disposing-of-a-produced-signal-will-interrupt-it)\n\n**[Best practices](#best-practices)**\n\n 1. [Process only as many values as needed](#process-only-as-many-values-as-needed)\n 1. [Observe events on a known scheduler](#observe-events-on-a-known-scheduler)\n 1. [Switch schedulers in as few places as possible](#switch-schedulers-in-as-few-places-as-possible)\n 1. [Capture side effects within signal producers](#capture-side-effects-within-signal-producers)\n 1. [Share the side effects of a signal producer by sharing one produced signal](#share-the-side-effects-of-a-signal-producer-by-sharing-one-produced-signal)\n 1. [Prefer managing lifetime with operators over explicit disposal](#prefer-managing-lifetime-with-operators-over-explicit-disposal)\n\n**[Implementing new operators](#implementing-new-operators)**\n\n 1. [Prefer writing operators that apply to both signals and producers](#prefer-writing-operators-that-apply-to-both-signals-and-producers)\n 1. [Compose existing operators when possible](#compose-existing-operators-when-possible)\n 1. [Forward failure and interruption events as soon as possible](#forward-failure-and-interruption-events-as-soon-as-possible)\n 1. [Switch over `Event` values](#switch-over-event-values)\n 1. [Avoid introducing concurrency](#avoid-introducing-concurrency)\n 1. [Avoid blocking in operators](#avoid-blocking-in-operators)\n\n## The `Event` contract\n\n[Events][] are fundamental to ReactiveCocoa. [Signals][] and [signal producers][] both send\nevents, and may be collectively called “event streams.”\n\nEvent streams must conform to the following grammar:\n\n```\nNext* (Interrupted | Failed | Completed)?\n```\n\nThis states that an event stream consists of:\n\n 1. Any number of `Next` events\n 1. Optionally followed by one terminating event, which is any of `Interrupted`, `Failed`, or `Completed`\n\nAfter a terminating event, no other events will be received.\n\n#### `Next`s provide values or indicate the occurrence of events\n\n`Next` events contain a payload known as the “value.” Only `Next` events are\nsaid to have a value. Since an event stream can contain any number of `Next`s,\nthere are few restrictions on what those values can mean or be used for, except\nthat they must be of the same type.\n\nAs an example, the value might represent an element from a collection, or\na progress update about some long-running operation. The value of a `Next` event\nmight even represent nothing at all—for example, it’s common to use a value type\nof `()` to indicate that something happened, without being more specific about\nwhat that something was.\n\nMost of the event stream [operators][] act upon `Next` events, as they represent the\n“meaningful data” of a signal or producer.\n\n#### Failures behave like exceptions and propagate immediately\n\n`Failed` events indicate that something went wrong, and contain a concrete error\nthat indicates what happened. Failures are fatal, and propagate as quickly as\npossible to the consumer for handling.\n\nFailures also behave like exceptions, in that they “skip” operators, terminating\nthem along the way. In other words, most [operators][] immediately stop doing\nwork when a failure is received, and then propagate the failure onward. This even applies to time-shifted operators, like [`delay`][delay]—which, despite its name, will forward any failures immediately.\n\nConsequently, failures should only be used to represent “abnormal” termination. If it is important to let operators (or consumers) finish their work, a `Next`\nevent describing the result might be more appropriate.\n\nIf an event stream can _never_ fail, it should be parameterized with the\nspecial [`NoError`][NoError] type, which statically guarantees that a `Failed`\nevent cannot be sent upon the stream.\n\n#### Completion indicates success\n\nAn event stream sends `Completed` when the operation has completed successfully,\nor to indicate that the stream has terminated normally.\n\nMany operators manipulate the `Completed` event to shorten or extend the\nlifetime of an event stream.\n\nFor example, [`take`][take] will complete after the specified number of values have\nbeen received, thereby terminating the stream early. On the other hand, most\noperators that accept multiple signals or producers will wait until _all_ of\nthem have completed before forwarding a `Completed` event, since a successful\noutcome will usually depend on all the inputs.\n\n#### Interruption cancels outstanding work and usually propagates immediately\n\nAn `Interrupted` event is sent when an event stream should cancel processing.\nInterruption is somewhere between [success](#completion-indicates-success)\nand [failure](#failures-behave-like-exceptions-and-propagate-immediately)—the\noperation was not successful, because it did not get to finish, but it didn’t\nnecessarily “fail” either.\n\nMost [operators][] will propagate interruption immediately, but there are some\nexceptions. For example, the [flattening operators][flatten] will ignore\n`Interrupted` events that occur on the _inner_ producers, since the cancellation\nof an inner operation should not necessarily cancel the larger unit of work.\n\nRAC will automatically send an `Interrupted` event upon [disposal][Disposables], but it can\nalso be sent manually if necessary. Additionally, [custom\noperators](#implementing-new-operators) must make sure to forward interruption\nevents to the observer.\n\n#### Events are serial\n\nRAC guarantees that all events upon a stream will arrive serially. In other\nwords, it’s impossible for the observer of a signal or producer to receive\nmultiple `Event`s concurrently, even if the events are sent on multiple threads\nsimultaneously.\n\nThis simplifies [operator][Operators] implementations and [observers][].\n\n#### Events cannot be sent recursively\n\nJust like RAC guarantees that [events will not be received\nconcurrently](#events-are-serial), it also guarantees that they won’t be\nreceived recursively. As a consequence, [operators][] and [observers][] _do not_ need to\nbe reentrant.\n\nIf an event is sent upon a signal from a thread that is _already processing_\na previous event from that signal, deadlock will result. This is because\nrecursive signals are usually programmer error, and the determinacy of\na deadlock is preferable to nondeterministic race conditions.\n\nWhen a recursive signal is explicitly desired, the recursive event should be\ntime-shifted, with an operator like [`delay`][delay], to ensure that it isn’t sent from\nan already-running event handler.\n\n#### Events are sent synchronously by default\n\nRAC does not implicitly introduce concurrency or asynchrony. [Operators][] that\naccept a [scheduler][Schedulers] may, but they must be explicitly invoked by the consumer of\nthe framework.\n\nA “vanilla” signal or producer will send all of its events synchronously by\ndefault, meaning that the [observer][Observers] will be synchronously invoked for each event\nas it is sent, and that the underlying work will not resume until the event\nhandler finishes.\n\nThis is similar to how `NSNotificationCenter` or `UIControl` events are\ndistributed.\n\n## The `Signal` contract\n\nA [signal][Signals] is an “always on” stream that obeys [the `Event`\ncontract](#the-event-contract).\n\n`Signal` is a reference type, because each signal has identity—in other words, each\nsignal has its own lifetime, and may eventually terminate. Once terminated,\na signal cannot be restarted.\n\n#### Signals start work when instantiated\n\n[`Signal.init`][Signal.init] immediately executes the generator closure that is passed to it.\nThis means that side effects may occur even before the initializer returns.\n\nIt is also possible to send [events][] before the initializer returns. However,\nsince it is impossible for any [observers][] to be attached at this point, any\nevents sent this way cannot be received.\n\n#### Observing a signal does not have side effects\n\nThe work associated with a `Signal` does not start or stop when [observers][] are\nadded or removed, so the [`observe`][observe] method (or the cancellation thereof) never\nhas side effects.\n\nA signal’s side effects can only be stopped through [a terminating\nevent](#signals-are-retained-until-a-terminating-event-occurs).\n\n#### All observers of a signal see the same events in the same order\n\nBecause [observation does not have side\neffects](#observing-a-signal-does-not-have-side-effects), a `Signal` never\ncustomizes events for different [observers][]. When an event is sent upon a signal,\nit will be [synchronously](#events-are-sent-synchronously-by-default)\ndistributed to all observers that are attached at that time, much like\nhow `NSNotificationCenter` sends notifications.\n\nIn other words, there are not different event “timelines” per observer. All\nobservers effectively see the same stream of events.\n\nThere is one exception to this rule: adding an observer to a signal _after_ it\nhas already terminated will result in exactly one\n[`Interrupted`](#interruption-cancels-outstanding-work-and-usually-propagates-immediately)\nevent sent to that specific observer.\n\n#### A signal is retained until the underlying observer is released\n\nEven if the caller does not maintain a reference to the `Signal`:\n\n - A signal created with [`Signal.init`][Signal.init] is kept alive until the generator closure\n   releases the [observer][Observers] argument.\n - A signal created with [`Signal.pipe`][Signal.pipe] is kept alive until the returned observer\n   is released.\n\nThis ensures that signals associated with long-running work do not deallocate\nprematurely.\n\nNote that it is possible to release a signal before a terminating [event][Events] has been\nsent upon it. This should usually be avoided, as it can result in resource\nleaks, but is sometimes useful to disable termination.\n\n#### Terminating events dispose of signal resources\n\nWhen a terminating [event][Events] is sent along a `Signal`, all [observers][] will be\nreleased, and any resources being used to generate events should be disposed of.\n\nThe easiest way to ensure proper resource cleanup is to return a [disposable][Disposables]\nfrom the generator closure, which will be disposed of when termination occurs.\nThe disposable should be responsible for releasing memory, closing file handles,\ncanceling network requests, or anything else that may have been associated with\nthe work being performed.\n\n## The `SignalProducer` contract\n\nA [signal producer][Signal Producers] is like a “recipe” for creating\n[signals][]. Signal producers do not do anything by themselves—[work begins only\nwhen a signal is produced](#signal-producers-start-work-on-demand-by-creating-signals).\n\nSince a signal producer is just a declaration of _how_ to create signals, it is\na value type, and has no memory management to speak of.\n\n#### Signal producers start work on demand by creating signals\n\nThe [`start`][start] and [`startWithSignal`][startWithSignal] methods each\nproduce a `Signal` (implicitly and explicitly, respectively). After\ninstantiating the signal, the closure that was passed to\n[`SignalProducer.init`][SignalProducer.init] will be executed, to start the flow\nof [events][] after any observers have been attached.\n\nAlthough the producer itself is not _really_ responsible for the execution of\nwork, it’s common to speak of “starting” and “canceling” a producer. These terms\nrefer to producing a `Signal` that will start work, and [disposing of that\nsignal](#disposing-of-a-produced-signal-will-interrupt-it) to stop work.\n\nA producer can be started any number of times (including zero), and the work\nassociated with it will execute exactly that many times as well.\n\n#### Each produced signal may send different events at different times\n\nBecause signal producers [start work on\ndemand](#signal-producers-start-work-on-demand-by-creating-signals), there may\nbe different [observers][] associated with each execution, and those observers\nmay see completely different [event][Events] timelines.\n\nIn other words, events are generated from scratch for each time the producer is\nstarted, and can be completely different (or in a completely different order)\nfrom other times the producer is started.\n\nNonetheless, each execution of a signal producer will follow [the `Event`\ncontract](#the-event-contract).\n\n#### Signal operators can be lifted to apply to signal producers\n\nDue to the relationship between signals and signal producers, it is possible to\nautomatically promote any [operators][] over one or more `Signal`s to apply to\nthe same number of `SignalProducer`s instead, using the [`lift`][lift] method.\n\n`lift` will apply the behavior of the specified operator to each `Signal` that\nis [created when the signal producer is started](#signal-producers-start-work-on-demand-by-creating-signals).\n\n#### Disposing of a produced signal will interrupt it\n\nWhen a producer is started using the [`start`][start] or\n[`startWithSignal`][startWithSignal] methods, a [`Disposable`][Disposables] is\nautomatically created and passed back.\n\nDisposing of this object will\n[interrupt](#interruption-cancels-outstanding-work-and-usually-propagates-immediately)\nthe produced `Signal`, thereby canceling outstanding work and sending an\n`Interrupted` [event][Events] to all [observers][], and will also dispose of\neverything added to the [`CompositeDisposable`][CompositeDisposable] in\n[SignalProducer.init].\n\nNote that disposing of one produced `Signal` will not affect other signals created\nby the same `SignalProducer`.\n\n## Best practices\n\nThe following recommendations are intended to help keep RAC-based code\npredictable, understandable, and performant.\n\nThey are, however, only guidelines. Use best judgement when determining whether\nto apply the recommendations here to a given piece of code.\n\n#### Process only as many values as needed\n\nKeeping an event stream alive longer than necessary can waste CPU and memory, as\nunnecessary work is performed for results that will never be used.\n\nIf only a certain number of values or certain number of time is required from\na [signal][Signals] or [producer][Signal Producers], operators like\n[`take`][take] or [`takeUntil`][takeUntil] can be used to\nautomatically complete the stream once a certain condition is fulfilled.\n\nThe benefit is exponential, too, as this will terminate dependent operators\nsooner, potentially saving a significant amount of work.\n\n#### Observe events on a known scheduler\n\nWhen receiving a [signal][Signals] or [producer][Signal Producers] from unknown\ncode, it can be difficult to know which thread [events][] will arrive upon. Although\nevents are [guaranteed to be serial](#events-are-serial), sometimes stronger\nguarantees are needed, like when performing UI updates (which must occur on the\nmain thread).\n\nWhenever such a guarantee is important, the [`observeOn`][observeOn]\n[operator][Operators] should be used to force events to be received upon\na specific [scheduler][Schedulers].\n\n#### Switch schedulers in as few places as possible\n\nNotwithstanding the [above](#observe-events-on-a-known-scheduler), [events][]\nshould only be delivered to a specific [scheduler][Schedulers] when absolutely\nnecessary. Switching schedulers can introduce unnecessary delays and cause an\nincrease in CPU load.\n\nGenerally, [`observeOn`][observeOn] should only be used right before observing\nthe [signal][Signals], starting the [producer][Signal Producers], or binding to\na [property][Properties]. This ensures that events arrive on the expected\nscheduler, without introducing multiple thread hops before their arrival.\n\n#### Capture side effects within signal producers\n\nBecause [signal producers start work on\ndemand](#signal-producers-start-work-on-demand-by-creating-signals), any\nfunctions or methods that return a [signal producer][Signal Producers] should\nmake sure that side effects are captured _within_ the producer itself, instead\nof being part of the function or method call.\n\nFor example, a function like this:\n\n```swift\nfunc search(text: String) -> SignalProducer<Result, NetworkError>\n```\n\n… should _not_ immediately start a search.\n\nInstead, the returned producer should execute the search once for every time\nthat it is started. This also means that if the producer is never started,\na search will never have to be performed either.\n\n#### Share the side effects of a signal producer by sharing one produced signal\n\nIf multiple [observers][] are interested in the results of a [signal\nproducer][Signal Producers], calling [`start`][start] once for each observer\nmeans that the work associated with the producer will [execute that many\ntimes](#signal-producers-start-work-on-demand-by-creating-signals) and [may not\ngenerate the same results](#each-produced-signal-may-send-different-events-at-different-times).\n\nIf:\n\n 1. the observers need to receive the exact same results\n 1. the observers know about each other, or\n 1. the code starting the producer knows about each observer\n\n… it may be more appropriate to start the producer _just once_, and share the\nresults of that one [signal][Signals] to all observers, by attaching them within\nthe closure passed to the [`startWithSignal`][startWithSignal] method.\n\n#### Prefer managing lifetime with operators over explicit disposal\n\nAlthough the [disposable][Disposables] returned from [`start`][start] makes\ncanceling a [signal producer][Signal Producers] really easy, explicit use of\ndisposables can quickly lead to a rat's nest of resource management and cleanup\ncode.\n\nThere are almost always higher-level [operators][] that can be used instead of manual\ndisposal:\n\n * [`take`][take] can be used to automatically terminate a stream once a certain\n   number of values have been received.\n * [`takeUntil`][takeUntil] can be used to automatically terminate\n   a [signal][Signals] or producer when an event occurs (for example, when\n   a “Cancel” button is pressed in the UI).\n * [Properties][] and the `<~` operator can be used to “bind” the result of\n   a signal or producer, until termination or until the property is deallocated.\n   This can replace a manual observation that sets a value somewhere.\n\n## Implementing new operators\n\nRAC provides a long list of built-in [operators][] that should cover most use\ncases; however, RAC is not a closed system. It's entirely valid to implement\nadditional operators for specialized uses, or for consideration in ReactiveCocoa\nitself.\n\nImplementing a new operator requires a careful attention to detail and a focus\non simplicity, to avoid introducing bugs into the calling code.\n\nThese guidelines cover some of the common pitfalls and help preserve the\nexpected API contracts. It may also help to look at the implementations of\nexisting `Signal` and `SignalProducer` operators for reference points.\n\n#### Prefer writing operators that apply to both signals and producers\n\nSince any [signal operator can apply to signal\nproducers](#signal-operators-can-be-lifted-to-apply-to-signal-producers),\nwriting custom operators in terms of [`Signal`][Signals] means that\n[`SignalProducer`][Signal Producers] will get it “for free.”\n\nEven if the caller only needs to apply the new operator to signal producers at\nfirst, this generality can save time and effort in the future.\n\nOf course, some capabilities _require_ producers (for example, any retrying or\nrepeating), so it may not always be possible to write a signal-based version\ninstead.\n\n#### Compose existing operators when possible\n\nConsiderable thought has been put into the operators provided by RAC, and they\nhave been validated through automated tests and through their real world use in\nother projects. An operator that has been written from scratch may not be as\nrobust, or might not handle a special case that the built-in operators are aware\nof.\n\nTo minimize duplication and possible bugs, use the provided operators as much as\npossible in a custom operator implementation. Generally, there should be very\nlittle code written from scratch.\n\n#### Forward failure and interruption events as soon as possible\n\nUnless an operator is specifically built to handle\n[failures](#failures-behave-like-exceptions-and-propagate-immediately) and\n[interruption](#interruption-cancels-outstanding-work-and-usually-propagates-immedaitely)\nin a custom way, it should propagate those events to the observer as soon as\npossible, to ensure that their semantics are honored.\n\n#### Switch over `Event` values\n\nInstead of using [`start(failed:completed:interrupted:next:)`][start] or\n[`observe(failed:completed:interrupted:next:)`][observe], create your own\n[observer][Observers] to process raw [`Event`][Events] values, and use\na `switch` statement to determine the event type.\n\nFor example:\n\n```swift\nproducer.start { event in\n    switch event {\n    case let .Next(value):\n        println(\"Next event: \\(value)\")\n\n    case let .Failed(error):\n        println(\"Failed event: \\(error)\")\n\n    case .Completed:\n        println(\"Completed event\")\n\n    case .Interrupted:\n        println(\"Interrupted event\")\n    }\n}\n```\n\nSince the compiler will generate a warning if the `switch` is missing any case,\nthis prevents mistakes in a custom operator’s event handling.\n\n#### Avoid introducing concurrency\n\nConcurrency is an extremely common source of bugs in programming. To minimize\nthe potential for deadlocks and race conditions, operators should not\nconcurrently perform their work.\n\nCallers always have the ability to [observe events on a specific\nscheduler](#observe-events-on-a-known-scheduler), and RAC offers built-in ways\nto parallelize work, so custom operators don’t need to be concerned with it.\n\n#### Avoid blocking in operators\n\nSignal or producer operators should return a new signal or producer\n(respectively) as quickly as possible. Any work that the operator needs to\nperform should be part of the event handling logic, _not_ part of the operator\ninvocation itself.\n\nThis guideline can be safely ignored when the purpose of an operator is to\nsynchronously retrieve one or more values from a stream, like `single()` or\n`wait()`.\n\n[CompositeDisposable]: ../ReactiveCocoa/Swift/Disposable.swift\n[Disposables]: FrameworkOverview.md#disposables\n[Events]: FrameworkOverview.md#events\n[Framework Overview]: FrameworkOverview.md\n[NoError]: ../ReactiveCocoa/Swift/Errors.swift\n[Observers]: FrameworkOverview.md#observers\n[Operators]: BasicOperators.md\n[Properties]: FrameworkOverview.md#properties\n[Schedulers]: FrameworkOverview.md#schedulers\n[Signal Producers]: FrameworkOverview.md#signal-producers\n[Signal.init]: ../ReactiveCocoa/Swift/Signal.swift\n[Signal.pipe]: ../ReactiveCocoa/Swift/Signal.swift\n[SignalProducer.init]: ../ReactiveCocoa/Swift/SignalProducer.swift\n[Signals]: FrameworkOverview.md#signals\n[delay]: ../ReactiveCocoa/Swift/Signal.swift\n[flatten]: BasicOperators.md#flattening-producers\n[lift]: ../ReactiveCocoa/Swift/SignalProducer.swift\n[observe]: ../ReactiveCocoa/Swift/Signal.swift\n[observeOn]: ../ReactiveCocoa/Swift/Signal.swift\n[start]: ../ReactiveCocoa/Swift/SignalProducer.swift\n[startWithSignal]: ../ReactiveCocoa/Swift/SignalProducer.swift\n[take]: ../ReactiveCocoa/Swift/Signal.swift\n[takeUntil]: ../ReactiveCocoa/Swift/Signal.swift\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Documentation/FrameworkOverview.md",
    "content": "# Framework Overview\n\nThis document contains a high-level description of the different components\nwithin the ReactiveCocoa framework, and an attempt to explain how they work\ntogether and divide responsibilities. This is meant to be a starting point for\nlearning about new modules and finding more specific documentation.\n\nFor examples and help understanding how to use RAC, see the [README][] or\nthe [Design Guidelines][].\n\n## Events\n\nAn **event**, represented by the [`Event`][Event] type, is the formalized representation\nof the fact that _something has happened_. In ReactiveCocoa, events are the centerpiece\nof communication. An event might represent the press of a button, a piece\nof information received from an API, the occurrence of an error, or the completion\nof a long-running operation. In any case, something generates the events and sends them over a\n[signal](#signals) to any number of [observers](#observers).\n\n`Event` is an enumerated type representing either a value or one of three\nterminal events:\n\n * The `Next` event provides a new value from the source.\n * The `Failed` event indicates that an error occurred before the signal could\n   finish. Events are parameterized by an `ErrorType`, which determines the kind\n   of failure that’s permitted to appear in the event. If a failure is not\n   permitted, the event can use type `NoError` to prevent any from being\n   provided.\n * The `Completed` event indicates that the signal finished successfully, and\n   that no more values will be sent by the source.\n * The `Interrupted` event indicates that the signal has terminated due to\n   cancellation, meaning that the operation was neither successful nor\n   unsuccessful.\n\n## Signals\n\nA **signal**, represented by the [`Signal`][Signal] type, is any series of [events](#events)\nover time that can be observed.\n\nSignals are generally used to represent event streams that are already “in progress”,\nlike notifications, user input, etc. As work is performed or data is received,\nevents are _sent_ on the signal, which pushes them out to any observers.\nAll observers see the events at the same time.\n\nUsers must [observe](#observers) a signal in order to access its events.\nObserving a signal does not trigger any side effects. In other words,\nsignals are entirely producer-driven and push-based, and consumers (observers)\ncannot have any effect on their lifetime. While observing a signal, the user\ncan only evaluate the events in the same order as they are sent on the signal. There\nis no random access to values of a signal.\n\nSignals can be manipulated by applying [primitives][BasicOperators] to them.\nTypical primitives to manipulate a single signal like `filter`, `map` and\n`reduce` are available, as well as primitives to manipulate multiple signals\nat once (`zip`). Primitives operate only on the `Next` events of a signal.\n\nThe lifetime of a signal consists of any number of `Next` events, followed by\none terminating event, which may be any one of `Failed`, `Completed`, or\n`Interrupted` (but not a combination).\nTerminating events are not included in the signal’s values—they must be\nhandled specially.\n\n### Pipes\n\nA **pipe**, created by `Signal.pipe()`, is a [signal](#signals)\nthat can be manually controlled.\n\nThe method returns a [signal](#signals) and an [observer](#observers).\nThe signal can be controlled by sending events to the observer. This\ncan be extremely useful for bridging non-RAC code into the world of signals.\n\nFor example, instead of handling application logic in block callbacks, the\nblocks can simply send events to the observer. Meanwhile, the signal\ncan be returned, hiding the implementation detail of the callbacks.\n\n## Signal Producers\n\nA **signal producer**, represented by the [`SignalProducer`][SignalProducer] type, creates\n[signals](#signals) and performs side effects.\n\nThey can be used to represent operations or tasks, like network\nrequests, where each invocation of `start()` will create a new underlying\noperation, and allow the caller to observe the result(s). The\n`startWithSignal()` variant gives access to the produced signal, allowing it to\nbe observed multiple times if desired.\n\nBecause of the behavior of `start()`, each signal created from the same\nproducer may see a different ordering or version of events, or the stream might\neven be completely different! Unlike a plain signal, no work is started (and\nthus no events are generated) until an observer is attached, and the work is\nrestarted anew for each additional observer.\n\nStarting a signal producer returns a [disposable](#disposables) that can be used to\ninterrupt/cancel the work associated with the produced signal.\n\nJust like signals, signal producers can also be manipulated via primitives\nlike `map`, `filter`, etc.\nEvery signal primitive can be “lifted” to operate upon signal producers instead,\nusing the `lift` method.\nFurthermore, there are additional primitives that control _when_ and _how_ work\nis started—for example, `times`.\n\n### Buffers\n\nA **buffer**, created by `SignalProducer.buffer()`, is a (optionally bounded)\nqueue for [events](#events) that replays those events when new\n[signals](#signals) are created from the producer.\n\nSimilar to a [pipe](#pipes), the method returns an [observer](#observers).\nEvents sent to this observer will be added to the queue. If the buffer is already\nat capacity when a new value arrives, the earliest (oldest) value will be\ndropped to make room for it.\n\n## Observers\n\nAn **observer** is anything that is waiting or capable of waiting for [events](#events)\nfrom a [signal](#signals). Within RAC, an observer is represented as\nan [`Observer`][Observer] that accepts [`Event`][Event] values.\n\nObservers can be implicitly created by using the callback-based versions of the\n`Signal.observe` or `SignalProducer.start` methods.\n\n## Actions\n\nAn **action**, represented by the [`Action`][Action] type, will do some work when\nexecuted with an input. While executing, zero or more output values and/or a\nfailure may be generated.\n\nActions are useful for performing side-effecting work upon user interaction, like when a button is\nclicked. Actions can also be automatically disabled based on a [property](#properties), and this\ndisabled state can be represented in a UI by disabling any controls associated\nwith the action.\n\nFor interaction with `NSControl` or `UIControl`, RAC provides the\n[`CocoaAction`][CocoaAction] type for bridging actions to Objective-C.\n\n## Properties\n\nA **property**, represented by the [`PropertyType`][Property] protocol,\nstores a value and notifies observers about future changes to that value.\n\nThe current value of a property can be obtained from the `value` getter. The\n`producer` getter returns a [signal producer](#signal-producers) that will send\nthe property’s current value, followed by all changes over time.\n\nThe `<~` operator can be used to bind properties in different ways. Note that in\nall cases, the target has to be a [`MutablePropertyType`][Property].\n\n* `property <~ signal` binds a [signal](#signals) to the property, updating the\n  property’s value to the latest value sent by the signal.\n* `property <~ producer` starts the given [signal producer](#signal-producers),\n  and binds the property’s value to the latest value sent on the started signal.\n* `property <~ otherProperty` binds one property to another, so that the destination\n  property’s value is updated whenever the source property is updated.\n\nThe [`DynamicProperty`][Property] type can be used to bridge to Objective-C APIs\nthat require Key-Value Coding (KVC) or Key-Value Observing (KVO), like\n`NSOperation`. Note that most AppKit and UIKit properties do _not_ support KVO,\nso their changes should be observed through other mechanisms.\n[`MutableProperty`][Property] should be preferred over dynamic properties\nwhenever possible!\n\n## Disposables\n\nA **disposable**, represented by the [`Disposable`][Disposable] protocol, is a mechanism\nfor memory management and cancellation.\n\nWhen starting a [signal producer](#signal-producers), a disposable will be returned.\nThis disposable can be used by the caller to cancel the work that has been started\n(e.g. background processing, network requests, etc.), clean up all temporary\nresources, then send a final `Interrupted` event upon the particular\n[signal](#signals) that was created.\n\nObserving a [signal](#signals) may also return a disposable. Disposing it will\nprevent the observer from receiving any future events from that signal, but it\nwill not have any effect on the signal itself.\n\nFor more information about cancellation, see the RAC [Design Guidelines][].\n\n## Schedulers\n\nA **scheduler**, represented by the [`SchedulerType`][Scheduler] protocol, is a\nserial execution queue to perform work or deliver results upon.\n\n[Signals](#signals) and [signal producers](#signal-producers) can be ordered to\ndeliver events on a specific scheduler. [Signal producers](#signal-producers)\ncan additionally be ordered to start their work on a specific scheduler.\n\nSchedulers are similar to Grand Central Dispatch queues, but schedulers support\ncancellation (via [disposables](#disposables)), and always execute serially.\nWith the exception of the [`ImmediateScheduler`][Scheduler], schedulers do not\noffer synchronous execution. This helps avoid deadlocks, and encourages the use\nof [signal and signal producer primitives][BasicOperators] instead of blocking work.\n\nSchedulers are also somewhat similar to `NSOperationQueue`, but schedulers\ndo not allow tasks to be reordered or depend on one another.\n\n\n[Design Guidelines]: DesignGuidelines.md\n[BasicOperators]: BasicOperators.md\n[README]: ../README.md\n[Signal]: ../ReactiveCocoa/Swift/Signal.swift\n[SignalProducer]: ../ReactiveCocoa/Swift/SignalProducer.swift\n[Action]: ../ReactiveCocoa/Swift/Action.swift\n[CocoaAction]: ../ReactiveCocoa/Swift/Action.swift\n[Disposable]: ../ReactiveCocoa/Swift/Disposable.swift\n[Scheduler]: ../ReactiveCocoa/Swift/Scheduler.swift\n[Property]: ../ReactiveCocoa/Swift/Property.swift\n[Event]: ../ReactiveCocoa/Swift/Event.swift\n[Observer]: ../ReactiveCocoa/Swift/Observer.swift\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Documentation/Legacy/BasicOperators.md",
    "content": "# Basic Operators\n\nThis document explains some of the most common operators used in ReactiveCocoa,\nand includes examples demonstrating their use.\n\nOperators that apply to [sequences][Sequences] _and_ [signals][Signals] are\nknown as [stream][Streams] operators.\n\n**[Performing side effects with signals](#performing-side-effects-with-signals)**\n\n 1. [Subscription](#subscription)\n 1. [Injecting effects](#injecting-effects)\n\n**[Transforming streams](#transforming-streams)**\n\n 1. [Mapping](#mapping)\n 1. [Filtering](#filtering)\n\n**[Combining streams](#combining-streams)**\n\n 1. [Concatenating](#concatenating)\n 1. [Flattening](#flattening)\n 1. [Mapping and flattening](#mapping-and-flattening)\n\n**[Combining signals](#combining-signals)**\n\n 1. [Sequencing](#sequencing)\n 1. [Merging](#merging)\n 1. [Combining latest values](#combining-latest-values)\n 1. [Switching](#switching)\n\n## Performing side effects with signals\n\nMost signals start out \"cold,\" which means that they will not do any work until\n[subscription](#subscription).\n\nUpon subscription, a signal or its [subscribers][Subscription] can perform _side\neffects_, like logging to the console, making a network request, updating the\nuser interface, etc.\n\nSide effects can also be [injected](#injecting-effects) into a signal, where\nthey won't be performed immediately, but will instead take effect with each\nsubscription later.\n\n### Subscription\n\nThe [-subscribe…][RACSignal] methods give you access to the current and future values in a signal:\n\n```objc\nRACSignal *letters = [@\"A B C D E F G H I\" componentsSeparatedByString:@\" \"].rac_sequence.signal;\n\n// Outputs: A B C D E F G H I\n[letters subscribeNext:^(NSString *x) {\n    NSLog(@\"%@\", x);\n}];\n```\n\nFor a cold signal, side effects will be performed once _per subscription_:\n\n```objc\n__block unsigned subscriptions = 0;\n\nRACSignal *loggingSignal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n    subscriptions++;\n    [subscriber sendCompleted];\n    return nil;\n}];\n\n// Outputs:\n// subscription 1\n[loggingSignal subscribeCompleted:^{\n    NSLog(@\"subscription %u\", subscriptions);\n}];\n\n// Outputs:\n// subscription 2\n[loggingSignal subscribeCompleted:^{\n    NSLog(@\"subscription %u\", subscriptions);\n}];\n```\n\nThis behavior can be changed using a [connection][Connections].\n\n### Injecting effects\n\nThe [-do…][RACSignal+Operations] methods add side effects to a signal without actually\nsubscribing to it:\n\n```objc\n__block unsigned subscriptions = 0;\n\nRACSignal *loggingSignal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n    subscriptions++;\n    [subscriber sendCompleted];\n    return nil;\n}];\n\n// Does not output anything yet\nloggingSignal = [loggingSignal doCompleted:^{\n    NSLog(@\"about to complete subscription %u\", subscriptions);\n}];\n\n// Outputs:\n// about to complete subscription 1\n// subscription 1\n[loggingSignal subscribeCompleted:^{\n    NSLog(@\"subscription %u\", subscriptions);\n}];\n```\n\n## Transforming streams\n\nThese operators transform a single stream into a new stream.\n\n### Mapping\n\nThe [-map:][RACStream] method is used to transform the values in a stream, and\ncreate a new stream with the results:\n\n```objc\nRACSequence *letters = [@\"A B C D E F G H I\" componentsSeparatedByString:@\" \"].rac_sequence;\n\n// Contains: AA BB CC DD EE FF GG HH II\nRACSequence *mapped = [letters map:^(NSString *value) {\n    return [value stringByAppendingString:value];\n}];\n```\n\n### Filtering\n\nThe [-filter:][RACStream] method uses a block to test each value, including it\ninto the resulting stream only if the test passes:\n\n```objc\nRACSequence *numbers = [@\"1 2 3 4 5 6 7 8 9\" componentsSeparatedByString:@\" \"].rac_sequence;\n\n// Contains: 2 4 6 8\nRACSequence *filtered = [numbers filter:^ BOOL (NSString *value) {\n    return (value.intValue % 2) == 0;\n}];\n```\n\n## Combining streams\n\nThese operators combine multiple streams into a single new stream.\n\n### Concatenating\n\nThe [-concat:][RACStream] method appends one stream's values to another:\n\n```objc\nRACSequence *letters = [@\"A B C D E F G H I\" componentsSeparatedByString:@\" \"].rac_sequence;\nRACSequence *numbers = [@\"1 2 3 4 5 6 7 8 9\" componentsSeparatedByString:@\" \"].rac_sequence;\n\n// Contains: A B C D E F G H I 1 2 3 4 5 6 7 8 9\nRACSequence *concatenated = [letters concat:numbers];\n```\n\n### Flattening\n\nThe [-flatten][RACStream] operator is applied to a stream-of-streams, and\ncombines their values into a single new stream.\n\nSequences are [concatenated](#concatenating):\n\n```objc\nRACSequence *letters = [@\"A B C D E F G H I\" componentsSeparatedByString:@\" \"].rac_sequence;\nRACSequence *numbers = [@\"1 2 3 4 5 6 7 8 9\" componentsSeparatedByString:@\" \"].rac_sequence;\nRACSequence *sequenceOfSequences = @[ letters, numbers ].rac_sequence;\n\n// Contains: A B C D E F G H I 1 2 3 4 5 6 7 8 9\nRACSequence *flattened = [sequenceOfSequences flatten];\n```\n\nSignals are [merged](#merging):\n\n```objc\nRACSubject *letters = [RACSubject subject];\nRACSubject *numbers = [RACSubject subject];\nRACSignal *signalOfSignals = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n    [subscriber sendNext:letters];\n    [subscriber sendNext:numbers];\n    [subscriber sendCompleted];\n    return nil;\n}];\n\nRACSignal *flattened = [signalOfSignals flatten];\n\n// Outputs: A 1 B C 2\n[flattened subscribeNext:^(NSString *x) {\n    NSLog(@\"%@\", x);\n}];\n\n[letters sendNext:@\"A\"];\n[numbers sendNext:@\"1\"];\n[letters sendNext:@\"B\"];\n[letters sendNext:@\"C\"];\n[numbers sendNext:@\"2\"];\n```\n\n### Mapping and flattening\n\n[Flattening](#flattening) isn't that interesting on its own, but understanding\nhow it works is important for [-flattenMap:][RACStream].\n\n`-flattenMap:` is used to transform each of a stream's values into _a new\nstream_. Then, all of the streams returned will be flattened down into a single\nstream. In other words, it's [-map:](#mapping) followed by [-flatten](#flattening).\n\nThis can be used to extend or edit sequences:\n\n```objc\nRACSequence *numbers = [@\"1 2 3 4 5 6 7 8 9\" componentsSeparatedByString:@\" \"].rac_sequence;\n\n// Contains: 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9\nRACSequence *extended = [numbers flattenMap:^(NSString *num) {\n    return @[ num, num ].rac_sequence;\n}];\n\n// Contains: 1_ 3_ 5_ 7_ 9_\nRACSequence *edited = [numbers flattenMap:^(NSString *num) {\n    if (num.intValue % 2 == 0) {\n        return [RACSequence empty];\n    } else {\n        NSString *newNum = [num stringByAppendingString:@\"_\"];\n        return [RACSequence return:newNum]; \n    }\n}];\n```\n\nOr create multiple signals of work which are automatically recombined:\n\n```objc\nRACSignal *letters = [@\"A B C D E F G H I\" componentsSeparatedByString:@\" \"].rac_sequence.signal;\n\n[[letters\n    flattenMap:^(NSString *letter) {\n        return [database saveEntriesForLetter:letter];\n    }]\n    subscribeCompleted:^{\n        NSLog(@\"All database entries saved successfully.\");\n    }];\n```\n\n## Combining signals\n\nThese operators combine multiple signals into a single new [RACSignal][].\n\n### Sequencing\n\n[-then:][RACSignal+Operations] starts the original signal,\nwaits for it to complete, and then only forwards the values from a new signal:\n\n```objc\nRACSignal *letters = [@\"A B C D E F G H I\" componentsSeparatedByString:@\" \"].rac_sequence.signal;\n\n// The new signal only contains: 1 2 3 4 5 6 7 8 9\n//\n// But when subscribed to, it also outputs: A B C D E F G H I\nRACSignal *sequenced = [[letters\n    doNext:^(NSString *letter) {\n        NSLog(@\"%@\", letter);\n    }]\n    then:^{\n        return [@\"1 2 3 4 5 6 7 8 9\" componentsSeparatedByString:@\" \"].rac_sequence.signal;\n    }];\n```\n\nThis is most useful for executing all the side effects of one signal, then\nstarting another, and only returning the second signal's values.\n\n### Merging\n\nThe [+merge:][RACSignal+Operations] method will forward the values from many\nsignals into a single stream, as soon as those values arrive:\n\n```objc\nRACSubject *letters = [RACSubject subject];\nRACSubject *numbers = [RACSubject subject];\nRACSignal *merged = [RACSignal merge:@[ letters, numbers ]];\n\n// Outputs: A 1 B C 2\n[merged subscribeNext:^(NSString *x) {\n    NSLog(@\"%@\", x);\n}];\n\n[letters sendNext:@\"A\"];\n[numbers sendNext:@\"1\"];\n[letters sendNext:@\"B\"];\n[letters sendNext:@\"C\"];\n[numbers sendNext:@\"2\"];\n```\n\n### Combining latest values\n\nThe [+combineLatest:][RACSignal+Operations] and `+combineLatest:reduce:` methods\nwill watch multiple signals for changes, and then send the latest values from\n_all_ of them when a change occurs:\n\n```objc\nRACSubject *letters = [RACSubject subject];\nRACSubject *numbers = [RACSubject subject];\nRACSignal *combined = [RACSignal\n    combineLatest:@[ letters, numbers ]\n    reduce:^(NSString *letter, NSString *number) {\n        return [letter stringByAppendingString:number];\n    }];\n\n// Outputs: B1 B2 C2 C3\n[combined subscribeNext:^(id x) {\n    NSLog(@\"%@\", x);\n}];\n\n[letters sendNext:@\"A\"];\n[letters sendNext:@\"B\"];\n[numbers sendNext:@\"1\"];\n[numbers sendNext:@\"2\"];\n[letters sendNext:@\"C\"];\n[numbers sendNext:@\"3\"];\n```\n\nNote that the combined signal will only send its first value when all of the\ninputs have sent at least one. In the example above, `@\"A\"` was never\nforwarded because `numbers` had not sent a value yet.\n\n### Switching\n\nThe [-switchToLatest][RACSignal+Operations] operator is applied to\na signal-of-signals, and always forwards the values from the latest signal:\n\n```objc\nRACSubject *letters = [RACSubject subject];\nRACSubject *numbers = [RACSubject subject];\nRACSubject *signalOfSignals = [RACSubject subject];\n\nRACSignal *switched = [signalOfSignals switchToLatest];\n\n// Outputs: A B 1 D\n[switched subscribeNext:^(NSString *x) {\n    NSLog(@\"%@\", x);\n}];\n\n[signalOfSignals sendNext:letters];\n[letters sendNext:@\"A\"];\n[letters sendNext:@\"B\"];\n\n[signalOfSignals sendNext:numbers];\n[letters sendNext:@\"C\"];\n[numbers sendNext:@\"1\"];\n\n[signalOfSignals sendNext:letters];\n[numbers sendNext:@\"2\"];\n[letters sendNext:@\"D\"];\n```\n\n[Connections]: FrameworkOverview.md#connections\n[RACSequence]: ../../ReactiveCocoa/Objective-C/RACSequence.h\n[RACSignal]: ../../ReactiveCocoa/Objective-C/RACSignal.h\n[RACSignal+Operations]: ../../ReactiveCocoa/Objective-C/RACSignal+Operations.h\n[RACStream]: ../../ReactiveCocoa/Objective-C/RACStream.h\n[Sequences]: FrameworkOverview.md#sequences\n[Signals]: FrameworkOverview.md#signals\n[Streams]: FrameworkOverview.md#streams\n[Subscription]: FrameworkOverview.md#subscription\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Documentation/Legacy/DesignGuidelines.md",
    "content": "# Design Guidelines\n\nThis document contains guidelines for projects that want to make use of\nReactiveCocoa. The content here is heavily inspired by the [Rx Design\nGuidelines](http://blogs.msdn.com/b/rxteam/archive/2010/10/28/rx-design-guidelines.aspx).\n\nThis document assumes basic familiarity\nwith the features of ReactiveCocoa. The [Framework Overview][] is a better\nresource for getting up to speed on the functionality provided by RAC.\n\n**[The RACSequence contract](#the-racsequence-contract)**\n\n 1. [Evaluation occurs lazily by default](#evaluation-occurs-lazily-by-default)\n 1. [Evaluation blocks the caller](#evaluation-blocks-the-caller)\n 1. [Side effects occur only once](#side-effects-occur-only-once)\n\n**[The RACSignal contract](#the-racsignal-contract)**\n\n 1. [Signal events are serialized](#signal-events-are-serialized)\n 1. [Subscription will always occur on a scheduler](#subscription-will-always-occur-on-a-scheduler)\n 1. [Errors are propagated immediately](#errors-are-propagated-immediately)\n 1. [Side effects occur for each subscription](#side-effects-occur-for-each-subscription)\n 1. [Subscriptions are automatically disposed upon completion or error](#subscriptions-are-automatically-disposed-upon-completion-or-error)\n 1. [Disposal cancels in-progress work and cleans up resources](#disposal-cancels-in-progress-work-and-cleans-up-resources)\n\n**[Best practices](#best-practices)**\n\n 1. [Use descriptive declarations for methods and properties that return a signal](#use-descriptive-declarations-for-methods-and-properties-that-return-a-signal)\n 1. [Indent stream operations consistently](#indent-stream-operations-consistently)\n 1. [Use the same type for all the values of a stream](#use-the-same-type-for-all-the-values-of-a-stream)\n 1. [Avoid retaining streams for too long](#avoid-retaining-streams-for-too-long)\n 1. [Process only as much of a stream as needed](#process-only-as-much-of-a-stream-as-needed)\n 1. [Deliver signal events onto a known scheduler](#deliver-signal-events-onto-a-known-scheduler)\n 1. [Switch schedulers in as few places as possible](#switch-schedulers-in-as-few-places-as-possible)\n 1. [Make the side effects of a signal explicit](#make-the-side-effects-of-a-signal-explicit)\n 1. [Share the side effects of a signal by multicasting](#share-the-side-effects-of-a-signal-by-multicasting)\n 1. [Debug streams by giving them names](#debug-streams-by-giving-them-names)\n 1. [Avoid explicit subscriptions and disposal](#avoid-explicit-subscriptions-and-disposal)\n 1. [Avoid using subjects when possible](#avoid-using-subjects-when-possible)\n\n**[Implementing new operators](#implementing-new-operators)**\n\n 1. [Prefer building on RACStream methods](#prefer-building-on-racstream-methods)\n 1. [Compose existing operators when possible](#compose-existing-operators-when-possible)\n 1. [Avoid introducing concurrency](#avoid-introducing-concurrency)\n 1. [Cancel work and clean up all resources in a disposable](#cancel-work-and-clean-up-all-resources-in-a-disposable)\n 1. [Do not block in an operator](#do-not-block-in-an-operator)\n 1. [Avoid stack overflow from deep recursion](#avoid-stack-overflow-from-deep-recursion)\n\n## The RACSequence contract\n\n[RACSequence][] is a _pull-driven_ stream. Sequences behave similarly to\nbuilt-in collections, but with a few unique twists.\n\n### Evaluation occurs lazily by default\n\nSequences are evaluated lazily by default. For example, in this sequence:\n\n```objc\nNSArray *strings = @[ @\"A\", @\"B\", @\"C\" ];\nRACSequence *sequence = [strings.rac_sequence map:^(NSString *str) {\n    return [str stringByAppendingString:@\"_\"];\n}];\n```\n\n… no string appending is actually performed until the values of the sequence are\nneeded. Accessing `sequence.head` will perform the concatenation of `A_`,\naccessing `sequence.tail.head` will perform the concatenation of `B_`, and so\non.\n\nThis generally avoids performing unnecessary work (since values that are never\nused are never calculated), but means that sequence processing [should be\nlimited only to what's actually\nneeded](#process-only-as-much-of-a-stream-as-needed).\n\nOnce evaluated, the values in a sequence are memoized and do not need to be\nrecalculated. Accessing `sequence.head` multiple times will only do the work of\none string concatenation.\n\nIf lazy evaluation is undesirable – for instance, because limiting memory usage\nis more important than avoiding unnecessary work – the\n[eagerSequence][RACSequence] property can be used to force a sequence (and any\nsequences derived from it afterward) to evaluate eagerly.\n\n### Evaluation blocks the caller\n\nRegardless of whether a sequence is lazy or eager, evaluation of any part of\na sequence will block the calling thread until completed. This is necessary\nbecause values must be synchronously retrieved from a sequence.\n\nIf evaluating a sequence is expensive enough that it might block the thread for\na significant amount of time, consider creating a signal with\n[-signalWithScheduler:][RACSequence] and using that instead.\n\n### Side effects occur only once\n\nWhen the block passed to a sequence operator involves side effects, it is\nimportant to realize that those side effects will only occur once per value\n– namely, when the value is evaluated:\n\n```objc\nNSArray *strings = @[ @\"A\", @\"B\", @\"C\" ];\nRACSequence *sequence = [strings.rac_sequence map:^(NSString *str) {\n    NSLog(@\"%@\", str);\n    return [str stringByAppendingString:@\"_\"];\n}];\n\n// Logs \"A\" during this call.\nNSString *concatA = sequence.head;\n\n// Logs \"B\" during this call.\nNSString *concatB = sequence.tail.head;\n\n// Does not log anything.\nNSString *concatB2 = sequence.tail.head;\n\nRACSequence *derivedSequence = [sequence map:^(NSString *str) {\n    return [@\"_\" stringByAppendingString:str];\n}];\n\n// Still does not log anything, because \"B_\" was already evaluated, and the log\n// statement associated with it will never be re-executed.\nNSString *concatB3 = derivedSequence.tail.head;\n```\n\n## The RACSignal contract\n\n[RACSignal][] is a _push-driven_ stream with a focus on asynchronous event\ndelivery through _subscriptions_. For more information about signals and\nsubscriptions, see the [Framework Overview][].\n\n### Signal events are serialized\n\nA signal may choose to deliver its events on any thread. Consecutive events are\neven allowed to arrive on different threads or schedulers, unless explicitly\n[delivered onto a particular\nscheduler](#deliver-signal-events-onto-a-known-scheduler).\n\nHowever, RAC guarantees that no two signal events will ever arrive concurrently.\nWhile an event is being processed, no other events will be delivered. The\nsenders of any other events will be forced to wait until the current event has\nbeen handled.\n\nMost notably, this means that the blocks passed to\n[-subscribeNext:error:completed:][RACSignal] do not need to be synchronized with\nrespect to each other, because they will never be invoked simultaneously.\n\n### Subscription will always occur on a scheduler\n\nTo ensure consistent behavior for the `+createSignal:` and `-subscribe:`\nmethods, each [RACSignal][] subscription is guaranteed to take place on\na valid [RACScheduler][].\n\nIf the subscriber's thread already has a [+currentScheduler][RACScheduler],\nscheduling takes place immediately; otherwise, scheduling occurs as soon as\npossible on a background scheduler. Note that the main thread is always\nassociated with the [+mainThreadScheduler][RACScheduler], so subscription will\nalways be immediate there.\n\nSee the documentation for [-subscribe:][RACSignal] for more information.\n\n### Errors are propagated immediately\n\nIn RAC, `error` events have exception semantics. When an error is sent on\na signal, it will be immediately forwarded to all dependent signals, causing the\nentire chain to terminate.\n\n[Operators][RACSignal+Operations] whose primary purpose is to change\nerror-handling behavior – like `-catch:`, `-catchTo:`, or `-materialize` – are\nobviously not subject to this rule.\n\n### Side effects occur for each subscription\n\nEach new subscription to a [RACSignal][] will trigger its side effects. This\nmeans that any side effects will happen as many times as subscriptions to the\nsignal itself.\n\nConsider this example:\n```objc\n__block int aNumber = 0;\n\n// Signal that will have the side effect of incrementing `aNumber` block \n// variable for each subscription before sending it.\nRACSignal *aSignal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\taNumber++;\n\t[subscriber sendNext:@(aNumber)];\n\t[subscriber sendCompleted];\n\treturn nil;\n}];\n\n// This will print \"subscriber one: 1\"\n[aSignal subscribeNext:^(id x) {\n\tNSLog(@\"subscriber one: %@\", x);\n}];\n\n// This will print \"subscriber two: 2\"\n[aSignal subscribeNext:^(id x) {\n\tNSLog(@\"subscriber two: %@\", x);\n}];\n```\n\nSide effects are repeated for each subscription. The same applies to\n[stream][RACStream] and [signal][RACSignal+Operations] operators:\n\n```objc\n__block int missilesToLaunch = 0;\n\n// Signal that will have the side effect of changing `missilesToLaunch` on\n// subscription.\nRACSignal *processedSignal = [[RACSignal\n    return:@\"missiles\"]\n\tmap:^(id x) {\n\t\tmissilesToLaunch++;\n\t\treturn [NSString stringWithFormat:@\"will launch %d %@\", missilesToLaunch, x];\n\t}];\n\n// This will print \"First will launch 1 missiles\"\n[processedSignal subscribeNext:^(id x) {\n\tNSLog(@\"First %@\", x);\n}];\n\n// This will print \"Second will launch 2 missiles\"\n[processedSignal subscribeNext:^(id x) {\n\tNSLog(@\"Second %@\", x);\n}];\n```\n\nTo suppress this behavior and have multiple subscriptions to a signal execute\nits side effects only once, a signal can be \n[multicasted](#share-the-side-effects-of-a-signal-by-multicasting).\n\nSide effects can be insidious and produce problems that are difficult to\ndiagnose. For this reason it is suggested to \n[make side effects explicit](#make-the-side-effects-of-a-signal-explicit) when \npossible.\n\n### Subscriptions are automatically disposed upon completion or error\n\nWhen a [subscriber][RACSubscriber] is sent a `completed` or `error` event, the\nassociated subscription will automatically be disposed. This behavior usually\neliminates the need to manually dispose of subscriptions.\n\nSee the [Memory Management][] document for more information about signal\nlifetime.\n\n### Disposal cancels in-progress work and cleans up resources\n\nWhen a subscription is disposed, manually or automatically, any in-progress or\noutstanding work associated with that subscription is gracefully cancelled as\nsoon as possible, and any resources associated with the subscription are cleaned\nup.\n\nDisposing of the subscription to a signal representing a file upload, for\nexample, would cancel any in-flight network request, and free the file data from\nmemory.\n\n## Best practices\n\nThe following recommendations are intended to help keep RAC-based code\npredictable, understandable, and performant.\n\nThey are, however, only guidelines. Use best judgement when determining whether\nto apply the recommendations here to a given piece of code.\n\n### Use descriptive declarations for methods and properties that return a signal\n\nWhen a method or property has a return type of [RACSignal][], it can be\ndifficult to understand the signal's semantics at a glance.\n\nThere are three key questions that can inform a declaration:\n\n 1. Is the signal _hot_ (already activated by the time it's returned to the\n    caller) or _cold_ (activated when subscribed to)?\n 1. Will the signal include zero, one, or more values?\n 1. Does the signal have side effects?\n\n**Hot signals without side effects** should typically be properties instead of\nmethods. The use of a property indicates that no initialization is needed before\nsubscribing to the signal's events, and that additional subscribers will not\nchange the semantics. Signal properties should usually be named after events\n(e.g., `textChanged`).\n\n**Cold signals without side effects** should be returned from methods that have\nnoun-like names (e.g., `-currentText`). A method declaration indicates that the\nsignal might not be kept around, hinting that work is performed at the time of\nsubscription. If the signal sends multiple values, the noun should be pluralized\n(e.g., `-currentModels`).\n\n**Signals with side effects** should be returned from methods that have\nverb-like names (e.g., `-logIn`). The verb indicates that the method is not\nidempotent and that callers must be careful to call it only when the side\neffects are desired. If the signal will send one or more values, include a noun\nthat describes them (e.g., `-loadConfiguration`, `-fetchLatestEvents`).\n\n### Indent stream operations consistently\n\nIt's easy for stream-heavy code to become very dense and confusing if not\nproperly formatted. Use consistent indentation to highlight where chains of\nstreams begin and end.\n\nWhen invoking a single method upon a stream, no additional indentation is\nnecessary (block arguments aside):\n\n```objc\nRACStream *result = [stream startWith:@0];\n\nRACStream *result2 = [stream map:^(NSNumber *value) {\n    return @(value.integerValue + 1);\n}];\n```\n\nWhen transforming the same stream multiple times, ensure that all of the\nsteps are aligned. Complex operators like [+zip:reduce:][RACStream] or\n[+combineLatest:reduce:][RACSignal+Operations] may be split over multiple lines\nfor readability:\n\n```objc\nRACStream *result = [[[RACStream\n    zip:@[ firstStream, secondStream ]\n    reduce:^(NSNumber *first, NSNumber *second) {\n        return @(first.integerValue + second.integerValue);\n    }]\n    filter:^ BOOL (NSNumber *value) {\n        return value.integerValue >= 0;\n    }]\n    map:^(NSNumber *value) {\n        return @(value.integerValue + 1);\n    }];\n```\n\nOf course, streams nested within block arguments should start at the natural\nindentation of the block:\n\n```objc\n[[signal\n    then:^{\n        @strongify(self);\n\n        return [[self\n            doSomethingElse]\n            catch:^(NSError *error) {\n                @strongify(self);\n                [self presentError:error];\n\n                return [RACSignal empty];\n            }];\n    }]\n    subscribeCompleted:^{\n        NSLog(@\"All done.\");\n    }];\n```\n\n### Use the same type for all the values of a stream\n\n[RACStream][] (and, by extension, [RACSignal][] and [RACSequence][]) allows\nstreams to be composed of heterogenous objects, just like Cocoa collections do.\nHowever, using different object types within the same stream complicates the use\nof operators and\nputs an additional burden on any consumers of that stream, who must be careful to\nonly invoke supported methods.\n\nWhenever possible, streams should only contain objects of the same type.\n\n### Avoid retaining streams for too long\n\nRetaining any [RACStream][] longer than it's needed will cause any dependencies\nto be retained as well, potentially keeping memory usage much higher than it\nwould be otherwise.\n\nA [RACSequence][] should be retained only for as long as the `head` of the\nsequence is needed. If the head will no longer be used, retain the `tail` of the\nnode instead of the node itself.\n\nSee the [Memory Management][] guide for more information on object lifetime.\n\n### Process only as much of a stream as needed\n\nAs well as [consuming additional\nmemory](#avoid-retaining-streams-for-too-long), unnecessarily\nkeeping a stream or [RACSignal][] subscription alive can result in increased CPU\nusage, as unnecessary work is performed for results that will never be used.\n\nIf only a certain number of values are needed from a stream, the\n[-take:][RACStream] operator can be used to retrieve only that many values, and\nthen automatically terminate the stream immediately thereafter.\n\nOperators like `-take:` and [-takeUntil:][RACSignal+Operations] automatically propagate cancellation\nup the stack as well. If nothing else needs the rest of the values, any\ndependencies will be terminated too, potentially saving a significant amount of\nwork.\n\n### Deliver signal events onto a known scheduler\n\nWhen a signal is returned from a method, or combined with such a signal, it can\nbe difficult to know which thread events will be delivered upon. Although\nevents are [guaranteed to be serial](#signal-events-are-serialized), sometimes\nstronger guarantees are needed, like when performing UI updates (which must\noccur on the main thread).\n\nWhenever such a guarantee is important, the [-deliverOn:][RACSignal+Operations]\noperator should be used to force a signal's events to arrive on a specific\n[RACScheduler][].\n\n### Switch schedulers in as few places as possible\n\nNotwithstanding the above, events should only be delivered to a specific\n[scheduler][RACScheduler] when absolutely necessary. Switching schedulers can\nintroduce unnecessary delays and cause an increase in CPU load.\n\nGenerally, the use of [-deliverOn:][RACSignal+Operations] should be restricted\nto the end of a signal chain – e.g., before subscription, or before the values\nare bound to a property.\n\n### Make the side effects of a signal explicit\n\nAs much as possible, [RACSignal][] side effects should be avoided, because\nsubscribers may find the [behavior of side\neffects](#side-effects-occur-for-each-subscription) unexpected.\n\nHowever, because Cocoa is predominantly imperative, it is sometimes useful to\nperform side effects when signal events occur. Although most [RACStream][] and\n[RACSignal][RACSignal+Operations] operators accept arbitrary blocks (which can\ncontain side effects), the use of `-doNext:`, `-doError:`, and `-doCompleted:`\nwill make side effects more explicit and self-documenting:\n\n```objc\nNSMutableArray *nexts = [NSMutableArray array];\n__block NSError *receivedError = nil;\n__block BOOL success = NO;\n\nRACSignal *bookkeepingSignal = [[[valueSignal\n    doNext:^(id x) {\n        [nexts addObject:x];\n    }]\n    doError:^(NSError *error) {\n        receivedError = error;\n    }]\n    doCompleted:^{\n        success = YES;\n    }];\n\nRAC(self, value) = bookkeepingSignal;\n```\n\n### Share the side effects of a signal by multicasting\n\n[Side effects occur for each\nsubscription](#side-effects-occur-for-each-subscription) by default, but there\nare certain situations where side effects should only occur once – for example,\na network request typically should not be repeated when a new subscriber is\nadded.\n\nThe `-publish` and `-multicast:` operators of [RACSignal][RACSignal+Operations]\nallow a single subscription to be shared to any number of subscribers by using\na [RACMulticastConnection][]:\n\n```objc\n// This signal starts a new request on each subscription.\nRACSignal *networkRequest = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n    AFHTTPRequestOperation *operation = [client\n        HTTPRequestOperationWithRequest:request\n        success:^(AFHTTPRequestOperation *operation, id response) {\n            [subscriber sendNext:response];\n            [subscriber sendCompleted];\n        }\n        failure:^(AFHTTPRequestOperation *operation, NSError *error) {\n            [subscriber sendError:error];\n        }];\n\n    [client enqueueHTTPRequestOperation:operation];\n    return [RACDisposable disposableWithBlock:^{\n        [operation cancel];\n    }];\n}];\n\n// Starts a single request, no matter how many subscriptions `connection.signal`\n// gets. This is equivalent to the -replay operator, or similar to\n// +startEagerlyWithScheduler:block:.\nRACMulticastConnection *connection = [networkRequest multicast:[RACReplaySubject subject]];\n[connection connect];\n\n[connection.signal subscribeNext:^(id response) {\n    NSLog(@\"subscriber one: %@\", response);\n}];\n\n[connection.signal subscribeNext:^(id response) {\n    NSLog(@\"subscriber two: %@\", response);\n}];\n```\n\n### Debug streams by giving them names\n\nEvery [RACStream][] has a `name` property to assist with debugging. A stream's\n`-description` includes its name, and all operators provided by RAC will\nautomatically add to the name. This usually makes it possible to identify\na stream from its default name alone.\n\nFor example, this snippet:\n\n```objc\nRACSignal *signal = [[[RACObserve(self, username) \n    distinctUntilChanged] \n    take:3] \n    filter:^(NSString *newUsername) {\n        return [newUsername isEqualToString:@\"joshaber\"];\n    }];\n\nNSLog(@\"%@\", signal);\n```\n\n… would log a name similar to `[[[RACObserve(self, username)] -distinctUntilChanged]\n-take: 3] -filter:`.\n\nNames can also be manually applied by using [-setNameWithFormat:][RACStream].\n\n[RACSignal][] also offers `-logNext`, `-logError`,\n`-logCompleted`, and `-logAll` methods, which will automatically log signal\nevents as they occur, and include the name of the signal in the messages. This\ncan be used to conveniently inspect a signal in real-time.\n\n### Avoid explicit subscriptions and disposal\n\nAlthough [-subscribeNext:error:completed:][RACSignal] and its variants are the\nmost basic way to process a signal, their use can complicate code by\nbeing less declarative, encouraging the use of side effects, and potentially\nduplicating built-in functionality.\n\nLikewise, explicit use of the [RACDisposable][] class can quickly lead to\na rat's nest of resource management and cleanup code.\n\nThere are almost always higher-level patterns that can be used instead of manual\nsubscriptions and disposal:\n\n * The [RAC()][RAC] or [RACChannelTo()][RACChannelTo] macros can be used to bind\n   a signal to a property, instead of performing manual updates when changes\n   occur.\n * The [-rac_liftSelector:withSignals:][NSObject+RACLifting] method can be used\n   to automatically invoke a selector when one or more signals fire.\n * Operators like [-takeUntil:][RACSignal+Operations] can be used to\n   automatically dispose of a subscription when an event occurs (like a \"Cancel\"\n   button being pressed in the UI).\n\nGenerally, the use of built-in [stream][RACStream] and\n[signal][RACSignal+Operations] operators will lead to simpler and less\nerror-prone code than replicating the same behaviors in a subscription callback.\n\n### Avoid using subjects when possible\n\n[Subjects][] are a powerful tool for bridging imperative code\ninto the world of signals, but, as the \"mutable variables\" of RAC, they can\nquickly lead to complexity when overused.\n\nSince they can be manipulated from anywhere, at any time, subjects often break\nthe linear flow of stream processing and make logic much harder to follow. They\nalso don't support meaningful\n[disposal](#disposal-cancels-in-progress-work-and-cleans-up-resources), which\ncan result in unnecessary work.\n\nSubjects can usually be replaced with other patterns from ReactiveCocoa:\n\n * Instead of feeding initial values into a subject, consider generating the\n   values in a [+createSignal:][RACSignal] block instead.\n * Instead of delivering intermediate results to a subject, try combining the\n   output of multiple signals with operators like\n   [+combineLatest:][RACSignal+Operations] or [+zip:][RACStream].\n * Instead of using subjects to share results with multiple subscribers,\n   [multicast](#share-the-side-effects-of-a-signal-by-multicasting) a base\n   signal instead.\n * Instead of implementing an action method which simply controls a subject, use\n   a [command][RACCommand] or\n   [-rac_signalForSelector:][NSObject+RACSelectorSignal] instead.\n\nWhen subjects _are_ necessary, they should almost always be the \"base\" input\nfor a signal chain, not used in the middle of one.\n\n## Implementing new operators\n\nRAC provides a long list of built-in operators for [streams][RACStream] and\n[signals][RACSignal+Operations] that should cover most use cases; however, RAC\nis not a closed system. It's entirely valid to implement additional operators\nfor specialized uses, or for consideration in ReactiveCocoa itself.\n\nImplementing a new operator requires a careful attention to detail and a focus\non simplicity, to avoid introducing bugs into the calling code.\n\nThese guidelines cover some of the common pitfalls and help preserve the\nexpected API contracts.\n\n### Prefer building on RACStream methods\n\n[RACStream][] offers a simpler interface than [RACSequence][] and [RACSignal][],\nand all stream operators are automatically applicable to sequences and signals\nas well.\n\nFor these reasons, new operators should be implemented using only [RACStream][]\nmethods whenever possible. The minimal required methods of the class, including\n`-bind:`, `-zipWith:`, and `-concat:`, are quite powerful, and many tasks can\nbe accomplished without needing anything else.\n\nIf a new [RACSignal][] operator needs to handle `error` and `completed` events,\nconsider using the [-materialize][RACSignal+Operations] method to bring the\nevents into the stream. All of the events of a materialized signal can be\nmanipulated by stream operators, which helps minimize the use of non-stream\noperators.\n\n### Compose existing operators when possible\n\nConsiderable thought has been put into the operators provided by RAC, and they\nhave been validated through automated tests and through their real world use in\nother projects. An operator that has been written from scratch may not be as\nrobust, or might not handle a special case that the built-in operators are aware\nof.\n\nTo minimize duplication and possible bugs, use the provided operators as much as\npossible in a custom operator implementation. Generally, there should be very\nlittle code written from scratch.\n\n### Avoid introducing concurrency\n\nConcurrency is an extremely common source of bugs in programming. To minimize\nthe potential for deadlocks and race conditions, operators should not\nconcurrently perform their work.\n\nCallers always have the ability to subscribe or deliver events on a specific\n[RACScheduler][], and RAC offers powerful ways to [parallelize\nwork][Parallelizing Independent Work] without making operators unnecessarily\ncomplex.\n\n### Cancel work and clean up all resources in a disposable\n\nWhen implementing a signal with the [+createSignal:][RACSignal] method, the\nprovided block is expected to return a [RACDisposable][]. This disposable\nshould:\n\n * As soon as it is convenient, gracefully cancel any in-progress work that was\n   started by the signal.\n * Immediately dispose of any subscriptions to other signals, thus triggering\n   their cancellation and cleanup code as well.\n * Release any memory or other resources that were allocated by the signal.\n\nThis helps fulfill [the RACSignal\ncontract](#disposal-cancels-in-progress-work-and-cleans-up-resources).\n\n### Do not block in an operator\n\nStream operators should return a new stream more-or-less immediately. Any work\nthat the operator needs to perform should be part of evaluating the new stream,\n_not_ part of the operator invocation itself.\n\n```objc\n// WRONG!\n- (RACSequence *)map:(id (^)(id))block {\n    RACSequence *result = [RACSequence empty];\n    for (id obj in self) {\n        id mappedObj = block(obj);\n        result = [result concat:[RACSequence return:mappedObj]];\n    }\n\n    return result;\n}\n\n// Right!\n- (RACSequence *)map:(id (^)(id))block {\n    return [self flattenMap:^(id obj) {\n        id mappedObj = block(obj);\n        return [RACSequence return:mappedObj];\n    }];\n}\n```\n\nThis guideline can be safely ignored when the purpose of an operator is to\nsynchronously retrieve one or more values from a stream (like\n[-first][RACSignal+Operations]).\n\n### Avoid stack overflow from deep recursion\n\nAny operator that might recurse indefinitely should use the\n`-scheduleRecursiveBlock:` method of [RACScheduler][]. This method will\ntransform recursion into iteration instead, preventing a stack overflow.\n\nFor example, this would be an incorrect implementation of\n[-repeat][RACSignal+Operations], due to its potential to overflow the call stack\nand cause a crash:\n\n```objc\n- (RACSignal *)repeat {\n    return [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n        RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable];\n\n        __block void (^resubscribe)(void) = ^{\n            RACDisposable *disposable = [self subscribeNext:^(id x) {\n                [subscriber sendNext:x];\n            } error:^(NSError *error) {\n                [subscriber sendError:error];\n            } completed:^{\n                resubscribe();\n            }];\n\n            [compoundDisposable addDisposable:disposable];\n        };\n\n        return compoundDisposable;\n    }];\n}\n```\n\nBy contrast, this version will avoid a stack overflow:\n\n```objc\n- (RACSignal *)repeat {\n    return [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n        RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable];\n\n        RACScheduler *scheduler = RACScheduler.currentScheduler ?: [RACScheduler scheduler];\n        RACDisposable *disposable = [scheduler scheduleRecursiveBlock:^(void (^reschedule)(void)) {\n            RACDisposable *disposable = [self subscribeNext:^(id x) {\n                [subscriber sendNext:x];\n            } error:^(NSError *error) {\n                [subscriber sendError:error];\n            } completed:^{\n                reschedule();\n            }];\n\n            [compoundDisposable addDisposable:disposable];\n        }];\n\n        [compoundDisposable addDisposable:disposable];\n        return compoundDisposable;\n    }];\n}\n```\n\n[Framework Overview]: FrameworkOverview.md\n[Memory Management]: MemoryManagement.md\n[NSObject+RACLifting]: ../../ReactiveCocoa/Objective-C/NSObject+RACLifting.h\n[NSObject+RACSelectorSignal]: ../../ReactiveCocoa/Objective-C/NSObject+RACSelectorSignal.h\n[RAC]: ../../ReactiveCocoa/Objective-C/RACSubscriptingAssignmentTrampoline.h\n[RACChannelTo]: ../../ReactiveCocoa/Objective-C/RACKVOChannel.h\n[RACCommand]: ../../ReactiveCocoa/Objective-C/RACCommand.h\n[RACDisposable]: ../../ReactiveCocoa/Objective-C/RACDisposable.h\n[RACEvent]: ../../ReactiveCocoa/Objective-C/RACEvent.h\n[RACMulticastConnection]: ../../ReactiveCocoa/Objective-C/RACMulticastConnection.h\n[RACObserve]: ../../ReactiveCocoa/Objective-C/NSObject+RACPropertySubscribing.h\n[RACScheduler]: ../../ReactiveCocoa/Objective-C/RACScheduler.h\n[RACSequence]: ../../ReactiveCocoa/Objective-C/RACSequence.h\n[RACSignal]: ../../ReactiveCocoa/Objective-C/RACSignal.h\n[RACSignal+Operations]: ../../ReactiveCocoa/Objective-C/RACSignal+Operations.h\n[RACStream]: ../../ReactiveCocoa/Objective-C/RACStream.h\n[RACSubscriber]: ../../ReactiveCocoa/Objective-C/RACSubscriber.h\n[Subjects]: FrameworkOverview.md#subjects\n[Parallelizing Independent Work]: ../README.md#parallelizing-independent-work\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Documentation/Legacy/FrameworkOverview.md",
    "content": "# Framework Overview\n\nThis document contains a high-level description of the different components\nwithin the ReactiveCocoa framework, and an attempt to explain how they work\ntogether and divide responsibilities. This is meant to be a starting point for\nlearning about new modules and finding more specific documentation.\n\nFor examples and help understanding how to use RAC, see the [README][] or\nthe [Design Guidelines][].\n\n## Streams\n\nA **stream**, represented by the [RACStream][] abstract class, is any series of\nobject values.\n\nValues may be available immediately or in the future, but must be retrieved\nsequentially. There is no way to retrieve the second value of a stream without\nevaluating or waiting for the first value.\n\nStreams are [monads][]. Among other things, this allows complex operations to be\nbuilt on a few basic primitives (`-bind:` in particular). [RACStream][] also\nimplements the equivalent of the [Monoid][] and [MonadZip][] typeclasses from\n[Haskell][].\n\n[RACStream][] isn't terribly useful on its own. Most streams are treated as\n[signals](#signals) or [sequences](#sequences) instead.\n\n## Signals\n\nA **signal**, represented by the [RACSignal][] class, is a _push-driven_\n[stream](#streams).\n\nSignals generally represent data that will be delivered in the future. As work\nis performed or data is received, values are _sent_ on the signal, which pushes\nthem out to any subscribers. Users must [subscribe](#subscription) to a signal\nin order to access its values.\n\nSignals send three different types of events to their subscribers:\n\n * The **next** event provides a new value from the stream. [RACStream][]\n   methods only operate on events of this type. Unlike Cocoa collections, it is\n   completely valid for a signal to include `nil`.\n * The **error** event indicates that an error occurred before the signal could\n   finish. The event may include an `NSError` object that indicates what went\n   wrong. Errors must be handled specially – they are not included in the\n   stream's values.\n * The **completed** event indicates that the signal finished successfully, and\n   that no more values will be added to the stream. Completion must be handled\n   specially – it is not included in the stream of values.\n\nThe lifetime of a signal consists of any number of `next` events, followed by\none `error` or `completed` event (but not both).\n\n### Subscription\n\nA **subscriber** is anything that is waiting or capable of waiting for events\nfrom a [signal](#signals). Within RAC, a subscriber is represented as any object\nthat conforms to the [RACSubscriber][] protocol.\n\nA **subscription** is created through any call to\n[-subscribeNext:error:completed:][RACSignal], or one of the corresponding\nconvenience methods. Technically, most [RACStream][] and\n[RACSignal][RACSignal+Operations] operators create subscriptions as well, but\nthese intermediate subscriptions are usually an implementation detail.\n\nSubscriptions [retain their signals][Memory Management], and are automatically\ndisposed of when the signal completes or errors. Subscriptions can also be\n[disposed of manually](#disposables).\n\n### Subjects\n\nA **subject**, represented by the [RACSubject][] class, is a [signal](#signals)\nthat can be manually controlled.\n\nSubjects can be thought of as the \"mutable\" variant of a signal, much like\n`NSMutableArray` is for `NSArray`. They are extremely useful for bridging\nnon-RAC code into the world of signals.\n\nFor example, instead of handling application logic in block callbacks, the\nblocks can simply send events to a shared subject instead. The subject can then\nbe returned as a [RACSignal][], hiding the implementation detail of the\ncallbacks.\n\nSome subjects offer additional behaviors as well. In particular,\n[RACReplaySubject][] can be used to buffer events for future\n[subscribers](#subscription), like when a network request finishes before\nanything is ready to handle the result.\n\n### Commands\n\nA **command**, represented by the [RACCommand][] class, creates and subscribes\nto a signal in response to some action. This makes it easy to perform\nside-effecting work as the user interacts with the app.\n\nUsually the action triggering a command is UI-driven, like when a button is\nclicked. Commands can also be automatically disabled based on a signal, and this\ndisabled state can be represented in a UI by disabling any controls associated\nwith the command.\n\nOn OS X, RAC adds a `rac_command` property to\n[NSButton][NSButton+RACCommandSupport] for setting up these behaviors\nautomatically.\n\n### Connections\n\nA **connection**, represented by the [RACMulticastConnection][] class, is\na [subscription](#subscription) that is shared between any number of\nsubscribers.\n\n[Signals](#signals) are _cold_ by default, meaning that they start doing work\n_each_ time a new subscription is added. This behavior is usually desirable,\nbecause it means that data will be freshly recalculated for each subscriber, but\nit can be problematic if the signal has side effects or the work is expensive\n(for example, sending a network request).\n\nA connection is created through the `-publish` or `-multicast:` methods on\n[RACSignal][RACSignal+Operations], and ensures that only one underlying\nsubscription is created, no matter how many times the connection is subscribed\nto. Once connected, the connection's signal is said to be _hot_, and the\nunderlying subscription will remain active until _all_ subscriptions to the\nconnection are [disposed](#disposables).\n\n## Sequences\n\nA **sequence**, represented by the [RACSequence][] class, is a _pull-driven_\n[stream](#streams).\n\nSequences are a kind of collection, similar in purpose to `NSArray`. Unlike\nan array, the values in a sequence are evaluated _lazily_ (i.e., only when they\nare needed) by default, potentially improving performance if only part of\na sequence is used. Just like Cocoa collections, sequences cannot contain `nil`.\n\nSequences are similar to [Clojure's sequences][seq] ([lazy-seq][] in particular), or\nthe [List][] type in [Haskell][].\n\nRAC adds a `-rac_sequence` method to most of Cocoa's collection classes,\nallowing them to be used as [RACSequences][RACSequence] instead.\n\n## Disposables\n\nThe **[RACDisposable][]** class is used for cancellation and resource cleanup.\n\nDisposables are most commonly used to unsubscribe from a [signal](#signals).\nWhen a [subscription](#subscription) is disposed, the corresponding subscriber\nwill not receive _any_ further events from the signal. Additionally, any work\nassociated with the subscription (background processing, network requests, etc.)\nwill be cancelled, since the results are no longer needed.\n\nFor more information about cancellation, see the RAC [Design Guidelines][].\n\n## Schedulers\n\nA **scheduler**, represented by the [RACScheduler][] class, is a serial\nexecution queue for [signals](#signals) to perform work or deliver their results upon.\n\nSchedulers are similar to Grand Central Dispatch queues, but schedulers support\ncancellation (via [disposables](#disposables)), and always execute serially.\nWith the exception of the [+immediateScheduler][RACScheduler], schedulers do not\noffer synchronous execution. This helps avoid deadlocks, and encourages the use\nof [signal operators][RACSignal+Operations] instead of blocking work.\n\n[RACScheduler][] is also somewhat similar to `NSOperationQueue`, but schedulers\ndo not allow tasks to be reordered or depend on one another.\n\n## Value types\n\nRAC offers a few miscellaneous classes for conveniently representing values in\na [stream](#streams):\n\n * **[RACTuple][]** is a small, constant-sized collection that can contain\n   `nil` (represented by `RACTupleNil`). It is generally used to represent\n   the combined values of multiple streams.\n * **[RACUnit][]** is a singleton \"empty\" value. It is used as a value in\n   a stream for those times when more meaningful data doesn't exist.\n * **[RACEvent][]** represents any [signal event](#signals) as a single value.\n   It is primarily used by the `-materialize` method of\n   [RACSignal][RACSignal+Operations].\n\n[Design Guidelines]: DesignGuidelines.md\n[Haskell]: http://www.haskell.org\n[lazy-seq]: http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/lazy-seq\n[List]: https://downloads.haskell.org/~ghc/latest/docs/html/libraries/Data-List.html\n[Memory Management]: MemoryManagement.md\n[monads]: http://en.wikipedia.org/wiki/Monad_(functional_programming)\n[Monoid]: http://downloads.haskell.org/~ghc/latest/docs/html/libraries/Data-Monoid.html\n[MonadZip]: http://downloads.haskell.org/~ghc/latest/docs/html/libraries/Control-Monad-Zip.html\n[NSButton+RACCommandSupport]: ../../ReactiveCocoa/Objective-C/NSButton+RACCommandSupport.h\n[RACCommand]: ../../ReactiveCocoa/Objective-C/RACCommand.h\n[RACDisposable]: ../../ReactiveCocoa/Objective-C/RACDisposable.h\n[RACEvent]: ../../ReactiveCocoa/Objective-C/RACEvent.h\n[RACMulticastConnection]: ../../ReactiveCocoa/Objective-C/RACMulticastConnection.h\n[RACReplaySubject]: ../../ReactiveCocoa/Objective-C/RACReplaySubject.h\n[RACScheduler]: ../../ReactiveCocoa/Objective-C/RACScheduler.h\n[RACSequence]: ../../ReactiveCocoa/Objective-C/RACSequence.h\n[RACSignal]: ../../ReactiveCocoa/Objective-C/RACSignal.h\n[RACSignal+Operations]: ../../ReactiveCocoa/Objective-C/RACSignal+Operations.h\n[RACStream]: ../../ReactiveCocoa/Objective-C/RACStream.h\n[RACSubject]: ../../ReactiveCocoa/Objective-C/RACSubject.h\n[RACSubscriber]: ../../ReactiveCocoa/Objective-C/RACSubscriber.h\n[RACTuple]: ../../ReactiveCocoa/Objective-C/RACTuple.h\n[RACUnit]: ../../ReactiveCocoa/Objective-C/RACUnit.h\n[README]: README.md\n[seq]: http://clojure.org/sequences\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Documentation/Legacy/MemoryManagement.md",
    "content": "# Memory Management\n\nReactiveCocoa's memory management is quite complex, but the end result is that\n**you don't need to retain signals in order to process them**.\n\nIf the framework required you to retain every signal, it'd be much more unwieldy\nto use, especially for one-shot signals that are used like futures (e.g.,\nnetwork requests). You'd have to save any long-lived signal into a property, and\nthen also make sure to clear it out when you're done with it. Not fun.\n\n## Subscribers\n\nBefore going any further, it's worth noting that\n`subscribeNext:error:completed:` (and all variants thereof) create an _implicit_\nsubscriber using the given blocks. Any objects referenced from those blocks will\ntherefore be retained as part of the subscription. Just like any other object,\n`self` won't be retained without a direct or indirect reference to it.\n\n## Finite or Short-Lived Signals\n\nThe most important guideline to RAC memory management is that a **subscription\nis automatically terminated upon completion or error, and the subscriber\nremoved**.\n\nFor example, if you have some code like this in your view controller:\n\n```objc\nself.disposable = [signal subscribeCompleted:^{\n    doSomethingPossiblyInvolving(self);\n}];\n```\n\n… the memory management will look something like the following:\n\n```\nview controller -> RACDisposable -> RACSignal -> RACSubscriber -> view controller\n```\n\nHowever, the `RACSignal -> RACSubscriber` relationship is torn down as soon as\n`signal` finishes, breaking the retain cycle.\n\n**This is often all you need**, because the lifetime of the `RACSignal` in\nmemory will naturally match the logical lifetime of the event stream.\n\n## Infinite Signals\n\nInfinite signals (or signals that live so long that they might as well be\ninfinite), however, will never tear down naturally. This is where disposables\nshine.\n\n**Disposing of a subscription will remove the associated subscriber**, and just\ngenerally clean up any resources associated with that subscription. To that one\nsubscriber, it's just as if the signal had completed or errored, except no final\nevent is sent on the signal. All other subscribers will remain intact.\n\nHowever, as a general rule of thumb, if you have to manually manage\na subscription's lifecycle, [there's probably a better way to do what you want][avoid-explicit-subscriptions-and-disposal].\n\n## Signals Derived from `self`\n\nThere's still a bit of a tricky middle case here, though. Any time a signal's\nlifetime is tied to the calling scope, you'll have a much harder cycle to break.\n\nThis commonly occurs when using `RACObserve()` on a key\npath that's relative to `self`, and then applying a block that needs to capture\n`self`.\n\nThe easiest answer here is just to **capture `self` weakly**:\n\n```objc\n__weak id weakSelf = self;\n[RACObserve(self, username) subscribeNext:^(NSString *username) {\n    id strongSelf = weakSelf;\n    [strongSelf validateUsername];\n}];\n```\n\nOr, after importing the included\n[EXTScope.h](https://github.com/jspahrsummers/libextobjc/blob/master/extobjc/EXTScope.h)\nheader:\n\n```objc\n@weakify(self);\n[RACObserve(self, username) subscribeNext:^(NSString *username) {\n    @strongify(self);\n    [self validateUsername];\n}];\n```\n\n*(Replace `__weak` or `@weakify` with `__unsafe_unretained` or `@unsafeify`,\nrespectively, if the object doesn't support weak references.)*\n\nHowever, [there's probably a better pattern you could use instead][avoid-explicit-subscriptions-and-disposal]. For\nexample, the above sample could perhaps be written like:\n\n```objc\n[self rac_liftSelector:@selector(validateUsername:) withSignals:RACObserve(self, username), nil];\n```\n\nor:\n\n```objc\nRACSignal *validated = [RACObserve(self, username) map:^(NSString *username) {\n    // Put validation logic here.\n    return @YES;\n}];\n```\n\nAs with infinite signals, there are generally ways you can avoid referencing\n`self` (or any object) from blocks in a signal chain.\n\n----\n\nThe above information is really all you should need in order to use\nReactiveCocoa effectively. However, there's one more point to address, just for\nthe technically curious or for anyone interested in contributing to RAC.\n\nThe design goal of \"no retaining necessary\" begs the question: how do we know\nwhen a signal should be deallocated? What if it was just created, escaped an\nautorelease pool, and hasn't been retained yet?\n\nThe real answer is _we don't_, BUT we can usually assume that the caller will\nretain the signal within the current run loop iteration if they want to keep it.\n\nConsequently:\n\n 1. A created signal is automatically added to a global set of active signals.\n 2. The signal will wait for a single pass of the main run loop, and then remove\n    itself from the active set _if it has no subscribers_. Unless the signal was\n    retained somehow, it would deallocate at this point.\n 3. If something did subscribe in that run loop iteration, the signal stays in\n    the set.\n 4. Later, when all the subscribers are gone, step 2 is triggered again.\n\nThis could backfire if the run loop is spun recursively (like in a modal event\nloop on OS X), but it makes the life of the framework consumer much easier for\nmost or all other cases.\n\n[avoid-explicit-subscriptions-and-disposal]: DesignGuidelines.md#avoid-explicit-subscriptions-and-disposal\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Documentation/Legacy/README.md",
    "content": "# ReactiveCocoa\n\n_NOTE: This is legacy introduction to the Objective-C ReactiveCocoa. For the\nupdated version that uses Swift please see the main [README][]_\n\nReactiveCocoa (RAC) is an Objective-C framework inspired by [Functional Reactive\nProgramming][]. It provides APIs for **composing and transforming streams of\nvalues**.\n\nIf you're already familiar with functional reactive programming or know the basic\npremise of ReactiveCocoa, check out the other documentation in this folder for a\nframework overview and more in-depth information about how it all works in practice.\n\n## New to ReactiveCocoa?\n\nReactiveCocoa is documented like crazy, and there's a wealth of introductory\nmaterial available to explain what RAC is and how you can use it.\n\nIf you want to learn more, we recommend these resources, roughly in order:\n\n 1. [Introduction](#introduction)\n 1. [When to use ReactiveCocoa](#when-to-use-reactivecocoa)\n 1. [Framework Overview][]\n 1. [Basic Operators][]\n 1. [Header documentation](../../ReactiveCocoa/Objective-C)\n 1. Previously answered [Stack Overflow](https://github.com/ReactiveCocoa/ReactiveCocoa/wiki)\n    questions and [GitHub issues](https://github.com/ReactiveCocoa/ReactiveCocoa/issues?labels=question&state=closed)\n 1. The rest of this folder\n 1. [Functional Reactive Programming on iOS](https://leanpub.com/iosfrp/) \n    (eBook)\n \nIf you have any further questions, please feel free to [file an issue](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/new). \n\n## Introduction\n\nReactiveCocoa is inspired by [functional reactive\nprogramming](http://blog.maybeapps.com/post/42894317939/input-and-output).\nRather than using mutable variables which are replaced and modified in-place,\nRAC provides signals (represented by `RACSignal`) that capture present and\nfuture values.\n\nBy chaining, combining, and reacting to signals, software can be written\ndeclaratively, without the need for code that continually observes and updates\nvalues.\n\nFor example, a text field can be bound to the latest time, even as it changes,\ninstead of using additional code that watches the clock and updates the\ntext field every second.  It works much like KVO, but with blocks instead of\noverriding `-observeValueForKeyPath:ofObject:change:context:`.\n\nSignals can also represent asynchronous operations, much like [futures and\npromises][]. This greatly simplifies asynchronous software, including networking\ncode.\n\nOne of the major advantages of RAC is that it provides a single, unified\napproach to dealing with asynchronous behaviors, including delegate methods,\ncallback blocks, target-action mechanisms, notifications, and KVO.\n\nHere's a simple example:\n\n```objc\n// When self.username changes, logs the new name to the console.\n//\n// RACObserve(self, username) creates a new RACSignal that sends the current\n// value of self.username, then the new value whenever it changes.\n// -subscribeNext: will execute the block whenever the signal sends a value.\n[RACObserve(self, username) subscribeNext:^(NSString *newName) {\n\tNSLog(@\"%@\", newName);\n}];\n```\n\nBut unlike KVO notifications, signals can be chained together and operated on:\n\n```objc\n// Only logs names that starts with \"j\".\n//\n// -filter returns a new RACSignal that only sends a new value when its block\n// returns YES.\n[[RACObserve(self, username)\n\tfilter:^(NSString *newName) {\n\t\treturn [newName hasPrefix:@\"j\"];\n\t}]\n\tsubscribeNext:^(NSString *newName) {\n\t\tNSLog(@\"%@\", newName);\n\t}];\n```\n\nSignals can also be used to derive state. Instead of observing properties and\nsetting other properties in response to the new values, RAC makes it possible to\nexpress properties in terms of signals and operations:\n\n```objc\n// Creates a one-way binding so that self.createEnabled will be\n// true whenever self.password and self.passwordConfirmation\n// are equal.\n//\n// RAC() is a macro that makes the binding look nicer.\n// \n// +combineLatest:reduce: takes an array of signals, executes the block with the\n// latest value from each signal whenever any of them changes, and returns a new\n// RACSignal that sends the return value of that block as values.\nRAC(self, createEnabled) = [RACSignal \n\tcombineLatest:@[ RACObserve(self, password), RACObserve(self, passwordConfirmation) ] \n\treduce:^(NSString *password, NSString *passwordConfirm) {\n\t\treturn @([passwordConfirm isEqualToString:password]);\n\t}];\n```\n\nSignals can be built on any stream of values over time, not just KVO. For\nexample, they can also represent button presses:\n\n```objc\n// Logs a message whenever the button is pressed.\n//\n// RACCommand creates signals to represent UI actions. Each signal can\n// represent a button press, for example, and have additional work associated\n// with it.\n//\n// -rac_command is an addition to NSButton. The button will send itself on that\n// command whenever it's pressed.\nself.button.rac_command = [[RACCommand alloc] initWithSignalBlock:^(id _) {\n\tNSLog(@\"button was pressed!\");\n\treturn [RACSignal empty];\n}];\n```\n\nOr asynchronous network operations:\n\n```objc\n// Hooks up a \"Log in\" button to log in over the network.\n//\n// This block will be run whenever the login command is executed, starting\n// the login process.\nself.loginCommand = [[RACCommand alloc] initWithSignalBlock:^(id sender) {\n\t// The hypothetical -logIn method returns a signal that sends a value when\n\t// the network request finishes.\n\treturn [client logIn];\n}];\n\n// -executionSignals returns a signal that includes the signals returned from\n// the above block, one for each time the command is executed.\n[self.loginCommand.executionSignals subscribeNext:^(RACSignal *loginSignal) {\n\t// Log a message whenever we log in successfully.\n\t[loginSignal subscribeCompleted:^{\n\t\tNSLog(@\"Logged in successfully!\");\n\t}];\n}];\n\n// Executes the login command when the button is pressed.\nself.loginButton.rac_command = self.loginCommand;\n```\n\nSignals can also represent timers, other UI events, or anything else that\nchanges over time.\n\nUsing signals for asynchronous operations makes it possible to build up more\ncomplex behavior by chaining and transforming those signals. Work can easily be\ntriggered after a group of operations completes:\n\n```objc\n// Performs 2 network operations and logs a message to the console when they are\n// both completed.\n//\n// +merge: takes an array of signals and returns a new RACSignal that passes\n// through the values of all of the signals and completes when all of the\n// signals complete.\n//\n// -subscribeCompleted: will execute the block when the signal completes.\n[[RACSignal \n\tmerge:@[ [client fetchUserRepos], [client fetchOrgRepos] ]] \n\tsubscribeCompleted:^{\n\t\tNSLog(@\"They're both done!\");\n\t}];\n```\n\nSignals can be chained to sequentially execute asynchronous operations, instead\nof nesting callbacks with blocks. This is similar to how [futures and promises][]\nare usually used:\n\n```objc\n// Logs in the user, then loads any cached messages, then fetches the remaining\n// messages from the server. After that's all done, logs a message to the\n// console.\n//\n// The hypothetical -logInUser methods returns a signal that completes after\n// logging in.\n//\n// -flattenMap: will execute its block whenever the signal sends a value, and\n// returns a new RACSignal that merges all of the signals returned from the block\n// into a single signal.\n[[[[client \n\tlogInUser] \n\tflattenMap:^(User *user) {\n\t\t// Return a signal that loads cached messages for the user.\n\t\treturn [client loadCachedMessagesForUser:user];\n\t}]\n\tflattenMap:^(NSArray *messages) {\n\t\t// Return a signal that fetches any remaining messages.\n\t\treturn [client fetchMessagesAfterMessage:messages.lastObject];\n\t}]\n\tsubscribeNext:^(NSArray *newMessages) {\n\t\tNSLog(@\"New messages: %@\", newMessages);\n\t} completed:^{\n\t\tNSLog(@\"Fetched all messages.\");\n\t}];\n```\n\nRAC even makes it easy to bind to the result of an asynchronous operation:\n\n```objc\n// Creates a one-way binding so that self.imageView.image will be set as the user's\n// avatar as soon as it's downloaded.\n//\n// The hypothetical -fetchUserWithUsername: method returns a signal which sends\n// the user.\n//\n// -deliverOn: creates new signals that will do their work on other queues. In\n// this example, it's used to move work to a background queue and then back to the main thread.\n//\n// -map: calls its block with each user that's fetched and returns a new\n// RACSignal that sends values returned from the block.\nRAC(self.imageView, image) = [[[[client \n\tfetchUserWithUsername:@\"joshaber\"]\n\tdeliverOn:[RACScheduler scheduler]]\n\tmap:^(User *user) {\n\t\t// Download the avatar (this is done on a background queue).\n\t\treturn [[NSImage alloc] initWithContentsOfURL:user.avatarURL];\n\t}]\n\t// Now the assignment will be done on the main thread.\n\tdeliverOn:RACScheduler.mainThreadScheduler];\n```\n\nThat demonstrates some of what RAC can do, but it doesn't demonstrate why RAC is\nso powerful. It's hard to appreciate RAC from README-sized examples, but it\nmakes it possible to write code with less state, less boilerplate, better code\nlocality, and better expression of intent.\n\nFor more sample code, check out [C-41][] or [GroceryList][], which are real iOS\napps written using ReactiveCocoa. Additional information about RAC can be found\nin this folder.\n\n## When to use ReactiveCocoa\n\nUpon first glance, ReactiveCocoa is very abstract, and it can be difficult to\nunderstand how to apply it to concrete problems.\n\nHere are some of the use cases that RAC excels at.\n\n### Handling asynchronous or event-driven data sources\n\nMuch of Cocoa programming is focused on reacting to user events or changes in\napplication state. Code that deals with such events can quickly become very\ncomplex and spaghetti-like, with lots of callbacks and state variables to handle\nordering issues.\n\nPatterns that seem superficially different, like UI callbacks, network\nresponses, and KVO notifications, actually have a lot in common. [RACSignal][]\nunifies all these different APIs so that they can be composed together and\nmanipulated in the same way.\n\nFor example, the following code:\n\n```objc\n\nstatic void *ObservationContext = &ObservationContext;\n\n- (void)viewDidLoad {\n\t[super viewDidLoad];\n\n\t[LoginManager.sharedManager addObserver:self forKeyPath:@\"loggingIn\" options:NSKeyValueObservingOptionInitial context:&ObservationContext];\n\t[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(loggedOut:) name:UserDidLogOutNotification object:LoginManager.sharedManager];\n\n\t[self.usernameTextField addTarget:self action:@selector(updateLogInButton) forControlEvents:UIControlEventEditingChanged];\n\t[self.passwordTextField addTarget:self action:@selector(updateLogInButton) forControlEvents:UIControlEventEditingChanged];\n\t[self.logInButton addTarget:self action:@selector(logInPressed:) forControlEvents:UIControlEventTouchUpInside];\n}\n\n- (void)dealloc {\n\t[LoginManager.sharedManager removeObserver:self forKeyPath:@\"loggingIn\" context:ObservationContext];\n\t[NSNotificationCenter.defaultCenter removeObserver:self];\n}\n\n- (void)updateLogInButton {\n\tBOOL textFieldsNonEmpty = self.usernameTextField.text.length > 0 && self.passwordTextField.text.length > 0;\n\tBOOL readyToLogIn = !LoginManager.sharedManager.isLoggingIn && !self.loggedIn;\n\tself.logInButton.enabled = textFieldsNonEmpty && readyToLogIn;\n}\n\n- (IBAction)logInPressed:(UIButton *)sender {\n\t[[LoginManager sharedManager]\n\t\tlogInWithUsername:self.usernameTextField.text\n\t\tpassword:self.passwordTextField.text\n\t\tsuccess:^{\n\t\t\tself.loggedIn = YES;\n\t\t} failure:^(NSError *error) {\n\t\t\t[self presentError:error];\n\t\t}];\n}\n\n- (void)loggedOut:(NSNotification *)notification {\n\tself.loggedIn = NO;\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {\n\tif (context == ObservationContext) {\n\t\t[self updateLogInButton];\n\t} else {\n\t\t[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];\n\t}\n}\n```\n\n… could be expressed in RAC like so:\n\n```objc\n- (void)viewDidLoad {\n\t[super viewDidLoad];\n\n\t@weakify(self);\n\n\tRAC(self.logInButton, enabled) = [RACSignal\n\t\tcombineLatest:@[\n\t\t\tself.usernameTextField.rac_textSignal,\n\t\t\tself.passwordTextField.rac_textSignal,\n\t\t\tRACObserve(LoginManager.sharedManager, loggingIn),\n\t\t\tRACObserve(self, loggedIn)\n\t\t] reduce:^(NSString *username, NSString *password, NSNumber *loggingIn, NSNumber *loggedIn) {\n\t\t\treturn @(username.length > 0 && password.length > 0 && !loggingIn.boolValue && !loggedIn.boolValue);\n\t\t}];\n\n\t[[self.logInButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(UIButton *sender) {\n\t\t@strongify(self);\n\n\t\tRACSignal *loginSignal = [LoginManager.sharedManager\n\t\t\tlogInWithUsername:self.usernameTextField.text\n\t\t\tpassword:self.passwordTextField.text];\n\n\t\t\t[loginSignal subscribeError:^(NSError *error) {\n\t\t\t\t@strongify(self);\n\t\t\t\t[self presentError:error];\n\t\t\t} completed:^{\n\t\t\t\t@strongify(self);\n\t\t\t\tself.loggedIn = YES;\n\t\t\t}];\n\t}];\n\n\tRAC(self, loggedIn) = [[NSNotificationCenter.defaultCenter\n\t\trac_addObserverForName:UserDidLogOutNotification object:nil]\n\t\tmapReplace:@NO];\n}\n```\n\n### Chaining dependent operations\n\nDependencies are most often found in network requests, where a previous request\nto the server needs to complete before the next one can be constructed, and so\non:\n\n```objc\n[client logInWithSuccess:^{\n\t[client loadCachedMessagesWithSuccess:^(NSArray *messages) {\n\t\t[client fetchMessagesAfterMessage:messages.lastObject success:^(NSArray *nextMessages) {\n\t\t\tNSLog(@\"Fetched all messages.\");\n\t\t} failure:^(NSError *error) {\n\t\t\t[self presentError:error];\n\t\t}];\n\t} failure:^(NSError *error) {\n\t\t[self presentError:error];\n\t}];\n} failure:^(NSError *error) {\n\t[self presentError:error];\n}];\n```\n\nReactiveCocoa makes this pattern particularly easy:\n\n```objc\n[[[[client logIn]\n\tthen:^{\n\t\treturn [client loadCachedMessages];\n\t}]\n\tflattenMap:^(NSArray *messages) {\n\t\treturn [client fetchMessagesAfterMessage:messages.lastObject];\n\t}]\n\tsubscribeError:^(NSError *error) {\n\t\t[self presentError:error];\n\t} completed:^{\n\t\tNSLog(@\"Fetched all messages.\");\n\t}];\n```\n\n### Parallelizing independent work\n\nWorking with independent data sets in parallel and then combining them into\na final result is non-trivial in Cocoa, and often involves a lot of\nsynchronization:\n\n```objc\n__block NSArray *databaseObjects;\n__block NSArray *fileContents;\n \nNSOperationQueue *backgroundQueue = [[NSOperationQueue alloc] init];\nNSBlockOperation *databaseOperation = [NSBlockOperation blockOperationWithBlock:^{\n\tdatabaseObjects = [databaseClient fetchObjectsMatchingPredicate:predicate];\n}];\n\nNSBlockOperation *filesOperation = [NSBlockOperation blockOperationWithBlock:^{\n\tNSMutableArray *filesInProgress = [NSMutableArray array];\n\tfor (NSString *path in files) {\n\t\t[filesInProgress addObject:[NSData dataWithContentsOfFile:path]];\n\t}\n\n\tfileContents = [filesInProgress copy];\n}];\n \nNSBlockOperation *finishOperation = [NSBlockOperation blockOperationWithBlock:^{\n\t[self finishProcessingDatabaseObjects:databaseObjects fileContents:fileContents];\n\tNSLog(@\"Done processing\");\n}];\n \n[finishOperation addDependency:databaseOperation];\n[finishOperation addDependency:filesOperation];\n[backgroundQueue addOperation:databaseOperation];\n[backgroundQueue addOperation:filesOperation];\n[backgroundQueue addOperation:finishOperation];\n```\n\nThe above code can be cleaned up and optimized by simply composing signals:\n\n```objc\nRACSignal *databaseSignal = [[databaseClient\n\tfetchObjectsMatchingPredicate:predicate]\n\tsubscribeOn:[RACScheduler scheduler]];\n\nRACSignal *fileSignal = [RACSignal startEagerlyWithScheduler:[RACScheduler scheduler] block:^(id<RACSubscriber> subscriber) {\n\tNSMutableArray *filesInProgress = [NSMutableArray array];\n\tfor (NSString *path in files) {\n\t\t[filesInProgress addObject:[NSData dataWithContentsOfFile:path]];\n\t}\n\n\t[subscriber sendNext:[filesInProgress copy]];\n\t[subscriber sendCompleted];\n}];\n\n[[RACSignal\n\tcombineLatest:@[ databaseSignal, fileSignal ]\n\treduce:^ id (NSArray *databaseObjects, NSArray *fileContents) {\n\t\t[self finishProcessingDatabaseObjects:databaseObjects fileContents:fileContents];\n\t\treturn nil;\n\t}]\n\tsubscribeCompleted:^{\n\t\tNSLog(@\"Done processing\");\n\t}];\n```\n\n### Simplifying collection transformations\n\nHigher-order functions like `map`, `filter`, `fold`/`reduce` are sorely missing\nfrom Foundation, leading to loop-focused code like this:\n\n```objc\nNSMutableArray *results = [NSMutableArray array];\nfor (NSString *str in strings) {\n\tif (str.length < 2) {\n\t\tcontinue;\n\t}\n\n\tNSString *newString = [str stringByAppendingString:@\"foobar\"];\n\t[results addObject:newString];\n}\n```\n\n[RACSequence][] allows any Cocoa collection to be manipulated in a uniform and\ndeclarative way:\n\n```objc\nRACSequence *results = [[strings.rac_sequence\n\tfilter:^ BOOL (NSString *str) {\n\t\treturn str.length >= 2;\n\t}]\n\tmap:^(NSString *str) {\n\t\treturn [str stringByAppendingString:@\"foobar\"];\n\t}];\n```\n\n## System Requirements\n\nReactiveCocoa supports OS X 10.8+ and iOS 8.0+.\n\n## Importing ReactiveCocoa\n\nTo add RAC to your application:\n\n 1. Add the ReactiveCocoa repository as a submodule of your application's\n    repository.\n 1. Run `script/bootstrap` from within the ReactiveCocoa folder.\n 1. Drag and drop `ReactiveCocoa.xcodeproj` into your\n    application's Xcode project or workspace.\n 1. On the \"Build Phases\" tab of your application target, add RAC to the \"Link\n    Binary With Libraries\" phase.\n    * **On iOS**, add `libReactiveCocoa-iOS.a`.\n    * **On OS X**, add `ReactiveCocoa.framework`. RAC must also be added to any\n      \"Copy Frameworks\" build phase. If you don't already have one, simply add\n      a \"Copy Files\" build phase and target the \"Frameworks\" destination.\n 1. Add `\"$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include\"\n    $(inherited)` to the \"Header Search Paths\" build setting (this is only\n    necessary for archive builds, but it has no negative effect otherwise).\n 1. **For iOS targets**, add `-ObjC` to the \"Other Linker Flags\" build setting.\n 1. **If you added RAC to a project (not a workspace)**, you will also need to\n    add the appropriate RAC target to the \"Target Dependencies\" of your\n    application.\n\nIf you would prefer to use [CocoaPods](http://cocoapods.org), there are some\n[ReactiveCocoa\npodspecs](https://github.com/CocoaPods/Specs/tree/master/Specs/ReactiveCocoa) that\nhave been generously contributed by third parties.\n\nTo see a project already set up with RAC, check out [C-41][] or [GroceryList][],\nwhich are real iOS apps written using ReactiveCocoa.\n\n## More Info\n\nReactiveCocoa is inspired by .NET's [Reactive\nExtensions](http://msdn.microsoft.com/en-us/data/gg577609) (Rx). Most of the\nprinciples of Rx apply to RAC as well. There are some really good Rx resources\nout there:\n\n* [Reactive Extensions MSDN entry](http://msdn.microsoft.com/en-us/library/hh242985.aspx)\n* [Reactive Extensions for .NET Introduction](http://leecampbell.blogspot.com/2010/08/reactive-extensions-for-net.html)\n* [Rx - Channel 9 videos](http://channel9.msdn.com/tags/Rx/)\n* [Reactive Extensions wiki](http://rxwiki.wikidot.com/)\n* [101 Rx Samples](http://rxwiki.wikidot.com/101samples)\n* [Programming Reactive Extensions and LINQ](http://www.amazon.com/Programming-Reactive-Extensions-Jesse-Liberty/dp/1430237473)\n\nRAC and Rx are both frameworks inspired by functional reactive programming. Here \nare some resources related to FRP:\n\n* [What is FRP? - Elm Language](http://elm-lang.org/learn/What-is-FRP.elm)\n* [What is Functional Reactive Programming - Stack Overflow](http://stackoverflow.com/questions/1028250/what-is-functional-reactive-programming/1030631#1030631)\n* [Specification for a Functional Reactive Language - Stack Overflow](http://stackoverflow.com/questions/5875929/specification-for-a-functional-reactive-programming-language#5878525)\n* [Escape from Callback Hell](http://elm-lang.org/learn/Escape-from-Callback-Hell.elm)\n* [Principles of Reactive Programming on Coursera](https://www.coursera.org/course/reactive)\n\n[README]: ../../README.md\n[Basic Operators]: BasicOperators.md\n[Framework Overview]: FrameworkOverview.md\n[Functional Reactive Programming]: http://en.wikipedia.org/wiki/Functional_reactive_programming\n[GroceryList]:  https://github.com/jspahrsummers/GroceryList\n[RACSequence]: ../../ReactiveCocoa/Objective-C/RACSequence.h\n[RACSignal]: ../../ReactiveCocoa/Objective-C/RACSignal.h\n[futures and promises]: http://en.wikipedia.org/wiki/Futures_and_promises\n[C-41]: https://github.com/AshFurrow/C-41\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Documentation/ObjectiveCBridging.md",
    "content": "# Objective-C Bridging\n\nWhile ReactiveCocoa 3.0 introduces an entirely new design, it also aims for maximum compatibility with RAC 2, to ease the pain of migration. To interoperate with RAC 2’s Objective-C APIs, RAC 3 offers bridging functions that can convert Objective-C types to Swift types and vice-versa. \n\nBecause the APIs are based on fundamentally different designs, the conversion is not always one-to-one; however, every attempt has been made to faithfully translate the concepts between the two APIs (and languages).\n\nThe bridged types include:\n\n 1. [`RACSignal` and `SignalProducer` or `Signal`](#racsignal-and-signalproducer-or-signal)\n 1. [`RACCommand` and `Action`](#raccommand-and-action)\n 1. [`RACScheduler` and `SchedulerType`](#racscheduler-and-schedulertype)\n 1. [`RACDisposable` and `Disposable`](#racdisposable-and-disposable)\n\nFor the complete bridging API, including documentation, see [`ObjectiveCBridging.swift`][ObjectiveCBridging]. To learn more about how to migrate between ReactiveCocoa 2 and 3, see the [CHANGELOG][].\n\n## `RACSignal` and `SignalProducer` or `Signal`\n\nIn RAC 3, “cold” signals are represented by the `SignalProducer` type, and “hot” signals are represented by the `Signal` type.\n\n“Cold” `RACSignal`s can be converted into `SignalProducer`s using the new `toSignalProducer` method:\n\n```swift\nextension RACSignal {\n\tfunc toSignalProducer() -> SignalProducer<AnyObject?, NSError>\n}\n```\n\n“Hot” `RACSignal`s cannot be directly converted into `Signal`s, because _any_ `RACSignal` subscription could potentially involve side effects. To obtain a `Signal`, use `RACSignal.toSignalProducer` followed by `SignalProducer.start`, which will make those potential side effects explicit.\n\nFor the other direction, use the `toRACSignal()` function.\n\nWhen called with a `SignalProducer`, these functions will create a `RACSignal` to `start()` the producer once for each subscription:\n\n```swift\nfunc toRACSignal<T: AnyObject, E>(producer: SignalProducer<T, E>) -> RACSignal\nfunc toRACSignal<T: AnyObject, E>(producer: SignalProducer<T?, E>) -> RACSignal\n```\n\nWhen called with a `Signal`, these functions will create a `RACSignal` that simply observes it:\n\n```swift\nfunc toRACSignal<T: AnyObject, E>(signal: Signal<T, E>) -> RACSignal\nfunc toRACSignal<T: AnyObject, E>(signal: Signal<T?, E>) -> RACSignal\n```\n\n## `RACCommand` and `Action`\n\nTo convert `RACCommand`s into the new `Action` type, use the `toAction()` extension method:\n\n```swift\nextension RACCommand {\n\tfunc toAction() -> Action<AnyObject?, AnyObject?, NSError>\n}\n```\n\nTo convert `Action`s into `RACCommand`s, use the `toRACCommand()` function:\n\n```swift\nfunc toRACCommand<Output: AnyObject, E>(action: Action<AnyObject, Output, E>) -> RACCommand\nfunc toRACCommand<Output: AnyObject, E>(action: Action<AnyObject?, Output, E>) -> RACCommand\n```\n\n**NOTE:** The `executing` properties of actions and commands are not synchronized across the API bridge. To ensure consistency, only observe the `executing` property from the base object (the one passed _into_ the bridge, not retrieved from it), so updates occur no matter which object is used for execution.\n\n## `RACScheduler` and `SchedulerType`\n\nAny `RACScheduler` instance is automatically a `DateSchedulerType` (and therefore a `SchedulerType`), and can be passed directly into any function or method that expects one.\n\nSome (but not all) `SchedulerType`s from RAC 3 can be converted into `RACScheduler` instances, using the `toRACScheduler()` method:\n\n```swift\nextension ImmediateScheduler {\n\tfunc toRACScheduler() -> RACScheduler\n}\n\nextension UIScheduler {\n\tfunc toRACScheduler() -> RACScheduler\n}\n\nextension QueueScheduler {\n\tfunc toRACScheduler() -> RACScheduler\n}\n```\n\n## `RACDisposable` and `Disposable`\n\nAny `RACDisposable` instance is automatically a `Disposable`, and can be used directly anywhere a type conforming to `Disposable` is expected.\n\nAlthough there is no direct conversion from `Disposable` into `RACDisposable`, it is easy to do manually:\n\n```swift\nlet swiftDisposable: Disposable\nlet objcDisposable = RACDisposable {\n    swiftDisposable.dispose()\n}\n```\n\n[CHANGELOG]: ../CHANGELOG.md\n[ObjectiveCBridging]: ../ReactiveCocoa/Swift/ObjectiveCBridging.swift\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Documentation/README.md",
    "content": "This folder contains conceptual documentation and design guidelines that don't\nfit well on a single class or in any specific header file.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Instruments/README.md",
    "content": "This folder contains Instruments templates to make it easier to debug\ncode using ReactiveCocoa.\n\nTo get started with a template, simply double-click it.\n\n### Signal Names\n\nThe `name` property of `RACSignal` requires that the `RAC_DEBUG_SIGNAL_NAMES`\nenvironment variable be set, which means that you won't have access to\nmeaningful names in Instruments by default.\n\nTo add signal names, open your application's scheme in Xcode, select the Profile\naction, and add `RAC_DEBUG_SIGNAL_NAMES` with a value of `1` to the list of\nenvironment variables.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/LICENSE.md",
    "content": "**Copyright (c) 2012 - 2015, GitHub, Inc.**\n**All rights reserved.**\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject 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, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/Logo/README.md",
    "content": "This folder contains brand assets.\n\n# Logo\n\nFour horizontal variations that include both the mark and the logotype. When\nusing the logo in contexts where it's surrounded by other elements, leave\na padding of about 10% of its height on each side.\n\n# Icon\n\nFour icon variations to be used on social media and other contexts where the\nhorizontal logo wouldn't fit.\n\n# Colors\n\nPrimary color: `#88CD79`\nSecondary color: `#41AD71`\nTertiary color: `#4F6B97`\n\n![](Palette.png)\n\n# Type\n\nAvenir Next, designed by Adrian Frutiger and Akira Kobayashi for Linotype.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/README.md",
    "content": "![](Logo/header.png)\n\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![GitHub release](https://img.shields.io/github/release/ReactiveCocoa/ReactiveCocoa.svg)](https://github.com/ReactiveCocoa/ReactiveCocoa/releases) ![Swift 2.1.1](https://img.shields.io/badge/Swift-2.1.1-orange.svg) ![platforms](https://img.shields.io/badge/platforms-iOS%20%7C%20OS%20X%20%7C%20watchOS%20%7C%20tvOS%20-lightgrey.svg)\n\nReactiveCocoa (RAC) is a Cocoa framework inspired by [Functional Reactive Programming](https://en.wikipedia.org/wiki/Functional_reactive_programming). It provides APIs for composing and transforming **streams of values over time**.\n\n 1. [Introduction](#introduction)\n 1. [Example: online search](#example-online-search)\n 1. [Objective-C and Swift](#objective-c-and-swift)\n 1. [How does ReactiveCocoa relate to Rx?](#how-does-reactivecocoa-relate-to-rx)\n 1. [Getting started](#getting-started)\n\nIf you’re already familiar with functional reactive programming or what\nReactiveCocoa is about, check out the [Documentation][] folder for more in-depth\ninformation about how it all works. Then, dive straight into our [documentation\ncomments][Code] for learning more about individual APIs.\n\nIf you have a question, please see if any discussions in our [GitHub\nissues](https://github.com/ReactiveCocoa/ReactiveCocoa/issues?q=is%3Aissue+label%3Aquestion+) or [Stack\nOverflow](http://stackoverflow.com/questions/tagged/reactive-cocoa) have already\nanswered it. If not, please feel free to [file your\nown](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/new)!\n\n#### Compatibility\n\nThis documents the RAC 4 (currently alpha) which targets Swift 2.x. For\nSwift 1.2 support see the [RAC\n3](https://github.com/ReactiveCocoa/ReactiveCocoa/tree/v3.0.0).\n\n_Many thanks to [Rheinfabrik](http://www.rheinfabrik.de) for generously sponsoring the development of ReactiveCocoa 3!_\n\n## Introduction\n\nReactiveCocoa is inspired by [functional reactive\nprogramming](http://blog.maybeapps.com/post/42894317939/input-and-output).\nRather than using mutable variables which are replaced and modified in-place,\nRAC offers “event streams,” represented by the [`Signal`][Signals] and\n[`SignalProducer`][Signal producers] types, that send values over time.\n\nEvent streams unify all of Cocoa’s common patterns for asynchrony and event\nhandling, including:\n\n * Delegate methods\n * Callback blocks\n * `NSNotification`s\n * Control actions and responder chain events\n * [Futures and promises](https://en.wikipedia.org/wiki/Futures_and_promises)\n * [Key-value observing](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html) (KVO)\n\nBecause all of these different mechanisms can be represented in the _same_ way,\nit’s easy to declaratively chain and combine them together, with less spaghetti\ncode and state to bridge the gap.\n\nFor more information about the concepts in ReactiveCocoa, see the [Framework\nOverview][].\n\n## Example: online search\n\nLet’s say you have a text field, and whenever the user types something into it,\nyou want to make a network request which searches for that query.\n\n#### Observing text edits\n\nThe first step is to observe edits to the text field, using a RAC extension to\n`UITextField` specifically for this purpose:\n\n```swift\nlet searchStrings = textField.rac_textSignal()\n    .toSignalProducer()\n    .map { text in text as! String }\n```\n\nThis gives us a [signal producer][Signal producers] which sends\nvalues of type `String`. _(The cast is [currently\nnecessary](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2182) to bridge\nthis extension method from Objective-C.)_\n\n#### Making network requests\n\nWith each string, we want to execute a network request. Luckily, RAC offers an\n`NSURLSession` extension for doing exactly that:\n\n```swift\nlet searchResults = searchStrings\n    .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in\n        let URLRequest = self.searchRequestWithEscapedQuery(query)\n        return NSURLSession.sharedSession().rac_dataWithRequest(URLRequest)\n    }\n    .map { (data, URLResponse) -> String in\n        let string = String(data: data, encoding: NSUTF8StringEncoding)!\n        return self.parseJSONResultsFromString(string)\n    }\n    .observeOn(UIScheduler())\n```\n\nThis has transformed our producer of `String`s into a producer of `Array`s\ncontaining the search results, which will be forwarded on the main thread\n(thanks to the [`UIScheduler`][Schedulers]).\n\nAdditionally, [`flatMap(.Latest)`][flatMapLatest] here ensures that _only one search_—the\nlatest—is allowed to be running. If the user types another character while the\nnetwork request is still in flight, it will be cancelled before starting a new\none. Just think of how much code that would take to do by hand!\n\n#### Receiving the results\n\nThis won’t actually execute yet, because producers must be _started_ in order to\nreceive the results (which prevents doing work when the results are never used).\nThat’s easy enough:\n\n```swift\nsearchResults.startWithNext { results in\n    print(\"Search results: \\(results)\")\n}\n```\n\nHere, we watch for the `Next` [event][Events], which contains our results, and\njust log them to the console. This could easily do something else instead, like\nupdate a table view or a label on screen.\n\n#### Handling failures\n\nIn this example so far, any network error will generate a `Failed`\n[event][Events], which will terminate the event stream. Unfortunately, this\nmeans that future queries won’t even be attempted.\n\nTo remedy this, we need to decide what to do with failures that occur. The\nquickest solution would be to log them, then ignore them:\n\n```swift\n    .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in\n        let URLRequest = self.searchRequestWithEscapedQuery(query)\n\n        return NSURLSession.sharedSession()\n            .rac_dataWithRequest(URLRequest)\n            .flatMapError { error in\n                print(\"Network error occurred: \\(error)\")\n                return SignalProducer.empty\n            }\n    }\n```\n\nBy replacing failures with the `empty` event stream, we’re able to effectively\nignore them.\n\nHowever, it’s probably more appropriate to retry at least a couple of times\nbefore giving up. Conveniently, there’s a [`retry`][retry] operator to do exactly that!\n\nOur improved `searchResults` producer might look like this:\n\n```swift\nlet searchResults = searchStrings\n    .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in\n        let URLRequest = self.searchRequestWithEscapedQuery(query)\n\n        return NSURLSession.sharedSession()\n            .rac_dataWithRequest(URLRequest)\n            .retry(2)\n            .flatMapError { error in\n                print(\"Network error occurred: \\(error)\")\n                return SignalProducer.empty\n            }\n    }\n    .map { (data, URLResponse) -> String in\n        let string = String(data: data, encoding: NSUTF8StringEncoding)!\n        return self.parseJSONResultsFromString(string)\n    }\n    .observeOn(UIScheduler())\n```\n\n#### Throttling requests\n\nNow, let’s say you only want to actually perform the search when the user pauses\ntyping, to minimize traffic.\n\nReactiveCocoa has a declarative `throttle` operator that we can apply to our\nsearch strings:\n\n```swift\nlet searchStrings = textField.rac_textSignal()\n    .toSignalProducer()\n    .map { text in text as! String }\n    .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler)\n```\n\nThis prevents values from being sent less than 0.5 seconds apart, so the user\nmust stop editing for at least that long before we’ll use their search string.\n\nTo do this manually would require significant state, and end up much harder to\nread! With ReactiveCocoa, we can use just one operator to incorporate _time_ into\nour event stream.\n\n## Objective-C and Swift\n\nAlthough ReactiveCocoa was started as an Objective-C framework, as of [version\n3.0][CHANGELOG], all major feature development is concentrated on the [Swift API][].\n\nRAC’s [Objective-C API][] and Swift API are entirely separate, but there is\na [bridge][Objective-C Bridging] to convert between the two. This\nis mostly meant as a compatibility layer for older ReactiveCocoa projects, or to\nuse Cocoa extensions which haven’t been added to the Swift API yet.\n\nThe Objective-C API will continue to exist and be supported for the foreseeable\nfuture, but it won’t receive many improvements. For more information about using\nthis API, please consult our [legacy documentation][].\n\n**We highly recommend that all new projects use the Swift API.**\n\n## How does ReactiveCocoa relate to Rx?\n\nReactiveCocoa was originally inspired, and therefore heavily influenced, by\nMicrosoft’s [Reactive\nExtensions](https://msdn.microsoft.com/en-us/data/gg577609.aspx) (Rx) library. There are many ports of Rx, including [RxSwift](https://github.com/ReactiveX/RxSwift), but ReactiveCocoa is _intentionally_ not a direct port.\n\n**Where RAC differs from Rx**, it is usually to:\n\n * Create a simpler API\n * Address common sources of confusion\n * More closely match Cocoa conventions\n\nThe following are some of the concrete differences, along with their rationales.\n\n### Naming\n\nIn most versions of Rx, Streams over time are known as `Observable`s, which\nparallels the `Enumerable` type in .NET. Additionally, most operations in Rx.NET\nborrow names from [LINQ](https://msdn.microsoft.com/en-us/library/bb397926.aspx),\nwhich uses terms reminiscent of relational databases, like `Select` and `Where`.\n\n**RAC is focused on matching Swift naming first and foremost**, with terms like\n`map` and `filter` instead. Other naming differences are typically inspired by\nsignificantly better alternatives from [Haskell](https://www.haskell.org) or\n[Elm](http://elm-lang.org) (which is the primary source for the “signal”\nterminology).\n\n### Signals and Signal Producers (“hot” and “cold” observables)\n\nOne of the most confusing aspects of Rx is that of [“hot”, “cold”, and “warm”\nobservables](http://www.introtorx.com/content/v1.0.10621.0/14_HotAndColdObservables.html) (event streams).\n\nIn short, given just a method or function declaration like this, in C#:\n\n```csharp\nIObservable<string> Search(string query)\n```\n\n… it is **impossible to tell** whether subscribing to (observing) that\n`IObservable` will involve side effects. If it _does_ involve side effects, it’s\nalso impossible to tell whether _each subscription_ has a side effect, or if only\nthe first one does.\n\nThis example is contrived, but it demonstrates **a real, pervasive problem**\nthat makes it extremely hard to understand Rx code (and pre-3.0 ReactiveCocoa\ncode) at a glance.\n\n[ReactiveCocoa 3.0][CHANGELOG] has solved this problem by distinguishing side\neffects with the separate [`Signal`][Signals] and [`SignalProducer`][Signal producers] types. Although this\nmeans there’s another type to learn about, it improves code clarity and helps\ncommunicates intent much better.\n\nIn other words, **ReactiveCocoa’s changes here are [simple, not\neasy](http://www.infoq.com/presentations/Simple-Made-Easy)**.\n\n### Typed errors\n\nWhen [signals][] and [signal producers][] are allowed to [fail][Events] in ReactiveCocoa,\nthe kind of error must be specified in the type system. For example,\n`Signal<Int, NSError>` is a signal of integer values that may fail with an error\nof type `NSError`.\n\nMore importantly, RAC allows the special type `NoError` to be used instead,\nwhich _statically guarantees_ that an event stream is not allowed to send a\nfailure. **This eliminates many bugs caused by unexpected failure events.**\n\nIn Rx systems with types, event streams only specify the type of their\nvalues—not the type of their errors—so this sort of guarantee is impossible.\n\n### UI programming\n\nRx is basically agnostic as to how it’s used. Although UI programming with Rx is\nvery common, it has few features tailored to that particular case.\n\nRAC takes a lot of inspiration from [ReactiveUI](http://reactiveui.net/),\nincluding the basis for [Actions][].\n\nUnlike ReactiveUI, which unfortunately cannot directly change Rx to make it more\nfriendly for UI programming, **ReactiveCocoa has been improved many times\nspecifically for this purpose**—even when it means diverging further from Rx.\n\n## Getting started\n\nReactiveCocoa supports `OS X 10.9+`, `iOS 8.0+`, `watchOS 2.0`, and `tvOS 9.0`.\n\nTo add RAC to your application:\n\n 1. Add the ReactiveCocoa repository as a\n    [submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules) of your\n    application’s repository.\n 1. Run `script/bootstrap` from within the ReactiveCocoa folder.\n 1. Drag and drop `ReactiveCocoa.xcodeproj` and `Carthage/Checkouts/Result/Result.xcodeproj`\n    into your application’s Xcode project or workspace.\n 1. On the “General” tab of your application target’s settings, add\n    `ReactiveCocoa.framework` and `Result.framework` to the “Embedded Binaries” section.\n 1. If your application target does not contain Swift code at all, you should also\n    set the `EMBEDDED_CONTENT_CONTAINS_SWIFT` build setting to “Yes”.\n\nOr, if you’re using [Carthage](https://github.com/Carthage/Carthage), simply add\nReactiveCocoa to your `Cartfile`:\n\n```\ngithub \"ReactiveCocoa/ReactiveCocoa\"\n```\nMake sure to add both `ReactiveCocoa.framework` and `Result.framework` to \"Linked Frameworks and Libraries\" and \"copy-frameworks\" Build Phases.\n\nIf you would prefer to use [CocoaPods](https://cocoapods.org), there are some\n[unofficial podspecs](https://github.com/CocoaPods/Specs/tree/master/Specs/ReactiveCocoa)\nthat have been generously contributed by third parties.\n\nOnce you’ve set up your project, check out the [Framework Overview][] for\na tour of ReactiveCocoa’s concepts, and the [Basic Operators][] for some\nintroductory examples of using it.\n\n\n[Actions]: Documentation/FrameworkOverview.md#actions\n[Basic Operators]: Documentation/BasicOperators.md\n[CHANGELOG]: CHANGELOG.md\n[Code]: ReactiveCocoa\n[Documentation]: Documentation\n[Events]: Documentation/FrameworkOverview.md#events\n[Framework Overview]: Documentation/FrameworkOverview.md\n[Legacy Documentation]: Documentation/Legacy\n[Objective-C API]: ReactiveCocoa/Objective-C\n[Objective-C Bridging]: Documentation/ObjectiveCBridging.md\n[Schedulers]: Documentation/FrameworkOverview.md#schedulers\n[Signal producers]: Documentation/FrameworkOverview.md#signal-producers\n[Signals]: Documentation/FrameworkOverview.md#signals\n[Swift API]: ReactiveCocoa/Swift\n[flatMapLatest]: Documentation/BasicOperators.md#switching-to-the-latest\n[retry]: Documentation/BasicOperators.md#retrying\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</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>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2014 GitHub. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/MKAnnotationView+RACSignalSupport.h",
    "content": "//\n//  MKAnnotationView+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Zak Remer on 3/31/15.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import <MapKit/MapKit.h>\n\n@class RACSignal;\n\n@interface MKAnnotationView (RACSignalSupport)\n\n/// A signal which will send a RACUnit whenever -prepareForReuse is invoked upon\n/// the receiver.\n///\n/// Examples\n///\n///  [[[self.cancelButton\n///     rac_signalForControlEvents:UIControlEventTouchUpInside]\n///     takeUntil:self.rac_prepareForReuseSignal]\n///     subscribeNext:^(UIButton *x) {\n///         // do other things\n///     }];\n@property (nonatomic, strong, readonly) RACSignal *rac_prepareForReuseSignal;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/MKAnnotationView+RACSignalSupport.m",
    "content": "//\n//  MKAnnotationView+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Zak Remer on 3/31/15.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\n#import \"MKAnnotationView+RACSignalSupport.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"NSObject+RACSelectorSignal.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACUnit.h\"\n#import <objc/runtime.h>\n\n@implementation MKAnnotationView (RACSignalSupport)\n\n- (RACSignal *)rac_prepareForReuseSignal {\n\tRACSignal *signal = objc_getAssociatedObject(self, _cmd);\n\tif (signal != nil) return signal;\n\n\tsignal = [[[self\n\t\trac_signalForSelector:@selector(prepareForReuse)]\n\t\tmapReplace:RACUnit.defaultUnit]\n\t\tsetNameWithFormat:@\"%@ -rac_prepareForReuseSignal\", RACDescription(self)];\n\n\tobjc_setAssociatedObject(self, _cmd, signal, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\treturn signal;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSArray+RACSequenceAdditions.h",
    "content": "//\n//  NSArray+RACSequenceAdditions.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSequence;\n\n@interface NSArray (RACSequenceAdditions)\n\n/// Creates and returns a sequence corresponding to the receiver.\n///\n/// Mutating the receiver will not affect the sequence after it's been created.\n@property (nonatomic, copy, readonly) RACSequence *rac_sequence;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSArray+RACSequenceAdditions.m",
    "content": "//\n//  NSArray+RACSequenceAdditions.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"NSArray+RACSequenceAdditions.h\"\n#import \"RACArraySequence.h\"\n\n@implementation NSArray (RACSequenceAdditions)\n\n- (RACSequence *)rac_sequence {\n\treturn [RACArraySequence sequenceWithArray:self offset:0];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSControl+RACCommandSupport.h",
    "content": "//\n//  NSControl+RACCommandSupport.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/3/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n@class RACCommand;\n\n@interface NSControl (RACCommandSupport)\n\n/// Sets the control's command. When the control is clicked, the command is\n/// executed with the sender of the event. The control's enabledness is bound\n/// to the command's `canExecute`.\n///\n/// Note: this will reset the control's target and action.\n@property (nonatomic, strong) RACCommand *rac_command;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSControl+RACCommandSupport.m",
    "content": "//\n//  NSControl+RACCommandSupport.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/3/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSControl+RACCommandSupport.h\"\n#import \"RACCommand.h\"\n#import \"RACScopedDisposable.h\"\n#import \"RACSignal+Operations.h\"\n#import <objc/runtime.h>\n\nstatic void *NSControlRACCommandKey = &NSControlRACCommandKey;\nstatic void *NSControlEnabledDisposableKey = &NSControlEnabledDisposableKey;\n\n@implementation NSControl (RACCommandSupport)\n\n- (RACCommand *)rac_command {\n\treturn objc_getAssociatedObject(self, NSControlRACCommandKey);\n}\n\n- (void)setRac_command:(RACCommand *)command {\n\tobjc_setAssociatedObject(self, NSControlRACCommandKey, command, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\n\t// Tear down any previous binding before setting up our new one, or else we\n\t// might get assertion failures.\n\t[objc_getAssociatedObject(self, NSControlEnabledDisposableKey) dispose];\n\tobjc_setAssociatedObject(self, NSControlEnabledDisposableKey, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\n\tif (command == nil) {\n\t\tself.enabled = YES;\n\t\treturn;\n\t}\n\t\n\t[self rac_hijackActionAndTargetIfNeeded];\n\n\tRACScopedDisposable *disposable = [[command.enabled setKeyPath:@\"enabled\" onObject:self] asScopedDisposable];\n\tobjc_setAssociatedObject(self, NSControlEnabledDisposableKey, disposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n- (void)rac_hijackActionAndTargetIfNeeded {\n\tSEL hijackSelector = @selector(rac_commandPerformAction:);\n\tif (self.target == self && self.action == hijackSelector) return;\n\t\n\tif (self.target != nil) NSLog(@\"WARNING: NSControl.rac_command hijacks the control's existing target and action.\");\n\t\n\tself.target = self;\n\tself.action = hijackSelector;\n}\n\n- (void)rac_commandPerformAction:(id)sender {\n\t[self.rac_command execute:sender];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSControl+RACTextSignalSupport.h",
    "content": "//\n//  NSControl+RACTextSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-03-08.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n@class RACSignal;\n\n@interface NSControl (RACTextSignalSupport)\n\n/// Observes a text-based control for changes.\n///\n/// Using this method on a control without editable text is considered undefined\n/// behavior.\n///\n/// Returns a signal which sends the current string value of the receiver, then\n/// the new value any time it changes.\n- (RACSignal *)rac_textSignal;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSControl+RACTextSignalSupport.m",
    "content": "//\n//  NSControl+RACTextSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-03-08.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSControl+RACTextSignalSupport.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSObject+RACDescription.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal.h\"\n#import \"RACSubscriber.h\"\n\n@implementation NSControl (RACTextSignalSupport)\n\n- (RACSignal *)rac_textSignal {\n\t@weakify(self);\n\treturn [[[[RACSignal\n\t\tcreateSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t@strongify(self);\n\t\t\tid observer = [NSNotificationCenter.defaultCenter addObserverForName:NSControlTextDidChangeNotification object:self queue:nil usingBlock:^(NSNotification *note) {\n\t\t\t\t[subscriber sendNext:note.object];\n\t\t\t}];\n\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\t[NSNotificationCenter.defaultCenter removeObserver:observer];\n\t\t\t}];\n\t\t}]\n\t\tmap:^(NSControl *control) {\n\t\t\treturn [control.stringValue copy];\n\t\t}]\n\t\tstartWith:[self.stringValue copy]]\n\t\tsetNameWithFormat:@\"%@ -rac_textSignal\", RACDescription(self)];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSData+RACSupport.h",
    "content": "//\n//  NSData+RACSupport.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 5/11/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACScheduler;\n@class RACSignal;\n\n@interface NSData (RACSupport)\n\n// Read the data at the URL using -[NSData initWithContentsOfURL:options:error:].\n// Sends the data or the error.\n//\n// scheduler - cannot be nil.\n+ (RACSignal *)rac_readContentsOfURL:(NSURL *)URL options:(NSDataReadingOptions)options scheduler:(RACScheduler *)scheduler;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSData+RACSupport.m",
    "content": "//\n//  NSData+RACSupport.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 5/11/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSData+RACSupport.h\"\n#import \"RACReplaySubject.h\"\n#import \"RACScheduler.h\"\n\n@implementation NSData (RACSupport)\n\n+ (RACSignal *)rac_readContentsOfURL:(NSURL *)URL options:(NSDataReadingOptions)options scheduler:(RACScheduler *)scheduler {\n\tNSCParameterAssert(scheduler != nil);\n\t\n\tRACReplaySubject *subject = [RACReplaySubject subject];\n\t[subject setNameWithFormat:@\"+rac_readContentsOfURL: %@ options: %lu scheduler: %@\", URL, (unsigned long)options, scheduler];\n\t\n\t[scheduler schedule:^{\n\t\tNSError *error = nil;\n\t\tNSData *data = [[NSData alloc] initWithContentsOfURL:URL options:options error:&error];\n\t\tif (data == nil) {\n\t\t\t[subject sendError:error];\n\t\t} else {\n\t\t\t[subject sendNext:data];\n\t\t\t[subject sendCompleted];\n\t\t}\n\t}];\n\t\n\treturn subject;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSDictionary+RACSequenceAdditions.h",
    "content": "//\n//  NSDictionary+RACSequenceAdditions.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSequence;\n\n@interface NSDictionary (RACSequenceAdditions)\n\n/// Creates and returns a sequence of RACTuple key/value pairs. The key will be\n/// the first element in the tuple, and the value will be the second.\n///\n/// Mutating the receiver will not affect the sequence after it's been created.\n@property (nonatomic, copy, readonly) RACSequence *rac_sequence;\n\n/// Creates and returns a sequence corresponding to the keys in the receiver.\n///\n/// Mutating the receiver will not affect the sequence after it's been created.\n@property (nonatomic, copy, readonly) RACSequence *rac_keySequence;\n\n/// Creates and returns a sequence corresponding to the values in the receiver.\n///\n/// Mutating the receiver will not affect the sequence after it's been created.\n@property (nonatomic, copy, readonly) RACSequence *rac_valueSequence;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSDictionary+RACSequenceAdditions.m",
    "content": "//\n//  NSDictionary+RACSequenceAdditions.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"NSDictionary+RACSequenceAdditions.h\"\n#import \"NSArray+RACSequenceAdditions.h\"\n#import \"RACSequence.h\"\n#import \"RACTuple.h\"\n\n@implementation NSDictionary (RACSequenceAdditions)\n\n- (RACSequence *)rac_sequence {\n\tNSDictionary *immutableDict = [self copy];\n\n\t// TODO: First class support for dictionary sequences.\n\treturn [immutableDict.allKeys.rac_sequence map:^(id key) {\n\t\tid value = immutableDict[key];\n\t\treturn RACTuplePack(key, value);\n\t}];\n}\n\n- (RACSequence *)rac_keySequence {\n\treturn self.allKeys.rac_sequence;\n}\n\n- (RACSequence *)rac_valueSequence {\n\treturn self.allValues.rac_sequence;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSEnumerator+RACSequenceAdditions.h",
    "content": "//\n//  NSEnumerator+RACSequenceAdditions.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 07/01/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSequence;\n\n@interface NSEnumerator (RACSequenceAdditions)\n\n/// Creates and returns a sequence corresponding to the receiver.\n///\n/// The receiver is exhausted lazily as the sequence is enumerated.\n@property (nonatomic, copy, readonly) RACSequence *rac_sequence;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSEnumerator+RACSequenceAdditions.m",
    "content": "//\n//  NSEnumerator+RACSequenceAdditions.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 07/01/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSEnumerator+RACSequenceAdditions.h\"\n#import \"RACSequence.h\"\n\n@implementation NSEnumerator (RACSequenceAdditions)\n\n- (RACSequence *)rac_sequence {\n\treturn [RACSequence sequenceWithHeadBlock:^{\n\t\treturn [self nextObject];\n\t} tailBlock:^{\n\t\treturn self.rac_sequence;\n\t}];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSFileHandle+RACSupport.h",
    "content": "//\n//  NSFileHandle+RACSupport.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 5/10/12.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSignal;\n\n@interface NSFileHandle (RACSupport)\n\n// Read any available data in the background and send it. Completes when data\n// length is <= 0.\n- (RACSignal *)rac_readInBackground;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSFileHandle+RACSupport.m",
    "content": "//\n//  NSFileHandle+RACSupport.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 5/10/12.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"NSFileHandle+RACSupport.h\"\n#import \"NSNotificationCenter+RACSupport.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"RACReplaySubject.h\"\n#import \"RACDisposable.h\"\n\n@implementation NSFileHandle (RACSupport)\n\n- (RACSignal *)rac_readInBackground {\n\tRACReplaySubject *subject = [RACReplaySubject subject];\n\t[subject setNameWithFormat:@\"%@ -rac_readInBackground\", RACDescription(self)];\n\n\tRACSignal *dataNotification = [[[NSNotificationCenter defaultCenter] rac_addObserverForName:NSFileHandleReadCompletionNotification object:self] map:^(NSNotification *note) {\n\t\treturn note.userInfo[NSFileHandleNotificationDataItem];\n\t}];\n\t\n\t__block RACDisposable *subscription = [dataNotification subscribeNext:^(NSData *data) {\n\t\tif (data.length > 0) {\n\t\t\t[subject sendNext:data];\n\t\t\t[self readInBackgroundAndNotify];\n\t\t} else {\n\t\t\t[subject sendCompleted];\n\t\t\t[subscription dispose];\n\t\t}\n\t}];\n\t\n\t[self readInBackgroundAndNotify];\n\t\n\treturn subject;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSIndexSet+RACSequenceAdditions.h",
    "content": "//\n//  NSIndexSet+RACSequenceAdditions.h\n//  ReactiveCocoa\n//\n//  Created by Sergey Gavrilyuk on 12/17/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSequence;\n\n@interface NSIndexSet (RACSequenceAdditions)\n\n/// Creates and returns a sequence of indexes (as `NSNumber`s) corresponding to\n/// the receiver.\n///\n/// Mutating the receiver will not affect the sequence after it's been created.\n@property (nonatomic, copy, readonly) RACSequence *rac_sequence;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSIndexSet+RACSequenceAdditions.m",
    "content": "//\n//  NSIndexSet+RACSequenceAdditions.m\n//  ReactiveCocoa\n//\n//  Created by Sergey Gavrilyuk on 12/17/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSIndexSet+RACSequenceAdditions.h\"\n#import \"RACIndexSetSequence.h\"\n\n@implementation NSIndexSet (RACSequenceAdditions)\n\n- (RACSequence *)rac_sequence {\n\treturn [RACIndexSetSequence sequenceWithIndexSet:self];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSInvocation+RACTypeParsing.h",
    "content": "//\n//  NSInvocation+RACTypeParsing.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/17/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACTuple;\n\n// A private category of methods to handle wrapping and unwrapping of values.\n@interface NSInvocation (RACTypeParsing)\n\n// Sets the argument for the invocation at the given index by unboxing the given\n// object based on the type signature of the argument.\n//\n// This does not support C arrays or unions.\n//\n// Note that calling this on a char * or const char * argument can cause all\n// arguments to be retained.\n//\n// object - The object to unbox and set as the argument.\n// index  - The index of the argument to set.\n- (void)rac_setArgument:(id)object atIndex:(NSUInteger)index;\n\n// Gets the argument for the invocation at the given index based on the\n// invocation's method signature. The value is then wrapped in the appropriate\n// object type.\n//\n// This does not support C arrays or unions.\n//\n// index  - The index of the argument to get.\n//\n// Returns the argument of the invocation, wrapped in an object.\n- (id)rac_argumentAtIndex:(NSUInteger)index;\n\n// Arguments tuple for the invocation.\n//\n// The arguments tuple excludes implicit variables `self` and `_cmd`.\n//\n// See -rac_argumentAtIndex: and -rac_setArgumentAtIndex: for further\n// description of the underlying behavior.\n@property (nonatomic, copy) RACTuple *rac_argumentsTuple;\n\n// Gets the return value from the invocation based on the invocation's method\n// signature. The value is then wrapped in the appropriate object type.\n//\n// This does not support C arrays or unions.\n//\n// Returns the return value of the invocation, wrapped in an object. Voids are\n// returned as `RACUnit.defaultUnit`.\n- (id)rac_returnValue;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSInvocation+RACTypeParsing.m",
    "content": "//\n//  NSInvocation+RACTypeParsing.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/17/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSInvocation+RACTypeParsing.h\"\n#import \"RACTuple.h\"\n#import \"RACUnit.h\"\n#import <CoreGraphics/CoreGraphics.h>\n\n@implementation NSInvocation (RACTypeParsing)\n\n- (void)rac_setArgument:(id)object atIndex:(NSUInteger)index {\n#define PULL_AND_SET(type, selector) \\\n\tdo { \\\n\t\ttype val = [object selector]; \\\n\t\t[self setArgument:&val atIndex:(NSInteger)index]; \\\n\t} while (0)\n\n\tconst char *argType = [self.methodSignature getArgumentTypeAtIndex:index];\n\t// Skip const type qualifier.\n\tif (argType[0] == 'r') {\n\t\targType++;\n\t}\n\n\tif (strcmp(argType, @encode(id)) == 0 || strcmp(argType, @encode(Class)) == 0) {\n\t\t[self setArgument:&object atIndex:(NSInteger)index];\n\t} else if (strcmp(argType, @encode(char)) == 0) {\n\t\tPULL_AND_SET(char, charValue);\n\t} else if (strcmp(argType, @encode(int)) == 0) {\n\t\tPULL_AND_SET(int, intValue);\n\t} else if (strcmp(argType, @encode(short)) == 0) {\n\t\tPULL_AND_SET(short, shortValue);\n\t} else if (strcmp(argType, @encode(long)) == 0) {\n\t\tPULL_AND_SET(long, longValue);\n\t} else if (strcmp(argType, @encode(long long)) == 0) {\n\t\tPULL_AND_SET(long long, longLongValue);\n\t} else if (strcmp(argType, @encode(unsigned char)) == 0) {\n\t\tPULL_AND_SET(unsigned char, unsignedCharValue);\n\t} else if (strcmp(argType, @encode(unsigned int)) == 0) {\n\t\tPULL_AND_SET(unsigned int, unsignedIntValue);\n\t} else if (strcmp(argType, @encode(unsigned short)) == 0) {\n\t\tPULL_AND_SET(unsigned short, unsignedShortValue);\n\t} else if (strcmp(argType, @encode(unsigned long)) == 0) {\n\t\tPULL_AND_SET(unsigned long, unsignedLongValue);\n\t} else if (strcmp(argType, @encode(unsigned long long)) == 0) {\n\t\tPULL_AND_SET(unsigned long long, unsignedLongLongValue);\n\t} else if (strcmp(argType, @encode(float)) == 0) {\n\t\tPULL_AND_SET(float, floatValue);\n\t} else if (strcmp(argType, @encode(double)) == 0) {\n\t\tPULL_AND_SET(double, doubleValue);\n\t} else if (strcmp(argType, @encode(BOOL)) == 0) {\n\t\tPULL_AND_SET(BOOL, boolValue);\n\t} else if (strcmp(argType, @encode(char *)) == 0) {\n\t\tconst char *cString = [object UTF8String];\n\t\t[self setArgument:&cString atIndex:(NSInteger)index];\n\t\t[self retainArguments];\n\t} else if (strcmp(argType, @encode(void (^)(void))) == 0) {\n\t\t[self setArgument:&object atIndex:(NSInteger)index];\n\t} else {\n\t\tNSCParameterAssert([object isKindOfClass:NSValue.class]);\n\n\t\tNSUInteger valueSize = 0;\n\t\tNSGetSizeAndAlignment([object objCType], &valueSize, NULL);\n\n#if DEBUG\n\t\tNSUInteger argSize = 0;\n\t\tNSGetSizeAndAlignment(argType, &argSize, NULL);\n\t\tNSCAssert(valueSize == argSize, @\"Value size does not match argument size in -rac_setArgument: %@ atIndex: %lu\", object, (unsigned long)index);\n#endif\n\t\t\n\t\tunsigned char valueBytes[valueSize];\n\t\t[object getValue:valueBytes];\n\n\t\t[self setArgument:valueBytes atIndex:(NSInteger)index];\n\t}\n\n#undef PULL_AND_SET\n}\n\n- (id)rac_argumentAtIndex:(NSUInteger)index {\n#define WRAP_AND_RETURN(type) \\\n\tdo { \\\n\t\ttype val = 0; \\\n\t\t[self getArgument:&val atIndex:(NSInteger)index]; \\\n\t\treturn @(val); \\\n\t} while (0)\n\n\tconst char *argType = [self.methodSignature getArgumentTypeAtIndex:index];\n\t// Skip const type qualifier.\n\tif (argType[0] == 'r') {\n\t\targType++;\n\t}\n\n\tif (strcmp(argType, @encode(id)) == 0 || strcmp(argType, @encode(Class)) == 0) {\n\t\t__autoreleasing id returnObj;\n\t\t[self getArgument:&returnObj atIndex:(NSInteger)index];\n\t\treturn returnObj;\n\t} else if (strcmp(argType, @encode(char)) == 0) {\n\t\tWRAP_AND_RETURN(char);\n\t} else if (strcmp(argType, @encode(int)) == 0) {\n\t\tWRAP_AND_RETURN(int);\n\t} else if (strcmp(argType, @encode(short)) == 0) {\n\t\tWRAP_AND_RETURN(short);\n\t} else if (strcmp(argType, @encode(long)) == 0) {\n\t\tWRAP_AND_RETURN(long);\n\t} else if (strcmp(argType, @encode(long long)) == 0) {\n\t\tWRAP_AND_RETURN(long long);\n\t} else if (strcmp(argType, @encode(unsigned char)) == 0) {\n\t\tWRAP_AND_RETURN(unsigned char);\n\t} else if (strcmp(argType, @encode(unsigned int)) == 0) {\n\t\tWRAP_AND_RETURN(unsigned int);\n\t} else if (strcmp(argType, @encode(unsigned short)) == 0) {\n\t\tWRAP_AND_RETURN(unsigned short);\n\t} else if (strcmp(argType, @encode(unsigned long)) == 0) {\n\t\tWRAP_AND_RETURN(unsigned long);\n\t} else if (strcmp(argType, @encode(unsigned long long)) == 0) {\n\t\tWRAP_AND_RETURN(unsigned long long);\n\t} else if (strcmp(argType, @encode(float)) == 0) {\n\t\tWRAP_AND_RETURN(float);\n\t} else if (strcmp(argType, @encode(double)) == 0) {\n\t\tWRAP_AND_RETURN(double);\n\t} else if (strcmp(argType, @encode(BOOL)) == 0) {\n\t\tWRAP_AND_RETURN(BOOL);\n\t} else if (strcmp(argType, @encode(char *)) == 0) {\n\t\tWRAP_AND_RETURN(const char *);\n\t} else if (strcmp(argType, @encode(void (^)(void))) == 0) {\n\t\t__unsafe_unretained id block = nil;\n\t\t[self getArgument:&block atIndex:(NSInteger)index];\n\t\treturn [block copy];\n\t} else {\n\t\tNSUInteger valueSize = 0;\n\t\tNSGetSizeAndAlignment(argType, &valueSize, NULL);\n\n\t\tunsigned char valueBytes[valueSize];\n\t\t[self getArgument:valueBytes atIndex:(NSInteger)index];\n\t\t\n\t\treturn [NSValue valueWithBytes:valueBytes objCType:argType];\n\t}\n\n\treturn nil;\n\n#undef WRAP_AND_RETURN\n}\n\n- (RACTuple *)rac_argumentsTuple {\n\tNSUInteger numberOfArguments = self.methodSignature.numberOfArguments;\n\tNSMutableArray *argumentsArray = [NSMutableArray arrayWithCapacity:numberOfArguments - 2];\n\tfor (NSUInteger index = 2; index < numberOfArguments; index++) {\n\t\t[argumentsArray addObject:[self rac_argumentAtIndex:index] ?: RACTupleNil.tupleNil];\n\t}\n\n\treturn [RACTuple tupleWithObjectsFromArray:argumentsArray];\n}\n\n- (void)setRac_argumentsTuple:(RACTuple *)arguments {\n\tNSCAssert(arguments.count == self.methodSignature.numberOfArguments - 2, @\"Number of supplied arguments (%lu), does not match the number expected by the signature (%lu)\", (unsigned long)arguments.count, (unsigned long)self.methodSignature.numberOfArguments - 2);\n\n\tNSUInteger index = 2;\n\tfor (id arg in arguments) {\n\t\t[self rac_setArgument:(arg == RACTupleNil.tupleNil ? nil : arg) atIndex:index];\n\t\tindex++;\n\t}\n}\n\n- (id)rac_returnValue {\n#define WRAP_AND_RETURN(type) \\\n\tdo { \\\n\t\ttype val = 0; \\\n\t\t[self getReturnValue:&val]; \\\n\t\treturn @(val); \\\n\t} while (0)\n\n\tconst char *returnType = self.methodSignature.methodReturnType;\n\t// Skip const type qualifier.\n\tif (returnType[0] == 'r') {\n\t\treturnType++;\n\t}\n\n\tif (strcmp(returnType, @encode(id)) == 0 || strcmp(returnType, @encode(Class)) == 0 || strcmp(returnType, @encode(void (^)(void))) == 0) {\n\t\t__autoreleasing id returnObj;\n\t\t[self getReturnValue:&returnObj];\n\t\treturn returnObj;\n\t} else if (strcmp(returnType, @encode(char)) == 0) {\n\t\tWRAP_AND_RETURN(char);\n\t} else if (strcmp(returnType, @encode(int)) == 0) {\n\t\tWRAP_AND_RETURN(int);\n\t} else if (strcmp(returnType, @encode(short)) == 0) {\n\t\tWRAP_AND_RETURN(short);\n\t} else if (strcmp(returnType, @encode(long)) == 0) {\n\t\tWRAP_AND_RETURN(long);\n\t} else if (strcmp(returnType, @encode(long long)) == 0) {\n\t\tWRAP_AND_RETURN(long long);\n\t} else if (strcmp(returnType, @encode(unsigned char)) == 0) {\n\t\tWRAP_AND_RETURN(unsigned char);\n\t} else if (strcmp(returnType, @encode(unsigned int)) == 0) {\n\t\tWRAP_AND_RETURN(unsigned int);\n\t} else if (strcmp(returnType, @encode(unsigned short)) == 0) {\n\t\tWRAP_AND_RETURN(unsigned short);\n\t} else if (strcmp(returnType, @encode(unsigned long)) == 0) {\n\t\tWRAP_AND_RETURN(unsigned long);\n\t} else if (strcmp(returnType, @encode(unsigned long long)) == 0) {\n\t\tWRAP_AND_RETURN(unsigned long long);\n\t} else if (strcmp(returnType, @encode(float)) == 0) {\n\t\tWRAP_AND_RETURN(float);\n\t} else if (strcmp(returnType, @encode(double)) == 0) {\n\t\tWRAP_AND_RETURN(double);\n\t} else if (strcmp(returnType, @encode(BOOL)) == 0) {\n\t\tWRAP_AND_RETURN(BOOL);\n\t} else if (strcmp(returnType, @encode(char *)) == 0) {\n\t\tWRAP_AND_RETURN(const char *);\n\t} else if (strcmp(returnType, @encode(void)) == 0) {\n\t\treturn RACUnit.defaultUnit;\n\t} else {\n\t\tNSUInteger valueSize = 0;\n\t\tNSGetSizeAndAlignment(returnType, &valueSize, NULL);\n\n\t\tunsigned char valueBytes[valueSize];\n\t\t[self getReturnValue:valueBytes];\n\n\t\treturn [NSValue valueWithBytes:valueBytes objCType:returnType];\n\t}\n\n\treturn nil;\n\n#undef WRAP_AND_RETURN\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSNotificationCenter+RACSupport.h",
    "content": "//\n//  NSNotificationCenter+RACSupport.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 5/10/12.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSignal;\n\n@interface NSNotificationCenter (RACSupport)\n\n// Sends the NSNotification every time the notification is posted.\n- (RACSignal *)rac_addObserverForName:(NSString *)notificationName object:(id)object;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSNotificationCenter+RACSupport.m",
    "content": "//\n//  NSNotificationCenter+RACSupport.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 5/10/12.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"NSNotificationCenter+RACSupport.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"RACSignal.h\"\n#import \"RACSubscriber.h\"\n#import \"RACDisposable.h\"\n\n@implementation NSNotificationCenter (RACSupport)\n\n- (RACSignal *)rac_addObserverForName:(NSString *)notificationName object:(id)object {\n\t@unsafeify(object);\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t@strongify(object);\n\t\tid observer = [self addObserverForName:notificationName object:object queue:nil usingBlock:^(NSNotification *note) {\n\t\t\t[subscriber sendNext:note];\n\t\t}];\n\n\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t[self removeObserver:observer];\n\t\t}];\n\t}] setNameWithFormat:@\"-rac_addObserverForName: %@ object: <%@: %p>\", notificationName, [object class], object];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACAppKitBindings.h",
    "content": "//\n//  NSObject+RACAppKitBindings.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/17/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n@class RACChannelTerminal;\n\n@interface NSObject (RACAppKitBindings)\n\n/// Invokes -rac_channelToBinding:options: without any options.\n- (RACChannelTerminal *)rac_channelToBinding:(NSString *)binding;\n\n/// Applies a Cocoa binding to the receiver, then exposes a RACChannel-based\n/// interface for manipulating it.\n///\n/// Creating two of the same bindings on the same object will result in undefined\n/// behavior.\n///\n/// binding - The name of the binding. This must not be nil.\n/// options - Any options to pass to Cocoa Bindings. This may be nil.\n///\n/// Returns a RACChannelTerminal which will send future values from the receiver,\n/// and update the receiver when values are sent to the terminal.\n- (RACChannelTerminal *)rac_channelToBinding:(NSString *)binding options:(NSDictionary *)options;\n\n@end\n\n@interface NSObject (RACUnavailableAppKitBindings)\n\n- (void)rac_bind:(NSString *)binding toObject:(id)object withKeyPath:(NSString *)keyPath __attribute__((unavailable(\"Use -rac_bind:options: instead\")));\n- (void)rac_bind:(NSString *)binding toObject:(id)object withKeyPath:(NSString *)keyPath nilValue:(id)nilValue __attribute__((unavailable(\"Use -rac_bind:options: instead\")));\n- (void)rac_bind:(NSString *)binding toObject:(id)object withKeyPath:(NSString *)keyPath transform:(id (^)(id value))transformBlock __attribute__((unavailable(\"Use -rac_bind:options: instead\")));\n- (void)rac_bind:(NSString *)binding toObject:(id)object withNegatedKeyPath:(NSString *)keyPath __attribute__((unavailable(\"Use -rac_bind:options: instead\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACAppKitBindings.m",
    "content": "//\n//  NSObject+RACAppKitBindings.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/17/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSObject+RACAppKitBindings.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSObject+RACDeallocating.h\"\n#import \"RACChannel.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACKVOChannel.h\"\n#import \"RACValueTransformer.h\"\n#import <objc/runtime.h>\n\n// Used as an object to bind to, so we can hide the object creation and just\n// expose a RACChannel instead.\n@interface RACChannelProxy : NSObject\n\n// The RACChannel used for this Cocoa binding.\n@property (nonatomic, strong, readonly) RACChannel *channel;\n\n// The KVC- and KVO-compliant property to be read and written by the Cocoa\n// binding.\n//\n// This should not be set manually.\n@property (nonatomic, strong) id value;\n\n// The target of the Cocoa binding.\n//\n// This should be set to nil when the target deallocates.\n@property (atomic, unsafe_unretained) id target;\n\n// The name of the Cocoa binding used.\n@property (nonatomic, copy, readonly) NSString *bindingName;\n\n// Improves the performance of KVO on the receiver.\n//\n// See the documentation for <NSKeyValueObserving> for more information.\n@property (atomic, assign) void *observationInfo;\n\n// Initializes the receiver and binds to the given target.\n//\n// target      - The target of the Cocoa binding. This must not be nil.\n// bindingName - The name of the Cocoa binding to use. This must not be nil.\n// options     - Any options to pass to the binding. This may be nil.\n//\n// Returns an initialized channel proxy.\n- (id)initWithTarget:(id)target bindingName:(NSString *)bindingName options:(NSDictionary *)options;\n\n@end\n\n@implementation NSObject (RACAppKitBindings)\n\n- (RACChannelTerminal *)rac_channelToBinding:(NSString *)binding {\n\treturn [self rac_channelToBinding:binding options:nil];\n}\n\n- (RACChannelTerminal *)rac_channelToBinding:(NSString *)binding options:(NSDictionary *)options {\n\tNSCParameterAssert(binding != nil);\n\n\tRACChannelProxy *proxy = [[RACChannelProxy alloc] initWithTarget:self bindingName:binding options:options];\n\treturn proxy.channel.leadingTerminal;\n}\n\n@end\n\n@implementation RACChannelProxy\n\n#pragma mark Properties\n\n- (void)setValue:(id)value {\n\t[self willChangeValueForKey:@keypath(self.value)];\n\t_value = value;\n\t[self didChangeValueForKey:@keypath(self.value)];\n}\n\n#pragma mark Lifecycle\n\n- (id)initWithTarget:(id)target bindingName:(NSString *)bindingName options:(NSDictionary *)options {\n\tNSCParameterAssert(target != nil);\n\tNSCParameterAssert(bindingName != nil);\n\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_target = target;\n\t_bindingName = [bindingName copy];\n\t_channel = [[RACChannel alloc] init];\n\n\t@weakify(self);\n\n\tvoid (^cleanUp)() = ^{\n\t\t@strongify(self);\n\n\t\tid target = self.target;\n\t\tif (target == nil) return;\n\n\t\tself.target = nil;\n\n\t\t[target unbind:bindingName];\n\t\tobjc_setAssociatedObject(target, (__bridge void *)self, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t};\n\n\t// When the channel terminates, tear down this proxy.\n\t[self.channel.followingTerminal subscribeError:^(NSError *error) {\n\t\tcleanUp();\n\t} completed:cleanUp];\n\n\t[self.target bind:bindingName toObject:self withKeyPath:@keypath(self.value) options:options];\n\n\t// Keep the proxy alive as long as the target, or until the property subject\n\t// terminates.\n\tobjc_setAssociatedObject(self.target, (__bridge void *)self, self, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\n\t[[self.target rac_deallocDisposable] addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t@strongify(self);\n\t\t[self.channel.followingTerminal sendCompleted];\n\t}]];\n\n\tRACChannelTo(self, value, options[NSNullPlaceholderBindingOption]) = self.channel.followingTerminal;\n\treturn self;\n}\n\n- (void)dealloc {\n\t[self.channel.followingTerminal sendCompleted];\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\treturn [NSString stringWithFormat:@\"<%@: %p>{ target: %@, binding: %@ }\", self.class, self, self.target, self.bindingName];\n}\n\n#pragma mark NSKeyValueObserving\n\n+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {\n\t// Generating manual notifications for `value` is simpler and more\n\t// performant than having KVO swizzle our class and add its own logic.\n\treturn NO;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACDeallocating.h",
    "content": "//\n//  NSObject+RACDeallocating.h\n//  ReactiveCocoa\n//\n//  Created by Kazuo Koga on 2013/03/15.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACCompoundDisposable;\n@class RACDisposable;\n@class RACSignal;\n\n@interface NSObject (RACDeallocating)\n\n/// The compound disposable which will be disposed of when the receiver is\n/// deallocated.\n@property (atomic, readonly, strong) RACCompoundDisposable *rac_deallocDisposable;\n\n/// Returns a signal that will complete immediately before the receiver is fully\n/// deallocated. If already deallocated when the signal is subscribed to,\n/// a `completed` event will be sent immediately.\n- (RACSignal *)rac_willDeallocSignal;\n\n@end\n\n@interface NSObject (RACUnavailableDeallocating)\n\n- (RACSignal *)rac_didDeallocSignal __attribute__((unavailable(\"Use -rac_willDeallocSignal\")));\n- (void)rac_addDeallocDisposable:(RACDisposable *)disposable __attribute__((unavailable(\"Add disposables to -rac_deallocDisposable instead\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACDeallocating.m",
    "content": "//\n//  NSObject+RACDeallocating.m\n//  ReactiveCocoa\n//\n//  Created by Kazuo Koga on 2013/03/15.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSObject+RACDeallocating.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACReplaySubject.h\"\n#import <objc/message.h>\n#import <objc/runtime.h>\n\nstatic const void *RACObjectCompoundDisposable = &RACObjectCompoundDisposable;\n\nstatic NSMutableSet *swizzledClasses() {\n\tstatic dispatch_once_t onceToken;\n\tstatic NSMutableSet *swizzledClasses = nil;\n\tdispatch_once(&onceToken, ^{\n\t\tswizzledClasses = [[NSMutableSet alloc] init];\n\t});\n\t\n\treturn swizzledClasses;\n}\n\nstatic void swizzleDeallocIfNeeded(Class classToSwizzle) {\n\t@synchronized (swizzledClasses()) {\n\t\tNSString *className = NSStringFromClass(classToSwizzle);\n\t\tif ([swizzledClasses() containsObject:className]) return;\n\n\t\tSEL deallocSelector = sel_registerName(\"dealloc\");\n\n\t\t__block void (*originalDealloc)(__unsafe_unretained id, SEL) = NULL;\n\n\t\tid newDealloc = ^(__unsafe_unretained id self) {\n\t\t\tRACCompoundDisposable *compoundDisposable = objc_getAssociatedObject(self, RACObjectCompoundDisposable);\n\t\t\t[compoundDisposable dispose];\n\n\t\t\tif (originalDealloc == NULL) {\n\t\t\t\tstruct objc_super superInfo = {\n\t\t\t\t\t.receiver = self,\n\t\t\t\t\t.super_class = class_getSuperclass(classToSwizzle)\n\t\t\t\t};\n\n\t\t\t\tvoid (*msgSend)(struct objc_super *, SEL) = (__typeof__(msgSend))objc_msgSendSuper;\n\t\t\t\tmsgSend(&superInfo, deallocSelector);\n\t\t\t} else {\n\t\t\t\toriginalDealloc(self, deallocSelector);\n\t\t\t}\n\t\t};\n\t\t\n\t\tIMP newDeallocIMP = imp_implementationWithBlock(newDealloc);\n\t\t\n\t\tif (!class_addMethod(classToSwizzle, deallocSelector, newDeallocIMP, \"v@:\")) {\n\t\t\t// The class already contains a method implementation.\n\t\t\tMethod deallocMethod = class_getInstanceMethod(classToSwizzle, deallocSelector);\n\t\t\t\n\t\t\t// We need to store original implementation before setting new implementation\n\t\t\t// in case method is called at the time of setting.\n\t\t\toriginalDealloc = (__typeof__(originalDealloc))method_getImplementation(deallocMethod);\n\t\t\t\n\t\t\t// We need to store original implementation again, in case it just changed.\n\t\t\toriginalDealloc = (__typeof__(originalDealloc))method_setImplementation(deallocMethod, newDeallocIMP);\n\t\t}\n\n\t\t[swizzledClasses() addObject:className];\n\t}\n}\n\n@implementation NSObject (RACDeallocating)\n\n- (RACSignal *)rac_willDeallocSignal {\n\tRACSignal *signal = objc_getAssociatedObject(self, _cmd);\n\tif (signal != nil) return signal;\n\n\tRACReplaySubject *subject = [RACReplaySubject subject];\n\n\t[self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t[subject sendCompleted];\n\t}]];\n\n\tobjc_setAssociatedObject(self, _cmd, subject, OBJC_ASSOCIATION_RETAIN);\n\n\treturn subject;\n}\n\n- (RACCompoundDisposable *)rac_deallocDisposable {\n\t@synchronized (self) {\n\t\tRACCompoundDisposable *compoundDisposable = objc_getAssociatedObject(self, RACObjectCompoundDisposable);\n\t\tif (compoundDisposable != nil) return compoundDisposable;\n\n\t\tswizzleDeallocIfNeeded(self.class);\n\n\t\tcompoundDisposable = [RACCompoundDisposable compoundDisposable];\n\t\tobjc_setAssociatedObject(self, RACObjectCompoundDisposable, compoundDisposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\n\t\treturn compoundDisposable;\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACDescription.h",
    "content": "//\n//  NSObject+RACDescription.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-05-13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n// A simplified description of the object, which does not invoke -description\n// (and thus should be much faster in many cases).\n//\n// This is for debugging purposes only, and will return a constant string\n// unless the RAC_DEBUG_SIGNAL_NAMES environment variable is set.\nNSString *RACDescription(id object);"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACDescription.m",
    "content": "//\n//  NSObject+RACDescription.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-05-13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSObject+RACDescription.h\"\n#import \"RACTuple.h\"\n\n@implementation NSValue (RACDescription)\n\n- (NSString *)rac_description {\n\treturn self.description;\n}\n\n@end\n\n@implementation NSString (RACDescription)\n\n- (NSString *)rac_description {\n\treturn self.description;\n}\n\n@end\n\n@implementation RACTuple (RACDescription)\n\n- (NSString *)rac_description {\n\tif (getenv(\"RAC_DEBUG_SIGNAL_NAMES\") != NULL) {\n\t\treturn self.allObjects.description;\n\t} else {\n\t\treturn @\"(description skipped)\";\n\t}\n}\n\n@end\n\nNSString *RACDescription(id object) {\n\tif (getenv(\"RAC_DEBUG_SIGNAL_NAMES\") != NULL) {\n\t\tif ([object respondsToSelector:@selector(rac_description)]) {\n\t\t\treturn [object rac_description];\n\t\t} else {\n\t\t\treturn [[NSString alloc] initWithFormat:@\"<%@: %p>\", [object class], object];\n\t\t}\n\t} else {\n\t\treturn @\"(description skipped)\";\n\t}\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACKVOWrapper.h",
    "content": "//\n//  NSObject+RACKVOWrapper.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 10/11/11.\n//  Copyright (c) 2011 GitHub. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACDisposable;\n@class RACKVOTrampoline;\n\n// A private category providing a block based interface to KVO.\n@interface NSObject (RACKVOWrapper)\n\n// Adds the given block as the callbacks for when the key path changes.\n//\n// Unlike direct KVO observation, this handles deallocation of `weak` properties\n// by generating an appropriate notification. This will only occur if there is\n// an `@property` declaration visible in the observed class, with the `weak`\n// memory management attribute.\n//\n// The observation does not need to be explicitly removed. It will be removed\n// when the observer or the receiver deallocate.\n//\n// keyPath  - The key path to observe. Must not be nil.\n// options  - The KVO observation options.\n// observer - The object that requested the observation. May be nil.\n// block    - The block called when the value at the key path changes. It is\n//            passed the current value of the key path and the extended KVO\n//            change dictionary including RAC-specific keys and values. Must not\n//            be nil.\n//\n// Returns a disposable that can be used to stop the observation.\n- (RACDisposable *)rac_observeKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(__weak NSObject *)observer block:(void (^)(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent))block;\n\n@end\n\ntypedef void (^RACKVOBlock)(id target, id observer, NSDictionary *change);\n\n@interface NSObject (RACUnavailableKVOWrapper)\n\n- (RACKVOTrampoline *)rac_addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(RACKVOBlock)block __attribute((unavailable(\"Use rac_observeKeyPath:options:observer:block: instead.\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACKVOWrapper.m",
    "content": "//\n//  NSObject+RACKVOWrapper.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 10/11/11.\n//  Copyright (c) 2011 GitHub. All rights reserved.\n//\n\n#import \"NSObject+RACKVOWrapper.h\"\n#import <ReactiveCocoa/EXTRuntimeExtensions.h>\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSString+RACKeyPathUtilities.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACKVOTrampoline.h\"\n#import \"RACSerialDisposable.h\"\n\n@implementation NSObject (RACKVOWrapper)\n\n- (RACDisposable *)rac_observeKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(__weak NSObject *)weakObserver block:(void (^)(id, NSDictionary *, BOOL, BOOL))block {\n\tNSCParameterAssert(block != nil);\n\tNSCParameterAssert(keyPath.rac_keyPathComponents.count > 0);\n\n\tkeyPath = [keyPath copy];\n\n\tNSObject *strongObserver = weakObserver;\n\n\tNSArray *keyPathComponents = keyPath.rac_keyPathComponents;\n\tBOOL keyPathHasOneComponent = (keyPathComponents.count == 1);\n\tNSString *keyPathHead = keyPathComponents[0];\n\tNSString *keyPathTail = keyPath.rac_keyPathByDeletingFirstKeyPathComponent;\n\n\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];\n\n\t// The disposable that groups all disposal necessary to clean up the callbacks\n\t// added to the value of the first key path component.\n\tRACSerialDisposable *firstComponentSerialDisposable = [RACSerialDisposable serialDisposableWithDisposable:[RACCompoundDisposable compoundDisposable]];\n\tRACCompoundDisposable * (^firstComponentDisposable)(void) = ^{\n\t\treturn (RACCompoundDisposable *)firstComponentSerialDisposable.disposable;\n\t};\n\n\t[disposable addDisposable:firstComponentSerialDisposable];\n\n\tBOOL shouldAddDeallocObserver = NO;\n\n\tobjc_property_t property = class_getProperty(object_getClass(self), keyPathHead.UTF8String);\n\tif (property != NULL) {\n\t\trac_propertyAttributes *attributes = rac_copyPropertyAttributes(property);\n\t\tif (attributes != NULL) {\n\t\t\t@onExit {\n\t\t\t\tfree(attributes);\n\t\t\t};\n\n\t\t\tBOOL isObject = attributes->objectClass != nil || strstr(attributes->type, @encode(id)) == attributes->type;\n\t\t\tBOOL isProtocol = attributes->objectClass == NSClassFromString(@\"Protocol\");\n\t\t\tBOOL isBlock = strcmp(attributes->type, @encode(void(^)())) == 0;\n\t\t\tBOOL isWeak = attributes->weak;\n\n\t\t\t// If this property isn't actually an object (or is a Class object),\n\t\t\t// no point in observing the deallocation of the wrapper returned by\n\t\t\t// KVC.\n\t\t\t//\n\t\t\t// If this property is an object, but not declared `weak`, we\n\t\t\t// don't need to watch for it spontaneously being set to nil.\n\t\t\t//\n\t\t\t// Attempting to observe non-weak properties will result in\n\t\t\t// broken behavior for dynamic getters, so don't even try.\n\t\t\tshouldAddDeallocObserver = isObject && isWeak && !isBlock && !isProtocol;\n\t\t}\n\t}\n\n\t// Adds the callback block to the value's deallocation. Also adds the logic to\n\t// clean up the callback to the firstComponentDisposable.\n\tvoid (^addDeallocObserverToPropertyValue)(NSObject *) = ^(NSObject *value) {\n\t\tif (!shouldAddDeallocObserver) return;\n\n\t\t// If a key path value is the observer, commonly when a key path begins\n\t\t// with \"self\", we prevent deallocation triggered callbacks for any such key\n\t\t// path components. Thus, the observer's deallocation is not considered a\n\t\t// change to the key path.\n\t\tif (value == weakObserver) return;\n\n\t\tNSDictionary *change = @{\n\t\t\tNSKeyValueChangeKindKey: @(NSKeyValueChangeSetting),\n\t\t\tNSKeyValueChangeNewKey: NSNull.null,\n\t\t};\n\n\t\tRACCompoundDisposable *valueDisposable = value.rac_deallocDisposable;\n\t\tRACDisposable *deallocDisposable = [RACDisposable disposableWithBlock:^{\n\t\t\tblock(nil, change, YES, keyPathHasOneComponent);\n\t\t}];\n\n\t\t[valueDisposable addDisposable:deallocDisposable];\n\t\t[firstComponentDisposable() addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t[valueDisposable removeDisposable:deallocDisposable];\n\t\t}]];\n\t};\n\n\t// Adds the callback block to the remaining path components on the value. Also\n\t// adds the logic to clean up the callbacks to the firstComponentDisposable.\n\tvoid (^addObserverToValue)(NSObject *) = ^(NSObject *value) {\n\t\tRACDisposable *observerDisposable = [value rac_observeKeyPath:keyPathTail options:(options & ~NSKeyValueObservingOptionInitial) observer:weakObserver block:block];\n\t\t[firstComponentDisposable() addDisposable:observerDisposable];\n\t};\n\n\t// Observe only the first key path component, when the value changes clean up\n\t// the callbacks on the old value, add callbacks to the new value and call the\n\t// callback block as needed.\n\t//\n\t// Note this does not use NSKeyValueObservingOptionInitial so this only\n\t// handles changes to the value, callbacks to the initial value must be added\n\t// separately.\n\tNSKeyValueObservingOptions trampolineOptions = (options | NSKeyValueObservingOptionPrior) & ~NSKeyValueObservingOptionInitial;\n\tRACKVOTrampoline *trampoline = [[RACKVOTrampoline alloc] initWithTarget:self observer:strongObserver keyPath:keyPathHead options:trampolineOptions block:^(id trampolineTarget, id trampolineObserver, NSDictionary *change) {\n\t\t// If this is a prior notification, clean up all the callbacks added to the\n\t\t// previous value and call the callback block. Everything else is deferred\n\t\t// until after we get the notification after the change.\n\t\tif ([change[NSKeyValueChangeNotificationIsPriorKey] boolValue]) {\n\t\t\t[firstComponentDisposable() dispose];\n\n\t\t\tif ((options & NSKeyValueObservingOptionPrior) != 0) {\n\t\t\t\tblock([trampolineTarget valueForKeyPath:keyPath], change, NO, keyPathHasOneComponent);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// From here the notification is not prior.\n\t\tNSObject *value = [trampolineTarget valueForKey:keyPathHead];\n\n\t\t// If the value has changed but is nil, there is no need to add callbacks to\n\t\t// it, just call the callback block.\n\t\tif (value == nil) {\n\t\t\tblock(nil, change, NO, keyPathHasOneComponent);\n\t\t\treturn;\n\t\t}\n\n\t\t// From here the notification is not prior and the value is not nil.\n\n\t\t// Create a new firstComponentDisposable while getting rid of the old one at\n\t\t// the same time, in case this is being called concurrently.\n\t\tRACDisposable *oldFirstComponentDisposable = [firstComponentSerialDisposable swapInDisposable:[RACCompoundDisposable compoundDisposable]];\n\t\t[oldFirstComponentDisposable dispose];\n\n\t\taddDeallocObserverToPropertyValue(value);\n\n\t\t// If there are no further key path components, there is no need to add the\n\t\t// other callbacks, just call the callback block with the value itself.\n\t\tif (keyPathHasOneComponent) {\n\t\t\tblock(value, change, NO, keyPathHasOneComponent);\n\t\t\treturn;\n\t\t}\n\n\t\t// The value has changed, is not nil, and there are more key path components\n\t\t// to consider. Add the callbacks to the value for the remaining key path\n\t\t// components and call the callback block with the current value of the full\n\t\t// key path.\n\t\taddObserverToValue(value);\n\t\tblock([value valueForKeyPath:keyPathTail], change, NO, keyPathHasOneComponent);\n\t}];\n\n\t// Stop the KVO observation when this one is disposed of.\n\t[disposable addDisposable:trampoline];\n\n\t// Add the callbacks to the initial value if needed.\n\tNSObject *value = [self valueForKey:keyPathHead];\n\tif (value != nil) {\n\t\taddDeallocObserverToPropertyValue(value);\n\n\t\tif (!keyPathHasOneComponent) {\n\t\t\taddObserverToValue(value);\n\t\t}\n\t}\n\n\t// Call the block with the initial value if needed.\n\tif ((options & NSKeyValueObservingOptionInitial) != 0) {\n\t\tid initialValue = [self valueForKeyPath:keyPath];\n\t\tNSDictionary *initialChange = @{\n\t\t\tNSKeyValueChangeKindKey: @(NSKeyValueChangeSetting),\n\t\t\tNSKeyValueChangeNewKey: initialValue ?: NSNull.null,\n\t\t};\n\t\tblock(initialValue, initialChange, NO, keyPathHasOneComponent);\n\t}\n\n\n\tRACCompoundDisposable *observerDisposable = strongObserver.rac_deallocDisposable;\n\tRACCompoundDisposable *selfDisposable = self.rac_deallocDisposable;\n\t// Dispose of this observation if the receiver or the observer deallocate.\n\t[observerDisposable addDisposable:disposable];\n\t[selfDisposable addDisposable:disposable];\n\n\treturn [RACDisposable disposableWithBlock:^{\n\t\t[disposable dispose];\n\t\t[observerDisposable removeDisposable:disposable];\n\t\t[selfDisposable removeDisposable:disposable];\n\t}];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACLifting.h",
    "content": "//\n//  NSObject+RACLifting.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 10/13/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSignal;\n\n@interface NSObject (RACLifting)\n\n/// Lifts the selector on the receiver into the reactive world. The selector will\n/// be invoked whenever any signal argument sends a value, but only after each\n/// signal has sent an initial value.\n///\n/// It will replay the most recently sent value to new subscribers.\n///\n/// This does not support C arrays or unions.\n///\n/// selector    - The selector on self to invoke.\n/// firstSignal - The signal corresponding to the first method argument. This\n///               must not be nil.\n/// ...         - A list of RACSignals corresponding to the remaining arguments.\n///               There must be a non-nil signal for each method argument.\n///\n/// Examples\n///\n///   [button rac_liftSelector:@selector(setTitleColor:forState:) withSignals:textColorSignal, [RACSignal return:@(UIControlStateNormal)], nil];\n///\n/// Returns a signal which sends the return value from each invocation of the\n/// selector. If the selector returns void, it instead sends RACUnit.defaultUnit.\n/// It completes only after all the signal arguments complete.\n- (RACSignal *)rac_liftSelector:(SEL)selector withSignals:(RACSignal *)firstSignal, ... NS_REQUIRES_NIL_TERMINATION;\n\n/// Like -rac_liftSelector:withSignals:, but accepts an array instead of\n/// a variadic list of arguments.\n- (RACSignal *)rac_liftSelector:(SEL)selector withSignalsFromArray:(NSArray *)signals;\n\n/// Like -rac_liftSelector:withSignals:, but accepts a signal sending tuples of\n/// arguments instead of a variadic list of arguments.\n- (RACSignal *)rac_liftSelector:(SEL)selector withSignalOfArguments:(RACSignal *)arguments;\n\n@end\n\n@interface NSObject (RACUnavailableLifting)\n\n- (RACSignal *)rac_liftSelector:(SEL)selector withObjects:(id)arg, ... __attribute__((unavailable(\"Use -rac_liftSelector:withSignals: instead\")));\n- (RACSignal *)rac_liftSelector:(SEL)selector withObjectsFromArray:(NSArray *)args __attribute__((unavailable(\"Use -rac_liftSelector:withSignalsFromArray: instead\")));\n- (RACSignal *)rac_liftBlock:(id)block withArguments:(id)arg, ... NS_REQUIRES_NIL_TERMINATION __attribute__((unavailable(\"Use +combineLatest:reduce: instead\")));\n- (RACSignal *)rac_liftBlock:(id)block withArgumentsFromArray:(NSArray *)args __attribute__((unavailable(\"Use +combineLatest:reduce: instead\")));\n\n- (instancetype)rac_lift __attribute__((unavailable(\"Use -rac_liftSelector:withSignals: instead\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACLifting.m",
    "content": "//\n//  NSObject+RACLifting.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 10/13/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSObject+RACLifting.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSInvocation+RACTypeParsing.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACTuple.h\"\n\n@implementation NSObject (RACLifting)\n\n- (RACSignal *)rac_liftSelector:(SEL)selector withSignalOfArguments:(RACSignal *)arguments {\n\tNSCParameterAssert(selector != NULL);\n\tNSCParameterAssert(arguments != nil);\n\t\n\t@unsafeify(self);\n\t\n\tNSMethodSignature *methodSignature = [self methodSignatureForSelector:selector];\n\tNSCAssert(methodSignature != nil, @\"%@ does not respond to %@\", self, NSStringFromSelector(selector));\n\t\n\treturn [[[[arguments\n\t\ttakeUntil:self.rac_willDeallocSignal]\n\t\tmap:^(RACTuple *arguments) {\n\t\t\t@strongify(self);\n\t\t\t\n\t\t\tNSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];\n\t\t\tinvocation.selector = selector;\n\t\t\tinvocation.rac_argumentsTuple = arguments;\n\t\t\t[invocation invokeWithTarget:self];\n\t\t\t\n\t\t\treturn invocation.rac_returnValue;\n\t\t}]\n\t\treplayLast]\n\t\tsetNameWithFormat:@\"%@ -rac_liftSelector: %s withSignalsOfArguments: %@\", RACDescription(self), sel_getName(selector), arguments];\n}\n\n- (RACSignal *)rac_liftSelector:(SEL)selector withSignalsFromArray:(NSArray *)signals {\n\tNSCParameterAssert(signals != nil);\n\tNSCParameterAssert(signals.count > 0);\n\n\tNSMethodSignature *methodSignature = [self methodSignatureForSelector:selector];\n\tNSCAssert(methodSignature != nil, @\"%@ does not respond to %@\", self, NSStringFromSelector(selector));\n\n\tNSUInteger numberOfArguments __attribute__((unused)) = methodSignature.numberOfArguments - 2;\n\tNSCAssert(numberOfArguments == signals.count, @\"Wrong number of signals for %@ (expected %lu, got %lu)\", NSStringFromSelector(selector), (unsigned long)numberOfArguments, (unsigned long)signals.count);\n\n\treturn [[self\n\t\trac_liftSelector:selector withSignalOfArguments:[RACSignal combineLatest:signals]]\n\t\tsetNameWithFormat:@\"%@ -rac_liftSelector: %s withSignalsFromArray: %@\", RACDescription(self), sel_getName(selector), signals];\n}\n\n- (RACSignal *)rac_liftSelector:(SEL)selector withSignals:(RACSignal *)firstSignal, ... {\n\tNSCParameterAssert(firstSignal != nil);\n\n\tNSMutableArray *signals = [NSMutableArray array];\n\n\tva_list args;\n\tva_start(args, firstSignal);\n\tfor (id currentSignal = firstSignal; currentSignal != nil; currentSignal = va_arg(args, id)) {\n\t\tNSCAssert([currentSignal isKindOfClass:RACSignal.class], @\"Argument %@ is not a RACSignal\", currentSignal);\n\n\t\t[signals addObject:currentSignal];\n\t}\n\tva_end(args);\n\n\treturn [[self\n\t\trac_liftSelector:selector withSignalsFromArray:signals]\n\t\tsetNameWithFormat:@\"%@ -rac_liftSelector: %s withSignals: %@\", RACDescription(self), sel_getName(selector), signals];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACPropertySubscribing.h",
    "content": "//\n//  NSObject+RACPropertySubscribing.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/2/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"metamacros.h\"\n\n/// Creates a signal which observes `KEYPATH` on `TARGET` for changes.\n///\n/// In either case, the observation continues until `TARGET` _or self_ is\n/// deallocated. If any intermediate object is deallocated instead, it will be\n/// assumed to have been set to nil.\n///\n/// Make sure to `@strongify(self)` when using this macro within a block! The\n/// macro will _always_ reference `self`, which can silently introduce a retain\n/// cycle within a block. As a result, you should make sure that `self` is a weak\n/// reference (e.g., created by `@weakify` and `@strongify`) before the\n/// expression that uses `RACObserve`.\n///\n/// Examples\n///\n///    // Observes self, and doesn't stop until self is deallocated.\n///    RACSignal *selfSignal = RACObserve(self, arrayController.items);\n///\n///    // Observes the array controller, and stops when self _or_ the array\n///    // controller is deallocated.\n///    RACSignal *arrayControllerSignal = RACObserve(self.arrayController, items);\n///\n///    // Observes obj.arrayController, and stops when self _or_ the array\n///    // controller is deallocated.\n///    RACSignal *signal2 = RACObserve(obj.arrayController, items);\n///\n///    @weakify(self);\n///    RACSignal *signal3 = [anotherSignal flattenMap:^(NSArrayController *arrayController) {\n///        // Avoids a retain cycle because of RACObserve implicitly referencing\n///        // self.\n///        @strongify(self);\n///        return RACObserve(arrayController, items);\n///    }];\n///\n/// Returns a signal which sends the current value of the key path on\n/// subscription, then sends the new value every time it changes, and sends\n/// completed if self or observer is deallocated.\n#define RACObserve(TARGET, KEYPATH) \\\n\t({ \\\n\t\t_Pragma(\"clang diagnostic push\") \\\n\t\t_Pragma(\"clang diagnostic ignored \\\"-Wreceiver-is-weak\\\"\") \\\n\t\t__weak id target_ = (TARGET); \\\n\t\t[target_ rac_valuesForKeyPath:@keypath(TARGET, KEYPATH) observer:self]; \\\n\t\t_Pragma(\"clang diagnostic pop\") \\\n\t})\n\n@class RACDisposable;\n@class RACSignal;\n\n@interface NSObject (RACPropertySubscribing)\n\n/// Creates a signal to observe the value at the given key path.\n///\n/// The initial value is sent on subscription, the subsequent values are sent\n/// from whichever thread the change occured on, even if it doesn't have a valid\n/// scheduler.\n///\n/// Returns a signal that immediately sends the receiver's current value at the\n/// given keypath, then any changes thereafter.\n#if OS_OBJECT_HAVE_OBJC_SUPPORT\n- (RACSignal *)rac_valuesForKeyPath:(NSString *)keyPath observer:(__weak NSObject *)observer;\n#else\n// Swift builds with OS_OBJECT_HAVE_OBJC_SUPPORT=0 for Playgrounds and LLDB :(\n- (RACSignal *)rac_valuesForKeyPath:(NSString *)keyPath observer:(NSObject *)observer;\n#endif\n\n/// Creates a signal to observe the changes of the given key path.\n///\n/// The initial value is sent on subscription if `NSKeyValueObservingOptionInitial` is set.\n/// The subsequent values are sent from whichever thread the change occured on,\n/// even if it doesn't have a valid scheduler.\n///\n/// Returns a signal that sends tuples containing the current value at the key\n/// path and the change dictionary for each KVO callback.\n#if OS_OBJECT_HAVE_OBJC_SUPPORT\n- (RACSignal *)rac_valuesAndChangesForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(__weak NSObject *)observer;\n#else\n- (RACSignal *)rac_valuesAndChangesForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(NSObject *)observer;\n#endif\n\n@end\n\n#define RACAble(...) \\\n\tmetamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \\\n\t\t(_RACAbleObject(self, __VA_ARGS__)) \\\n\t\t(_RACAbleObject(__VA_ARGS__))\n\n#define _RACAbleObject(object, property) [object rac_signalForKeyPath:@keypath(object, property) observer:self]\n\n#define RACAbleWithStart(...) \\\n\tmetamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \\\n\t\t(_RACAbleWithStartObject(self, __VA_ARGS__)) \\\n\t\t(_RACAbleWithStartObject(__VA_ARGS__))\n\n#define _RACAbleWithStartObject(object, property) [object rac_signalWithStartingValueForKeyPath:@keypath(object, property) observer:self]\n\n@interface NSObject (RACUnavailablePropertySubscribing)\n\n+ (RACSignal *)rac_signalFor:(NSObject *)object keyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((unavailable(\"Use -rac_valuesForKeyPath:observer: or RACObserve() instead.\")));\n+ (RACSignal *)rac_signalWithStartingValueFor:(NSObject *)object keyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((unavailable(\"Use -rac_valuesForKeyPath:observer: or RACObserve() instead.\")));\n+ (RACSignal *)rac_signalWithChangesFor:(NSObject *)object keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(NSObject *)observer __attribute__((unavailable(\"Use -rac_valuesAndChangesForKeyPath:options:observer: instead.\")));\n- (RACSignal *)rac_signalForKeyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((unavailable(\"Use -rac_valuesForKeyPath:observer: or RACObserve() instead.\")));\n- (RACSignal *)rac_signalWithStartingValueForKeyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((unavailable(\"Use -rac_valuesForKeyPath:observer: or RACObserve() instead.\")));\n- (RACDisposable *)rac_deriveProperty:(NSString *)keyPath from:(RACSignal *)signal __attribute__((unavailable(\"Use -[RACSignal setKeyPath:onObject:] instead\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACPropertySubscribing.m",
    "content": "//\n//  NSObject+RACPropertySubscribing.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/2/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSObject+RACPropertySubscribing.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"NSObject+RACKVOWrapper.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACKVOTrampoline.h\"\n#import \"RACSubscriber.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACTuple.h\"\n#import <libkern/OSAtomic.h>\n\n@implementation NSObject (RACPropertySubscribing)\n\n- (RACSignal *)rac_valuesForKeyPath:(NSString *)keyPath observer:(__weak NSObject *)observer {\n\treturn [[[self\n\t\trac_valuesAndChangesForKeyPath:keyPath options:NSKeyValueObservingOptionInitial observer:observer]\n\t\tmap:^(RACTuple *value) {\n\t\t\t// -map: because it doesn't require the block trampoline that -reduceEach: uses\n\t\t\treturn value[0];\n\t\t}]\n\t\tsetNameWithFormat:@\"RACObserve(%@, %@)\", RACDescription(self), keyPath];\n}\n\n- (RACSignal *)rac_valuesAndChangesForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(__weak NSObject *)weakObserver {\n\tNSObject *strongObserver = weakObserver;\n\tkeyPath = [keyPath copy];\n\n\tNSRecursiveLock *objectLock = [[NSRecursiveLock alloc] init];\n\tobjectLock.name = @\"org.reactivecocoa.ReactiveCocoa.NSObjectRACPropertySubscribing\";\n\n\t__weak NSObject *weakSelf = self;\n\n\tRACSignal *deallocSignal = [[RACSignal\n\t\tzip:@[\n\t\t\tself.rac_willDeallocSignal,\n\t\t\tstrongObserver.rac_willDeallocSignal ?: [RACSignal never]\n\t\t]]\n\t\tdoCompleted:^{\n\t\t\t// Forces deallocation to wait if the object variables are currently\n\t\t\t// being read on another thread.\n\t\t\t[objectLock lock];\n\t\t\t@onExit {\n\t\t\t\t[objectLock unlock];\n\t\t\t};\n\t\t}];\n\n\treturn [[[RACSignal\n\t\tcreateSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t// Hold onto the lock the whole time we're setting up the KVO\n\t\t\t// observation, because any resurrection that might be caused by our\n\t\t\t// retaining below must be balanced out by the time -dealloc returns\n\t\t\t// (if another thread is waiting on the lock above).\n\t\t\t[objectLock lock];\n\t\t\t@onExit {\n\t\t\t\t[objectLock unlock];\n\t\t\t};\n\n\t\t\t__strong NSObject *observer __attribute__((objc_precise_lifetime)) = weakObserver;\n\t\t\t__strong NSObject *self __attribute__((objc_precise_lifetime)) = weakSelf;\n\n\t\t\tif (self == nil) {\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t\treturn nil;\n\t\t\t}\n\n\t\t\treturn [self rac_observeKeyPath:keyPath options:options observer:observer block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t\t[subscriber sendNext:RACTuplePack(value, change)];\n\t\t\t}];\n\t\t}]\n\t\ttakeUntil:deallocSignal]\n\t\tsetNameWithFormat:@\"%@ -rac_valueAndChangesForKeyPath: %@ options: %lu observer: %@\", RACDescription(self), keyPath, (unsigned long)options, RACDescription(strongObserver)];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACSelectorSignal.h",
    "content": "//\n//  NSObject+RACSelectorSignal.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/18/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSignal;\n\n/// The domain for any errors originating from -rac_signalForSelector:.\nextern NSString * const RACSelectorSignalErrorDomain;\n\n/// -rac_signalForSelector: was going to add a new method implementation for\n/// `selector`, but another thread added an implementation before it was able to.\n///\n/// This will _not_ occur for cases where a method implementation exists before\n/// -rac_signalForSelector: is invoked.\nextern const NSInteger RACSelectorSignalErrorMethodSwizzlingRace;\n\n@interface NSObject (RACSelectorSignal)\n\n/// Creates a signal associated with the receiver, which will send a tuple of the\n/// method's arguments each time the given selector is invoked.\n///\n/// If the selector is already implemented on the receiver, the existing\n/// implementation will be invoked _before_ the signal fires.\n///\n/// If the selector is not yet implemented on the receiver, the injected\n/// implementation will have a `void` return type and accept only object\n/// arguments. Invoking the added implementation with non-object values, or\n/// expecting a return value, will result in undefined behavior.\n///\n/// This is useful for changing an event or delegate callback into a signal. For\n/// example, on an NSView:\n///\n///     [[view rac_signalForSelector:@selector(mouseDown:)] subscribeNext:^(RACTuple *args) {\n///         NSEvent *event = args.first;\n///         NSLog(@\"mouse button pressed: %@\", event);\n///     }];\n///\n/// selector - The selector for whose invocations are to be observed. If it\n///            doesn't exist, it will be implemented to accept object arguments\n///            and return void. This cannot have C arrays or unions as arguments\n///            or C arrays, unions, structs, complex or vector types as return\n///            type.\n///\n/// Returns a signal which will send a tuple of arguments upon each invocation of\n/// the selector, then completes when the receiver is deallocated. `next` events\n/// will be sent synchronously from the thread that invoked the method. If\n/// a runtime call fails, the signal will send an error in the\n/// RACSelectorSignalErrorDomain.\n- (RACSignal *)rac_signalForSelector:(SEL)selector;\n\n/// Behaves like -rac_signalForSelector:, but if the selector is not yet\n/// implemented on the receiver, its method signature is looked up within\n/// `protocol`, and may accept non-object arguments.\n///\n/// If the selector is not yet implemented and has a return value, the injected\n/// method will return all zero bits (equal to `nil`, `NULL`, 0, 0.0f, etc.).\n///\n/// selector - The selector for whose invocations are to be observed. If it\n///            doesn't exist, it will be implemented using information from\n///            `protocol`, and may accept non-object arguments and return\n///            a value. This cannot have C arrays or unions as arguments or\n///            return type.\n/// protocol - The protocol in which `selector` is declared. This will be used\n///            for type information if the selector is not already implemented on\n///            the receiver. This must not be `NULL`, and `selector` must exist\n///            in this protocol.\n///\n/// Returns a signal which will send a tuple of arguments on each invocation of\n/// the selector, or an error in RACSelectorSignalErrorDomain if a runtime\n/// call fails.\n- (RACSignal *)rac_signalForSelector:(SEL)selector fromProtocol:(Protocol *)protocol;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSObject+RACSelectorSignal.m",
    "content": "//\n//  NSObject+RACSelectorSignal.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/18/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSObject+RACSelectorSignal.h\"\n#import <ReactiveCocoa/EXTRuntimeExtensions.h>\n#import \"NSInvocation+RACTypeParsing.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACObjCRuntime.h\"\n#import \"RACSubject.h\"\n#import \"RACTuple.h\"\n#import \"NSObject+RACDescription.h\"\n#import <objc/message.h>\n#import <objc/runtime.h>\n\nNSString * const RACSelectorSignalErrorDomain = @\"RACSelectorSignalErrorDomain\";\nconst NSInteger RACSelectorSignalErrorMethodSwizzlingRace = 1;\n\nstatic NSString * const RACSignalForSelectorAliasPrefix = @\"rac_alias_\";\nstatic NSString * const RACSubclassSuffix = @\"_RACSelectorSignal\";\nstatic void *RACSubclassAssociationKey = &RACSubclassAssociationKey;\n\nstatic NSMutableSet *swizzledClasses() {\n\tstatic NSMutableSet *set;\n\tstatic dispatch_once_t pred;\n\t\n\tdispatch_once(&pred, ^{\n\t\tset = [[NSMutableSet alloc] init];\n\t});\n\n\treturn set;\n}\n\n@implementation NSObject (RACSelectorSignal)\n\nstatic BOOL RACForwardInvocation(id self, NSInvocation *invocation) {\n\tSEL aliasSelector = RACAliasForSelector(invocation.selector);\n\tRACSubject *subject = objc_getAssociatedObject(self, aliasSelector);\n\n\tClass class = object_getClass(invocation.target);\n\tBOOL respondsToAlias = [class instancesRespondToSelector:aliasSelector];\n\tif (respondsToAlias) {\n\t\tinvocation.selector = aliasSelector;\n\t\t[invocation invoke];\n\t}\n\n\tif (subject == nil) return respondsToAlias;\n\n\t[subject sendNext:invocation.rac_argumentsTuple];\n\treturn YES;\n}\n\nstatic void RACSwizzleForwardInvocation(Class class) {\n\tSEL forwardInvocationSEL = @selector(forwardInvocation:);\n\tMethod forwardInvocationMethod = class_getInstanceMethod(class, forwardInvocationSEL);\n\n\t// Preserve any existing implementation of -forwardInvocation:.\n\tvoid (*originalForwardInvocation)(id, SEL, NSInvocation *) = NULL;\n\tif (forwardInvocationMethod != NULL) {\n\t\toriginalForwardInvocation = (__typeof__(originalForwardInvocation))method_getImplementation(forwardInvocationMethod);\n\t}\n\n\t// Set up a new version of -forwardInvocation:.\n\t//\n\t// If the selector has been passed to -rac_signalForSelector:, invoke\n\t// the aliased method, and forward the arguments to any attached signals.\n\t//\n\t// If the selector has not been passed to -rac_signalForSelector:,\n\t// invoke any existing implementation of -forwardInvocation:. If there\n\t// was no existing implementation, throw an unrecognized selector\n\t// exception.\n\tid newForwardInvocation = ^(id self, NSInvocation *invocation) {\n\t\tBOOL matched = RACForwardInvocation(self, invocation);\n\t\tif (matched) return;\n\n\t\tif (originalForwardInvocation == NULL) {\n\t\t\t[self doesNotRecognizeSelector:invocation.selector];\n\t\t} else {\n\t\t\toriginalForwardInvocation(self, forwardInvocationSEL, invocation);\n\t\t}\n\t};\n\n\tclass_replaceMethod(class, forwardInvocationSEL, imp_implementationWithBlock(newForwardInvocation), \"v@:@\");\n}\n\nstatic void RACSwizzleRespondsToSelector(Class class) {\n\tSEL respondsToSelectorSEL = @selector(respondsToSelector:);\n\n\t// Preserve existing implementation of -respondsToSelector:.\n\tMethod respondsToSelectorMethod = class_getInstanceMethod(class, respondsToSelectorSEL);\n\tBOOL (*originalRespondsToSelector)(id, SEL, SEL) = (__typeof__(originalRespondsToSelector))method_getImplementation(respondsToSelectorMethod);\n\n\t// Set up a new version of -respondsToSelector: that returns YES for methods\n\t// added by -rac_signalForSelector:.\n\t//\n\t// If the selector has a method defined on the receiver's actual class, and\n\t// if that method's implementation is _objc_msgForward, then returns whether\n\t// the instance has a signal for the selector.\n\t// Otherwise, call the original -respondsToSelector:.\n\tid newRespondsToSelector = ^ BOOL (id self, SEL selector) {\n\t\tMethod method = rac_getImmediateInstanceMethod(class, selector);\n\n\t\tif (method != NULL && method_getImplementation(method) == _objc_msgForward) {\n\t\t\tSEL aliasSelector = RACAliasForSelector(selector);\n\t\t\tif (objc_getAssociatedObject(self, aliasSelector) != nil) return YES;\n\t\t}\n\n\t\treturn originalRespondsToSelector(self, respondsToSelectorSEL, selector);\n\t};\n\n\tclass_replaceMethod(class, respondsToSelectorSEL, imp_implementationWithBlock(newRespondsToSelector), method_getTypeEncoding(respondsToSelectorMethod));\n}\n\nstatic void RACSwizzleGetClass(Class class, Class statedClass) {\n\tSEL selector = @selector(class);\n\tMethod method = class_getInstanceMethod(class, selector);\n\tIMP newIMP = imp_implementationWithBlock(^(id self) {\n\t\treturn statedClass;\n\t});\n\tclass_replaceMethod(class, selector, newIMP, method_getTypeEncoding(method));\n}\n\nstatic void RACSwizzleMethodSignatureForSelector(Class class) {\n\tIMP newIMP = imp_implementationWithBlock(^(id self, SEL selector) {\n\t\t// Don't send the -class message to the receiver because we've changed\n\t\t// that to return the original class.\n\t\tClass actualClass = object_getClass(self);\n\t\tMethod method = class_getInstanceMethod(actualClass, selector);\n\t\tif (method == NULL) {\n\t\t\t// Messages that the original class dynamically implements fall\n\t\t\t// here.\n\t\t\t//\n\t\t\t// Call the original class' -methodSignatureForSelector:.\n\t\t\tstruct objc_super target = {\n\t\t\t\t.super_class = class_getSuperclass(class),\n\t\t\t\t.receiver = self,\n\t\t\t};\n\t\t\tNSMethodSignature * (*messageSend)(struct objc_super *, SEL, SEL) = (__typeof__(messageSend))objc_msgSendSuper;\n\t\t\treturn messageSend(&target, @selector(methodSignatureForSelector:), selector);\n\t\t}\n\n\t\tchar const *encoding = method_getTypeEncoding(method);\n\t\treturn [NSMethodSignature signatureWithObjCTypes:encoding];\n\t});\n\n\tSEL selector = @selector(methodSignatureForSelector:);\n\tMethod methodSignatureForSelectorMethod = class_getInstanceMethod(class, selector);\n\tclass_replaceMethod(class, selector, newIMP, method_getTypeEncoding(methodSignatureForSelectorMethod));\n}\n\n// It's hard to tell which struct return types use _objc_msgForward, and\n// which use _objc_msgForward_stret instead, so just exclude all struct, array,\n// union, complex and vector return types.\nstatic void RACCheckTypeEncoding(const char *typeEncoding) {\n#if !NS_BLOCK_ASSERTIONS\n\t// Some types, including vector types, are not encoded. In these cases the\n\t// signature starts with the size of the argument frame.\n\tNSCAssert(*typeEncoding < '1' || *typeEncoding > '9', @\"unknown method return type not supported in type encoding: %s\", typeEncoding);\n\tNSCAssert(strstr(typeEncoding, \"(\") != typeEncoding, @\"union method return type not supported\");\n\tNSCAssert(strstr(typeEncoding, \"{\") != typeEncoding, @\"struct method return type not supported\");\n\tNSCAssert(strstr(typeEncoding, \"[\") != typeEncoding, @\"array method return type not supported\");\n\tNSCAssert(strstr(typeEncoding, @encode(_Complex float)) != typeEncoding, @\"complex float method return type not supported\");\n\tNSCAssert(strstr(typeEncoding, @encode(_Complex double)) != typeEncoding, @\"complex double method return type not supported\");\n\tNSCAssert(strstr(typeEncoding, @encode(_Complex long double)) != typeEncoding, @\"complex long double method return type not supported\");\n\n#endif // !NS_BLOCK_ASSERTIONS\n}\n\nstatic RACSignal *NSObjectRACSignalForSelector(NSObject *self, SEL selector, Protocol *protocol) {\n\tSEL aliasSelector = RACAliasForSelector(selector);\n\n\t@synchronized (self) {\n\t\tRACSubject *subject = objc_getAssociatedObject(self, aliasSelector);\n\t\tif (subject != nil) return subject;\n\n\t\tClass class = RACSwizzleClass(self);\n\t\tNSCAssert(class != nil, @\"Could not swizzle class of %@\", self);\n\n\t\tsubject = [[RACSubject subject] setNameWithFormat:@\"%@ -rac_signalForSelector: %s\", RACDescription(self), sel_getName(selector)];\n\t\tobjc_setAssociatedObject(self, aliasSelector, subject, OBJC_ASSOCIATION_RETAIN);\n\n\t\t[self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t[subject sendCompleted];\n\t\t}]];\n\n\t\tMethod targetMethod = class_getInstanceMethod(class, selector);\n\t\tif (targetMethod == NULL) {\n\t\t\tconst char *typeEncoding;\n\t\t\tif (protocol == NULL) {\n\t\t\t\ttypeEncoding = RACSignatureForUndefinedSelector(selector);\n\t\t\t} else {\n\t\t\t\t// Look for the selector as an optional instance method.\n\t\t\t\tstruct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES);\n\n\t\t\t\tif (methodDescription.name == NULL) {\n\t\t\t\t\t// Then fall back to looking for a required instance\n\t\t\t\t\t// method.\n\t\t\t\t\tmethodDescription = protocol_getMethodDescription(protocol, selector, YES, YES);\n\t\t\t\t\tNSCAssert(methodDescription.name != NULL, @\"Selector %@ does not exist in <%s>\", NSStringFromSelector(selector), protocol_getName(protocol));\n\t\t\t\t}\n\n\t\t\t\ttypeEncoding = methodDescription.types;\n\t\t\t}\n\n\t\t\tRACCheckTypeEncoding(typeEncoding);\n\n\t\t\t// Define the selector to call -forwardInvocation:.\n\t\t\tif (!class_addMethod(class, selector, _objc_msgForward, typeEncoding)) {\n\t\t\t\tNSDictionary *userInfo = @{\n\t\t\t\t\tNSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedString(@\"A race condition occurred implementing %@ on class %@\", nil), NSStringFromSelector(selector), class],\n\t\t\t\t\tNSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@\"Invoke -rac_signalForSelector: again to override the implementation.\", nil)\n\t\t\t\t};\n\n\t\t\t\treturn [RACSignal error:[NSError errorWithDomain:RACSelectorSignalErrorDomain code:RACSelectorSignalErrorMethodSwizzlingRace userInfo:userInfo]];\n\t\t\t}\n\t\t} else if (method_getImplementation(targetMethod) != _objc_msgForward) {\n\t\t\t// Make a method alias for the existing method implementation.\n\t\t\tconst char *typeEncoding = method_getTypeEncoding(targetMethod);\n\n\t\t\tRACCheckTypeEncoding(typeEncoding);\n\n\t\t\tBOOL addedAlias __attribute__((unused)) = class_addMethod(class, aliasSelector, method_getImplementation(targetMethod), typeEncoding);\n\t\t\tNSCAssert(addedAlias, @\"Original implementation for %@ is already copied to %@ on %@\", NSStringFromSelector(selector), NSStringFromSelector(aliasSelector), class);\n\n\t\t\t// Redefine the selector to call -forwardInvocation:.\n\t\t\tclass_replaceMethod(class, selector, _objc_msgForward, method_getTypeEncoding(targetMethod));\n\t\t}\n\n\t\treturn subject;\n\t}\n}\n\nstatic SEL RACAliasForSelector(SEL originalSelector) {\n\tNSString *selectorName = NSStringFromSelector(originalSelector);\n\treturn NSSelectorFromString([RACSignalForSelectorAliasPrefix stringByAppendingString:selectorName]);\n}\n\nstatic const char *RACSignatureForUndefinedSelector(SEL selector) {\n\tconst char *name = sel_getName(selector);\n\tNSMutableString *signature = [NSMutableString stringWithString:@\"v@:\"];\n\n\twhile ((name = strchr(name, ':')) != NULL) {\n\t\t[signature appendString:@\"@\"];\n\t\tname++;\n\t}\n\n\treturn signature.UTF8String;\n}\n\nstatic Class RACSwizzleClass(NSObject *self) {\n\tClass statedClass = self.class;\n\tClass baseClass = object_getClass(self);\n\n\t// The \"known dynamic subclass\" is the subclass generated by RAC.\n\t// It's stored as an associated object on every instance that's already\n\t// been swizzled, so that even if something else swizzles the class of\n\t// this instance, we can still access the RAC generated subclass.\n\tClass knownDynamicSubclass = objc_getAssociatedObject(self, RACSubclassAssociationKey);\n\tif (knownDynamicSubclass != Nil) return knownDynamicSubclass;\n\n\tNSString *className = NSStringFromClass(baseClass);\n\n\tif (statedClass != baseClass) {\n\t\t// If the class is already lying about what it is, it's probably a KVO\n\t\t// dynamic subclass or something else that we shouldn't subclass\n\t\t// ourselves.\n\t\t//\n\t\t// Just swizzle -forwardInvocation: in-place. Since the object's class\n\t\t// was almost certainly dynamically changed, we shouldn't see another of\n\t\t// these classes in the hierarchy.\n\t\t//\n\t\t// Additionally, swizzle -respondsToSelector: because the default\n\t\t// implementation may be ignorant of methods added to this class.\n\t\t@synchronized (swizzledClasses()) {\n\t\t\tif (![swizzledClasses() containsObject:className]) {\n\t\t\t\tRACSwizzleForwardInvocation(baseClass);\n\t\t\t\tRACSwizzleRespondsToSelector(baseClass);\n\t\t\t\tRACSwizzleGetClass(baseClass, statedClass);\n\t\t\t\tRACSwizzleGetClass(object_getClass(baseClass), statedClass);\n\t\t\t\tRACSwizzleMethodSignatureForSelector(baseClass);\n\t\t\t\t[swizzledClasses() addObject:className];\n\t\t\t}\n\t\t}\n\n\t\treturn baseClass;\n\t}\n\n\tconst char *subclassName = [className stringByAppendingString:RACSubclassSuffix].UTF8String;\n\tClass subclass = objc_getClass(subclassName);\n\n\tif (subclass == nil) {\n\t\tsubclass = [RACObjCRuntime createClass:subclassName inheritingFromClass:baseClass];\n\t\tif (subclass == nil) return nil;\n\n\t\tRACSwizzleForwardInvocation(subclass);\n\t\tRACSwizzleRespondsToSelector(subclass);\n\n\t\tRACSwizzleGetClass(subclass, statedClass);\n\t\tRACSwizzleGetClass(object_getClass(subclass), statedClass);\n\n\t\tRACSwizzleMethodSignatureForSelector(subclass);\n\n\t\tobjc_registerClassPair(subclass);\n\t}\n\n\tobject_setClass(self, subclass);\n\tobjc_setAssociatedObject(self, RACSubclassAssociationKey, subclass, OBJC_ASSOCIATION_ASSIGN);\n\treturn subclass;\n}\n\n- (RACSignal *)rac_signalForSelector:(SEL)selector {\n\tNSCParameterAssert(selector != NULL);\n\n\treturn NSObjectRACSignalForSelector(self, selector, NULL);\n}\n\n- (RACSignal *)rac_signalForSelector:(SEL)selector fromProtocol:(Protocol *)protocol {\n\tNSCParameterAssert(selector != NULL);\n\tNSCParameterAssert(protocol != NULL);\n\n\treturn NSObjectRACSignalForSelector(self, selector, protocol);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSOrderedSet+RACSequenceAdditions.h",
    "content": "//\n//  NSOrderedSet+RACSequenceAdditions.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSequence;\n\n@interface NSOrderedSet (RACSequenceAdditions)\n\n/// Creates and returns a sequence corresponding to the receiver.\n///\n/// Mutating the receiver will not affect the sequence after it's been created.\n@property (nonatomic, copy, readonly) RACSequence *rac_sequence;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSOrderedSet+RACSequenceAdditions.m",
    "content": "//\n//  NSOrderedSet+RACSequenceAdditions.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"NSOrderedSet+RACSequenceAdditions.h\"\n#import \"NSArray+RACSequenceAdditions.h\"\n\n@implementation NSOrderedSet (RACSequenceAdditions)\n\n- (RACSequence *)rac_sequence {\n\t// TODO: First class support for ordered set sequences.\n\treturn self.array.rac_sequence;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSSet+RACSequenceAdditions.h",
    "content": "//\n//  NSSet+RACSequenceAdditions.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSequence;\n\n@interface NSSet (RACSequenceAdditions)\n\n/// Creates and returns a sequence corresponding to the receiver.\n///\n/// Mutating the receiver will not affect the sequence after it's been created.\n@property (nonatomic, copy, readonly) RACSequence *rac_sequence;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSSet+RACSequenceAdditions.m",
    "content": "//\n//  NSSet+RACSequenceAdditions.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"NSSet+RACSequenceAdditions.h\"\n#import \"NSArray+RACSequenceAdditions.h\"\n\n@implementation NSSet (RACSequenceAdditions)\n\n- (RACSequence *)rac_sequence {\n\t// TODO: First class support for set sequences.\n\treturn self.allObjects.rac_sequence;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACKeyPathUtilities.h",
    "content": "//\n//  NSString+RACKeyPathUtilities.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 05/05/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n// A private category of methods to extract parts of a key path.\n@interface NSString (RACKeyPathUtilities)\n\n// Returns an array of the components of the receiver.\n//\n// Calling this method on a string that isn't a key path is considered undefined\n// behavior.\n- (NSArray *)rac_keyPathComponents;\n\n// Returns a key path with all the components of the receiver except for the\n// last one.\n//\n// Calling this method on a string that isn't a key path is considered undefined\n// behavior.\n- (NSString *)rac_keyPathByDeletingLastKeyPathComponent;\n\n// Returns a key path with all the components of the receiver expect for the\n// first one.\n//\n// Calling this method on a string that isn't a key path is considered undefined\n// behavior.\n- (NSString *)rac_keyPathByDeletingFirstKeyPathComponent;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACKeyPathUtilities.m",
    "content": "//\n//  NSString+RACKeyPathUtilities.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 05/05/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSString+RACKeyPathUtilities.h\"\n\n@implementation NSString (RACKeyPathUtilities)\n\n- (NSArray *)rac_keyPathComponents {\n\tif (self.length == 0) {\n\t\treturn nil;\n\t}\n\treturn [self componentsSeparatedByString:@\".\"];\n}\n\n- (NSString *)rac_keyPathByDeletingLastKeyPathComponent {\n\tNSUInteger lastDotIndex = [self rangeOfString:@\".\" options:NSBackwardsSearch].location;\n\tif (lastDotIndex == NSNotFound) {\n\t\treturn nil;\n\t}\n\treturn [self substringToIndex:lastDotIndex];\n}\n\n- (NSString *)rac_keyPathByDeletingFirstKeyPathComponent {\n\tNSUInteger firstDotIndex = [self rangeOfString:@\".\"].location;\n\tif (firstDotIndex == NSNotFound) {\n\t\treturn nil;\n\t}\n\treturn [self substringFromIndex:firstDotIndex + 1];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACSequenceAdditions.h",
    "content": "//\n//  NSString+RACSequenceAdditions.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSequence;\n\n@interface NSString (RACSequenceAdditions)\n\n/// Creates and returns a sequence containing strings corresponding to each\n/// composed character sequence in the receiver.\n///\n/// Mutating the receiver will not affect the sequence after it's been created.\n@property (nonatomic, copy, readonly) RACSequence *rac_sequence;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACSequenceAdditions.m",
    "content": "//\n//  NSString+RACSequenceAdditions.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"NSString+RACSequenceAdditions.h\"\n#import \"RACStringSequence.h\"\n\n@implementation NSString (RACSequenceAdditions)\n\n- (RACSequence *)rac_sequence {\n\treturn [RACStringSequence sequenceWithString:self offset:0];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACSupport.h",
    "content": "//\n//  NSString+RACSupport.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 5/11/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACScheduler;\n@class RACSignal;\n\n@interface NSString (RACSupport)\n\n// Reads in the contents of the file using +[NSString stringWithContentsOfURL:usedEncoding:error:].\n// Note that encoding won't be valid until the signal completes successfully.\n//\n// scheduler - cannot be nil.\n+ (RACSignal *)rac_readContentsOfURL:(NSURL *)URL usedEncoding:(NSStringEncoding *)encoding scheduler:(RACScheduler *)scheduler;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSString+RACSupport.m",
    "content": "//\n//  NSString+RACSupport.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 5/11/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSString+RACSupport.h\"\n#import \"RACReplaySubject.h\"\n#import \"RACScheduler.h\"\n\n@implementation NSString (RACSupport)\n\n+ (RACSignal *)rac_readContentsOfURL:(NSURL *)URL usedEncoding:(NSStringEncoding *)encoding scheduler:(RACScheduler *)scheduler {\n\tNSCParameterAssert(scheduler != nil);\n\t\n\tRACReplaySubject *subject = [RACReplaySubject subject];\n\t[subject setNameWithFormat:@\"+rac_readContentsOfURL: %@ usedEncoding:scheduler: %@\", URL, scheduler];\n\t\n\t[scheduler schedule:^{\n\t\tNSError *error = nil;\n\t\tNSString *string = [NSString stringWithContentsOfURL:URL usedEncoding:encoding error:&error];\n\t\tif (string == nil) {\n\t\t\t[subject sendError:error];\n\t\t} else {\n\t\t\t[subject sendNext:string];\n\t\t\t[subject sendCompleted];\n\t\t}\n\t}];\n\t\n\treturn subject;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSText+RACSignalSupport.h",
    "content": "//\n//  NSText+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-03-08.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n@class RACSignal;\n\n@interface NSText (RACSignalSupport)\n\n/// Returns a signal which sends the current `string` of the receiver, then the\n/// new value any time it changes.\n- (RACSignal *)rac_textSignal;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSText+RACSignalSupport.m",
    "content": "//\n//  NSText+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-03-08.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSText+RACSignalSupport.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSObject+RACDescription.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal.h\"\n#import \"RACSubscriber.h\"\n\n@implementation NSText (RACSignalSupport)\n\n- (RACSignal *)rac_textSignal {\n\t@unsafeify(self);\n\treturn [[[[RACSignal\n\t\tcreateSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t@strongify(self);\n\t\t\tid observer = [NSNotificationCenter.defaultCenter addObserverForName:NSTextDidChangeNotification object:self queue:nil usingBlock:^(NSNotification *note) {\n\t\t\t\t[subscriber sendNext:note.object];\n\t\t\t}];\n\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\t[NSNotificationCenter.defaultCenter removeObserver:observer];\n\t\t\t}];\n\t\t}]\n\t\tmap:^(NSText *text) {\n\t\t\treturn [text.string copy];\n\t\t}]\n\t\tstartWith:[self.string copy]]\n\t\tsetNameWithFormat:@\"%@ -rac_textSignal\", RACDescription(self)];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSURLConnection+RACSupport.h",
    "content": "//\n//  NSURLConnection+RACSupport.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-10-01.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSignal;\n\n@interface NSURLConnection (RACSupport)\n\n// Lazily loads data for the given request in the background.\n//\n// request - The URL request to load. This must not be nil.\n//\n// Returns a signal which will begin loading the request upon each subscription,\n// then send a `RACTuple` of the received `NSURLResponse` and downloaded\n// `NSData`, and complete on a background thread. If any errors occur, the\n// returned signal will error out.\n+ (RACSignal *)rac_sendAsynchronousRequest:(NSURLRequest *)request;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSURLConnection+RACSupport.m",
    "content": "//\n//  NSURLConnection+RACSupport.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-10-01.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSURLConnection+RACSupport.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal.h\"\n#import \"RACSubscriber.h\"\n#import \"RACTuple.h\"\n\n@implementation NSURLConnection (RACSupport)\n\n+ (RACSignal *)rac_sendAsynchronousRequest:(NSURLRequest *)request {\n\tNSCParameterAssert(request != nil);\n\n\treturn [[RACSignal\n\t\tcreateSignal:^(id<RACSubscriber> subscriber) {\n\t\t\tNSOperationQueue *queue = [[NSOperationQueue alloc] init];\n\t\t\tqueue.name = @\"org.reactivecocoa.ReactiveCocoa.NSURLConnectionRACSupport\";\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n\t\t\t[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {\n\t\t\t\t// The docs say that `nil` data means an error occurred, but\n\t\t\t\t// `nil` responses can also occur in practice (circumstances\n\t\t\t\t// unknown). Consider either to be an error.\n\t\t\t\t//\n\t\t\t\t// Note that _empty_ data is not necessarily erroneous, as there\n\t\t\t\t// may be headers but no HTTP body.\n\t\t\t\tif (response == nil || data == nil) {\n\t\t\t\t\t[subscriber sendError:error];\n\t\t\t\t} else {\n\t\t\t\t\t[subscriber sendNext:RACTuplePack(response, data)];\n\t\t\t\t\t[subscriber sendCompleted];\n\t\t\t\t}\n\t\t\t}];\n#pragma clang diagnostic pop\n\t\t\t\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\t// It's not clear if this will actually cancel the connection,\n\t\t\t\t// but we can at least prevent _some_ unnecessary work --\n\t\t\t\t// without writing all the code for a proper delegate, which\n\t\t\t\t// doesn't really belong in RAC.\n\t\t\t\tqueue.suspended = YES;\n\t\t\t\t[queue cancelAllOperations];\n\t\t\t}];\n\t\t}]\n\t\tsetNameWithFormat:@\"+rac_sendAsynchronousRequest: %@\", request];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSUserDefaults+RACSupport.h",
    "content": "//\n//  NSUserDefaults+RACSupport.h\n//  ReactiveCocoa\n//\n//  Created by Matt Diephouse on 12/19/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACChannelTerminal;\n\n@interface NSUserDefaults (RACSupport)\n\n/// Creates and returns a terminal for binding the user defaults key.\n///\n/// **Note:** The value in the user defaults is *asynchronously* updated with\n/// values sent to the channel.\n///\n/// key - The user defaults key to create the channel terminal for.\n///\n/// Returns a channel terminal that sends the value of the user defaults key\n/// upon subscription, sends an updated value whenever the default changes, and\n/// updates the default asynchronously with values it receives.\n- (RACChannelTerminal *)rac_channelTerminalForKey:(NSString *)key;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/NSUserDefaults+RACSupport.m",
    "content": "//\n//  NSUserDefaults+RACSupport.m\n//  ReactiveCocoa\n//\n//  Created by Matt Diephouse on 12/19/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"NSUserDefaults+RACSupport.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSNotificationCenter+RACSupport.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"RACChannel.h\"\n#import \"RACScheduler.h\"\n#import \"RACSignal+Operations.h\"\n\n@implementation NSUserDefaults (RACSupport)\n\n- (RACChannelTerminal *)rac_channelTerminalForKey:(NSString *)key {\n\tRACChannel *channel = [RACChannel new];\n\t\n\tRACScheduler *scheduler = [RACScheduler scheduler];\n\t__block BOOL ignoreNextValue = NO;\n\t\n\t@weakify(self);\n\t[[[[[[[NSNotificationCenter.defaultCenter\n\t\trac_addObserverForName:NSUserDefaultsDidChangeNotification object:self]\n\t\tmap:^(id _) {\n\t\t\t@strongify(self);\n\t\t\treturn [self objectForKey:key];\n\t\t}]\n\t\tstartWith:[self objectForKey:key]]\n\t\t// Don't send values that were set on the other side of the terminal.\n\t\tfilter:^ BOOL (id _) {\n\t\t\tif (RACScheduler.currentScheduler == scheduler && ignoreNextValue) {\n\t\t\t\tignoreNextValue = NO;\n\t\t\t\treturn NO;\n\t\t\t}\n\t\t\treturn YES;\n\t\t}]\n\t\tdistinctUntilChanged]\n\t\ttakeUntil:self.rac_willDeallocSignal]\n\t\tsubscribe:channel.leadingTerminal];\n\t\n\t[[channel.leadingTerminal\n\t\tdeliverOn:scheduler]\n\t\tsubscribeNext:^(id value) {\n\t\t\t@strongify(self);\n\t\t\tignoreNextValue = YES;\n\t\t\t[self setObject:value forKey:key];\n\t\t}];\n\t\n\treturn channel.followingTerminal;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACArraySequence.h",
    "content": "//\n//  RACArraySequence.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"RACSequence.h\"\n\n// Private class that adapts an array to the RACSequence interface.\n@interface RACArraySequence : RACSequence\n\n// Returns a sequence for enumerating over the given array, starting from the\n// given offset. The array will be copied to prevent mutation.\n+ (instancetype)sequenceWithArray:(NSArray *)array offset:(NSUInteger)offset;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACArraySequence.m",
    "content": "//\n//  RACArraySequence.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"RACArraySequence.h\"\n\n@interface RACArraySequence ()\n\n// Redeclared from the superclass and marked deprecated to prevent using `array`\n// where `backingArray` is intended.\n@property (nonatomic, copy, readonly) NSArray *array __attribute__((deprecated));\n\n// The array being sequenced.\n@property (nonatomic, copy, readonly) NSArray *backingArray;\n\n// The index in the array from which the sequence starts.\n@property (nonatomic, assign, readonly) NSUInteger offset;\n\n@end\n\n@implementation RACArraySequence\n\n#pragma mark Lifecycle\n\n+ (instancetype)sequenceWithArray:(NSArray *)array offset:(NSUInteger)offset {\n\tNSCParameterAssert(offset <= array.count);\n\n\tif (offset == array.count) return self.empty;\n\n\tRACArraySequence *seq = [[self alloc] init];\n\tseq->_backingArray = [array copy];\n\tseq->_offset = offset;\n\treturn seq;\n}\n\n#pragma mark RACSequence\n\n- (id)head {\n\treturn self.backingArray[self.offset];\n}\n\n- (RACSequence *)tail {\n\tRACSequence *sequence = [self.class sequenceWithArray:self.backingArray offset:self.offset + 1];\n\tsequence.name = self.name;\n\treturn sequence;\n}\n\n#pragma mark NSFastEnumeration\n\n- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unsafe_unretained id[])stackbuf count:(NSUInteger)len {\n\tNSCParameterAssert(len > 0);\n\n\tif (state->state >= self.backingArray.count) {\n\t\t// Enumeration has completed.\n\t\treturn 0;\n\t}\n\n\tif (state->state == 0) {\n\t\tstate->state = self.offset;\n\n\t\t// Since a sequence doesn't mutate, this just needs to be set to\n\t\t// something non-NULL.\n\t\tstate->mutationsPtr = state->extra;\n\t}\n\n\tstate->itemsPtr = stackbuf;\n\n\tNSUInteger startIndex = state->state;\n\tNSUInteger index = 0;\n\n\tfor (id value in self.backingArray) {\n\t\t// Constructing an index set for -enumerateObjectsAtIndexes: can actually be\n\t\t// slower than just skipping the items we don't care about.\n\t\tif (index < startIndex) {\n\t\t\t++index;\n\t\t\tcontinue;\n\t\t}\n\n\t\tstackbuf[index - startIndex] = value;\n\n\t\t++index;\n\t\tif (index - startIndex >= len) break;\n\t}\n\n\tNSCAssert(index > startIndex, @\"Final index (%lu) should be greater than start index (%lu)\", (unsigned long)index, (unsigned long)startIndex);\n\n\tstate->state = index;\n\treturn index - startIndex;\n}\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-implementations\"\n- (NSArray *)array {\n\treturn [self.backingArray subarrayWithRange:NSMakeRange(self.offset, self.backingArray.count - self.offset)];\n}\n#pragma clang diagnostic pop\n\n#pragma mark NSCoding\n\n- (id)initWithCoder:(NSCoder *)coder {\n\tself = [super initWithCoder:coder];\n\tif (self == nil) return nil;\n\n\t_backingArray = [coder decodeObjectForKey:@\"array\"];\n\t_offset = 0;\n\n\treturn self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n\t// Encoding is handled in RACSequence.\n\t[super encodeWithCoder:coder];\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\treturn [NSString stringWithFormat:@\"<%@: %p>{ name = %@, array = %@ }\", self.class, self, self.name, self.backingArray];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACBehaviorSubject.h",
    "content": "//\n//  RACBehaviorSubject.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/16/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSubject.h\"\n\n/// A behavior subject sends the last value it received when it is subscribed to.\n@interface RACBehaviorSubject : RACSubject\n\n/// Creates a new behavior subject with a default value. If it hasn't received\n/// any values when it gets subscribed to, it sends the default value.\n+ (instancetype)behaviorSubjectWithDefaultValue:(id)value;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACBehaviorSubject.m",
    "content": "//\n//  RACBehaviorSubject.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/16/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACBehaviorSubject.h\"\n#import \"RACDisposable.h\"\n#import \"RACScheduler+Private.h\"\n\n@interface RACBehaviorSubject ()\n\n// This property should only be used while synchronized on self.\n@property (nonatomic, strong) id currentValue;\n\n@end\n\n@implementation RACBehaviorSubject\n\n#pragma mark Lifecycle\n\n+ (instancetype)behaviorSubjectWithDefaultValue:(id)value {\n\tRACBehaviorSubject *subject = [self subject];\n\tsubject.currentValue = value;\n\treturn subject;\n}\n\n#pragma mark RACSignal\n\n- (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber {\n\tRACDisposable *subscriptionDisposable = [super subscribe:subscriber];\n\n\tRACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{\n\t\t@synchronized (self) {\n\t\t\t[subscriber sendNext:self.currentValue];\n\t\t}\n\t}];\n\t\n\treturn [RACDisposable disposableWithBlock:^{\n\t\t[subscriptionDisposable dispose];\n\t\t[schedulingDisposable dispose];\n\t}];\n}\n\n#pragma mark RACSubscriber\n\n- (void)sendNext:(id)value {\n\t@synchronized (self) {\n\t\tself.currentValue = value;\n\t\t[super sendNext:value];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACBlockTrampoline.h",
    "content": "//\n//  RACBlockTrampoline.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 10/21/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACTuple;\n\n// A private class that allows a limited type of dynamic block invocation.\n@interface RACBlockTrampoline : NSObject\n\n// Invokes the given block with the given arguments. All of the block's\n// argument types must be objects and it must be typed to return an object.\n//\n// At this time, it only supports blocks that take up to 15 arguments. Any more\n// is just cray.\n//\n// block     - The block to invoke. Must accept as many arguments as are given in\n//             the arguments array. Cannot be nil.\n// arguments - The arguments with which to invoke the block. `RACTupleNil`s will\n//             be passed as nils.\n//\n// Returns the return value of invoking the block.\n+ (id)invokeBlock:(id)block withArguments:(RACTuple *)arguments;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACBlockTrampoline.m",
    "content": "//\n//  RACBlockTrampoline.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 10/21/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACBlockTrampoline.h\"\n#import \"RACTuple.h\"\n\n@interface RACBlockTrampoline ()\n@property (nonatomic, readonly, copy) id block;\n@end\n\n@implementation RACBlockTrampoline\n\n#pragma mark API\n\n- (id)initWithBlock:(id)block {\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_block = [block copy];\n\n\treturn self;\n}\n\n+ (id)invokeBlock:(id)block withArguments:(RACTuple *)arguments {\n\tNSCParameterAssert(block != NULL);\n\n\tRACBlockTrampoline *trampoline = [[self alloc] initWithBlock:block];\n\treturn [trampoline invokeWithArguments:arguments];\n}\n\n- (id)invokeWithArguments:(RACTuple *)arguments {\n\tSEL selector = [self selectorForArgumentCount:arguments.count];\n\tNSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:selector]];\n\tinvocation.selector = selector;\n\tinvocation.target = self;\n\n\tfor (NSUInteger i = 0; i < arguments.count; i++) {\n\t\tid arg = arguments[i];\n\t\tNSInteger argIndex = (NSInteger)(i + 2);\n\t\t[invocation setArgument:&arg atIndex:argIndex];\n\t}\n\n\t[invocation invoke];\n\t\n\t__unsafe_unretained id returnVal;\n\t[invocation getReturnValue:&returnVal];\n\treturn returnVal;\n}\n\n- (SEL)selectorForArgumentCount:(NSUInteger)count {\n\tNSCParameterAssert(count > 0);\n\n\tswitch (count) {\n\t\tcase 0: return NULL;\n\t\tcase 1: return @selector(performWith:);\n\t\tcase 2: return @selector(performWith::);\n\t\tcase 3: return @selector(performWith:::);\n\t\tcase 4: return @selector(performWith::::);\n\t\tcase 5: return @selector(performWith:::::);\n\t\tcase 6: return @selector(performWith::::::);\n\t\tcase 7: return @selector(performWith:::::::);\n\t\tcase 8: return @selector(performWith::::::::);\n\t\tcase 9: return @selector(performWith:::::::::);\n\t\tcase 10: return @selector(performWith::::::::::);\n\t\tcase 11: return @selector(performWith:::::::::::);\n\t\tcase 12: return @selector(performWith::::::::::::);\n\t\tcase 13: return @selector(performWith:::::::::::::);\n\t\tcase 14: return @selector(performWith::::::::::::::);\n\t\tcase 15: return @selector(performWith:::::::::::::::);\n\t}\n\n\tNSCAssert(NO, @\"The argument count is too damn high! Only blocks of up to 15 arguments are currently supported.\");\n\treturn NULL;\n}\n\n- (id)performWith:(id)obj1 {\n\tid (^block)(id) = self.block;\n\treturn block(obj1);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 {\n\tid (^block)(id, id) = self.block;\n\treturn block(obj1, obj2);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 {\n\tid (^block)(id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 {\n\tid (^block)(id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 {\n\tid (^block)(id, id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4, obj5);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 {\n\tid (^block)(id, id, id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4, obj5, obj6);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 {\n\tid (^block)(id, id, id, id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4, obj5, obj6, obj7);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 {\n\tid (^block)(id, id, id, id, id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 {\n\tid (^block)(id, id, id, id, id, id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 {\n\tid (^block)(id, id, id, id, id, id, id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 {\n\tid (^block)(id, id, id, id, id, id, id, id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 {\n\tid (^block)(id, id, id, id, id, id, id, id, id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 :(id)obj13 {\n\tid (^block)(id, id, id, id, id, id, id, id, id, id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12, obj13);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 :(id)obj13 :(id)obj14 {\n\tid (^block)(id, id, id, id, id, id, id, id, id, id, id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12, obj13, obj14);\n}\n\n- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 :(id)obj13 :(id)obj14 :(id)obj15 {\n\tid (^block)(id, id, id, id, id, id, id, id, id, id, id, id, id, id, id) = self.block;\n\treturn block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12, obj13, obj14, obj15);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACChannel.h",
    "content": "//\n//  RACChannel.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 01/01/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSignal.h\"\n#import \"RACSubscriber.h\"\n\n@class RACChannelTerminal;\n\n/// A two-way channel.\n///\n/// Conceptually, RACChannel can be thought of as a bidirectional connection,\n/// composed of two controllable signals that work in parallel.\n///\n/// For example, when connecting between a view and a model:\n///\n///        Model                      View\n///  `leadingTerminal` ------> `followingTerminal`\n///  `leadingTerminal` <------ `followingTerminal`\n///\n/// The initial value of the model and all future changes to it are _sent on_ the\n/// `leadingTerminal`, and _received by_ subscribers of the `followingTerminal`.\n///\n/// Likewise, whenever the user changes the value of the view, that value is sent\n/// on the `followingTerminal`, and received in the model from the\n/// `leadingTerminal`. However, the initial value of the view is not received\n/// from the `leadingTerminal` (only future changes).\n@interface RACChannel : NSObject\n\n/// The terminal which \"leads\" the channel, by sending its latest value\n/// immediately to new subscribers of the `followingTerminal`.\n///\n/// New subscribers to this terminal will not receive a starting value, but will\n/// receive all future values that are sent to the `followingTerminal`.\n@property (nonatomic, strong, readonly) RACChannelTerminal *leadingTerminal;\n\n/// The terminal which \"follows\" the lead of the other terminal, only sending\n/// _future_ values to the subscribers of the `leadingTerminal`.\n///\n/// The latest value sent to the `leadingTerminal` (if any) will be sent\n/// immediately to new subscribers of this terminal, and then all future values\n/// as well.\n@property (nonatomic, strong, readonly) RACChannelTerminal *followingTerminal;\n\n@end\n\n/// Represents one end of a RACChannel.\n///\n/// An terminal is similar to a socket or pipe -- it represents one end of\n/// a connection (the RACChannel, in this case). Values sent to this terminal\n/// will _not_ be received by its subscribers. Instead, the values will be sent\n/// to the subscribers of the RACChannel's _other_ terminal.\n///\n/// For example, when using the `followingTerminal`, _sent_ values can only be\n/// _received_ from the `leadingTerminal`, and vice versa.\n///\n/// To make it easy to terminate a RACChannel, `error` and `completed` events\n/// sent to either terminal will be received by the subscribers of _both_\n/// terminals.\n///\n/// Do not instantiate this class directly. Create a RACChannel instead.\n@interface RACChannelTerminal : RACSignal <RACSubscriber>\n\n- (id)init __attribute__((unavailable(\"Instantiate a RACChannel instead\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACChannel.m",
    "content": "//\n//  RACChannel.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 01/01/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACChannel.h\"\n#import \"RACDisposable.h\"\n#import \"RACReplaySubject.h\"\n#import \"RACSignal+Operations.h\"\n\n@interface RACChannelTerminal ()\n\n// The values for this terminal.\n@property (nonatomic, strong, readonly) RACSignal *values;\n\n// A subscriber will will send values to the other terminal.\n@property (nonatomic, strong, readonly) id<RACSubscriber> otherTerminal;\n\n- (id)initWithValues:(RACSignal *)values otherTerminal:(id<RACSubscriber>)otherTerminal;\n\n@end\n\n@implementation RACChannel\n\n- (id)init {\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t// We don't want any starting value from the leadingSubject, but we do want\n\t// error and completion to be replayed.\n\tRACReplaySubject *leadingSubject = [[RACReplaySubject replaySubjectWithCapacity:0] setNameWithFormat:@\"leadingSubject\"];\n\tRACReplaySubject *followingSubject = [[RACReplaySubject replaySubjectWithCapacity:1] setNameWithFormat:@\"followingSubject\"];\n\n\t// Propagate errors and completion to everything.\n\t[[leadingSubject ignoreValues] subscribe:followingSubject];\n\t[[followingSubject ignoreValues] subscribe:leadingSubject];\n\n\t_leadingTerminal = [[[RACChannelTerminal alloc] initWithValues:leadingSubject otherTerminal:followingSubject] setNameWithFormat:@\"leadingTerminal\"];\n\t_followingTerminal = [[[RACChannelTerminal alloc] initWithValues:followingSubject otherTerminal:leadingSubject] setNameWithFormat:@\"followingTerminal\"];\n\n\treturn self;\n}\n\n@end\n\n@implementation RACChannelTerminal\n\n#pragma mark Lifecycle\n\n- (id)initWithValues:(RACSignal *)values otherTerminal:(id<RACSubscriber>)otherTerminal {\n\tNSCParameterAssert(values != nil);\n\tNSCParameterAssert(otherTerminal != nil);\n\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_values = values;\n\t_otherTerminal = otherTerminal;\n\n\treturn self;\n}\n\n#pragma mark RACSignal\n\n- (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber {\n\treturn [self.values subscribe:subscriber];\n}\n\n#pragma mark <RACSubscriber>\n\n- (void)sendNext:(id)value {\n\t[self.otherTerminal sendNext:value];\n}\n\n- (void)sendError:(NSError *)error {\n\t[self.otherTerminal sendError:error];\n}\n\n- (void)sendCompleted {\n\t[self.otherTerminal sendCompleted];\n}\n\n- (void)didSubscribeWithDisposable:(RACCompoundDisposable *)disposable {\n\t[self.otherTerminal didSubscribeWithDisposable:disposable];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACCommand.h",
    "content": "//\n//  RACCommand.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/3/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSignal;\n\n/// The domain for errors originating within `RACCommand`.\nextern NSString * const RACCommandErrorDomain;\n\n/// -execute: was invoked while the command was disabled.\nextern const NSInteger RACCommandErrorNotEnabled;\n\n/// A `userInfo` key for an error, associated with the `RACCommand` that the\n/// error originated from.\n///\n/// This is included only when the error code is `RACCommandErrorNotEnabled`.\nextern NSString * const RACUnderlyingCommandErrorKey;\n\n/// A command is a signal triggered in response to some action, typically\n/// UI-related.\n@interface RACCommand : NSObject\n\n/// A signal of the signals returned by successful invocations of -execute:\n/// (i.e., while the receiver is `enabled`).\n///\n/// Errors will be automatically caught upon the inner signals, and sent upon\n/// `errors` instead. If you _want_ to receive inner errors, use -execute: or\n/// -[RACSignal materialize].\n/// \n/// Only executions that begin _after_ subscription will be sent upon this\n/// signal. All inner signals will arrive upon the main thread.\n@property (nonatomic, strong, readonly) RACSignal *executionSignals;\n\n/// A signal of whether this command is currently executing.\n///\n/// This will send YES whenever -execute: is invoked and the created signal has\n/// not yet terminated. Once all executions have terminated, `executing` will\n/// send NO.\n///\n/// This signal will send its current value upon subscription, and then all\n/// future values on the main thread.\n@property (nonatomic, strong, readonly) RACSignal *executing;\n\n/// A signal of whether this command is able to execute.\n///\n/// This will send NO if:\n///\n///  - The command was created with an `enabledSignal`, and NO is sent upon that\n///    signal, or\n///  - `allowsConcurrentExecution` is NO and the command has started executing.\n///\n/// Once the above conditions are no longer met, the signal will send YES.\n///\n/// This signal will send its current value upon subscription, and then all\n/// future values on the main thread.\n@property (nonatomic, strong, readonly) RACSignal *enabled;\n\n/// Forwards any errors that occur within signals returned by -execute:.\n///\n/// When an error occurs on a signal returned from -execute:, this signal will\n/// send the associated NSError value as a `next` event (since an `error` event\n/// would terminate the stream).\n///\n/// After subscription, this signal will send all future errors on the main\n/// thread.\n@property (nonatomic, strong, readonly) RACSignal *errors;\n\n/// Whether the command allows multiple executions to proceed concurrently.\n///\n/// The default value for this property is NO.\n@property (atomic, assign) BOOL allowsConcurrentExecution;\n\n/// Invokes -initWithEnabled:signalBlock: with a nil `enabledSignal`.\n- (id)initWithSignalBlock:(RACSignal * (^)(id input))signalBlock;\n\n/// Initializes a command that is conditionally enabled.\n///\n/// This is the designated initializer for this class.\n///\n/// enabledSignal - A signal of BOOLs which indicate whether the command should\n///                 be enabled. `enabled` will be based on the latest value sent\n///                 from this signal. Before any values are sent, `enabled` will\n///                 default to YES. This argument may be nil.\n/// signalBlock   - A block which will map each input value (passed to -execute:)\n///                 to a signal of work. The returned signal will be multicasted\n///                 to a replay subject, sent on `executionSignals`, then\n///                 subscribed to synchronously. Neither the block nor the\n///                 returned signal may be nil.\n- (id)initWithEnabled:(RACSignal *)enabledSignal signalBlock:(RACSignal * (^)(id input))signalBlock;\n\n/// If the receiver is enabled, this method will:\n///\n///  1. Invoke the `signalBlock` given at the time of initialization.\n///  2. Multicast the returned signal to a RACReplaySubject.\n///  3. Send the multicasted signal on `executionSignals`.\n///  4. Subscribe (connect) to the original signal on the main thread.\n///\n/// input - The input value to pass to the receiver's `signalBlock`. This may be\n///         nil.\n///\n/// Returns the multicasted signal, after subscription. If the receiver is not\n/// enabled, returns a signal that will send an error with code\n/// RACCommandErrorNotEnabled.\n- (RACSignal *)execute:(id)input;\n\n@end\n\n@interface RACCommand (Unavailable)\n\n@property (atomic, readonly) BOOL canExecute __attribute__((unavailable(\"Use the 'enabled' signal instead\")));\n\n+ (instancetype)command __attribute__((unavailable(\"Use -initWithSignalBlock: instead\")));\n+ (instancetype)commandWithCanExecuteSignal:(RACSignal *)canExecuteSignal __attribute__((unavailable(\"Use -initWithEnabled:signalBlock: instead\")));\n- (id)initWithCanExecuteSignal:(RACSignal *)canExecuteSignal __attribute__((unavailable(\"Use -initWithEnabled:signalBlock: instead\")));\n- (RACSignal *)addSignalBlock:(RACSignal * (^)(id value))signalBlock __attribute__((unavailable(\"Pass the signalBlock to -initWithSignalBlock: instead\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACCommand.m",
    "content": "//\n//  RACCommand.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/3/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACCommand.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSArray+RACSequenceAdditions.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"NSObject+RACPropertySubscribing.h\"\n#import \"RACMulticastConnection.h\"\n#import \"RACReplaySubject.h\"\n#import \"RACScheduler.h\"\n#import \"RACSequence.h\"\n#import \"RACSignal+Operations.h\"\n#import <libkern/OSAtomic.h>\n\nNSString * const RACCommandErrorDomain = @\"RACCommandErrorDomain\";\nNSString * const RACUnderlyingCommandErrorKey = @\"RACUnderlyingCommandErrorKey\";\n\nconst NSInteger RACCommandErrorNotEnabled = 1;\n\n@interface RACCommand () {\n\t// Atomic backing variable for `allowsConcurrentExecution`.\n\tvolatile uint32_t _allowsConcurrentExecution;\n}\n\n/// A subject that sends added execution signals.\n@property (nonatomic, strong, readonly) RACSubject *addedExecutionSignalsSubject;\n\n/// A subject that sends the new value of `allowsConcurrentExecution` whenever it changes.\n@property (nonatomic, strong, readonly) RACSubject *allowsConcurrentExecutionSubject;\n\n// `enabled`, but without a hop to the main thread.\n//\n// Values from this signal may arrive on any thread.\n@property (nonatomic, strong, readonly) RACSignal *immediateEnabled;\n\n// The signal block that the receiver was initialized with.\n@property (nonatomic, copy, readonly) RACSignal * (^signalBlock)(id input);\n\n@end\n\n@implementation RACCommand\n\n#pragma mark Properties\n\n- (BOOL)allowsConcurrentExecution {\n\treturn _allowsConcurrentExecution != 0;\n}\n\n- (void)setAllowsConcurrentExecution:(BOOL)allowed {\n\tif (allowed) {\n\t\tOSAtomicOr32Barrier(1, &_allowsConcurrentExecution);\n\t} else {\n\t\tOSAtomicAnd32Barrier(0, &_allowsConcurrentExecution);\n\t}\n\n\t[self.allowsConcurrentExecutionSubject sendNext:@(_allowsConcurrentExecution)];\n}\n\n#pragma mark Lifecycle\n\n- (id)init {\n\tNSCAssert(NO, @\"Use -initWithSignalBlock: instead\");\n\treturn nil;\n}\n\n- (id)initWithSignalBlock:(RACSignal * (^)(id input))signalBlock {\n\treturn [self initWithEnabled:nil signalBlock:signalBlock];\n}\n\n- (void)dealloc {\n\t[_addedExecutionSignalsSubject sendCompleted];\n\t[_allowsConcurrentExecutionSubject sendCompleted];\n}\n\n- (id)initWithEnabled:(RACSignal *)enabledSignal signalBlock:(RACSignal * (^)(id input))signalBlock {\n\tNSCParameterAssert(signalBlock != nil);\n\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_addedExecutionSignalsSubject = [RACSubject new];\n\t_allowsConcurrentExecutionSubject = [RACSubject new];\n\t_signalBlock = [signalBlock copy];\n\n\t_executionSignals = [[[self.addedExecutionSignalsSubject\n\t\tmap:^(RACSignal *signal) {\n\t\t\treturn [signal catchTo:[RACSignal empty]];\n\t\t}]\n\t\tdeliverOn:RACScheduler.mainThreadScheduler]\n\t\tsetNameWithFormat:@\"%@ -executionSignals\", self];\n\t\n\t// `errors` needs to be multicasted so that it picks up all\n\t// `activeExecutionSignals` that are added.\n\t//\n\t// In other words, if someone subscribes to `errors` _after_ an execution\n\t// has started, it should still receive any error from that execution.\n\tRACMulticastConnection *errorsConnection = [[[self.addedExecutionSignalsSubject\n\t\tflattenMap:^(RACSignal *signal) {\n\t\t\treturn [[signal\n\t\t\t\tignoreValues]\n\t\t\t\tcatch:^(NSError *error) {\n\t\t\t\t\treturn [RACSignal return:error];\n\t\t\t\t}];\n\t\t}]\n\t\tdeliverOn:RACScheduler.mainThreadScheduler]\n\t\tpublish];\n\t\n\t_errors = [errorsConnection.signal setNameWithFormat:@\"%@ -errors\", self];\n\t[errorsConnection connect];\n\n\tRACSignal *immediateExecuting = [[[[self.addedExecutionSignalsSubject\n\t\tflattenMap:^(RACSignal *signal) {\n\t\t\treturn [[[signal\n\t\t\t\tcatchTo:[RACSignal empty]]\n\t\t\t\tthen:^{\n\t\t\t\t\treturn [RACSignal return:@-1];\n\t\t\t\t}]\n\t\t\t\tstartWith:@1];\n\t\t}]\n\t\tscanWithStart:@0 reduce:^(NSNumber *running, NSNumber *next) {\n\t\t\treturn @(running.integerValue + next.integerValue);\n\t\t}]\n\t\tmap:^(NSNumber *count) {\n\t\t\treturn @(count.integerValue > 0);\n\t\t}]\n\t\tstartWith:@NO];\n\n\t_executing = [[[[[immediateExecuting\n\t\tdeliverOn:RACScheduler.mainThreadScheduler]\n\t\t// This is useful before the first value arrives on the main thread.\n\t\tstartWith:@NO]\n\t\tdistinctUntilChanged]\n\t\treplayLast]\n\t\tsetNameWithFormat:@\"%@ -executing\", self];\n\t\n\tRACSignal *moreExecutionsAllowed = [RACSignal\n\t\tif:[self.allowsConcurrentExecutionSubject startWith:@NO]\n\t\tthen:[RACSignal return:@YES]\n\t\telse:[immediateExecuting not]];\n\t\n\tif (enabledSignal == nil) {\n\t\tenabledSignal = [RACSignal return:@YES];\n\t} else {\n\t\tenabledSignal = [enabledSignal startWith:@YES];\n\t}\n\t\n\t_immediateEnabled = [[[[RACSignal\n\t\tcombineLatest:@[ enabledSignal, moreExecutionsAllowed ]]\n\t\tand]\n\t\ttakeUntil:self.rac_willDeallocSignal]\n\t\treplayLast];\n\t\n\t_enabled = [[[[[self.immediateEnabled\n\t\ttake:1]\n\t\tconcat:[[self.immediateEnabled skip:1] deliverOn:RACScheduler.mainThreadScheduler]]\n\t\tdistinctUntilChanged]\n\t\treplayLast]\n\t\tsetNameWithFormat:@\"%@ -enabled\", self];\n\n\treturn self;\n}\n\n#pragma mark Execution\n\n- (RACSignal *)execute:(id)input {\n\t// `immediateEnabled` is guaranteed to send a value upon subscription, so\n\t// -first is acceptable here.\n\tBOOL enabled = [[self.immediateEnabled first] boolValue];\n\tif (!enabled) {\n\t\tNSError *error = [NSError errorWithDomain:RACCommandErrorDomain code:RACCommandErrorNotEnabled userInfo:@{\n\t\t\tNSLocalizedDescriptionKey: NSLocalizedString(@\"The command is disabled and cannot be executed\", nil),\n\t\t\tRACUnderlyingCommandErrorKey: self\n\t\t}];\n\n\t\treturn [RACSignal error:error];\n\t}\n\n\tRACSignal *signal = self.signalBlock(input);\n\tNSCAssert(signal != nil, @\"nil signal returned from signal block for value: %@\", input);\n\n\t// We subscribe to the signal on the main thread so that it occurs _after_\n\t// -addActiveExecutionSignal: completes below.\n\t//\n\t// This means that `executing` and `enabled` will send updated values before\n\t// the signal actually starts performing work.\n\tRACMulticastConnection *connection = [[signal\n\t\tsubscribeOn:RACScheduler.mainThreadScheduler]\n\t\tmulticast:[RACReplaySubject subject]];\n\t\n\t[self.addedExecutionSignalsSubject sendNext:connection.signal];\n\n\t[connection connect];\n\treturn [connection.signal setNameWithFormat:@\"%@ -execute: %@\", self, RACDescription(input)];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACCompoundDisposable.h",
    "content": "//\n//  RACCompoundDisposable.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/30/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACDisposable.h\"\n\n/// A disposable of disposables. When it is disposed, it disposes of all its\n/// contained disposables.\n///\n/// If -addDisposable: is called after the compound disposable has been disposed\n/// of, the given disposable is immediately disposed. This allows a compound\n/// disposable to act as a stand-in for a disposable that will be delivered\n/// asynchronously.\n@interface RACCompoundDisposable : RACDisposable\n\n/// Creates and returns a new compound disposable.\n+ (instancetype)compoundDisposable;\n\n/// Creates and returns a new compound disposable containing the given\n/// disposables.\n+ (instancetype)compoundDisposableWithDisposables:(NSArray *)disposables;\n\n/// Adds the given disposable. If the receiving disposable has already been\n/// disposed of, the given disposable is disposed immediately.\n///\n/// This method is thread-safe.\n///\n/// disposable - The disposable to add. This may be nil, in which case nothing\n///              happens.\n- (void)addDisposable:(RACDisposable *)disposable;\n\n/// Removes the specified disposable from the compound disposable (regardless of\n/// its disposed status), or does nothing if it's not in the compound disposable.\n///\n/// This is mainly useful for limiting the memory usage of the compound\n/// disposable for long-running operations.\n///\n/// This method is thread-safe.\n///\n/// disposable - The disposable to remove. This argument may be nil (to make the\n///              use of weak references easier).\n- (void)removeDisposable:(RACDisposable *)disposable;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACCompoundDisposable.m",
    "content": "//\n//  RACCompoundDisposable.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/30/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACCompoundDisposable.h\"\n#import \"RACCompoundDisposableProvider.h\"\n#import <libkern/OSAtomic.h>\n\n// The number of child disposables for which space will be reserved directly in\n// `RACCompoundDisposable`.\n//\n// This number has been empirically determined to provide a good tradeoff\n// between performance, memory usage, and `RACCompoundDisposable` instance size\n// in a moderately complex GUI application.\n//\n// Profile any change!\n#define RACCompoundDisposableInlineCount 2\n\nstatic CFMutableArrayRef RACCreateDisposablesArray(void) {\n\t// Compare values using only pointer equality.\n\tCFArrayCallBacks callbacks = kCFTypeArrayCallBacks;\n\tcallbacks.equal = NULL;\n\n\treturn CFArrayCreateMutable(NULL, 0, &callbacks);\n}\n\n@interface RACCompoundDisposable () {\n\t// Used for synchronization.\n\tOSSpinLock _spinLock;\n\n\t#if RACCompoundDisposableInlineCount\n\t// A fast array to the first N of the receiver's disposables.\n\t//\n\t// Once this is full, `_disposables` will be created and used for additional\n\t// disposables.\n\t//\n\t// This array should only be manipulated while _spinLock is held.\n\tRACDisposable *_inlineDisposables[RACCompoundDisposableInlineCount];\n\t#endif\n\n\t// Contains the receiver's disposables.\n\t//\n\t// This array should only be manipulated while _spinLock is held. If\n\t// `_disposed` is YES, this may be NULL.\n\tCFMutableArrayRef _disposables;\n\n\t// Whether the receiver has already been disposed.\n\t//\n\t// This ivar should only be accessed while _spinLock is held.\n\tBOOL _disposed;\n}\n\n@end\n\n@implementation RACCompoundDisposable\n\n#pragma mark Properties\n\n- (BOOL)isDisposed {\n\tOSSpinLockLock(&_spinLock);\n\tBOOL disposed = _disposed;\n\tOSSpinLockUnlock(&_spinLock);\n\n\treturn disposed;\n}\n\n#pragma mark Lifecycle\n\n+ (instancetype)compoundDisposable {\n\treturn [[self alloc] initWithDisposables:nil];\n}\n\n+ (instancetype)compoundDisposableWithDisposables:(NSArray *)disposables {\n\treturn [[self alloc] initWithDisposables:disposables];\n}\n\n- (id)initWithDisposables:(NSArray *)otherDisposables {\n\tself = [self init];\n\tif (self == nil) return nil;\n\n\t#if RACCompoundDisposableInlineCount\n\t[otherDisposables enumerateObjectsUsingBlock:^(RACDisposable *disposable, NSUInteger index, BOOL *stop) {\n\t\t_inlineDisposables[index] = disposable;\n\n\t\t// Stop after this iteration if we've reached the end of the inlined\n\t\t// array.\n\t\tif (index == RACCompoundDisposableInlineCount - 1) *stop = YES;\n\t}];\n\t#endif\n\n\tif (otherDisposables.count > RACCompoundDisposableInlineCount) {\n\t\t_disposables = RACCreateDisposablesArray();\n\n\t\tCFRange range = CFRangeMake(RACCompoundDisposableInlineCount, (CFIndex)otherDisposables.count - RACCompoundDisposableInlineCount);\n\t\tCFArrayAppendArray(_disposables, (__bridge CFArrayRef)otherDisposables, range);\n\t}\n\n\treturn self;\n}\n\n- (id)initWithBlock:(void (^)(void))block {\n\tRACDisposable *disposable = [RACDisposable disposableWithBlock:block];\n\treturn [self initWithDisposables:@[ disposable ]];\n}\n\n- (void)dealloc {\n\t#if RACCompoundDisposableInlineCount\n\tfor (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) {\n\t\t_inlineDisposables[i] = nil;\n\t}\n\t#endif\n\n\tif (_disposables != NULL) {\n\t\tCFRelease(_disposables);\n\t\t_disposables = NULL;\n\t}\n}\n\n#pragma mark Addition and Removal\n\n- (void)addDisposable:(RACDisposable *)disposable {\n\tNSCParameterAssert(disposable != self);\n\tif (disposable == nil || disposable.disposed) return;\n\n\tBOOL shouldDispose = NO;\n\n\tOSSpinLockLock(&_spinLock);\n\t{\n\t\tif (_disposed) {\n\t\t\tshouldDispose = YES;\n\t\t} else {\n\t\t\t#if RACCompoundDisposableInlineCount\n\t\t\tfor (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) {\n\t\t\t\tif (_inlineDisposables[i] == nil) {\n\t\t\t\t\t_inlineDisposables[i] = disposable;\n\t\t\t\t\tgoto foundSlot;\n\t\t\t\t}\n\t\t\t}\n\t\t\t#endif\n\n\t\t\tif (_disposables == NULL) _disposables = RACCreateDisposablesArray();\n\t\t\tCFArrayAppendValue(_disposables, (__bridge void *)disposable);\n\n\t\t\tif (RACCOMPOUNDDISPOSABLE_ADDED_ENABLED()) {\n\t\t\t\tRACCOMPOUNDDISPOSABLE_ADDED(self.description.UTF8String, disposable.description.UTF8String, CFArrayGetCount(_disposables) + RACCompoundDisposableInlineCount);\n\t\t\t}\n\n\t\t#if RACCompoundDisposableInlineCount\n\t\tfoundSlot:;\n\t\t#endif\n\t\t}\n\t}\n\tOSSpinLockUnlock(&_spinLock);\n\n\t// Performed outside of the lock in case the compound disposable is used\n\t// recursively.\n\tif (shouldDispose) [disposable dispose];\n}\n\n- (void)removeDisposable:(RACDisposable *)disposable {\n\tif (disposable == nil) return;\n\n\tOSSpinLockLock(&_spinLock);\n\t{\n\t\tif (!_disposed) {\n\t\t\t#if RACCompoundDisposableInlineCount\n\t\t\tfor (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) {\n\t\t\t\tif (_inlineDisposables[i] == disposable) _inlineDisposables[i] = nil;\n\t\t\t}\n\t\t\t#endif\n\n\t\t\tif (_disposables != NULL) {\n\t\t\t\tCFIndex count = CFArrayGetCount(_disposables);\n\t\t\t\tfor (CFIndex i = count - 1; i >= 0; i--) {\n\t\t\t\t\tconst void *item = CFArrayGetValueAtIndex(_disposables, i);\n\t\t\t\t\tif (item == (__bridge void *)disposable) {\n\t\t\t\t\t\tCFArrayRemoveValueAtIndex(_disposables, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (RACCOMPOUNDDISPOSABLE_REMOVED_ENABLED()) {\n\t\t\t\t\tRACCOMPOUNDDISPOSABLE_REMOVED(self.description.UTF8String, disposable.description.UTF8String, CFArrayGetCount(_disposables) + RACCompoundDisposableInlineCount);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tOSSpinLockUnlock(&_spinLock);\n}\n\n#pragma mark RACDisposable\n\nstatic void disposeEach(const void *value, void *context) {\n\tRACDisposable *disposable = (__bridge id)value;\n\t[disposable dispose];\n}\n\n- (void)dispose {\n\t#if RACCompoundDisposableInlineCount\n\tRACDisposable *inlineCopy[RACCompoundDisposableInlineCount];\n\t#endif\n\n\tCFArrayRef remainingDisposables = NULL;\n\n\tOSSpinLockLock(&_spinLock);\n\t{\n\t\t_disposed = YES;\n\n\t\t#if RACCompoundDisposableInlineCount\n\t\tfor (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) {\n\t\t\tinlineCopy[i] = _inlineDisposables[i];\n\t\t\t_inlineDisposables[i] = nil;\n\t\t}\n\t\t#endif\n\n\t\tremainingDisposables = _disposables;\n\t\t_disposables = NULL;\n\t}\n\tOSSpinLockUnlock(&_spinLock);\n\n\t#if RACCompoundDisposableInlineCount\n\t// Dispose outside of the lock in case the compound disposable is used\n\t// recursively.\n\tfor (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) {\n\t\t[inlineCopy[i] dispose];\n\t}\n\t#endif\n\n\tif (remainingDisposables == NULL) return;\n\n\tCFIndex count = CFArrayGetCount(remainingDisposables);\n\tCFArrayApplyFunction(remainingDisposables, CFRangeMake(0, count), &disposeEach, NULL);\n\tCFRelease(remainingDisposables);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACCompoundDisposableProvider.d",
    "content": "provider RACCompoundDisposable {\n    probe added(char *compoundDisposable, char *disposable, long newTotal);\n    probe removed(char *compoundDisposable, char *disposable, long newTotal);\n};\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDelegateProxy.h",
    "content": "//\n//  RACDelegateProxy.h\n//  ReactiveCocoa\n//\n//  Created by Cody Krieger on 5/19/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACSignal;\n\n// A private delegate object suitable for using\n// -rac_signalForSelector:fromProtocol: upon.\n@interface RACDelegateProxy : NSObject\n\n// The delegate to which messages should be forwarded if not handled by\n// any -signalForSelector: applications.\n@property (nonatomic, unsafe_unretained) id rac_proxiedDelegate;\n\n// Creates a delegate proxy capable of responding to selectors from `protocol`.\n- (instancetype)initWithProtocol:(Protocol *)protocol;\n\n// Calls -rac_signalForSelector:fromProtocol: using the `protocol` specified\n// during initialization.\n- (RACSignal *)signalForSelector:(SEL)selector;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDelegateProxy.m",
    "content": "//\n//  RACDelegateProxy.m\n//  ReactiveCocoa\n//\n//  Created by Cody Krieger on 5/19/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACDelegateProxy.h\"\n#import \"NSObject+RACSelectorSignal.h\"\n#import <objc/runtime.h>\n\n@interface RACDelegateProxy () {\n\t// Declared as an ivar to avoid method naming conflicts.\n\tProtocol *_protocol;\n}\n\n@end\n\n@implementation RACDelegateProxy\n\n#pragma mark Lifecycle\n\n- (instancetype)initWithProtocol:(Protocol *)protocol {\n\tNSCParameterAssert(protocol != NULL);\n\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\tclass_addProtocol(self.class, protocol);\n\n\t_protocol = protocol;\n\n\treturn self;\n}\n\n#pragma mark API\n\n- (RACSignal *)signalForSelector:(SEL)selector {\n\treturn [self rac_signalForSelector:selector fromProtocol:_protocol];\n}\n\n#pragma mark NSObject\n\n- (BOOL)isProxy {\n\treturn YES;\n}\n\n- (void)forwardInvocation:(NSInvocation *)invocation {\n\t[invocation invokeWithTarget:self.rac_proxiedDelegate];\n}\n\n- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector {\n\t// Look for the selector as an optional instance method.\n\tstruct objc_method_description methodDescription = protocol_getMethodDescription(_protocol, selector, NO, YES);\n\n\tif (methodDescription.name == NULL) {\n\t\t// Then fall back to looking for a required instance\n\t\t// method.\n\t\tmethodDescription = protocol_getMethodDescription(_protocol, selector, YES, YES);\n\t\tif (methodDescription.name == NULL) return [super methodSignatureForSelector:selector];\n\t}\n\n\treturn [NSMethodSignature signatureWithObjCTypes:methodDescription.types];\n}\n\n- (BOOL)respondsToSelector:(SEL)selector {\n\t// Add the delegate to the autorelease pool, so it doesn't get deallocated\n\t// between this method call and -forwardInvocation:.\n\t__autoreleasing id delegate = self.rac_proxiedDelegate;\n\tif ([delegate respondsToSelector:selector]) return YES;\n    \n\treturn [super respondsToSelector:selector];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDisposable.h",
    "content": "//\n//  RACDisposable.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/16/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACScopedDisposable;\n\n/// A disposable encapsulates the work necessary to tear down and cleanup a\n/// subscription.\n@interface RACDisposable : NSObject\n\n/// Whether the receiver has been disposed.\n///\n/// Use of this property is discouraged, since it may be set to `YES`\n/// concurrently at any time.\n///\n/// This property is not KVO-compliant.\n@property (atomic, assign, getter = isDisposed, readonly) BOOL disposed;\n\n+ (instancetype)disposableWithBlock:(void (^)(void))block;\n\n/// Performs the disposal work. Can be called multiple times, though subsequent\n/// calls won't do anything.\n- (void)dispose;\n\n/// Returns a new disposable which will dispose of this disposable when it gets\n/// dealloc'd.\n- (RACScopedDisposable *)asScopedDisposable;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDisposable.m",
    "content": "//\n//  RACDisposable.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/16/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACDisposable.h\"\n#import \"RACScopedDisposable.h\"\n#import <libkern/OSAtomic.h>\n\n@interface RACDisposable () {\n\t// A copied block of type void (^)(void) containing the logic for disposal,\n\t// a pointer to `self` if no logic should be performed upon disposal, or\n\t// NULL if the receiver is already disposed.\n\t//\n\t// This should only be used atomically.\n\tvoid * volatile _disposeBlock;\n}\n\n@end\n\n@implementation RACDisposable\n\n#pragma mark Properties\n\n- (BOOL)isDisposed {\n\treturn _disposeBlock == NULL;\n}\n\n#pragma mark Lifecycle\n\n- (id)init {\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_disposeBlock = (__bridge void *)self;\n\tOSMemoryBarrier();\n\n\treturn self;\n}\n\n- (id)initWithBlock:(void (^)(void))block {\n\tNSCParameterAssert(block != nil);\n\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_disposeBlock = (void *)CFBridgingRetain([block copy]); \n\tOSMemoryBarrier();\n\n\treturn self;\n}\n\n+ (instancetype)disposableWithBlock:(void (^)(void))block {\n\treturn [[self alloc] initWithBlock:block];\n}\n\n- (void)dealloc {\n\tif (_disposeBlock == NULL || _disposeBlock == (__bridge void *)self) return;\n\n\tCFRelease(_disposeBlock);\n\t_disposeBlock = NULL;\n}\n\n#pragma mark Disposal\n\n- (void)dispose {\n\tvoid (^disposeBlock)(void) = NULL;\n\n\twhile (YES) {\n\t\tvoid *blockPtr = _disposeBlock;\n\t\tif (OSAtomicCompareAndSwapPtrBarrier(blockPtr, NULL, &_disposeBlock)) {\n\t\t\tif (blockPtr != (__bridge void *)self) {\n\t\t\t\tdisposeBlock = CFBridgingRelease(blockPtr);\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (disposeBlock != nil) disposeBlock();\n}\n\n#pragma mark Scoped Disposables\n\n- (RACScopedDisposable *)asScopedDisposable {\n\treturn [RACScopedDisposable scopedDisposableWithDisposable:self];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicPropertySuperclass.h",
    "content": "//  Copyright (c) 2015 GitHub. All rights reserved.\n\n#import <Foundation/Foundation.h>\n\n/// This superclass is an implementation detail of DynamicProperty. Do\n/// not use it.\n@interface RACDynamicPropertySuperclass : NSObject\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicPropertySuperclass.m",
    "content": "//  Copyright (c) 2015 GitHub. All rights reserved.\n\n#import \"RACDynamicPropertySuperclass.h\"\n\n@interface RACDynamicPropertySuperclass ()\n\n@property id value;\n@property id rac_value;\n\n@end\n\n@implementation RACDynamicPropertySuperclass\n\n- (id)value {\n\treturn self.rac_value;\n}\n\n- (void)setValue:(id)value {\n\tself.rac_value = value;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicSequence.h",
    "content": "//\n//  RACDynamicSequence.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"RACSequence.h\"\n\n// Private class that implements a sequence dynamically using blocks.\n@interface RACDynamicSequence : RACSequence\n\n// Returns a sequence which evaluates `dependencyBlock` only once, the first\n// time either `headBlock` or `tailBlock` is evaluated. The result of\n// `dependencyBlock` will be passed into `headBlock` and `tailBlock` when\n// invoked.\n+ (RACSequence *)sequenceWithLazyDependency:(id (^)(void))dependencyBlock headBlock:(id (^)(id dependency))headBlock tailBlock:(RACSequence *(^)(id dependency))tailBlock;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicSequence.m",
    "content": "//\n//  RACDynamicSequence.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"RACDynamicSequence.h\"\n#import <libkern/OSAtomic.h>\n\n// Determines how RACDynamicSequences will be deallocated before the next one is\n// shifted onto the autorelease pool.\n//\n// This avoids stack overflows when deallocating long chains of dynamic\n// sequences.\n#define DEALLOC_OVERFLOW_GUARD 100\n\n@interface RACDynamicSequence () {\n\t// The value for the \"head\" property, if it's been evaluated already.\n\t//\n\t// Because it's legal for head to be nil, this ivar is valid any time\n\t// headBlock is nil.\n\t//\n\t// This ivar should only be accessed while synchronized on self.\n\tid _head;\n\n\t// The value for the \"tail\" property, if it's been evaluated already.\n\t//\n\t// Because it's legal for tail to be nil, this ivar is valid any time\n\t// tailBlock is nil.\n\t//\n\t// This ivar should only be accessed while synchronized on self.\n\tRACSequence *_tail;\n\n\t// The result of an evaluated `dependencyBlock`.\n\t//\n\t// This ivar is valid any time `hasDependency` is YES and `dependencyBlock`\n\t// is nil.\n\t//\n\t// This ivar should only be accessed while synchronized on self.\n\tid _dependency;\n}\n\n// A block used to evaluate head. This should be set to nil after `_head` has been\n// initialized.\n//\n// This is marked `strong` instead of `copy` because of some bizarre block\n// copying bug. See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/506.\n//\n// The signature of this block varies based on the value of `hasDependency`:\n//\n//  - If YES, this block is of type `id (^)(id)`.\n//  - If NO, this block is of type `id (^)(void)`.\n//\n// This property should only be accessed while synchronized on self.\n@property (nonatomic, strong) id headBlock;\n\n// A block used to evaluate tail. This should be set to nil after `_tail` has been\n// initialized.\n//\n// This is marked `strong` instead of `copy` because of some bizarre block\n// copying bug. See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/506.\n//\n// The signature of this block varies based on the value of `hasDependency`:\n//\n//  - If YES, this block is of type `RACSequence * (^)(id)`.\n//  - If NO, this block is of type `RACSequence * (^)(void)`.\n//\n// This property should only be accessed while synchronized on self.\n@property (nonatomic, strong) id tailBlock;\n\n// Whether the receiver was initialized with a `dependencyBlock`.\n//\n// This property should only be accessed while synchronized on self.\n@property (nonatomic, assign) BOOL hasDependency;\n\n// A dependency which must be evaluated before `headBlock` and `tailBlock`. This\n// should be set to nil after `_dependency` and `dependencyBlockExecuted` have\n// been set.\n//\n// This is marked `strong` instead of `copy` because of some bizarre block\n// copying bug. See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/506.\n//\n// This property should only be accessed while synchronized on self.\n@property (nonatomic, strong) id (^dependencyBlock)(void);\n\n@end\n\n@implementation RACDynamicSequence\n\n#pragma mark Lifecycle\n\n+ (RACSequence *)sequenceWithHeadBlock:(id (^)(void))headBlock tailBlock:(RACSequence *(^)(void))tailBlock {\n\tNSCParameterAssert(headBlock != nil);\n\n\tRACDynamicSequence *seq = [[RACDynamicSequence alloc] init];\n\tseq.headBlock = [headBlock copy];\n\tseq.tailBlock = [tailBlock copy];\n\tseq.hasDependency = NO;\n\treturn seq;\n}\n\n+ (RACSequence *)sequenceWithLazyDependency:(id (^)(void))dependencyBlock headBlock:(id (^)(id dependency))headBlock tailBlock:(RACSequence *(^)(id dependency))tailBlock {\n\tNSCParameterAssert(dependencyBlock != nil);\n\tNSCParameterAssert(headBlock != nil);\n\n\tRACDynamicSequence *seq = [[RACDynamicSequence alloc] init];\n\tseq.headBlock = [headBlock copy];\n\tseq.tailBlock = [tailBlock copy];\n\tseq.dependencyBlock = [dependencyBlock copy];\n\tseq.hasDependency = YES;\n\treturn seq;\n}\n\n- (void)dealloc {\n\tstatic volatile int32_t directDeallocCount = 0;\n\n\tif (OSAtomicIncrement32(&directDeallocCount) >= DEALLOC_OVERFLOW_GUARD) {\n\t\tOSAtomicAdd32(-DEALLOC_OVERFLOW_GUARD, &directDeallocCount);\n\n\t\t// Put this sequence's tail onto the autorelease pool so we stop\n\t\t// recursing.\n\t\t__autoreleasing RACSequence *tail __attribute__((unused)) = _tail;\n\t}\n\t\n\t_tail = nil;\n}\n\n#pragma mark RACSequence\n\n- (id)head {\n\t@synchronized (self) {\n\t\tid untypedHeadBlock = self.headBlock;\n\t\tif (untypedHeadBlock == nil) return _head;\n\n\t\tif (self.hasDependency) {\n\t\t\tif (self.dependencyBlock != nil) {\n\t\t\t\t_dependency = self.dependencyBlock();\n\t\t\t\tself.dependencyBlock = nil;\n\t\t\t}\n\n\t\t\tid (^headBlock)(id) = untypedHeadBlock;\n\t\t\t_head = headBlock(_dependency);\n\t\t} else {\n\t\t\tid (^headBlock)(void) = untypedHeadBlock;\n\t\t\t_head = headBlock();\n\t\t}\n\n\t\tself.headBlock = nil;\n\t\treturn _head;\n\t}\n}\n\n- (RACSequence *)tail {\n\t@synchronized (self) {\n\t\tid untypedTailBlock = self.tailBlock;\n\t\tif (untypedTailBlock == nil) return _tail;\n\n\t\tif (self.hasDependency) {\n\t\t\tif (self.dependencyBlock != nil) {\n\t\t\t\t_dependency = self.dependencyBlock();\n\t\t\t\tself.dependencyBlock = nil;\n\t\t\t}\n\n\t\t\tRACSequence * (^tailBlock)(id) = untypedTailBlock;\n\t\t\t_tail = tailBlock(_dependency);\n\t\t} else {\n\t\t\tRACSequence * (^tailBlock)(void) = untypedTailBlock;\n\t\t\t_tail = tailBlock();\n\t\t}\n\n\t\tif (_tail.name == nil) _tail.name = self.name;\n\n\t\tself.tailBlock = nil;\n\t\treturn _tail;\n\t}\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\tid head = @\"(unresolved)\";\n\tid tail = @\"(unresolved)\";\n\n\t@synchronized (self) {\n\t\tif (self.headBlock == nil) head = _head;\n\t\tif (self.tailBlock == nil) {\n\t\t\ttail = _tail;\n\t\t\tif (tail == self) tail = @\"(self)\";\n\t\t}\n\t}\n\n\treturn [NSString stringWithFormat:@\"<%@: %p>{ name = %@, head = %@, tail = %@ }\", self.class, self, self.name, head, tail];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicSignal.h",
    "content": "//\n//  RACDynamicSignal.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-10-10.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSignal.h\"\n\n// A private `RACSignal` subclasses that implements its subscription behavior\n// using a block.\n@interface RACDynamicSignal : RACSignal\n\n+ (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACDynamicSignal.m",
    "content": "//\n//  RACDynamicSignal.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-10-10.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACDynamicSignal.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"RACCompoundDisposable.h\"\n#import \"RACPassthroughSubscriber.h\"\n#import \"RACScheduler+Private.h\"\n#import \"RACSubscriber.h\"\n#import <libkern/OSAtomic.h>\n\n@interface RACDynamicSignal ()\n\n// The block to invoke for each subscriber.\n@property (nonatomic, copy, readonly) RACDisposable * (^didSubscribe)(id<RACSubscriber> subscriber);\n\n@end\n\n@implementation RACDynamicSignal\n\n#pragma mark Lifecycle\n\n+ (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe {\n\tRACDynamicSignal *signal = [[self alloc] init];\n\tsignal->_didSubscribe = [didSubscribe copy];\n\treturn [signal setNameWithFormat:@\"+createSignal:\"];\n}\n\n#pragma mark Managing Subscribers\n\n- (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber {\n\tNSCParameterAssert(subscriber != nil);\n\n\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];\n\tsubscriber = [[RACPassthroughSubscriber alloc] initWithSubscriber:subscriber signal:self disposable:disposable];\n\n\tif (self.didSubscribe != NULL) {\n\t\tRACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{\n\t\t\tRACDisposable *innerDisposable = self.didSubscribe(subscriber);\n\t\t\t[disposable addDisposable:innerDisposable];\n\t\t}];\n\n\t\t[disposable addDisposable:schedulingDisposable];\n\t}\n\t\n\treturn disposable;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEagerSequence.h",
    "content": "//\n//  RACEagerSequence.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 02/01/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACArraySequence.h\"\n\n// Private class that implements an eager sequence.\n@interface RACEagerSequence : RACArraySequence\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEagerSequence.m",
    "content": "//\n//  RACEagerSequence.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 02/01/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACEagerSequence.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"RACArraySequence.h\"\n\n@implementation RACEagerSequence\n\n#pragma mark RACStream\n\n+ (instancetype)return:(id)value {\n\treturn [[self sequenceWithArray:@[ value ] offset:0] setNameWithFormat:@\"+return: %@\", RACDescription(value)];\n}\n\n- (instancetype)bind:(RACStreamBindBlock (^)(void))block {\n\tNSCParameterAssert(block != nil);\n\tRACStreamBindBlock bindBlock = block();\n\tNSArray *currentArray = self.array;\n\tNSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:currentArray.count];\n\t\n\tfor (id value in currentArray) {\n\t\tBOOL stop = NO;\n\t\tRACSequence *boundValue = (id)bindBlock(value, &stop);\n\t\tif (boundValue == nil) break;\n\n\t\tfor (id x in boundValue) {\n\t\t\t[resultArray addObject:x];\n\t\t}\n\n\t\tif (stop) break;\n\t}\n\t\n\treturn [[self.class sequenceWithArray:resultArray offset:0] setNameWithFormat:@\"[%@] -bind:\", self.name];\n}\n\n- (instancetype)concat:(RACSequence *)sequence {\n\tNSCParameterAssert(sequence != nil);\n\tNSCParameterAssert([sequence isKindOfClass:RACSequence.class]);\n\n\tNSArray *array = [self.array arrayByAddingObjectsFromArray:sequence.array];\n\treturn [[self.class sequenceWithArray:array offset:0] setNameWithFormat:@\"[%@] -concat: %@\", self.name, sequence];\n}\n\n#pragma mark Extended methods\n\n- (RACSequence *)eagerSequence {\n\treturn self;\n}\n\n- (RACSequence *)lazySequence {\n\treturn [RACArraySequence sequenceWithArray:self.array offset:0];\n}\n\n- (id)foldRightWithStart:(id)start reduce:(id (^)(id, RACSequence *rest))reduce {\n\treturn [super foldRightWithStart:start reduce:^(id first, RACSequence *rest) {\n\t\treturn reduce(first, rest.eagerSequence);\n\t}];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEmptySequence.h",
    "content": "//\n//  RACEmptySequence.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"RACSequence.h\"\n\n// Private class representing an empty sequence.\n@interface RACEmptySequence : RACSequence\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEmptySequence.m",
    "content": "//\n//  RACEmptySequence.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"RACEmptySequence.h\"\n\n@implementation RACEmptySequence\n\n#pragma mark Lifecycle\n\n+ (instancetype)empty {\n\tstatic id singleton;\n\tstatic dispatch_once_t pred;\n\n\tdispatch_once(&pred, ^{\n\t\tsingleton = [[self alloc] init];\n\t});\n\n\treturn singleton;\n}\n\n#pragma mark RACSequence\n\n- (id)head {\n\treturn nil;\n}\n\n- (RACSequence *)tail {\n\treturn nil;\n}\n\n- (RACSequence *)bind:(RACStreamBindBlock)bindBlock passingThroughValuesFromSequence:(RACSequence *)passthroughSequence {\n\treturn passthroughSequence ?: self;\n}\n\n#pragma mark NSCoding\n\n- (Class)classForCoder {\n\t// Empty sequences should be encoded as themselves, not array sequences.\n\treturn self.class;\n}\n\n- (id)initWithCoder:(NSCoder *)coder {\n\t// Return the singleton.\n\treturn self.class.empty;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\treturn [NSString stringWithFormat:@\"<%@: %p>{ name = %@ }\", self.class, self, self.name];\n}\n\n- (NSUInteger)hash {\n\t// This hash isn't ideal, but it's better than -[RACSequence hash], which\n\t// would just be zero because we have no head.\n\treturn (NSUInteger)(__bridge void *)self;\n}\n\n- (BOOL)isEqual:(RACSequence *)seq {\n\treturn (self == seq);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEmptySignal.h",
    "content": "//\n//  RACEmptySignal.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-10-10.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSignal.h\"\n\n// A private `RACSignal` subclasses that synchronously sends completed to any\n// subscribers.\n@interface RACEmptySignal : RACSignal\n\n+ (RACSignal *)empty;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEmptySignal.m",
    "content": "//\n//  RACEmptySignal.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-10-10.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACEmptySignal.h\"\n#import \"RACScheduler+Private.h\"\n#import \"RACSubscriber.h\"\n\n@implementation RACEmptySignal\n\n#pragma mark Properties\n\n// Only allow this signal's name to be customized in DEBUG, since it's\n// a singleton in release builds (see +empty).\n- (void)setName:(NSString *)name {\n#ifdef DEBUG\n\t[super setName:name];\n#endif\n}\n\n- (NSString *)name {\n#ifdef DEBUG\n\treturn super.name;\n#else\n\treturn @\"+empty\";\n#endif\n}\n\n#pragma mark Lifecycle\n\n+ (RACSignal *)empty {\n#ifdef DEBUG\n\t// Create multiple instances of this class in DEBUG so users can set custom\n\t// names on each.\n\treturn [[[self alloc] init] setNameWithFormat:@\"+empty\"];\n#else\n\tstatic id singleton;\n\tstatic dispatch_once_t pred;\n\n\tdispatch_once(&pred, ^{\n\t\tsingleton = [[self alloc] init];\n\t});\n\n\treturn singleton;\n#endif\n}\n\n#pragma mark Subscription\n\n- (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber {\n\tNSCParameterAssert(subscriber != nil);\n\n\treturn [RACScheduler.subscriptionScheduler schedule:^{\n\t\t[subscriber sendCompleted];\n\t}];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACErrorSignal.h",
    "content": "//\n//  RACErrorSignal.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-10-10.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSignal.h\"\n\n// A private `RACSignal` subclasses that synchronously sends an error to any\n// subscribers.\n@interface RACErrorSignal : RACSignal\n\n+ (RACSignal *)error:(NSError *)error;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACErrorSignal.m",
    "content": "//\n//  RACErrorSignal.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-10-10.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACErrorSignal.h\"\n#import \"RACScheduler+Private.h\"\n#import \"RACSubscriber.h\"\n\n@interface RACErrorSignal ()\n\n// The error to send upon subscription.\n@property (nonatomic, strong, readonly) NSError *error;\n\n@end\n\n@implementation RACErrorSignal\n\n#pragma mark Lifecycle\n\n+ (RACSignal *)error:(NSError *)error {\n\tRACErrorSignal *signal = [[self alloc] init];\n\tsignal->_error = error;\n\n#ifdef DEBUG\n\t[signal setNameWithFormat:@\"+error: %@\", error];\n#else\n\tsignal.name = @\"+error:\";\n#endif\n\n\treturn signal;\n}\n\n#pragma mark Subscription\n\n- (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber {\n\tNSCParameterAssert(subscriber != nil);\n\n\treturn [RACScheduler.subscriptionScheduler schedule:^{\n\t\t[subscriber sendError:self.error];\n\t}];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEvent.h",
    "content": "//\n//  RACEvent.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-01-07.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n/// Describes the type of a RACEvent.\n///\n/// RACEventTypeCompleted - A `completed` event.\n/// RACEventTypeError     - An `error` event.\n/// RACEventTypeNext      - A `next` event.\ntypedef NS_ENUM(NSUInteger, RACEventType) {\n    RACEventTypeCompleted,\n    RACEventTypeError,\n    RACEventTypeNext\n};\n\n/// Represents an event sent by a RACSignal.\n///\n/// This corresponds to the `Notification` class in Rx.\n@interface RACEvent : NSObject <NSCopying>\n\n/// Returns a singleton RACEvent representing the `completed` event.\n+ (instancetype)completedEvent;\n\n/// Returns a new event of type RACEventTypeError, containing the given error.\n+ (instancetype)eventWithError:(NSError *)error;\n\n/// Returns a new event of type RACEventTypeNext, containing the given value.\n+ (instancetype)eventWithValue:(id)value;\n\n/// The type of event represented by the receiver.\n@property (nonatomic, assign, readonly) RACEventType eventType;\n\n/// Returns whether the receiver is of type RACEventTypeCompleted or\n/// RACEventTypeError.\n@property (nonatomic, getter = isFinished, assign, readonly) BOOL finished;\n\n/// The error associated with an event of type RACEventTypeError. This will be\n/// nil for all other event types.\n@property (nonatomic, strong, readonly) NSError *error;\n\n/// The value associated with an event of type RACEventTypeNext. This will be\n/// nil for all other event types.\n@property (nonatomic, strong, readonly) id value;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACEvent.m",
    "content": "//\n//  RACEvent.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-01-07.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACEvent.h\"\n\n@interface RACEvent ()\n\n// An object associated with this event. This will be used for the error and\n// value properties.\n@property (nonatomic, strong, readonly) id object;\n\n// Initializes the receiver with the given type and object.\n- (id)initWithEventType:(RACEventType)type object:(id)object;\n\n@end\n\n@implementation RACEvent\n\n#pragma mark Properties\n\n- (BOOL)isFinished {\n\treturn self.eventType == RACEventTypeCompleted || self.eventType == RACEventTypeError;\n}\n\n- (NSError *)error {\n\treturn (self.eventType == RACEventTypeError ? self.object : nil);\n}\n\n- (id)value {\n\treturn (self.eventType == RACEventTypeNext ? self.object : nil);\n}\n\n#pragma mark Lifecycle\n\n+ (instancetype)completedEvent {\n\tstatic dispatch_once_t pred;\n\tstatic id singleton;\n\n\tdispatch_once(&pred, ^{\n\t\tsingleton = [[self alloc] initWithEventType:RACEventTypeCompleted object:nil];\n\t});\n\n\treturn singleton;\n}\n\n+ (instancetype)eventWithError:(NSError *)error {\n\treturn [[self alloc] initWithEventType:RACEventTypeError object:error];\n}\n\n+ (instancetype)eventWithValue:(id)value {\n\treturn [[self alloc] initWithEventType:RACEventTypeNext object:value];\n}\n\n- (id)initWithEventType:(RACEventType)type object:(id)object {\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_eventType = type;\n\t_object = object;\n\n\treturn self;\n}\n\n#pragma mark NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n\treturn self;\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\tNSString *eventDescription = nil;\n\n\tswitch (self.eventType) {\n\t\tcase RACEventTypeCompleted:\n\t\t\teventDescription = @\"completed\";\n\t\t\tbreak;\n\n\t\tcase RACEventTypeError:\n\t\t\teventDescription = [NSString stringWithFormat:@\"error = %@\", self.object];\n\t\t\tbreak;\n\n\t\tcase RACEventTypeNext:\n\t\t\teventDescription = [NSString stringWithFormat:@\"next = %@\", self.object];\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tNSCAssert(NO, @\"Unrecognized event type: %i\", (int)self.eventType);\n\t}\n\n\treturn [NSString stringWithFormat:@\"<%@: %p>{ %@ }\", self.class, self, eventDescription];\n}\n\n- (NSUInteger)hash {\n\treturn self.eventType ^ [self.object hash];\n}\n\n- (BOOL)isEqual:(id)event {\n\tif (event == self) return YES;\n\tif (![event isKindOfClass:RACEvent.class]) return NO;\n\tif (self.eventType != [event eventType]) return NO;\n\n\t// Catches the nil case too.\n\treturn self.object == [event object] || [self.object isEqual:[event object]];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACGroupedSignal.h",
    "content": "//\n//  RACGroupedSignal.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 5/2/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSubject.h\"\n\n/// A grouped signal is used by -[RACSignal groupBy:transform:].\n@interface RACGroupedSignal : RACSubject\n\n/// The key shared by the group.\n@property (nonatomic, readonly, copy) id<NSCopying> key;\n\n+ (instancetype)signalWithKey:(id<NSCopying>)key;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACGroupedSignal.m",
    "content": "//\n//  RACGroupedSignal.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 5/2/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACGroupedSignal.h\"\n\n@interface RACGroupedSignal ()\n@property (nonatomic, copy) id<NSCopying> key;\n@end\n\n@implementation RACGroupedSignal\n\n#pragma mark API\n\n+ (instancetype)signalWithKey:(id<NSCopying>)key {\n\tRACGroupedSignal *subject = [self subject];\n\tsubject.key = key;\n\treturn subject;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACImmediateScheduler.h",
    "content": "//\n//  RACImmediateScheduler.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/30/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACScheduler.h\"\n\n// A private scheduler which immediately executes its scheduled blocks.\n@interface RACImmediateScheduler : RACScheduler\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACImmediateScheduler.m",
    "content": "//\n//  RACImmediateScheduler.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/30/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACImmediateScheduler.h\"\n#import \"RACScheduler+Private.h\"\n\n@implementation RACImmediateScheduler\n\n#pragma mark Lifecycle\n\n- (id)init {\n\treturn [super initWithName:@\"com.ReactiveCocoa.RACScheduler.immediateScheduler\"];\n}\n\n#pragma mark RACScheduler\n\n- (RACDisposable *)schedule:(void (^)(void))block {\n\tNSCParameterAssert(block != NULL);\n\n\tblock();\n\treturn nil;\n}\n\n- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block {\n\tNSCParameterAssert(date != nil);\n\tNSCParameterAssert(block != NULL);\n\n\t[NSThread sleepUntilDate:date];\n\tblock();\n\n\treturn nil;\n}\n\n- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block {\n\tNSCAssert(NO, @\"+[RACScheduler immediateScheduler] does not support %@.\", NSStringFromSelector(_cmd));\n\treturn nil;\n}\n\n- (RACDisposable *)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock {\n\tfor (__block NSUInteger remaining = 1; remaining > 0; remaining--) {\n\t\trecursiveBlock(^{\n\t\t\tremaining++;\n\t\t});\n\t}\n\n\treturn nil;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACIndexSetSequence.h",
    "content": "//\n//  RACIndexSetSequence.h\n//  ReactiveCocoa\n//\n//  Created by Sergey Gavrilyuk on 12/18/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSequence.h\"\n\n// Private class that adapts an array to the RACSequence interface.\n@interface RACIndexSetSequence : RACSequence\n\n+ (instancetype)sequenceWithIndexSet:(NSIndexSet *)indexSet;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACIndexSetSequence.m",
    "content": "//\n//  RACIndexSetSequence.m\n//  ReactiveCocoa\n//\n//  Created by Sergey Gavrilyuk on 12/18/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACIndexSetSequence.h\"\n\n@interface RACIndexSetSequence ()\n\n// A buffer holding the `NSUInteger` values to enumerate over.\n//\n// This is mostly used for memory management. Most access should go through\n// `indexes` instead.\n@property (nonatomic, strong, readonly) NSData *data;\n\n// The indexes that this sequence should enumerate.\n@property (nonatomic, readonly) const NSUInteger *indexes;\n\n// The number of indexes to enumerate.\n@property (nonatomic, readonly) NSUInteger count;\n\n@end\n\n@implementation RACIndexSetSequence\n\n#pragma mark Lifecycle\n\n+ (instancetype)sequenceWithIndexSet:(NSIndexSet *)indexSet {\n\tNSUInteger count = indexSet.count;\n\t\n\tif (count == 0) return self.empty;\n\t\n\tNSUInteger sizeInBytes = sizeof(NSUInteger) * count;\n\n\tNSMutableData *data = [[NSMutableData alloc] initWithCapacity:sizeInBytes];\n\t[indexSet getIndexes:data.mutableBytes maxCount:count inIndexRange:NULL];\n\n\tRACIndexSetSequence *seq = [[self alloc] init];\n\tseq->_data = data;\n\tseq->_indexes = data.bytes;\n\tseq->_count = count;\n\treturn seq;\n}\n\n+ (instancetype)sequenceWithIndexSetSequence:(RACIndexSetSequence *)indexSetSequence offset:(NSUInteger)offset {\n\tNSCParameterAssert(offset < indexSetSequence.count);\n\n\tRACIndexSetSequence *seq = [[self alloc] init];\n\tseq->_data = indexSetSequence.data;\n\tseq->_indexes = indexSetSequence.indexes + offset;\n\tseq->_count = indexSetSequence.count - offset;\n\treturn seq;\n}\n\n#pragma mark RACSequence\n\n- (id)head {\n\treturn @(self.indexes[0]);\n}\n\n- (RACSequence *)tail {\n\tif (self.count <= 1) return [RACSequence empty];\n\n\treturn [self.class sequenceWithIndexSetSequence:self offset:1];\n}\n\n#pragma mark NSFastEnumeration\n\n- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unsafe_unretained id[])stackbuf count:(NSUInteger)len {\n\tNSCParameterAssert(len > 0);\n\n\tif (state->state >= self.count) {\n\t\t// Enumeration has completed.\n\t\treturn 0;\n\t}\n\t\n\tif (state->state == 0) {\n\t\t// Enumeration begun, mark the mutation flag.\n\t\tstate->mutationsPtr = state->extra;\n\t}\n\t\n\tstate->itemsPtr = stackbuf;\n\t\n\tunsigned long index = 0;\n\twhile (index < MIN(self.count - state->state, len)) {\n\t\tstackbuf[index] = @(self.indexes[index + state->state]);\n\t\t++index;\n\t}\n\t\n\tstate->state += index;\n\treturn index;\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\tNSMutableString *indexesStr = [NSMutableString string];\n\n\tfor (unsigned int i = 0; i < self.count; ++i) {\n\t\tif (i > 0) [indexesStr appendString:@\", \"];\n\n\t\t[indexesStr appendFormat:@\"%lu\", (unsigned long)self.indexes[i]];\n\t}\n\n\treturn [NSString stringWithFormat:@\"<%@: %p>{ name = %@, indexes = %@ }\", self.class, self, self.name, indexesStr];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOChannel.h",
    "content": "//\n//  RACKVOChannel.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 27/12/2012.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACChannel.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"metamacros.h\"\n\n/// Creates a RACKVOChannel to the given key path. When the targeted object\n/// deallocates, the channel will complete.\n///\n/// If RACChannelTo() is used as an expression, it returns a RACChannelTerminal that\n/// can be used to watch the specified property for changes, and set new values\n/// for it. The terminal will start with the property's current value upon\n/// subscription.\n///\n/// If RACChannelTo() is used on the left-hand side of an assignment, there must a\n/// RACChannelTerminal on the right-hand side of the assignment. The two will be\n/// subscribed to one another: the property's value is immediately set to the\n/// value of the channel terminal on the right-hand side, and subsequent changes\n/// to either terminal will be reflected on the other.\n///\n/// There are two different versions of this macro:\n///\n///  - RACChannelTo(TARGET, KEYPATH, NILVALUE) will create a channel to the `KEYPATH`\n///    of `TARGET`. If the terminal is ever sent a `nil` value, the property will\n///    be set to `NILVALUE` instead. `NILVALUE` may itself be `nil` for object\n///    properties, but an NSValue should be used for primitive properties, to\n///    avoid an exception if `nil` is sent (which might occur if an intermediate\n///    object is set to `nil`).\n///  - RACChannelTo(TARGET, KEYPATH) is the same as the above, but `NILVALUE` defaults to\n///    `nil`.\n///\n/// Examples\n///\n///  RACChannelTerminal *integerChannel = RACChannelTo(self, integerProperty, @42);\n///\n///  // Sets self.integerProperty to 5.\n///  [integerChannel sendNext:@5];\n///\n///  // Logs the current value of self.integerProperty, and all future changes.\n///  [integerChannel subscribeNext:^(id value) {\n///      NSLog(@\"value: %@\", value);\n///  }];\n///\n///  // Binds properties to each other, taking the initial value from the right\n///  side.\n///  RACChannelTo(view, objectProperty) = RACChannelTo(model, objectProperty);\n///  RACChannelTo(view, integerProperty, @2) = RACChannelTo(model, integerProperty, @10);\n#define RACChannelTo(TARGET, ...) \\\n    metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \\\n        (RACChannelTo_(TARGET, __VA_ARGS__, nil)) \\\n        (RACChannelTo_(TARGET, __VA_ARGS__))\n\n/// Do not use this directly. Use the RACChannelTo macro above.\n#define RACChannelTo_(TARGET, KEYPATH, NILVALUE) \\\n    [[RACKVOChannel alloc] initWithTarget:(TARGET) keyPath:@keypath(TARGET, KEYPATH) nilValue:(NILVALUE)][@keypath(RACKVOChannel.new, followingTerminal)]\n\n/// A RACChannel that observes a KVO-compliant key path for changes.\n@interface RACKVOChannel : RACChannel\n\n/// Initializes a channel that will observe the given object and key path.\n///\n/// The current value of the key path, and future KVO notifications for the given\n/// key path, will be sent to subscribers of the channel's `followingTerminal`.\n/// Values sent to the `followingTerminal` will be set at the given key path using\n/// key-value coding.\n///\n/// When the target object deallocates, the channel will complete. Signal errors\n/// are considered undefined behavior.\n///\n/// This is the designated initializer for this class.\n///\n/// target   - The object to bind to.\n/// keyPath  - The key path to observe and set the value of.\n/// nilValue - The value to set at the key path whenever a `nil` value is\n///            received. This may be nil when connecting to object properties, but\n///            an NSValue should be used for primitive properties, to avoid an\n///            exception if `nil` is received (which might occur if an intermediate\n///            object is set to `nil`).\n#if OS_OBJECT_HAVE_OBJC_SUPPORT\n- (id)initWithTarget:(__weak NSObject *)target keyPath:(NSString *)keyPath nilValue:(id)nilValue;\n#else\n// Swift builds with OS_OBJECT_HAVE_OBJC_SUPPORT=0 for Playgrounds and LLDB :(\n- (id)initWithTarget:(NSObject *)target keyPath:(NSString *)keyPath nilValue:(id)nilValue;\n#endif\n\n- (id)init __attribute__((unavailable(\"Use -initWithTarget:keyPath:nilValue: instead\")));\n\n@end\n\n/// Methods needed for the convenience macro. Do not call explicitly.\n@interface RACKVOChannel (RACChannelTo)\n\n- (RACChannelTerminal *)objectForKeyedSubscript:(NSString *)key;\n- (void)setObject:(RACChannelTerminal *)otherTerminal forKeyedSubscript:(NSString *)key;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOChannel.m",
    "content": "//\n//  RACKVOChannel.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 27/12/2012.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACKVOChannel.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACKVOWrapper.h\"\n#import \"NSString+RACKeyPathUtilities.h\"\n#import \"RACChannel.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal+Operations.h\"\n\n// Key for the array of RACKVOChannel's additional thread local\n// data in the thread dictionary.\nstatic NSString * const RACKVOChannelDataDictionaryKey = @\"RACKVOChannelKey\";\n\n// Wrapper class for additional thread local data.\n@interface RACKVOChannelData : NSObject\n\n// The flag used to ignore updates the channel itself has triggered.\n@property (nonatomic, assign) BOOL ignoreNextUpdate;\n\n// A pointer to the owner of the data. Only use this for pointer comparison,\n// never as an object reference.\n@property (nonatomic, assign) void *owner;\n\n+ (instancetype)dataForChannel:(RACKVOChannel *)channel;\n\n@end\n\n@interface RACKVOChannel ()\n\n// The object whose key path the channel is wrapping.\n@property (atomic, weak) NSObject *target;\n\n// The key path the channel is wrapping.\n@property (nonatomic, copy, readonly) NSString *keyPath;\n\n// Returns the existing thread local data container or nil if none exists.\n@property (nonatomic, strong, readonly) RACKVOChannelData *currentThreadData;\n\n// Creates the thread local data container for the channel.\n- (void)createCurrentThreadData;\n\n// Destroy the thread local data container for the channel.\n- (void)destroyCurrentThreadData;\n\n@end\n\n@implementation RACKVOChannel\n\n#pragma mark Properties\n\n- (RACKVOChannelData *)currentThreadData {\n\tNSMutableArray *dataArray = NSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey];\n\n\tfor (RACKVOChannelData *data in dataArray) {\n\t\tif (data.owner == (__bridge void *)self) return data;\n\t}\n\n\treturn nil;\n}\n\n#pragma mark Lifecycle\n\n- (id)initWithTarget:(__weak NSObject *)target keyPath:(NSString *)keyPath nilValue:(id)nilValue {\n\tNSCParameterAssert(keyPath.rac_keyPathComponents.count > 0);\n\n\tNSObject *strongTarget = target;\n\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_target = target;\n\t_keyPath = [keyPath copy];\n\n\t[self.leadingTerminal setNameWithFormat:@\"[-initWithTarget: %@ keyPath: %@ nilValue: %@] -leadingTerminal\", target, keyPath, nilValue];\n\t[self.followingTerminal setNameWithFormat:@\"[-initWithTarget: %@ keyPath: %@ nilValue: %@] -followingTerminal\", target, keyPath, nilValue];\n\n\tif (strongTarget == nil) {\n\t\t[self.leadingTerminal sendCompleted];\n\t\treturn self;\n\t}\n\n\t// Observe the key path on target for changes and forward the changes to the\n\t// terminal.\n\t//\n\t// Intentionally capturing `self` strongly in the blocks below, so the\n\t// channel object stays alive while observing.\n\tRACDisposable *observationDisposable = [strongTarget rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionInitial observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t// If the change wasn't triggered by deallocation, only affects the last\n\t\t// path component, and ignoreNextUpdate is set, then it was triggered by\n\t\t// this channel and should not be forwarded.\n\t\tif (!causedByDealloc && affectedOnlyLastComponent && self.currentThreadData.ignoreNextUpdate) {\n\t\t\t[self destroyCurrentThreadData];\n\t\t\treturn;\n\t\t}\n\n\t\t[self.leadingTerminal sendNext:value];\n\t}];\n\n\tNSString *keyPathByDeletingLastKeyPathComponent = keyPath.rac_keyPathByDeletingLastKeyPathComponent;\n\tNSArray *keyPathComponents = keyPath.rac_keyPathComponents;\n\tNSUInteger keyPathComponentsCount = keyPathComponents.count;\n\tNSString *lastKeyPathComponent = keyPathComponents.lastObject;\n\n\t// Update the value of the property with the values received.\n\t[[self.leadingTerminal\n\t\tfinally:^{\n\t\t\t[observationDisposable dispose];\n\t\t}]\n\t\tsubscribeNext:^(id x) {\n\t\t\t// Check the value of the second to last key path component. Since the\n\t\t\t// channel can only update the value of a property on an object, and not\n\t\t\t// update intermediate objects, it can only update the value of the whole\n\t\t\t// key path if this object is not nil.\n\t\t\tNSObject *object = (keyPathComponentsCount > 1 ? [self.target valueForKeyPath:keyPathByDeletingLastKeyPathComponent] : self.target);\n\t\t\tif (object == nil) return;\n\n\t\t\t// Set the ignoreNextUpdate flag before setting the value so this channel\n\t\t\t// ignores the value in the subsequent -didChangeValueForKey: callback.\n\t\t\t[self createCurrentThreadData];\n\t\t\tself.currentThreadData.ignoreNextUpdate = YES;\n\n\t\t\t[object setValue:x ?: nilValue forKey:lastKeyPathComponent];\n\t\t} error:^(NSError *error) {\n\t\t\tNSCAssert(NO, @\"Received error in %@: %@\", self, error);\n\n\t\t\t// Log the error if we're running with assertions disabled.\n\t\t\tNSLog(@\"Received error in %@: %@\", self, error);\n\t\t}];\n\n\t// Capture `self` weakly for the target's deallocation disposable, so we can\n\t// freely deallocate if we complete before then.\n\t@weakify(self);\n\n\t[strongTarget.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t@strongify(self);\n\t\t[self.leadingTerminal sendCompleted];\n\t\tself.target = nil;\n\t}]];\n\n\treturn self;\n}\n\n- (void)createCurrentThreadData {\n\tNSMutableArray *dataArray = NSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey];\n\tif (dataArray == nil) {\n\t\tdataArray = [NSMutableArray array];\n\t\tNSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey] = dataArray;\n\t\t[dataArray addObject:[RACKVOChannelData dataForChannel:self]];\n\t\treturn;\n\t}\n\n\tfor (RACKVOChannelData *data in dataArray) {\n\t\tif (data.owner == (__bridge void *)self) return;\n\t}\n\n\t[dataArray addObject:[RACKVOChannelData dataForChannel:self]];\n}\n\n- (void)destroyCurrentThreadData {\n\tNSMutableArray *dataArray = NSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey];\n\tNSUInteger index = [dataArray indexOfObjectPassingTest:^ BOOL (RACKVOChannelData *data, NSUInteger idx, BOOL *stop) {\n\t\treturn data.owner == (__bridge void *)self;\n\t}];\n\n\tif (index != NSNotFound) [dataArray removeObjectAtIndex:index];\n}\n\n@end\n\n@implementation RACKVOChannel (RACChannelTo)\n\n- (RACChannelTerminal *)objectForKeyedSubscript:(NSString *)key {\n\tNSCParameterAssert(key != nil);\n\n\tRACChannelTerminal *terminal = [self valueForKey:key];\n\tNSCAssert([terminal isKindOfClass:RACChannelTerminal.class], @\"Key \\\"%@\\\" does not identify a channel terminal\", key);\n\n\treturn terminal;\n}\n\n- (void)setObject:(RACChannelTerminal *)otherTerminal forKeyedSubscript:(NSString *)key {\n\tNSCParameterAssert(otherTerminal != nil);\n\n\tRACChannelTerminal *selfTerminal = [self objectForKeyedSubscript:key];\n\t[otherTerminal subscribe:selfTerminal];\n\t[[selfTerminal skip:1] subscribe:otherTerminal];\n}\n\n@end\n\n@implementation RACKVOChannelData\n\n+ (instancetype)dataForChannel:(RACKVOChannel *)channel {\n\tRACKVOChannelData *data = [[self alloc] init];\n\tdata->_owner = (__bridge void *)channel;\n\treturn data;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOProxy.h",
    "content": "//\n//  RACKVOProxy.h\n//  ReactiveCocoa\n//\n//  Created by Richard Speyer on 4/10/14.\n//  Copyright (c) 2014 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n/// A singleton that can act as a proxy between a KVO observation and a RAC\n/// subscriber, in order to protect against KVO lifetime issues.\n@interface RACKVOProxy : NSObject\n\n/// Returns the singleton KVO proxy object.\n+ (instancetype)sharedProxy;\n\n/// Registers an observer with the proxy, such that when the proxy receives a\n/// KVO change with the given context, it forwards it to the observer.\n///\n/// observer - True observer of the KVO change. Must not be nil.\n/// context  - Arbitrary context object used to differentiate multiple\n///            observations of the same keypath. Must be unique, cannot be nil.\n- (void)addObserver:(__weak NSObject *)observer forContext:(void *)context;\n\n/// Removes an observer from the proxy. Parameters must match those passed to\n/// addObserver:forContext:.\n///\n/// observer - True observer of the KVO change. Must not be nil.\n/// context  - Arbitrary context object used to differentiate multiple\n///            observations of the same keypath. Must be unique, cannot be nil.\n- (void)removeObserver:(NSObject *)observer forContext:(void *)context;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOProxy.m",
    "content": "//\n//  RACKVOProxy.m\n//  ReactiveCocoa\n//\n//  Created by Richard Speyer on 4/10/14.\n//  Copyright (c) 2014 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACKVOProxy.h\"\n\n@interface RACKVOProxy()\n\n@property (strong, nonatomic, readonly) NSMapTable *trampolines;\n@property (strong, nonatomic, readonly) dispatch_queue_t queue;\n\n@end\n\n@implementation RACKVOProxy\n\n+ (instancetype)sharedProxy {\n\tstatic RACKVOProxy *proxy;\n\tstatic dispatch_once_t onceToken;\n\n\tdispatch_once(&onceToken, ^{\n\t\tproxy = [[self alloc] init];\n\t});\n\n\treturn proxy;\n}\n\n- (instancetype)init {\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_queue = dispatch_queue_create(\"org.reactivecocoa.ReactiveCocoa.RACKVOProxy\", DISPATCH_QUEUE_SERIAL);\n\t_trampolines = [NSMapTable strongToWeakObjectsMapTable];\n\n\treturn self;\n}\n\n- (void)addObserver:(__weak NSObject *)observer forContext:(void *)context {\n\tNSValue *valueContext = [NSValue valueWithPointer:context];\n\n\tdispatch_sync(self.queue, ^{\n\t\t[self.trampolines setObject:observer forKey:valueContext];\n\t});\n}\n\n- (void)removeObserver:(NSObject *)observer forContext:(void *)context {\n\tNSValue *valueContext = [NSValue valueWithPointer:context];\n\n\tdispatch_sync(self.queue, ^{\n\t\t[self.trampolines removeObjectForKey:valueContext];\n\t});\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {\n\tNSValue *valueContext = [NSValue valueWithPointer:context];\n\t__block NSObject *trueObserver;\n\n\tdispatch_sync(self.queue, ^{\n\t\ttrueObserver = [self.trampolines objectForKey:valueContext];\n\t});\n\n\tif (trueObserver != nil) {\n\t\t[trueObserver observeValueForKeyPath:keyPath ofObject:object change:change context:context];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOTrampoline.h",
    "content": "//\n//  RACKVOTrampoline.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 1/15/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"NSObject+RACKVOWrapper.h\"\n#import \"RACDisposable.h\"\n\n// A private trampoline object that represents a KVO observation.\n//\n// Disposing of the trampoline will stop observation.\n@interface RACKVOTrampoline : RACDisposable\n\n// Initializes the receiver with the given parameters.\n//\n// target   - The object whose key path should be observed. Cannot be nil.\n// observer - The object that gets notified when the value at the key path\n//            changes. Can be nil.\n// keyPath  - The key path on `target` to observe. Cannot be nil.\n// options  - Any key value observing options to use in the observation.\n// block    - The block to call when the value at the observed key path changes.\n//            Cannot be nil.\n//\n// Returns the initialized object.\n- (id)initWithTarget:(__weak NSObject *)target observer:(__weak NSObject *)observer keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(RACKVOBlock)block;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACKVOTrampoline.m",
    "content": "//\n//  RACKVOTrampoline.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 1/15/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACKVOTrampoline.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACKVOProxy.h\"\n\n@interface RACKVOTrampoline ()\n\n// The keypath which the trampoline is observing.\n@property (nonatomic, readonly, copy) NSString *keyPath;\n\n// These properties should only be manipulated while synchronized on the\n// receiver.\n@property (nonatomic, readonly, copy) RACKVOBlock block;\n@property (nonatomic, readonly, unsafe_unretained) NSObject *unsafeTarget;\n@property (nonatomic, readonly, weak) NSObject *weakTarget;\n@property (nonatomic, readonly, weak) NSObject *observer;\n\n@end\n\n@implementation RACKVOTrampoline\n\n#pragma mark Lifecycle\n\n- (id)initWithTarget:(__weak NSObject *)target observer:(__weak NSObject *)observer keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(RACKVOBlock)block {\n\tNSCParameterAssert(keyPath != nil);\n\tNSCParameterAssert(block != nil);\n\n\tNSObject *strongTarget = target;\n\tif (strongTarget == nil) return nil;\n\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_keyPath = [keyPath copy];\n\n\t_block = [block copy];\n\t_weakTarget = target;\n\t_unsafeTarget = strongTarget;\n\t_observer = observer;\n\n\t[RACKVOProxy.sharedProxy addObserver:self forContext:(__bridge void *)self];\n\t[strongTarget addObserver:RACKVOProxy.sharedProxy forKeyPath:self.keyPath options:options context:(__bridge void *)self];\n\n\t[strongTarget.rac_deallocDisposable addDisposable:self];\n\t[self.observer.rac_deallocDisposable addDisposable:self];\n\n\treturn self;\n}\n\n- (void)dealloc {\n\t[self dispose];\n}\n\n#pragma mark Observation\n\n- (void)dispose {\n\tNSObject *target;\n\tNSObject *observer;\n\n\t@synchronized (self) {\n\t\t_block = nil;\n\n\t\t// The target should still exist at this point, because we still need to\n\t\t// tear down its KVO observation. Therefore, we can use the unsafe\n\t\t// reference (and need to, because the weak one will have been zeroed by\n\t\t// now).\n\t\ttarget = self.unsafeTarget;\n\t\tobserver = self.observer;\n\n\t\t_unsafeTarget = nil;\n\t\t_observer = nil;\n\t}\n\n\t[target.rac_deallocDisposable removeDisposable:self];\n\t[observer.rac_deallocDisposable removeDisposable:self];\n\n\t[target removeObserver:RACKVOProxy.sharedProxy forKeyPath:self.keyPath context:(__bridge void *)self];\n\t[RACKVOProxy.sharedProxy removeObserver:self forContext:(__bridge void *)self];\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {\n\tif (context != (__bridge void *)self) {\n\t\t[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];\n\t\treturn;\n\t}\n\n\tRACKVOBlock block;\n\tid observer;\n\tid target;\n\n\t@synchronized (self) {\n\t\tblock = self.block;\n\t\tobserver = self.observer;\n\t\ttarget = self.weakTarget;\n\t}\n\n\tif (block == nil || target == nil) return;\n\n\tblock(target, observer, change);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACMulticastConnection+Private.h",
    "content": "//\n//  RACMulticastConnection+Private.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/11/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACMulticastConnection.h\"\n\n@class RACSubject;\n\n@interface RACMulticastConnection ()\n\n- (id)initWithSourceSignal:(RACSignal *)source subject:(RACSubject *)subject;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACMulticastConnection.h",
    "content": "//\n//  RACMulticastConnection.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/11/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACDisposable;\n@class RACSignal;\n\n/// A multicast connection encapsulates the idea of sharing one subscription to a\n/// signal to many subscribers. This is most often needed if the subscription to\n/// the underlying signal involves side-effects or shouldn't be called more than\n/// once.\n///\n/// The multicasted signal is only subscribed to when\n/// -[RACMulticastConnection connect] is called. Until that happens, no values\n/// will be sent on `signal`. See -[RACMulticastConnection autoconnect] for how\n/// -[RACMulticastConnection connect] can be called automatically.\n///\n/// Note that you shouldn't create RACMulticastConnection manually. Instead use\n/// -[RACSignal publish] or -[RACSignal multicast:].\n@interface RACMulticastConnection : NSObject\n\n/// The multicasted signal.\n@property (nonatomic, strong, readonly) RACSignal *signal;\n\n/// Connect to the underlying signal by subscribing to it. Calling this multiple\n/// times does nothing but return the existing connection's disposable.\n///\n/// Returns the disposable for the subscription to the multicasted signal.\n- (RACDisposable *)connect;\n\n/// Connects to the underlying signal when the returned signal is first\n/// subscribed to, and disposes of the subscription to the multicasted signal\n/// when the returned signal has no subscribers.\n///\n/// If new subscribers show up after being disposed, they'll subscribe and then\n/// be immediately disposed of. The returned signal will never re-connect to the\n/// multicasted signal.\n///\n/// Returns the autoconnecting signal.\n- (RACSignal *)autoconnect;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACMulticastConnection.m",
    "content": "//\n//  RACMulticastConnection.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/11/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACMulticastConnection.h\"\n#import \"RACMulticastConnection+Private.h\"\n#import \"RACDisposable.h\"\n#import \"RACSerialDisposable.h\"\n#import \"RACSubject.h\"\n#import <libkern/OSAtomic.h>\n\n@interface RACMulticastConnection () {\n\tRACSubject *_signal;\n\n\t// When connecting, a caller should attempt to atomically swap the value of this\n\t// from `0` to `1`.\n\t//\n\t// If the swap is successful the caller is resposible for subscribing `_signal`\n\t// to `sourceSignal` and storing the returned disposable in `serialDisposable`.\n\t//\n\t// If the swap is unsuccessful it means that `_sourceSignal` has already been\n\t// connected and the caller has no action to take.\n\tint32_t volatile _hasConnected;\n}\n\n@property (nonatomic, readonly, strong) RACSignal *sourceSignal;\n@property (strong) RACSerialDisposable *serialDisposable;\n@end\n\n@implementation RACMulticastConnection\n\n#pragma mark Lifecycle\n\n- (id)initWithSourceSignal:(RACSignal *)source subject:(RACSubject *)subject {\n\tNSCParameterAssert(source != nil);\n\tNSCParameterAssert(subject != nil);\n\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_sourceSignal = source;\n\t_serialDisposable = [[RACSerialDisposable alloc] init];\n\t_signal = subject;\n\t\n\treturn self;\n}\n\n#pragma mark Connecting\n\n- (RACDisposable *)connect {\n\tBOOL shouldConnect = OSAtomicCompareAndSwap32Barrier(0, 1, &_hasConnected);\n\n\tif (shouldConnect) {\n\t\tself.serialDisposable.disposable = [self.sourceSignal subscribe:_signal];\n\t}\n\n\treturn self.serialDisposable;\n}\n\n- (RACSignal *)autoconnect {\n\t__block volatile int32_t subscriberCount = 0;\n\n\treturn [[RACSignal\n\t\tcreateSignal:^(id<RACSubscriber> subscriber) {\n\t\t\tOSAtomicIncrement32Barrier(&subscriberCount);\n\n\t\t\tRACDisposable *subscriptionDisposable = [self.signal subscribe:subscriber];\n\t\t\tRACDisposable *connectionDisposable = [self connect];\n\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\t[subscriptionDisposable dispose];\n\n\t\t\t\tif (OSAtomicDecrement32Barrier(&subscriberCount) == 0) {\n\t\t\t\t\t[connectionDisposable dispose];\n\t\t\t\t}\n\t\t\t}];\n\t\t}]\n\t\tsetNameWithFormat:@\"[%@] -autoconnect\", self.signal.name];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACObjCRuntime.h",
    "content": "//\n//  RACObjCRuntime.h\n//  ReactiveCocoa\n//\n//  Created by Cody Krieger on 5/19/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n// A private class containing wrappers to runtime functions.\n@interface RACObjCRuntime : NSObject\n\n// Invokes objc_allocateClassPair(). Can be called from ARC code.\n+ (Class)createClass:(const char *)className inheritingFromClass:(Class)superclass;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACObjCRuntime.m",
    "content": "//\n//  RACObjCRuntime.m\n//  ReactiveCocoa\n//\n//  Created by Cody Krieger on 5/19/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACObjCRuntime.h\"\n#import <objc/runtime.h>\n\n#if __has_feature(objc_arc)\n#error \"This file must be compiled without ARC.\"\n#endif\n\n@implementation RACObjCRuntime\n\n+ (Class)createClass:(const char *)className inheritingFromClass:(Class)superclass {\n\treturn objc_allocateClassPair(superclass, className, 0);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACPassthroughSubscriber.h",
    "content": "//\n//  RACPassthroughSubscriber.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-06-13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"RACSubscriber.h\"\n\n@class RACCompoundDisposable;\n@class RACSignal;\n\n// A private subscriber that passes through all events to another subscriber\n// while not disposed.\n@interface RACPassthroughSubscriber : NSObject <RACSubscriber>\n\n// Initializes the receiver to pass through events until disposed.\n//\n// subscriber - The subscriber to forward events to. This must not be nil.\n// signal     - The signal that will be sending events to the receiver.\n// disposable - When this disposable is disposed, no more events will be\n//              forwarded. This must not be nil.\n//\n// Returns an initialized passthrough subscriber.\n- (instancetype)initWithSubscriber:(id<RACSubscriber>)subscriber signal:(RACSignal *)signal disposable:(RACCompoundDisposable *)disposable;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACPassthroughSubscriber.m",
    "content": "//\n//  RACPassthroughSubscriber.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-06-13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACPassthroughSubscriber.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACSignal.h\"\n#import \"RACSignalProvider.h\"\n\n#if !defined(DTRACE_PROBES_DISABLED) || !DTRACE_PROBES_DISABLED\n\nstatic const char *cleanedDTraceString(NSString *original) {\n\treturn [original stringByReplacingOccurrencesOfString:@\"\\\\s+\" withString:@\" \" options:NSRegularExpressionSearch range:NSMakeRange(0, original.length)].UTF8String;\n}\n\nstatic const char *cleanedSignalDescription(RACSignal *signal) {\n\tNSString *desc = signal.description;\n\n\tNSRange range = [desc rangeOfString:@\" name:\"];\n\tif (range.location != NSNotFound) {\n\t\tdesc = [desc stringByReplacingCharactersInRange:range withString:@\"\"];\n\t}\n\n\treturn cleanedDTraceString(desc);\n}\n\n#endif\n\n@interface RACPassthroughSubscriber ()\n\n// The subscriber to which events should be forwarded.\n@property (nonatomic, strong, readonly) id<RACSubscriber> innerSubscriber;\n\n// The signal sending events to this subscriber.\n//\n// This property isn't `weak` because it's only used for DTrace probes, so\n// a zeroing weak reference would incur an unnecessary performance penalty in\n// normal usage.\n@property (nonatomic, unsafe_unretained, readonly) RACSignal *signal;\n\n// A disposable representing the subscription. When disposed, no further events\n// should be sent to the `innerSubscriber`.\n@property (nonatomic, strong, readonly) RACCompoundDisposable *disposable;\n\n@end\n\n@implementation RACPassthroughSubscriber\n\n#pragma mark Lifecycle\n\n- (instancetype)initWithSubscriber:(id<RACSubscriber>)subscriber signal:(RACSignal *)signal disposable:(RACCompoundDisposable *)disposable {\n\tNSCParameterAssert(subscriber != nil);\n\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_innerSubscriber = subscriber;\n\t_signal = signal;\n\t_disposable = disposable;\n\n\t[self.innerSubscriber didSubscribeWithDisposable:self.disposable];\n\treturn self;\n}\n\n#pragma mark RACSubscriber\n\n- (void)sendNext:(id)value {\n\tif (self.disposable.disposed) return;\n\n\tif (RACSIGNAL_NEXT_ENABLED()) {\n\t\tRACSIGNAL_NEXT(cleanedSignalDescription(self.signal), cleanedDTraceString(self.innerSubscriber.description), cleanedDTraceString([value description]));\n\t}\n\n\t[self.innerSubscriber sendNext:value];\n}\n\n- (void)sendError:(NSError *)error {\n\tif (self.disposable.disposed) return;\n\n\tif (RACSIGNAL_ERROR_ENABLED()) {\n\t\tRACSIGNAL_ERROR(cleanedSignalDescription(self.signal), cleanedDTraceString(self.innerSubscriber.description), cleanedDTraceString(error.description));\n\t}\n\n\t[self.innerSubscriber sendError:error];\n}\n\n- (void)sendCompleted {\n\tif (self.disposable.disposed) return;\n\n\tif (RACSIGNAL_COMPLETED_ENABLED()) {\n\t\tRACSIGNAL_COMPLETED(cleanedSignalDescription(self.signal), cleanedDTraceString(self.innerSubscriber.description));\n\t}\n\n\t[self.innerSubscriber sendCompleted];\n}\n\n- (void)didSubscribeWithDisposable:(RACCompoundDisposable *)disposable {\n\tif (disposable != self.disposable) {\n\t\t[self.disposable addDisposable:disposable];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACQueueScheduler+Subclass.h",
    "content": "//\n//  RACQueueScheduler+Subclass.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 6/6/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACQueueScheduler.h\"\n#import \"RACScheduler+Subclass.h\"\n\n/// An interface for use by GCD queue-based subclasses.\n///\n/// See RACScheduler+Subclass.h for subclassing notes.\n@interface RACQueueScheduler ()\n\n/// The queue on which blocks are enqueued.\n#if OS_OBJECT_USE_OBJC\n@property (nonatomic, strong, readonly) dispatch_queue_t queue;\n#else\n// Swift builds with OS_OBJECT_HAVE_OBJC_SUPPORT=0 for Playgrounds and LLDB :(\n@property (nonatomic, assign, readonly) dispatch_queue_t queue;\n#endif\n\n/// Initializes the receiver with the name of the scheduler and the queue which\n/// the scheduler should use.\n///\n/// name  - The name of the scheduler. If nil, a default name will be used.\n/// queue - The queue upon which the receiver should enqueue scheduled blocks.\n///         This argument must not be NULL.\n///\n/// Returns the initialized object.\n- (id)initWithName:(NSString *)name queue:(dispatch_queue_t)queue;\n\n/// Converts a date into a GCD time using dispatch_walltime().\n///\n/// date - The date to convert. This must not be nil.\n+ (dispatch_time_t)wallTimeWithDate:(NSDate *)date;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACQueueScheduler.h",
    "content": "//\n//  RACQueueScheduler.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/30/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACScheduler.h\"\n\n/// An abstract scheduler which asynchronously enqueues all its work to a Grand\n/// Central Dispatch queue.\n///\n/// Because RACQueueScheduler is abstract, it should not be instantiated\n/// directly. Create a subclass using the `RACQueueScheduler+Subclass.h`\n/// interface and use that instead.\n@interface RACQueueScheduler : RACScheduler\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACQueueScheduler.m",
    "content": "//\n//  RACQueueScheduler.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/30/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACQueueScheduler.h\"\n#import \"RACDisposable.h\"\n#import \"RACQueueScheduler+Subclass.h\"\n#import \"RACScheduler+Private.h\"\n\n@implementation RACQueueScheduler\n\n#pragma mark Lifecycle\n\n- (id)initWithName:(NSString *)name queue:(dispatch_queue_t)queue {\n\tNSCParameterAssert(queue != NULL);\n\n\tself = [super initWithName:name];\n\tif (self == nil) return nil;\n\n\t_queue = queue;\n#if !OS_OBJECT_USE_OBJC\n\tdispatch_retain(_queue);\n#endif\n\n\treturn self;\n}\n\n#if !OS_OBJECT_USE_OBJC\n\n- (void)dealloc {\n\tif (_queue != NULL) {\n\t\tdispatch_release(_queue);\n\t\t_queue = NULL;\n\t}\n}\n\n#endif\n\n#pragma mark Date Conversions\n\n+ (dispatch_time_t)wallTimeWithDate:(NSDate *)date {\n\tNSCParameterAssert(date != nil);\n\n\tdouble seconds = 0;\n\tdouble frac = modf(date.timeIntervalSince1970, &seconds);\n\n\tstruct timespec walltime = {\n\t\t.tv_sec = (time_t)fmin(fmax(seconds, LONG_MIN), LONG_MAX),\n\t\t.tv_nsec = (long)fmin(fmax(frac * NSEC_PER_SEC, LONG_MIN), LONG_MAX)\n\t};\n\n\treturn dispatch_walltime(&walltime, 0);\n}\n\n#pragma mark RACScheduler\n\n- (RACDisposable *)schedule:(void (^)(void))block {\n\tNSCParameterAssert(block != NULL);\n\n\tRACDisposable *disposable = [[RACDisposable alloc] init];\n\n\tdispatch_async(self.queue, ^{\n\t\tif (disposable.disposed) return;\n\t\t[self performAsCurrentScheduler:block];\n\t});\n\n\treturn disposable;\n}\n\n- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block {\n\tNSCParameterAssert(date != nil);\n\tNSCParameterAssert(block != NULL);\n\n\tRACDisposable *disposable = [[RACDisposable alloc] init];\n\n\tdispatch_after([self.class wallTimeWithDate:date], self.queue, ^{\n\t\tif (disposable.disposed) return;\n\t\t[self performAsCurrentScheduler:block];\n\t});\n\n\treturn disposable;\n}\n\n- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block {\n\tNSCParameterAssert(date != nil);\n\tNSCParameterAssert(interval > 0.0 && interval < INT64_MAX / NSEC_PER_SEC);\n\tNSCParameterAssert(leeway >= 0.0 && leeway < INT64_MAX / NSEC_PER_SEC);\n\tNSCParameterAssert(block != NULL);\n\n\tuint64_t intervalInNanoSecs = (uint64_t)(interval * NSEC_PER_SEC);\n\tuint64_t leewayInNanoSecs = (uint64_t)(leeway * NSEC_PER_SEC);\n\n\tdispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.queue);\n\tdispatch_source_set_timer(timer, [self.class wallTimeWithDate:date], intervalInNanoSecs, leewayInNanoSecs);\n\tdispatch_source_set_event_handler(timer, block);\n\tdispatch_resume(timer);\n\n\treturn [RACDisposable disposableWithBlock:^{\n\t\tdispatch_source_cancel(timer);\n\t}];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACReplaySubject.h",
    "content": "//\n//  RACReplaySubject.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/14/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSubject.h\"\n\nextern const NSUInteger RACReplaySubjectUnlimitedCapacity;\n\n/// A replay subject saves the values it is sent (up to its defined capacity)\n/// and resends those to new subscribers. It will also replay an error or\n/// completion.\n@interface RACReplaySubject : RACSubject\n\n/// Creates a new replay subject with the given capacity. A capacity of\n/// RACReplaySubjectUnlimitedCapacity means values are never trimmed.\n+ (instancetype)replaySubjectWithCapacity:(NSUInteger)capacity;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACReplaySubject.m",
    "content": "//\n//  RACReplaySubject.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/14/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACReplaySubject.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACScheduler+Private.h\"\n#import \"RACSubscriber.h\"\n#import \"RACTuple.h\"\n\nconst NSUInteger RACReplaySubjectUnlimitedCapacity = NSUIntegerMax;\n\n@interface RACReplaySubject ()\n\n@property (nonatomic, assign, readonly) NSUInteger capacity;\n\n// These properties should only be modified while synchronized on self.\n@property (nonatomic, strong, readonly) NSMutableArray *valuesReceived;\n@property (nonatomic, assign) BOOL hasCompleted;\n@property (nonatomic, assign) BOOL hasError;\n@property (nonatomic, strong) NSError *error;\n\n@end\n\n\n@implementation RACReplaySubject\n\n#pragma mark Lifecycle\n\n+ (instancetype)replaySubjectWithCapacity:(NSUInteger)capacity {\n\treturn [(RACReplaySubject *)[self alloc] initWithCapacity:capacity];\n}\n\n- (instancetype)init {\n\treturn [self initWithCapacity:RACReplaySubjectUnlimitedCapacity];\n}\n\n- (instancetype)initWithCapacity:(NSUInteger)capacity {\n\tself = [super init];\n\tif (self == nil) return nil;\n\t\n\t_capacity = capacity;\n\t_valuesReceived = (capacity == RACReplaySubjectUnlimitedCapacity ? [NSMutableArray array] : [NSMutableArray arrayWithCapacity:capacity]);\n\t\n\treturn self;\n}\n\n#pragma mark RACSignal\n\n- (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber {\n\tRACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable];\n\n\tRACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{\n\t\t@synchronized (self) {\n\t\t\tfor (id value in self.valuesReceived) {\n\t\t\t\tif (compoundDisposable.disposed) return;\n\n\t\t\t\t[subscriber sendNext:(value == RACTupleNil.tupleNil ? nil : value)];\n\t\t\t}\n\n\t\t\tif (compoundDisposable.disposed) return;\n\n\t\t\tif (self.hasCompleted) {\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t} else if (self.hasError) {\n\t\t\t\t[subscriber sendError:self.error];\n\t\t\t} else {\n\t\t\t\tRACDisposable *subscriptionDisposable = [super subscribe:subscriber];\n\t\t\t\t[compoundDisposable addDisposable:subscriptionDisposable];\n\t\t\t}\n\t\t}\n\t}];\n\n\t[compoundDisposable addDisposable:schedulingDisposable];\n\n\treturn compoundDisposable;\n}\n\n#pragma mark RACSubscriber\n\n- (void)sendNext:(id)value {\n\t@synchronized (self) {\n\t\t[self.valuesReceived addObject:value ?: RACTupleNil.tupleNil];\n\t\t[super sendNext:value];\n\t\t\n\t\tif (self.capacity != RACReplaySubjectUnlimitedCapacity && self.valuesReceived.count > self.capacity) {\n\t\t\t[self.valuesReceived removeObjectsInRange:NSMakeRange(0, self.valuesReceived.count - self.capacity)];\n\t\t}\n\t}\n}\n\n- (void)sendCompleted {\n\t@synchronized (self) {\n\t\tself.hasCompleted = YES;\n\t\t[super sendCompleted];\n\t}\n}\n\n- (void)sendError:(NSError *)e {\n\t@synchronized (self) {\n\t\tself.hasError = YES;\n\t\tself.error = e;\n\t\t[super sendError:e];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACReturnSignal.h",
    "content": "//\n//  RACReturnSignal.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-10-10.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSignal.h\"\n\n// A private `RACSignal` subclasses that synchronously sends a value to any\n// subscribers, then completes.\n@interface RACReturnSignal : RACSignal\n\n+ (RACSignal *)return:(id)value;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACReturnSignal.m",
    "content": "//\n//  RACReturnSignal.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-10-10.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACReturnSignal.h\"\n#import \"RACScheduler+Private.h\"\n#import \"RACSubscriber.h\"\n#import \"RACUnit.h\"\n\n@interface RACReturnSignal ()\n\n// The value to send upon subscription.\n@property (nonatomic, strong, readonly) id value;\n\n@end\n\n@implementation RACReturnSignal\n\n#pragma mark Properties\n\n// Only allow this signal's name to be customized in DEBUG, since it's\n// potentially a singleton in release builds (see +return:).\n- (void)setName:(NSString *)name {\n#ifdef DEBUG\n\t[super setName:name];\n#endif\n}\n\n- (NSString *)name {\n#ifdef DEBUG\n\treturn super.name;\n#else\n\treturn @\"+return:\";\n#endif\n}\n\n#pragma mark Lifecycle\n\n+ (RACSignal *)return:(id)value {\n#ifndef DEBUG\n\t// In release builds, use singletons for two very common cases.\n\tif (value == RACUnit.defaultUnit) {\n\t\tstatic RACReturnSignal *unitSingleton;\n\t\tstatic dispatch_once_t unitPred;\n\n\t\tdispatch_once(&unitPred, ^{\n\t\t\tunitSingleton = [[self alloc] init];\n\t\t\tunitSingleton->_value = RACUnit.defaultUnit;\n\t\t});\n\n\t\treturn unitSingleton;\n\t} else if (value == nil) {\n\t\tstatic RACReturnSignal *nilSingleton;\n\t\tstatic dispatch_once_t nilPred;\n\n\t\tdispatch_once(&nilPred, ^{\n\t\t\tnilSingleton = [[self alloc] init];\n\t\t\tnilSingleton->_value = nil;\n\t\t});\n\n\t\treturn nilSingleton;\n\t}\n#endif\n\n\tRACReturnSignal *signal = [[self alloc] init];\n\tsignal->_value = value;\n\n#ifdef DEBUG\n\t[signal setNameWithFormat:@\"+return: %@\", value];\n#endif\n\n\treturn signal;\n}\n\n#pragma mark Subscription\n\n- (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber {\n\tNSCParameterAssert(subscriber != nil);\n\n\treturn [RACScheduler.subscriptionScheduler schedule:^{\n\t\t[subscriber sendNext:self.value];\n\t\t[subscriber sendCompleted];\n\t}];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScheduler+Private.h",
    "content": "//\n//  RACScheduler+Private.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/29/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACScheduler.h\"\n\n// The thread-specific current scheduler key.\nextern NSString * const RACSchedulerCurrentSchedulerKey;\n\n// A private interface for internal RAC use only.\n@interface RACScheduler ()\n\n// A dedicated scheduler that fills two requirements:\n//\n//   1. By the time subscription happens, we need a valid +currentScheduler.\n//   2. Subscription should happen as soon as possible.\n//\n// To fulfill those two, if we already have a valid +currentScheduler, it\n// immediately executes scheduled blocks. If we don't, it will execute scheduled\n// blocks with a private background scheduler.\n+ (instancetype)subscriptionScheduler;\n\n// Initializes the receiver with the given name.\n//\n// name - The name of the scheduler. If nil, a default name will be used.\n//\n// Returns the initialized object.\n- (id)initWithName:(NSString *)name;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScheduler+Subclass.h",
    "content": "//\n//  RACScheduler.m\n//  ReactiveCocoa\n//\n//  Created by Miķelis Vindavs on 5/27/14.\n//  Copyright (c) 2014 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"RACScheduler.h\"\n\n/// An interface for use by subclasses.\n///\n/// Subclasses should use `-performAsCurrentScheduler:` to do the actual block\n/// invocation so that +[RACScheduler currentScheduler] behaves as expected.\n///\n/// **Note that RACSchedulers are expected to be serial**. Subclasses must honor\n/// that contract. See `RACTargetQueueScheduler` for a queue-based scheduler\n/// which will enforce the serialization guarantee.\n@interface RACScheduler ()\n\n/// Performs the given block with the receiver as the current scheduler for\n/// its thread. This should only be called by subclasses to perform their\n/// scheduled blocks.\n///\n/// block - The block to execute. Cannot be NULL.\n- (void)performAsCurrentScheduler:(void (^)(void))block;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScheduler.h",
    "content": "//\n//  RACScheduler.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/16/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n/// The priority for the scheduler.\n///\n/// RACSchedulerPriorityHigh       - High priority.\n/// RACSchedulerPriorityDefault    - Default priority.\n/// RACSchedulerPriorityLow        - Low priority.\n/// RACSchedulerPriorityBackground - Background priority.\ntypedef enum : long {\n\tRACSchedulerPriorityHigh = DISPATCH_QUEUE_PRIORITY_HIGH,\n\tRACSchedulerPriorityDefault = DISPATCH_QUEUE_PRIORITY_DEFAULT,\n\tRACSchedulerPriorityLow = DISPATCH_QUEUE_PRIORITY_LOW,\n\tRACSchedulerPriorityBackground = DISPATCH_QUEUE_PRIORITY_BACKGROUND,\n} RACSchedulerPriority;\n\n/// Scheduled with -scheduleRecursiveBlock:, this type of block is passed a block\n/// with which it can call itself recursively.\ntypedef void (^RACSchedulerRecursiveBlock)(void (^reschedule)(void));\n\n@class RACDisposable;\n\n/// Schedulers are used to control when and where work is performed.\n@interface RACScheduler : NSObject\n\n/// A singleton scheduler that immediately executes the blocks it is given.\n///\n/// **Note:** Unlike most other schedulers, this does not set the current\n/// scheduler. There may still be a valid +currentScheduler if this is used\n/// within a block scheduled on a different scheduler.\n+ (RACScheduler *)immediateScheduler;\n\n/// A singleton scheduler that executes blocks in the main thread.\n+ (RACScheduler *)mainThreadScheduler;\n\n/// Creates and returns a new background scheduler with the given priority and\n/// name. The name is for debug and instrumentation purposes only.\n///\n/// Scheduler creation is cheap. It's unnecessary to save the result of this\n/// method call unless you want to serialize some actions on the same background\n/// scheduler.\n+ (RACScheduler *)schedulerWithPriority:(RACSchedulerPriority)priority name:(NSString *)name;\n\n/// Invokes +schedulerWithPriority:name: with a default name.\n+ (RACScheduler *)schedulerWithPriority:(RACSchedulerPriority)priority;\n\n/// Invokes +schedulerWithPriority: with RACSchedulerPriorityDefault.\n+ (RACScheduler *)scheduler;\n\n/// The current scheduler. This will only be valid when used from within a\n/// -[RACScheduler schedule:] block or when on the main thread.\n+ (RACScheduler *)currentScheduler;\n\n/// Schedule the given block for execution on the scheduler.\n///\n/// Scheduled blocks will be executed in the order in which they were scheduled.\n///\n/// block - The block to schedule for execution. Cannot be nil.\n///\n/// Returns a disposable which can be used to cancel the scheduled block before\n/// it begins executing, or nil if cancellation is not supported.\n- (RACDisposable *)schedule:(void (^)(void))block;\n\n/// Schedule the given block for execution on the scheduler at or after\n/// a specific time.\n///\n/// Note that blocks scheduled for a certain time will not preempt any other\n/// scheduled work that is executing at the time.\n///\n/// When invoked on the +immediateScheduler, the calling thread **will block**\n/// until the specified time.\n///\n/// date  - The earliest time at which `block` should begin executing. The block\n///         may not execute immediately at this time, whether due to system load\n///         or another block on the scheduler currently being run. Cannot be nil.\n/// block - The block to schedule for execution. Cannot be nil.\n///\n/// Returns a disposable which can be used to cancel the scheduled block before\n/// it begins executing, or nil if cancellation is not supported.\n- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block;\n\n/// Schedule the given block for execution on the scheduler after the delay.\n///\n/// Converts the delay into an NSDate, then invokes `-after:schedule:`.\n- (RACDisposable *)afterDelay:(NSTimeInterval)delay schedule:(void (^)(void))block;\n\n/// Reschedule the given block at a particular interval, starting at a specific\n/// time, and with a given leeway for deferral.\n///\n/// Note that blocks scheduled for a certain time will not preempt any other\n/// scheduled work that is executing at the time.\n///\n/// Regardless of the value of `leeway`, the given block may not execute exactly\n/// at `when` or exactly on successive intervals, whether due to system load or\n/// because another block is currently being run on the scheduler.\n///\n/// It is considered undefined behavior to invoke this method on the\n/// +immediateScheduler.\n///\n/// date     - The earliest time at which `block` should begin executing. The\n///            block may not execute immediately at this time, whether due to\n///            system load or another block on the scheduler currently being\n///            run. Cannot be nil.\n/// interval - The interval at which the block should be rescheduled, starting\n///            from `date`. This will use the system wall clock, to avoid\n///            skew when the computer goes to sleep.\n/// leeway   - A hint to the system indicating the number of seconds that each\n///            scheduling can be deferred. Note that this is just a hint, and\n///            there may be some additional latency no matter what.\n/// block    - The block to repeatedly schedule for execution. Cannot be nil.\n///\n/// Returns a disposable which can be used to cancel the automatic scheduling and\n/// rescheduling, or nil if cancellation is not supported.\n- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block;\n\n/// Schedule the given recursive block for execution on the scheduler. The\n/// scheduler will automatically flatten any recursive scheduling into iteration\n/// instead, so this can be used without issue for blocks that may keep invoking\n/// themselves forever.\n///\n/// Scheduled blocks will be executed in the order in which they were scheduled.\n///\n/// recursiveBlock - The block to schedule for execution. When invoked, the\n///                  recursive block will be passed a `void (^)(void)` block\n///                  which will reschedule the recursive block at the end of the\n///                  receiver's queue. This passed-in block will automatically\n///                  skip scheduling if the scheduling of the `recursiveBlock`\n///                  was disposed in the meantime.\n///\n/// Returns a disposable which can be used to cancel the scheduled block before\n/// it begins executing, or to stop it from rescheduling if it's already begun\n/// execution.\n- (RACDisposable *)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock;\n\n@end\n\n@interface RACScheduler (Unavailable)\n\n+ (RACScheduler *)schedulerWithQueue:(dispatch_queue_t)queue name:(NSString *)name __attribute__((unavailable(\"Use -[RACTargetQueueScheduler initWithName:targetQueue:] instead.\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScheduler.m",
    "content": "//\n//  RACScheduler.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/16/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACScheduler.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACImmediateScheduler.h\"\n#import \"RACScheduler+Private.h\"\n#import \"RACSubscriptionScheduler.h\"\n#import \"RACTargetQueueScheduler.h\"\n\n// The key for the thread-specific current scheduler.\nNSString * const RACSchedulerCurrentSchedulerKey = @\"RACSchedulerCurrentSchedulerKey\";\n\n@interface RACScheduler ()\n@property (nonatomic, readonly, copy) NSString *name;\n@end\n\n@implementation RACScheduler\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\treturn [NSString stringWithFormat:@\"<%@: %p> %@\", self.class, self, self.name];\n}\n\n#pragma mark Initializers\n\n- (id)initWithName:(NSString *)name {\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\tif (name == nil) {\n\t\t_name = [NSString stringWithFormat:@\"com.ReactiveCocoa.%@.anonymousScheduler\", self.class];\n\t} else {\n\t\t_name = [name copy];\n\t}\n\n\treturn self;\n}\n\n#pragma mark Schedulers\n\n+ (instancetype)immediateScheduler {\n\tstatic dispatch_once_t onceToken;\n\tstatic RACScheduler *immediateScheduler;\n\tdispatch_once(&onceToken, ^{\n\t\timmediateScheduler = [[RACImmediateScheduler alloc] init];\n\t});\n\t\n\treturn immediateScheduler;\n}\n\n+ (instancetype)mainThreadScheduler {\n\tstatic dispatch_once_t onceToken;\n\tstatic RACScheduler *mainThreadScheduler;\n\tdispatch_once(&onceToken, ^{\n\t\tmainThreadScheduler = [[RACTargetQueueScheduler alloc] initWithName:@\"com.ReactiveCocoa.RACScheduler.mainThreadScheduler\" targetQueue:dispatch_get_main_queue()];\n\t});\n\t\n\treturn mainThreadScheduler;\n}\n\n+ (instancetype)schedulerWithPriority:(RACSchedulerPriority)priority name:(NSString *)name {\n\treturn [[RACTargetQueueScheduler alloc] initWithName:name targetQueue:dispatch_get_global_queue(priority, 0)];\n}\n\n+ (instancetype)schedulerWithPriority:(RACSchedulerPriority)priority {\n\treturn [self schedulerWithPriority:priority name:@\"com.ReactiveCocoa.RACScheduler.backgroundScheduler\"];\n}\n\n+ (instancetype)scheduler {\n\treturn [self schedulerWithPriority:RACSchedulerPriorityDefault];\n}\n\n+ (instancetype)subscriptionScheduler {\n\tstatic dispatch_once_t onceToken;\n\tstatic RACScheduler *subscriptionScheduler;\n\tdispatch_once(&onceToken, ^{\n\t\tsubscriptionScheduler = [[RACSubscriptionScheduler alloc] init];\n\t});\n\n\treturn subscriptionScheduler;\n}\n\n+ (BOOL)isOnMainThread {\n\treturn [NSOperationQueue.currentQueue isEqual:NSOperationQueue.mainQueue] || [NSThread isMainThread];\n}\n\n+ (instancetype)currentScheduler {\n\tRACScheduler *scheduler = NSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey];\n\tif (scheduler != nil) return scheduler;\n\tif ([self.class isOnMainThread]) return RACScheduler.mainThreadScheduler;\n\n\treturn nil;\n}\n\n#pragma mark Scheduling\n\n- (RACDisposable *)schedule:(void (^)(void))block {\n\tNSCAssert(NO, @\"%@ must be implemented by subclasses.\", NSStringFromSelector(_cmd));\n\treturn nil;\n}\n\n- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block {\n\tNSCAssert(NO, @\"%@ must be implemented by subclasses.\", NSStringFromSelector(_cmd));\n\treturn nil;\n}\n\n- (RACDisposable *)afterDelay:(NSTimeInterval)delay schedule:(void (^)(void))block {\n\treturn [self after:[NSDate dateWithTimeIntervalSinceNow:delay] schedule:block];\n}\n\n- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block {\n\tNSCAssert(NO, @\"%@ must be implemented by subclasses.\", NSStringFromSelector(_cmd));\n\treturn nil;\n}\n\n- (RACDisposable *)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock {\n\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];\n\n\t[self scheduleRecursiveBlock:[recursiveBlock copy] addingToDisposable:disposable];\n\treturn disposable;\n}\n\n- (void)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock addingToDisposable:(RACCompoundDisposable *)disposable {\n\t@autoreleasepool {\n\t\tRACCompoundDisposable *selfDisposable = [RACCompoundDisposable compoundDisposable];\n\t\t[disposable addDisposable:selfDisposable];\n\n\t\t__weak RACDisposable *weakSelfDisposable = selfDisposable;\n\n\t\tRACDisposable *schedulingDisposable = [self schedule:^{\n\t\t\t@autoreleasepool {\n\t\t\t\t// At this point, we've been invoked, so our disposable is now useless.\n\t\t\t\t[disposable removeDisposable:weakSelfDisposable];\n\t\t\t}\n\n\t\t\tif (disposable.disposed) return;\n\n\t\t\tvoid (^reallyReschedule)(void) = ^{\n\t\t\t\tif (disposable.disposed) return;\n\t\t\t\t[self scheduleRecursiveBlock:recursiveBlock addingToDisposable:disposable];\n\t\t\t};\n\n\t\t\t// Protects the variables below.\n\t\t\t//\n\t\t\t// This doesn't actually need to be __block qualified, but Clang\n\t\t\t// complains otherwise. :C\n\t\t\t__block NSLock *lock = [[NSLock alloc] init];\n\t\t\tlock.name = [NSString stringWithFormat:@\"%@ %s\", self, sel_getName(_cmd)];\n\n\t\t\t__block NSUInteger rescheduleCount = 0;\n\n\t\t\t// Set to YES once synchronous execution has finished. Further\n\t\t\t// rescheduling should occur immediately (rather than being\n\t\t\t// flattened).\n\t\t\t__block BOOL rescheduleImmediately = NO;\n\n\t\t\t@autoreleasepool {\n\t\t\t\trecursiveBlock(^{\n\t\t\t\t\t[lock lock];\n\t\t\t\t\tBOOL immediate = rescheduleImmediately;\n\t\t\t\t\tif (!immediate) ++rescheduleCount;\n\t\t\t\t\t[lock unlock];\n\n\t\t\t\t\tif (immediate) reallyReschedule();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t[lock lock];\n\t\t\tNSUInteger synchronousCount = rescheduleCount;\n\t\t\trescheduleImmediately = YES;\n\t\t\t[lock unlock];\n\n\t\t\tfor (NSUInteger i = 0; i < synchronousCount; i++) {\n\t\t\t\treallyReschedule();\n\t\t\t}\n\t\t}];\n\n\t\t[selfDisposable addDisposable:schedulingDisposable];\n\t}\n}\n\n- (void)performAsCurrentScheduler:(void (^)(void))block {\n\tNSCParameterAssert(block != NULL);\n\n\t// If we're using a concurrent queue, we could end up in here concurrently,\n\t// in which case we *don't* want to clear the current scheduler immediately\n\t// after our block is done executing, but only *after* all our concurrent\n\t// invocations are done.\n\n\tRACScheduler *previousScheduler = RACScheduler.currentScheduler;\n\tNSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = self;\n\n\t@autoreleasepool {\n\t\tblock();\n\t}\n\n\tif (previousScheduler != nil) {\n\t\tNSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = previousScheduler;\n\t} else {\n\t\t[NSThread.currentThread.threadDictionary removeObjectForKey:RACSchedulerCurrentSchedulerKey];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScopedDisposable.h",
    "content": "//\n//  RACScopedDisposable.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/28/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACDisposable.h\"\n\n/// A disposable that calls its own -dispose when it is dealloc'd.\n@interface RACScopedDisposable : RACDisposable\n\n/// Creates a new scoped disposable that will also dispose of the given\n/// disposable when it is dealloc'd.\n+ (instancetype)scopedDisposableWithDisposable:(RACDisposable *)disposable;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACScopedDisposable.m",
    "content": "//\n//  RACScopedDisposable.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/28/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACScopedDisposable.h\"\n\n@implementation RACScopedDisposable\n\n#pragma mark Lifecycle\n\n+ (instancetype)scopedDisposableWithDisposable:(RACDisposable *)disposable {\n\treturn [self disposableWithBlock:^{\n\t\t[disposable dispose];\n\t}];\n}\n\n- (void)dealloc {\n\t[self dispose];\n}\n\n#pragma mark RACDisposable\n\n- (RACScopedDisposable *)asScopedDisposable {\n\t// totally already are\n\treturn self;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSequence.h",
    "content": "//\n//  RACSequence.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"RACStream.h\"\n\n@class RACScheduler;\n@class RACSignal;\n\n/// Represents an immutable sequence of values. Unless otherwise specified, the\n/// sequences' values are evaluated lazily on demand. Like Cocoa collections,\n/// sequences cannot contain nil.\n///\n/// Most inherited RACStream methods that accept a block will execute the block\n/// _at most_ once for each value that is evaluated in the returned sequence.\n/// Side effects are subject to the behavior described in\n/// +sequenceWithHeadBlock:tailBlock:.\n///\n/// Implemented as a class cluster. A minimal implementation for a subclass\n/// consists simply of -head and -tail.\n@interface RACSequence : RACStream <NSCoding, NSCopying, NSFastEnumeration>\n\n/// The first object in the sequence, or nil if the sequence is empty.\n///\n/// Subclasses must provide an implementation of this method.\n@property (nonatomic, strong, readonly) id head;\n\n/// All but the first object in the sequence, or nil if the sequence is empty.\n///\n/// Subclasses must provide an implementation of this method.\n@property (nonatomic, strong, readonly) RACSequence *tail;\n\n/// Evaluates the full sequence to produce an equivalently-sized array.\n@property (nonatomic, copy, readonly) NSArray *array;\n\n/// Returns an enumerator of all objects in the sequence.\n@property (nonatomic, copy, readonly) NSEnumerator *objectEnumerator;\n\n/// Converts a sequence into an eager sequence.\n///\n/// An eager sequence fully evaluates all of its values immediately. Sequences\n/// derived from an eager sequence will also be eager.\n///\n/// Returns a new eager sequence, or the receiver if the sequence is already\n/// eager.\n@property (nonatomic, copy, readonly) RACSequence *eagerSequence;\n\n/// Converts a sequence into a lazy sequence.\n///\n/// A lazy sequence evaluates its values on demand, as they are accessed.\n/// Sequences derived from a lazy sequence will also be lazy.\n///\n/// Returns a new lazy sequence, or the receiver if the sequence is already lazy.\n@property (nonatomic, copy, readonly) RACSequence *lazySequence;\n\n/// Invokes -signalWithScheduler: with a new RACScheduler.\n- (RACSignal *)signal;\n\n/// Evaluates the full sequence on the given scheduler.\n///\n/// Each item is evaluated in its own scheduled block, such that control of the\n/// scheduler is yielded between each value.\n///\n/// Returns a signal which sends the receiver's values on the given scheduler as\n/// they're evaluated.\n- (RACSignal *)signalWithScheduler:(RACScheduler *)scheduler;\n\n/// Applies a left fold to the sequence.\n///\n/// This is the same as iterating the sequence along with a provided start value.\n/// This uses a constant amount of memory. A left fold is left-associative so in\n/// the sequence [1,2,3] the block would applied in the following order:\n///  reduce(reduce(reduce(start, 1), 2), 3)\n///\n/// start  - The starting value for the fold. Used as `accumulator` for the\n///          first fold.\n/// reduce - The block used to combine the accumulated value and the next value.\n///          Cannot be nil.\n///\n/// Returns a reduced value.\n- (id)foldLeftWithStart:(id)start reduce:(id (^)(id accumulator, id value))reduce;\n\n/// Applies a right fold to the sequence.\n///\n/// A right fold is equivalent to recursion on the list. The block is evaluated\n/// from the right to the left in list. It is right associative so it's applied\n/// to the rightmost elements first. For example, in the sequence [1,2,3] the\n/// block is applied in the order:\n///   reduce(1, reduce(2, reduce(3, start)))\n///\n/// start  - The starting value for the fold.\n/// reduce - The block used to combine the accumulated value and the next head.\n///          The block is given the accumulated value and the value of the rest\n///          of the computation (result of the recursion). This is computed when\n///          you retrieve its value using `rest.head`. This allows you to\n///          prevent unnecessary computation by not accessing `rest.head` if you\n///          don't need to.\n///\n/// Returns a reduced value.\n- (id)foldRightWithStart:(id)start reduce:(id (^)(id first, RACSequence *rest))reduce;\n\n/// Check if any value in sequence passes the block.\n///\n/// block - The block predicate used to check each item. Cannot be nil.\n///\n/// Returns a boolean indiciating if any value in the sequence passed.\n- (BOOL)any:(BOOL (^)(id value))block;\n\n/// Check if all values in the sequence pass the block.\n///\n/// block - The block predicate used to check each item. Cannot be nil.\n///\n/// Returns a boolean indicating if all values in the sequence passed.\n- (BOOL)all:(BOOL (^)(id value))block;\n\n/// Returns the first object that passes the block.\n///\n/// block - The block predicate used to check each item. Cannot be nil.\n///\n/// Returns an object that passes the block or nil if no objects passed.\n- (id)objectPassingTest:(BOOL (^)(id value))block;\n\n/// Creates a sequence that dynamically generates its values.\n///\n/// headBlock - Invoked the first time -head is accessed.\n/// tailBlock - Invoked the first time -tail is accessed.\n///\n/// The results from each block are memoized, so each block will be invoked at\n/// most once, no matter how many times the head and tail properties of the\n/// sequence are accessed.\n///\n/// Any side effects in `headBlock` or `tailBlock` should be thread-safe, since\n/// the sequence may be evaluated at any time from any thread. Not only that, but\n/// -tail may be accessed before -head, or both may be accessed simultaneously.\n/// As noted above, side effects will only be triggered the _first_ time -head or\n/// -tail is invoked.\n///\n/// Returns a sequence that lazily invokes the given blocks to provide head and\n/// tail. `headBlock` must not be nil.\n+ (RACSequence *)sequenceWithHeadBlock:(id (^)(void))headBlock tailBlock:(RACSequence *(^)(void))tailBlock;\n\n@end\n\n@interface RACSequence (Unavailable)\n\n- (id)foldLeftWithStart:(id)start combine:(id (^)(id accumulator, id value))combine __attribute__((unavailable(\"Renamed to -foldLeftWithStart:reduce:\")));\n- (id)foldRightWithStart:(id)start combine:(id (^)(id first, RACSequence *rest))combine __attribute__((unavailable(\"Renamed to -foldRightWithStart:reduce:\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSequence.m",
    "content": "//\n//  RACSequence.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"RACSequence.h\"\n#import \"RACArraySequence.h\"\n#import \"RACDynamicSequence.h\"\n#import \"RACEagerSequence.h\"\n#import \"RACEmptySequence.h\"\n#import \"RACScheduler.h\"\n#import \"RACSignal.h\"\n#import \"RACSubscriber.h\"\n#import \"RACTuple.h\"\n#import \"RACUnarySequence.h\"\n\n// An enumerator over sequences.\n@interface RACSequenceEnumerator : NSEnumerator\n\n// The sequence the enumerator is enumerating.\n//\n// This will change as the enumerator is exhausted. This property should only be\n// accessed while synchronized on self.\n@property (nonatomic, strong) RACSequence *sequence;\n\n@end\n\n@interface RACSequence ()\n\n// Performs one iteration of lazy binding, passing through values from `current`\n// until the sequence is exhausted, then recursively binding the remaining\n// values in the receiver.\n//\n// Returns a new sequence which contains `current`, followed by the combined\n// result of all applications of `block` to the remaining values in the receiver.\n- (instancetype)bind:(RACStreamBindBlock)block passingThroughValuesFromSequence:(RACSequence *)current;\n\n@end\n\n@implementation RACSequenceEnumerator\n\n- (id)nextObject {\n\tid object = nil;\n\t\n\t@synchronized (self) {\n\t\tobject = self.sequence.head;\n\t\tself.sequence = self.sequence.tail;\n\t}\n\t\n\treturn object;\n}\n\n@end\n\n@implementation RACSequence\n\n#pragma mark Lifecycle\n\n+ (RACSequence *)sequenceWithHeadBlock:(id (^)(void))headBlock tailBlock:(RACSequence *(^)(void))tailBlock {\n\treturn [[RACDynamicSequence sequenceWithHeadBlock:headBlock tailBlock:tailBlock] setNameWithFormat:@\"+sequenceWithHeadBlock:tailBlock:\"];\n}\n\n#pragma mark Class cluster primitives\n\n- (id)head {\n\tNSCAssert(NO, @\"%s must be overridden by subclasses\", __func__);\n\treturn nil;\n}\n\n- (RACSequence *)tail {\n\tNSCAssert(NO, @\"%s must be overridden by subclasses\", __func__);\n\treturn nil;\n}\n\n#pragma mark RACStream\n\n+ (instancetype)empty {\n\treturn RACEmptySequence.empty;\n}\n\n+ (instancetype)return:(id)value {\n\treturn [RACUnarySequence return:value];\n}\n\n- (instancetype)bind:(RACStreamBindBlock (^)(void))block {\n\tRACStreamBindBlock bindBlock = block();\n\treturn [[self bind:bindBlock passingThroughValuesFromSequence:nil] setNameWithFormat:@\"[%@] -bind:\", self.name];\n}\n\n- (instancetype)bind:(RACStreamBindBlock)bindBlock passingThroughValuesFromSequence:(RACSequence *)passthroughSequence {\n\t// Store values calculated in the dependency here instead, avoiding any kind\n\t// of temporary collection and boxing.\n\t//\n\t// This relies on the implementation of RACDynamicSequence synchronizing\n\t// access to its head, tail, and dependency, and we're only doing it because\n\t// we really need the performance.\n\t__block RACSequence *valuesSeq = self;\n\t__block RACSequence *current = passthroughSequence;\n\t__block BOOL stop = NO;\n\n\tRACSequence *sequence = [RACDynamicSequence sequenceWithLazyDependency:^ id {\n\t\twhile (current.head == nil) {\n\t\t\tif (stop) return nil;\n\n\t\t\t// We've exhausted the current sequence, create a sequence from the\n\t\t\t// next value.\n\t\t\tid value = valuesSeq.head;\n\n\t\t\tif (value == nil) {\n\t\t\t\t// We've exhausted all the sequences.\n\t\t\t\tstop = YES;\n\t\t\t\treturn nil;\n\t\t\t}\n\n\t\t\tcurrent = (id)bindBlock(value, &stop);\n\t\t\tif (current == nil) {\n\t\t\t\tstop = YES;\n\t\t\t\treturn nil;\n\t\t\t}\n\n\t\t\tvaluesSeq = valuesSeq.tail;\n\t\t}\n\n\t\tNSCAssert([current isKindOfClass:RACSequence.class], @\"-bind: block returned an object that is not a sequence: %@\", current);\n\t\treturn nil;\n\t} headBlock:^(id _) {\n\t\treturn current.head;\n\t} tailBlock:^ id (id _) {\n\t\tif (stop) return nil;\n\n\t\treturn [valuesSeq bind:bindBlock passingThroughValuesFromSequence:current.tail];\n\t}];\n\n\tsequence.name = self.name;\n\treturn sequence;\n}\n\n- (instancetype)concat:(RACStream *)stream {\n\tNSCParameterAssert(stream != nil);\n\n\treturn [[[RACArraySequence sequenceWithArray:@[ self, stream ] offset:0]\n\t\tflatten]\n\t\tsetNameWithFormat:@\"[%@] -concat: %@\", self.name, stream];\n}\n\n- (instancetype)zipWith:(RACSequence *)sequence {\n\tNSCParameterAssert(sequence != nil);\n\n\treturn [[RACSequence\n\t\tsequenceWithHeadBlock:^ id {\n\t\t\tif (self.head == nil || sequence.head == nil) return nil;\n\t\t\treturn RACTuplePack(self.head, sequence.head);\n\t\t} tailBlock:^ id {\n\t\t\tif (self.tail == nil || [[RACSequence empty] isEqual:self.tail]) return nil;\n\t\t\tif (sequence.tail == nil || [[RACSequence empty] isEqual:sequence.tail]) return nil;\n\n\t\t\treturn [self.tail zipWith:sequence.tail];\n\t\t}]\n\t\tsetNameWithFormat:@\"[%@] -zipWith: %@\", self.name, sequence];\n}\n\n#pragma mark Extended methods\n\n- (NSArray *)array {\n\tNSMutableArray *array = [NSMutableArray array];\n\tfor (id obj in self) {\n\t\t[array addObject:obj];\n\t}\n\n\treturn [array copy];\n}\n\n- (NSEnumerator *)objectEnumerator {\n\tRACSequenceEnumerator *enumerator = [[RACSequenceEnumerator alloc] init];\n\tenumerator.sequence = self;\n\treturn enumerator;\n}\n\n- (RACSignal *)signal {\n\treturn [[self signalWithScheduler:[RACScheduler scheduler]] setNameWithFormat:@\"[%@] -signal\", self.name];\n}\n\n- (RACSignal *)signalWithScheduler:(RACScheduler *)scheduler {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t__block RACSequence *sequence = self;\n\n\t\treturn [scheduler scheduleRecursiveBlock:^(void (^reschedule)(void)) {\n\t\t\tif (sequence.head == nil) {\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t[subscriber sendNext:sequence.head];\n\n\t\t\tsequence = sequence.tail;\n\t\t\treschedule();\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -signalWithScheduler: %@\", self.name, scheduler];\n}\n\n- (id)foldLeftWithStart:(id)start reduce:(id (^)(id, id))reduce {\n\tNSCParameterAssert(reduce != NULL);\n\n\tif (self.head == nil) return start;\n\t\n\tfor (id value in self) {\n\t\tstart = reduce(start, value);\n\t}\n\t\n\treturn start;\n}\n\n- (id)foldRightWithStart:(id)start reduce:(id (^)(id, RACSequence *))reduce {\n\tNSCParameterAssert(reduce != NULL);\n\n\tif (self.head == nil) return start;\n\t\n\tRACSequence *rest = [RACSequence sequenceWithHeadBlock:^{\n\t\treturn [self.tail foldRightWithStart:start reduce:reduce];\n\t} tailBlock:nil];\n\t\n\treturn reduce(self.head, rest);\n}\n\n- (BOOL)any:(BOOL (^)(id))block {\n\tNSCParameterAssert(block != NULL);\n\n\treturn [self objectPassingTest:block] != nil;\n}\n\n- (BOOL)all:(BOOL (^)(id))block {\n\tNSCParameterAssert(block != NULL);\n\t\n\tNSNumber *result = [self foldLeftWithStart:@YES reduce:^(NSNumber *accumulator, id value) {\n\t\treturn @(accumulator.boolValue && block(value));\n\t}];\n\t\n\treturn result.boolValue;\n}\n\n- (id)objectPassingTest:(BOOL (^)(id))block {\n\tNSCParameterAssert(block != NULL);\n\n\treturn [self filter:block].head;\n}\n\n- (RACSequence *)eagerSequence {\n\treturn [RACEagerSequence sequenceWithArray:self.array offset:0];\n}\n\n- (RACSequence *)lazySequence {\n\treturn self;\n}\n\n#pragma mark NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n\treturn self;\n}\n\n#pragma mark NSCoding\n\n- (Class)classForCoder {\n\t// Most sequences should be archived as RACArraySequences.\n\treturn RACArraySequence.class;\n}\n\n- (id)initWithCoder:(NSCoder *)coder {\n\tif (![self isKindOfClass:RACArraySequence.class]) return [[RACArraySequence alloc] initWithCoder:coder];\n\n\t// Decoding is handled in RACArraySequence.\n\treturn [super init];\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n\t[coder encodeObject:self.array forKey:@\"array\"];\n}\n\n#pragma mark NSFastEnumeration\n\n- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unsafe_unretained id *)stackbuf count:(NSUInteger)len {\n\tif (state->state == ULONG_MAX) {\n\t\t// Enumeration has completed.\n\t\treturn 0;\n\t}\n\n\t// We need to traverse the sequence itself on repeated calls to this\n\t// method, so use the 'state' field to track the current head.\n\tRACSequence *(^getSequence)(void) = ^{\n\t\treturn (__bridge RACSequence *)(void *)state->state;\n\t};\n\n\tvoid (^setSequence)(RACSequence *) = ^(RACSequence *sequence) {\n\t\t// Release the old sequence and retain the new one.\n\t\tCFBridgingRelease((void *)state->state);\n\n\t\tstate->state = (unsigned long)CFBridgingRetain(sequence);\n\t};\n\n\tvoid (^complete)(void) = ^{\n\t\t// Release any stored sequence.\n\t\tsetSequence(nil);\n\t\tstate->state = ULONG_MAX;\n\t};\n\n\tif (state->state == 0) {\n\t\t// Since a sequence doesn't mutate, this just needs to be set to\n\t\t// something non-NULL.\n\t\tstate->mutationsPtr = state->extra;\n\n\t\tsetSequence(self);\n\t}\n\n\tstate->itemsPtr = stackbuf;\n\n\tNSUInteger enumeratedCount = 0;\n\twhile (enumeratedCount < len) {\n\t\tRACSequence *seq = getSequence();\n\n\t\t// Because the objects in a sequence may be generated lazily, we want to\n\t\t// prevent them from being released until the enumerator's used them.\n\t\t__autoreleasing id obj = seq.head;\n\t\tif (obj == nil) {\n\t\t\tcomplete();\n\t\t\tbreak;\n\t\t}\n\n\t\tstackbuf[enumeratedCount++] = obj;\n\n\t\tif (seq.tail == nil) {\n\t\t\tcomplete();\n\t\t\tbreak;\n\t\t}\n\n\t\tsetSequence(seq.tail);\n\t}\n\n\treturn enumeratedCount;\n}\n\n#pragma mark NSObject\n\n- (NSUInteger)hash {\n\treturn [self.head hash];\n}\n\n- (BOOL)isEqual:(RACSequence *)seq {\n\tif (self == seq) return YES;\n\tif (![seq isKindOfClass:RACSequence.class]) return NO;\n\n\tfor (id<NSObject> selfObj in self) {\n\t\tid<NSObject> seqObj = seq.head;\n\n\t\t// Handles the nil case too.\n\t\tif (![seqObj isEqual:selfObj]) return NO;\n\n\t\tseq = seq.tail;\n\t}\n\n\t// self is now depleted -- the argument should be too.\n\treturn (seq.head == nil);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSerialDisposable.h",
    "content": "//\n//  RACSerialDisposable.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-07-22.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACDisposable.h\"\n\n/// A disposable that contains exactly one other disposable and allows it to be\n/// swapped out atomically.\n@interface RACSerialDisposable : RACDisposable\n\n/// The inner disposable managed by the serial disposable.\n///\n/// This property is thread-safe for reading and writing. However, if you want to\n/// read the current value _and_ write a new one atomically, use\n/// -swapInDisposable: instead.\n///\n/// Disposing of the receiver will also dispose of the current disposable set for\n/// this property, then set the property to nil. If any new disposable is set\n/// after the receiver is disposed, it will be disposed immediately and this\n/// property will remain set to nil.\n@property (atomic, strong) RACDisposable *disposable;\n\n/// Creates a serial disposable which will wrap the given disposable.\n///\n/// disposable - The value to set for `disposable`. This may be nil.\n///\n/// Returns a RACSerialDisposable, or nil if an error occurs.\n+ (instancetype)serialDisposableWithDisposable:(RACDisposable *)disposable;\n\n/// Atomically swaps the receiver's `disposable` for `newDisposable`.\n///\n/// newDisposable - The new value for `disposable`. If the receiver has already\n///                 been disposed, this disposable will be too, and `disposable`\n///                 will remain set to nil. This argument may be nil.\n///\n/// Returns the previous value for the `disposable` property.\n- (RACDisposable *)swapInDisposable:(RACDisposable *)newDisposable;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSerialDisposable.m",
    "content": "//\n//  RACSerialDisposable.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-07-22.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSerialDisposable.h\"\n#import <libkern/OSAtomic.h>\n\n@interface RACSerialDisposable () {\n\t// The receiver's `disposable`. This variable must only be referenced while\n\t// _spinLock is held.\n\tRACDisposable * _disposable;\n\n\t// YES if the receiver has been disposed. This variable must only be modified\n\t// while _spinLock is held.\n\tBOOL _disposed;\n\n\t// A spinlock to protect access to _disposable and _disposed.\n\t//\n\t// It must be used when _disposable is mutated or retained and when _disposed\n\t// is mutated.\n\tOSSpinLock _spinLock;\n}\n\n@end\n\n@implementation RACSerialDisposable\n\n#pragma mark Properties\n\n- (BOOL)isDisposed {\n\treturn _disposed;\n}\n\n- (RACDisposable *)disposable {\n\tRACDisposable *result;\n\n\tOSSpinLockLock(&_spinLock);\n\tresult = _disposable;\n\tOSSpinLockUnlock(&_spinLock);\n\n\treturn result;\n}\n\n- (void)setDisposable:(RACDisposable *)disposable {\n\t[self swapInDisposable:disposable];\n}\n\n#pragma mark Lifecycle\n\n+ (instancetype)serialDisposableWithDisposable:(RACDisposable *)disposable {\n\tRACSerialDisposable *serialDisposable = [[self alloc] init];\n\tserialDisposable.disposable = disposable;\n\treturn serialDisposable;\n}\n\n- (id)initWithBlock:(void (^)(void))block {\n\tself = [self init];\n\tif (self == nil) return nil;\n\n\tself.disposable = [RACDisposable disposableWithBlock:block];\n\n\treturn self;\n}\n\n#pragma mark Inner Disposable\n\n- (RACDisposable *)swapInDisposable:(RACDisposable *)newDisposable {\n\tRACDisposable *existingDisposable;\n\tBOOL alreadyDisposed;\n\n\tOSSpinLockLock(&_spinLock);\n\talreadyDisposed = _disposed;\n\tif (!alreadyDisposed) {\n\t\texistingDisposable = _disposable;\n\t\t_disposable = newDisposable;\n\t}\n\tOSSpinLockUnlock(&_spinLock);\n\n\tif (alreadyDisposed) {\n\t\t[newDisposable dispose];\n\t\treturn nil;\n\t}\n\n\treturn existingDisposable;\n}\n\n#pragma mark Disposal\n\n- (void)dispose {\n\tRACDisposable *existingDisposable;\n\n\tOSSpinLockLock(&_spinLock);\n\tif (!_disposed) {\n\t\texistingDisposable = _disposable;\n\t\t_disposed = YES;\n\t\t_disposable = nil;\n\t}\n\tOSSpinLockUnlock(&_spinLock);\n\t\n\t[existingDisposable dispose];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignal+Operations.h",
    "content": "//\n//  RACSignal+Operations.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-09-06.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"RACSignal.h\"\n\n/// The domain for errors originating in RACSignal operations.\nextern NSString * const RACSignalErrorDomain;\n\n/// The error code used with -timeout:.\nextern const NSInteger RACSignalErrorTimedOut;\n\n/// The error code used when a value passed into +switch:cases:default: does not\n/// match any of the cases, and no default was given.\nextern const NSInteger RACSignalErrorNoMatchingCase;\n\n@class RACCommand;\n@class RACDisposable;\n@class RACMulticastConnection;\n@class RACScheduler;\n@class RACSequence;\n@class RACSubject;\n@class RACTuple;\n@protocol RACSubscriber;\n\n@interface RACSignal (Operations)\n\n/// Do the given block on `next`. This should be used to inject side effects into\n/// the signal.\n- (RACSignal *)doNext:(void (^)(id x))block;\n\n/// Do the given block on `error`. This should be used to inject side effects\n/// into the signal.\n- (RACSignal *)doError:(void (^)(NSError *error))block;\n\n/// Do the given block on `completed`. This should be used to inject side effects\n/// into the signal.\n- (RACSignal *)doCompleted:(void (^)(void))block;\n\n/// Sends `next`s only if we don't receive another `next` in `interval` seconds.\n///\n/// If a `next` is received, and then another `next` is received before\n/// `interval` seconds have passed, the first value is discarded.\n///\n/// After `interval` seconds have passed since the most recent `next` was sent,\n/// the most recent `next` is forwarded on the scheduler that the value was\n/// originally received on. If +[RACScheduler currentScheduler] was nil at the\n/// time, a private background scheduler is used.\n///\n/// Returns a signal which sends throttled and delayed `next` events. Completion\n/// and errors are always forwarded immediately.\n- (RACSignal *)throttle:(NSTimeInterval)interval;\n\n/// Throttles `next`s for which `predicate` returns YES.\n///\n/// When `predicate` returns YES for a `next`:\n///\n///  1. If another `next` is received before `interval` seconds have passed, the\n///     prior value is discarded. This happens regardless of whether the new\n///     value will be throttled.\n///  2. After `interval` seconds have passed since the value was originally\n///     received, it will be forwarded on the scheduler that it was received\n///     upon. If +[RACScheduler currentScheduler] was nil at the time, a private\n///     background scheduler is used.\n///\n/// When `predicate` returns NO for a `next`, it is forwarded immediately,\n/// without any throttling.\n///\n/// interval  - The number of seconds for which to buffer the latest value that\n///             passes `predicate`.\n/// predicate - Passed each `next` from the receiver, this block returns\n///             whether the given value should be throttled. This argument must\n///             not be nil.\n///\n/// Returns a signal which sends `next` events, throttled when `predicate`\n/// returns YES. Completion and errors are always forwarded immediately.\n- (RACSignal *)throttle:(NSTimeInterval)interval valuesPassingTest:(BOOL (^)(id next))predicate;\n\n/// Forwards `next` and `completed` events after delaying for `interval` seconds\n/// on the current scheduler (on which the events were delivered).\n///\n/// If +[RACScheduler currentScheduler] is nil when `next` or `completed` is\n/// received, a private background scheduler is used.\n///\n/// Returns a signal which sends delayed `next` and `completed` events. Errors\n/// are always forwarded immediately.\n- (RACSignal *)delay:(NSTimeInterval)interval;\n\n/// Resubscribes when the signal completes.\n- (RACSignal *)repeat;\n\n/// Executes the given block each time a subscription is created.\n///\n/// block - A block which defines the subscription side effects. Cannot be `nil`.\n///\n/// Example:\n///\n///   // Write new file, with backup.\n///   [[[[fileManager\n///       rac_createFileAtPath:path contents:data]\n///       initially:^{\n///           // 2. Second, backup current file\n///           [fileManager moveItemAtPath:path toPath:backupPath error:nil];\n///       }]\n///       initially:^{\n///           // 1. First, acquire write lock.\n///           [writeLock lock];\n///       }]\n///       finally:^{\n///           [writeLock unlock];\n///       }];\n///\n/// Returns a signal that passes through all events of the receiver, plus\n/// introduces side effects which occur prior to any subscription side effects\n/// of the receiver.\n- (RACSignal *)initially:(void (^)(void))block;\n\n/// Executes the given block when the signal completes or errors.\n- (RACSignal *)finally:(void (^)(void))block;\n\n/// Divides the receiver's `next`s into buffers which deliver every `interval`\n/// seconds.\n///\n/// interval  - The interval in which values are grouped into one buffer.\n/// scheduler - The scheduler upon which the returned signal will deliver its\n///             values. This must not be nil or +[RACScheduler\n///             immediateScheduler].\n///\n/// Returns a signal which sends RACTuples of the buffered values at each\n/// interval on `scheduler`. When the receiver completes, any currently-buffered\n/// values will be sent immediately.\n- (RACSignal *)bufferWithTime:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler;\n\n/// Collects all receiver's `next`s into a NSArray. Nil values will be converted\n/// to NSNull.\n///\n/// This corresponds to the `ToArray` method in Rx.\n///\n/// Returns a signal which sends a single NSArray when the receiver completes\n/// successfully.\n- (RACSignal *)collect;\n\n/// Takes the last `count` `next`s after the receiving signal completes.\n- (RACSignal *)takeLast:(NSUInteger)count;\n\n/// Combines the latest values from the receiver and the given signal into\n/// RACTuples, once both have sent at least one `next`.\n///\n/// Any additional `next`s will result in a new RACTuple with the latest values\n/// from both signals.\n///\n/// signal - The signal to combine with. This argument must not be nil.\n///\n/// Returns a signal which sends RACTuples of the combined values, forwards any\n/// `error` events, and completes when both input signals complete.\n- (RACSignal *)combineLatestWith:(RACSignal *)signal;\n\n/// Combines the latest values from the given signals into RACTuples, once all\n/// the signals have sent at least one `next`.\n///\n/// Any additional `next`s will result in a new RACTuple with the latest values\n/// from all signals.\n///\n/// signals - The signals to combine. If this collection is empty, the returned\n///           signal will immediately complete upon subscription.\n///\n/// Returns a signal which sends RACTuples of the combined values, forwards any\n/// `error` events, and completes when all input signals complete.\n+ (RACSignal *)combineLatest:(id<NSFastEnumeration>)signals;\n\n/// Combines signals using +combineLatest:, then reduces the resulting tuples\n/// into a single value using -reduceEach:.\n///\n/// signals     - The signals to combine. If this collection is empty, the\n///               returned signal will immediately complete upon subscription.\n/// reduceBlock - The block which reduces the latest values from all the\n///               signals into one value. It must take as many arguments as the\n///               number of signals given. Each argument will be an object\n///               argument. The return value must be an object. This argument\n///               must not be nil.\n///\n/// Example:\n///\n///   [RACSignal combineLatest:@[ stringSignal, intSignal ] reduce:^(NSString *string, NSNumber *number) {\n///       return [NSString stringWithFormat:@\"%@: %@\", string, number];\n///   }];\n///\n/// Returns a signal which sends the results from each invocation of\n/// `reduceBlock`.\n+ (RACSignal *)combineLatest:(id<NSFastEnumeration>)signals reduce:(id (^)())reduceBlock;\n\n/// Merges the receiver and the given signal with `+merge:` and returns the\n/// resulting signal.\n- (RACSignal *)merge:(RACSignal *)signal;\n\n/// Sends the latest `next` from any of the signals.\n///\n/// Returns a signal that passes through values from each of the given signals,\n/// and sends `completed` when all of them complete. If any signal sends an error,\n/// the returned signal sends `error` immediately.\n+ (RACSignal *)merge:(id<NSFastEnumeration>)signals;\n\n/// Merges the signals sent by the receiver into a flattened signal, but only\n/// subscribes to `maxConcurrent` number of signals at a time. New signals are\n/// queued and subscribed to as other signals complete.\n///\n/// If an error occurs on any of the signals, it is sent on the returned signal.\n/// It completes only after the receiver and all sent signals have completed.\n///\n/// This corresponds to `Merge<TSource>(IObservable<IObservable<TSource>>, Int32)`\n/// in Rx.\n///\n/// maxConcurrent - the maximum number of signals to subscribe to at a\n///                 time. If 0, it subscribes to an unlimited number of\n///                 signals.\n- (RACSignal *)flatten:(NSUInteger)maxConcurrent;\n\n/// Ignores all `next`s from the receiver, waits for the receiver to complete,\n/// then subscribes to a new signal.\n///\n/// block - A block which will create or obtain a new signal to subscribe to,\n///         executed only after the receiver completes. This block must not be\n///         nil, and it must not return a nil signal.\n///\n/// Returns a signal which will pass through the events of the signal created in\n/// `block`. If the receiver errors out, the returned signal will error as well.\n- (RACSignal *)then:(RACSignal * (^)(void))block;\n\n/// Concats the inner signals of a signal of signals.\n- (RACSignal *)concat;\n\n/// Aggregates the `next` values of the receiver into a single combined value.\n///\n/// The algorithm proceeds as follows:\n///\n///  1. `start` is passed into the block as the `running` value, and the first\n///     element of the receiver is passed into the block as the `next` value.\n///  2. The result of the invocation (`running`) and the next element of the\n///     receiver (`next`) is passed into `reduceBlock`.\n///  3. Steps 2 and 3 are repeated until all values have been processed.\n///  4. The last result of `reduceBlock` is sent on the returned signal.\n///\n/// This method is similar to -scanWithStart:reduce:, except that only the\n/// final result is sent on the returned signal.\n///\n/// start       - The value to be combined with the first element of the\n///               receiver. This value may be `nil`.\n/// reduceBlock - The block that describes how to combine values of the\n///               receiver. If the receiver is empty, this block will never be\n///               invoked. Cannot be nil.\n///\n/// Returns a signal that will send the aggregated value when the receiver\n/// completes, then itself complete. If the receiver never sends any values,\n/// `start` will be sent instead.\n- (RACSignal *)aggregateWithStart:(id)start reduce:(id (^)(id running, id next))reduceBlock;\n\n/// Aggregates the `next` values of the receiver into a single combined value.\n/// This is indexed version of -aggregateWithStart:reduce:.\n///\n/// start       - The value to be combined with the first element of the\n///               receiver. This value may be `nil`.\n/// reduceBlock - The block that describes how to combine values of the\n///               receiver. This block takes zero-based index value as the last\n///               parameter. If the receiver is empty, this block will never be\n///               invoked. Cannot be nil.\n///\n/// Returns a signal that will send the aggregated value when the receiver\n/// completes, then itself complete. If the receiver never sends any values,\n/// `start` will be sent instead.\n- (RACSignal *)aggregateWithStart:(id)start reduceWithIndex:(id (^)(id running, id next, NSUInteger index))reduceBlock;\n\n/// Aggregates the `next` values of the receiver into a single combined value.\n///\n/// This invokes `startFactory` block on each subscription, then calls\n/// -aggregateWithStart:reduce: with the return value of the block as start value.\n///\n/// startFactory - The block that returns start value which will be combined\n///                with the first element of the receiver. Cannot be nil.\n/// reduceBlock  - The block that describes how to combine values of the\n///                receiver. If the receiver is empty, this block will never be\n///                invoked. Cannot be nil.\n///\n/// Returns a signal that will send the aggregated value when the receiver\n/// completes, then itself complete. If the receiver never sends any values,\n/// the return value of `startFactory` will be sent instead.\n- (RACSignal *)aggregateWithStartFactory:(id (^)(void))startFactory reduce:(id (^)(id running, id next))reduceBlock;\n\n/// Invokes -setKeyPath:onObject:nilValue: with `nil` for the nil value.\n///\n/// WARNING: Under certain conditions, this method is known to be thread-unsafe.\n///          See the description in -setKeyPath:onObject:nilValue:.\n- (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object;\n\n/// Binds the receiver to an object, automatically setting the given key path on\n/// every `next`. When the signal completes, the binding is automatically\n/// disposed of.\n///\n/// WARNING: Under certain conditions, this method is known to be thread-unsafe.\n///          A crash can result if `object` is deallocated concurrently on\n///          another thread within a window of time between a value being sent\n///          on this signal and immediately prior to the invocation of\n///          -setValue:forKeyPath:, which sets the property. To prevent this,\n///          ensure `object` is deallocated on the same thread the receiver\n///          sends on, or ensure that the returned disposable is disposed of\n///          before `object` deallocates.\n///          See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/1184\n///\n/// Sending an error on the signal is considered undefined behavior, and will\n/// generate an assertion failure in Debug builds.\n///\n/// A given key on an object should only have one active signal bound to it at any\n/// given time. Binding more than one signal to the same property is considered\n/// undefined behavior.\n///\n/// keyPath  - The key path to update with `next`s from the receiver.\n/// object   - The object that `keyPath` is relative to.\n/// nilValue - The value to set at the key path whenever `nil` is sent by the\n///            receiver. This may be nil when binding to object properties, but\n///            an NSValue should be used for primitive properties, to avoid an\n///            exception if `nil` is sent (which might occur if an intermediate\n///            object is set to `nil`).\n///\n/// Returns a disposable which can be used to terminate the binding.\n- (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object nilValue:(id)nilValue;\n\n/// Sends NSDate.date every `interval` seconds.\n///\n/// interval  - The time interval in seconds at which the current time is sent.\n/// scheduler - The scheduler upon which the current NSDate should be sent. This\n///             must not be nil or +[RACScheduler immediateScheduler].\n///\n/// Returns a signal that sends the current date/time every `interval` on\n/// `scheduler`.\n+ (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler;\n\n/// Sends NSDate.date at intervals of at least `interval` seconds, up to\n/// approximately `interval` + `leeway` seconds.\n///\n/// The created signal will defer sending each `next` for at least `interval`\n/// seconds, and for an additional amount of time up to `leeway` seconds in the\n/// interest of performance or power consumption. Note that some additional\n/// latency is to be expected, even when specifying a `leeway` of 0.\n///\n/// interval  - The base interval between `next`s.\n/// scheduler - The scheduler upon which the current NSDate should be sent. This\n///             must not be nil or +[RACScheduler immediateScheduler].\n/// leeway    - The maximum amount of additional time the `next` can be deferred.\n///\n/// Returns a signal that sends the current date/time at intervals of at least\n/// `interval seconds` up to approximately `interval` + `leeway` seconds on\n/// `scheduler`.\n+ (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler withLeeway:(NSTimeInterval)leeway;\n\n/// Takes `next`s until the `signalTrigger` sends `next` or `completed`.\n///\n/// Returns a signal which passes through all events from the receiver until\n/// `signalTrigger` sends `next` or `completed`, at which point the returned signal\n/// will send `completed`.\n- (RACSignal *)takeUntil:(RACSignal *)signalTrigger;\n\n/// Takes `next`s until the `replacement` sends an event.\n///\n/// replacement - The signal which replaces the receiver as soon as it sends an\n///               event.\n///\n/// Returns a signal which passes through `next`s and `error` from the receiver\n/// until `replacement` sends an event, at which point the returned signal will\n/// send that event and switch to passing through events from `replacement`\n/// instead, regardless of whether the receiver has sent events already.\n- (RACSignal *)takeUntilReplacement:(RACSignal *)replacement;\n\n/// Subscribes to the returned signal when an error occurs.\n- (RACSignal *)catch:(RACSignal * (^)(NSError *error))catchBlock;\n\n/// Subscribes to the given signal when an error occurs.\n- (RACSignal *)catchTo:(RACSignal *)signal;\n\n/// Returns a signal that will either immediately send the return value of\n/// `tryBlock` and complete, or error using the `NSError` passed out from the\n/// block.\n///\n/// tryBlock - An action that performs some computation that could fail. If the\n///            block returns nil, the block must return an error via the\n///            `errorPtr` parameter.\n///\n/// Example:\n///\n///   [RACSignal try:^(NSError **error) {\n///       return [NSJSONSerialization JSONObjectWithData:someJSONData options:0 error:error];\n///   }];\n+ (RACSignal *)try:(id (^)(NSError **errorPtr))tryBlock;\n\n/// Runs `tryBlock` against each of the receiver's values, passing values\n/// until `tryBlock` returns NO, or the receiver completes.\n///\n/// tryBlock - An action to run against each of the receiver's values.\n///            The block should return YES to indicate that the action was\n///            successful. This block must not be nil.\n///\n/// Example:\n///\n///   // The returned signal will send an error if data values cannot be\n///   // written to `someFileURL`.\n///   [signal try:^(NSData *data, NSError **errorPtr) {\n///       return [data writeToURL:someFileURL options:NSDataWritingAtomic error:errorPtr];\n///   }];\n///\n/// Returns a signal which passes through all the values of the receiver. If\n/// `tryBlock` fails for any value, the returned signal will error using the\n/// `NSError` passed out from the block.\n- (RACSignal *)try:(BOOL (^)(id value, NSError **errorPtr))tryBlock;\n\n/// Runs `mapBlock` against each of the receiver's values, mapping values until\n/// `mapBlock` returns nil, or the receiver completes.\n///\n/// mapBlock - An action to map each of the receiver's values. The block should\n///            return a non-nil value to indicate that the action was successful.\n///            This block must not be nil.\n///\n/// Example:\n///\n///   // The returned signal will send an error if data cannot be read from\n///   // `fileURL`.\n///   [signal tryMap:^(NSURL *fileURL, NSError **errorPtr) {\n///       return [NSData dataWithContentsOfURL:fileURL options:0 error:errorPtr];\n///   }];\n///\n/// Returns a signal which transforms all the values of the receiver. If\n/// `mapBlock` returns nil for any value, the returned signal will error using\n/// the `NSError` passed out from the block.\n- (RACSignal *)tryMap:(id (^)(id value, NSError **errorPtr))mapBlock;\n\n/// Returns the first `next`. Note that this is a blocking call.\n- (id)first;\n\n/// Returns the first `next` or `defaultValue` if the signal completes or errors\n/// without sending a `next`. Note that this is a blocking call.\n- (id)firstOrDefault:(id)defaultValue;\n\n/// Returns the first `next` or `defaultValue` if the signal completes or errors\n/// without sending a `next`. If an error occurs success will be NO and error\n/// will be populated. Note that this is a blocking call.\n///\n/// Both success and error may be NULL.\n- (id)firstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error;\n\n/// Blocks the caller and waits for the signal to complete.\n///\n/// error - If not NULL, set to any error that occurs.\n///\n/// Returns whether the signal completed successfully. If NO, `error` will be set\n/// to the error that occurred.\n- (BOOL)waitUntilCompleted:(NSError **)error;\n\n/// Defers creation of a signal until the signal's actually subscribed to.\n///\n/// This can be used to effectively turn a hot signal into a cold signal.\n+ (RACSignal *)defer:(RACSignal * (^)(void))block;\n\n/// Every time the receiver sends a new RACSignal, subscribes and sends `next`s and\n/// `error`s only for that signal.\n///\n/// The receiver must be a signal of signals.\n///\n/// Returns a signal which passes through `next`s and `error`s from the latest\n/// signal sent by the receiver, and sends `completed` when both the receiver and\n/// the last sent signal complete.\n- (RACSignal *)switchToLatest;\n\n/// Switches between the signals in `cases` as well as `defaultSignal` based on\n/// the latest value sent by `signal`.\n///\n/// signal        - A signal of objects used as keys in the `cases` dictionary.\n///                 This argument must not be nil.\n/// cases         - A dictionary that has signals as values. This argument must\n///                 not be nil. A RACTupleNil key in this dictionary will match\n///                 nil `next` events that are received on `signal`.\n/// defaultSignal - The signal to pass through after `signal` sends a value for\n///                 which `cases` does not contain a signal. If nil, any\n///                 unmatched values will result in\n///                 a RACSignalErrorNoMatchingCase error.\n///\n/// Returns a signal which passes through `next`s and `error`s from one of the\n/// the signals in `cases` or `defaultSignal`, and sends `completed` when both\n/// `signal` and the last used signal complete. If no `defaultSignal` is given,\n/// an unmatched `next` will result in an error on the returned signal.\n+ (RACSignal *)switch:(RACSignal *)signal cases:(NSDictionary *)cases default:(RACSignal *)defaultSignal;\n\n/// Switches between `trueSignal` and `falseSignal` based on the latest value\n/// sent by `boolSignal`.\n///\n/// boolSignal  - A signal of BOOLs determining whether `trueSignal` or\n///               `falseSignal` should be active. This argument must not be nil.\n/// trueSignal  - The signal to pass through after `boolSignal` has sent YES.\n///               This argument must not be nil.\n/// falseSignal - The signal to pass through after `boolSignal` has sent NO. This\n///               argument must not be nil.\n///\n/// Returns a signal which passes through `next`s and `error`s from `trueSignal`\n/// and/or `falseSignal`, and sends `completed` when both `boolSignal` and the\n/// last switched signal complete.\n+ (RACSignal *)if:(RACSignal *)boolSignal then:(RACSignal *)trueSignal else:(RACSignal *)falseSignal;\n\n/// Adds every `next` to an array. Nils are represented by NSNulls. Note that\n/// this is a blocking call.\n///\n/// **This is not the same as the `ToArray` method in Rx.** See -collect for\n/// that behavior instead.\n///\n/// Returns the array of `next` values, or nil if an error occurs.\n- (NSArray *)toArray;\n\n/// Adds every `next` to a sequence. Nils are represented by NSNulls.\n///\n/// This corresponds to the `ToEnumerable` method in Rx.\n///\n/// Returns a sequence which provides values from the signal as they're sent.\n/// Trying to retrieve a value from the sequence which has not yet been sent will\n/// block.\n@property (nonatomic, strong, readonly) RACSequence *sequence;\n\n/// Creates and returns a multicast connection. This allows you to share a single\n/// subscription to the underlying signal.\n- (RACMulticastConnection *)publish;\n\n/// Creates and returns a multicast connection that pushes values into the given\n/// subject. This allows you to share a single subscription to the underlying\n/// signal.\n- (RACMulticastConnection *)multicast:(RACSubject *)subject;\n\n/// Multicasts the signal to a RACReplaySubject of unlimited capacity, and\n/// immediately connects to the resulting RACMulticastConnection.\n///\n/// Returns the connected, multicasted signal.\n- (RACSignal *)replay;\n\n/// Multicasts the signal to a RACReplaySubject of capacity 1, and immediately\n/// connects to the resulting RACMulticastConnection.\n///\n/// Returns the connected, multicasted signal.\n- (RACSignal *)replayLast;\n\n/// Multicasts the signal to a RACReplaySubject of unlimited capacity, and\n/// lazily connects to the resulting RACMulticastConnection.\n///\n/// This means the returned signal will subscribe to the multicasted signal only\n/// when the former receives its first subscription.\n///\n/// Returns the lazily connected, multicasted signal.\n- (RACSignal *)replayLazily;\n\n/// Sends an error after `interval` seconds if the source doesn't complete\n/// before then.\n///\n/// The error will be in the RACSignalErrorDomain and have a code of\n/// RACSignalErrorTimedOut.\n///\n/// interval  - The number of seconds after which the signal should error out.\n/// scheduler - The scheduler upon which any timeout error should be sent. This\n///             must not be nil or +[RACScheduler immediateScheduler].\n///\n/// Returns a signal that passes through the receiver's events, until the stream\n/// finishes or times out, at which point an error will be sent on `scheduler`.\n- (RACSignal *)timeout:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler;\n\n/// Creates and returns a signal that delivers its events on the given scheduler.\n/// Any side effects of the receiver will still be performed on the original\n/// thread.\n///\n/// This is ideal when the signal already performs its work on the desired\n/// thread, but you want to handle its events elsewhere.\n///\n/// This corresponds to the `ObserveOn` method in Rx.\n- (RACSignal *)deliverOn:(RACScheduler *)scheduler;\n\n/// Creates and returns a signal that executes its side effects and delivers its\n/// events on the given scheduler.\n///\n/// Use of this operator should be avoided whenever possible, because the\n/// receiver's side effects may not be safe to run on another thread. If you just\n/// want to receive the signal's events on `scheduler`, use -deliverOn: instead.\n- (RACSignal *)subscribeOn:(RACScheduler *)scheduler;\n\n/// Creates and returns a signal that delivers its events on the main thread.\n/// If events are already being sent on the main thread, they may be passed on\n/// without delay. An event will instead be queued for later delivery on the main\n/// thread if sent on another thread, or if a previous event is already being\n/// processed, or has been queued.\n///\n/// Any side effects of the receiver will still be performed on the original\n/// thread.\n///\n/// This can be used when a signal will cause UI updates, to avoid potential\n/// flicker caused by delayed delivery of events, such as the first event from\n/// a RACObserve at view instantiation.\n- (RACSignal *)deliverOnMainThread;\n\n/// Groups each received object into a group, as determined by calling `keyBlock`\n/// with that object. The object sent is transformed by calling `transformBlock`\n/// with the object. If `transformBlock` is nil, it sends the original object.\n///\n/// The returned signal is a signal of RACGroupedSignal.\n- (RACSignal *)groupBy:(id<NSCopying> (^)(id object))keyBlock transform:(id (^)(id object))transformBlock;\n\n/// Calls -[RACSignal groupBy:keyBlock transform:nil].\n- (RACSignal *)groupBy:(id<NSCopying> (^)(id object))keyBlock;\n\n/// Sends an [NSNumber numberWithBool:YES] if the receiving signal sends any\n/// objects.\n- (RACSignal *)any;\n\n/// Sends an [NSNumber numberWithBool:YES] if the receiving signal sends any\n/// objects that pass `predicateBlock`.\n///\n/// predicateBlock - cannot be nil.\n- (RACSignal *)any:(BOOL (^)(id object))predicateBlock;\n\n/// Sends an [NSNumber numberWithBool:YES] if all the objects the receiving \n/// signal sends pass `predicateBlock`.\n///\n/// predicateBlock - cannot be nil.\n- (RACSignal *)all:(BOOL (^)(id object))predicateBlock;\n\n/// Resubscribes to the receiving signal if an error occurs, up until it has\n/// retried the given number of times.\n///\n/// retryCount - if 0, it keeps retrying until it completes.\n- (RACSignal *)retry:(NSInteger)retryCount;\n\n/// Resubscribes to the receiving signal if an error occurs.\n- (RACSignal *)retry;\n\n/// Sends the latest value from the receiver only when `sampler` sends a value.\n/// The returned signal could repeat values if `sampler` fires more often than\n/// the receiver. Values from `sampler` are ignored before the receiver sends\n/// its first value.\n///\n/// sampler - The signal that controls when the latest value from the receiver\n///           is sent. Cannot be nil.\n- (RACSignal *)sample:(RACSignal *)sampler;\n\n/// Ignores all `next`s from the receiver.\n///\n/// Returns a signal which only passes through `error` or `completed` events from\n/// the receiver.\n- (RACSignal *)ignoreValues;\n\n/// Converts each of the receiver's events into a RACEvent object.\n///\n/// Returns a signal which sends the receiver's events as RACEvents, and\n/// completes after the receiver sends `completed` or `error`.\n- (RACSignal *)materialize;\n\n/// Converts each RACEvent in the receiver back into \"real\" RACSignal events.\n///\n/// Returns a signal which sends `next` for each value RACEvent, `error` for each\n/// error RACEvent, and `completed` for each completed RACEvent.\n- (RACSignal *)dematerialize;\n\n/// Inverts each NSNumber-wrapped BOOL sent by the receiver. It will assert if\n/// the receiver sends anything other than NSNumbers.\n///\n/// Returns a signal of inverted NSNumber-wrapped BOOLs.\n- (RACSignal *)not;\n\n/// Performs a boolean AND on all of the RACTuple of NSNumbers in sent by the receiver.\n///\n/// Asserts if the receiver sends anything other than a RACTuple of one or more NSNumbers.\n///\n/// Returns a signal that applies AND to each NSNumber in the tuple.\n- (RACSignal *)and;\n\n/// Performs a boolean OR on all of the RACTuple of NSNumbers in sent by the receiver.\n///\n/// Asserts if the receiver sends anything other than a RACTuple of one or more NSNumbers.\n/// \n/// Returns a signal that applies OR to each NSNumber in the tuple.\n- (RACSignal *)or;\n\n/// Sends the result of calling the block with arguments as packed in each RACTuple\n/// sent by the receiver.\n///\n/// The receiver must send tuple values, where the first element of the tuple is\n/// a block, taking a number of parameters equal to the count of the remaining\n/// elements of the tuple, and returning an object. Each block must take at least\n/// one argument, so each tuple must contain at least 2 elements.\n///\n/// Example:\n///\n///   RACSignal *adder = [RACSignal return:^(NSNumber *a, NSNumber *b) {\n///       return @(a.intValue + b.intValue);\n///   }];\n///   RACSignal *sums = [[RACSignal\n///       combineLatest:@[ adder, as, bs ]]\n///       reduceApply];\n///\n/// Returns a signal of the result of applying the first element of each tuple\n/// to the remaining elements.\n- (RACSignal *)reduceApply;\n\n@end\n\n@interface RACSignal (UnavailableOperations)\n\n- (RACSignal *)windowWithStart:(RACSignal *)openSignal close:(RACSignal * (^)(RACSignal *start))closeBlock __attribute__((unavailable(\"See https://github.com/ReactiveCocoa/ReactiveCocoa/issues/587\")));\n- (RACSignal *)buffer:(NSUInteger)bufferCount __attribute__((unavailable(\"See https://github.com/ReactiveCocoa/ReactiveCocoa/issues/587\")));\n- (RACSignal *)let:(RACSignal * (^)(RACSignal *sharedSignal))letBlock __attribute__((unavailable(\"Use -publish instead\")));\n+ (RACSignal *)interval:(NSTimeInterval)interval __attribute__((unavailable(\"Use +interval:onScheduler: instead\")));\n+ (RACSignal *)interval:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway __attribute__((unavailable(\"Use +interval:onScheduler:withLeeway: instead\")));\n- (RACSignal *)bufferWithTime:(NSTimeInterval)interval __attribute__((unavailable(\"Use -bufferWithTime:onScheduler: instead\")));\n- (RACSignal *)timeout:(NSTimeInterval)interval __attribute__((unavailable(\"Use -timeout:onScheduler: instead\")));\n- (RACDisposable *)toProperty:(NSString *)keyPath onObject:(NSObject *)object __attribute__((unavailable(\"Renamed to -setKeyPath:onObject:\")));\n- (RACSignal *)ignoreElements __attribute__((unavailable(\"Renamed to -ignoreValues\")));\n- (RACSignal *)sequenceNext:(RACSignal * (^)(void))block __attribute__((unavailable(\"Renamed to -then:\")));\n- (RACSignal *)aggregateWithStart:(id)start combine:(id (^)(id running, id next))combineBlock __attribute__((unavailable(\"Renamed to -aggregateWithStart:reduce:\")));\n- (RACSignal *)aggregateWithStartFactory:(id (^)(void))startFactory combine:(id (^)(id running, id next))combineBlock __attribute__((unavailable(\"Renamed to -aggregateWithStartFactory:reduce:\")));\n- (RACDisposable *)executeCommand:(RACCommand *)command __attribute__((unavailable(\"Use -flattenMap: or -subscribeNext: instead\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignal+Operations.m",
    "content": "//\n//  RACSignal+Operations.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-09-06.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSignal+Operations.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"RACBlockTrampoline.h\"\n#import \"RACCommand.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACEvent.h\"\n#import \"RACGroupedSignal.h\"\n#import \"RACMulticastConnection+Private.h\"\n#import \"RACReplaySubject.h\"\n#import \"RACScheduler.h\"\n#import \"RACSerialDisposable.h\"\n#import \"RACSignalSequence.h\"\n#import \"RACStream+Private.h\"\n#import \"RACSubject.h\"\n#import \"RACSubscriber+Private.h\"\n#import \"RACSubscriber.h\"\n#import \"RACTuple.h\"\n#import \"RACUnit.h\"\n#import <libkern/OSAtomic.h>\n#import <objc/runtime.h>\n\nNSString * const RACSignalErrorDomain = @\"RACSignalErrorDomain\";\n\nconst NSInteger RACSignalErrorTimedOut = 1;\nconst NSInteger RACSignalErrorNoMatchingCase = 2;\n\n// Subscribes to the given signal with the given blocks.\n//\n// If the signal errors or completes, the corresponding block is invoked. If the\n// disposable passed to the block is _not_ disposed, then the signal is\n// subscribed to again.\nstatic RACDisposable *subscribeForever (RACSignal *signal, void (^next)(id), void (^error)(NSError *, RACDisposable *), void (^completed)(RACDisposable *)) {\n\tnext = [next copy];\n\terror = [error copy];\n\tcompleted = [completed copy];\n\n\tRACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable];\n\n\tRACSchedulerRecursiveBlock recursiveBlock = ^(void (^recurse)(void)) {\n\t\tRACCompoundDisposable *selfDisposable = [RACCompoundDisposable compoundDisposable];\n\t\t[compoundDisposable addDisposable:selfDisposable];\n\n\t\t__weak RACDisposable *weakSelfDisposable = selfDisposable;\n\n\t\tRACDisposable *subscriptionDisposable = [signal subscribeNext:next error:^(NSError *e) {\n\t\t\t@autoreleasepool {\n\t\t\t\terror(e, compoundDisposable);\n\t\t\t\t[compoundDisposable removeDisposable:weakSelfDisposable];\n\t\t\t}\n\n\t\t\trecurse();\n\t\t} completed:^{\n\t\t\t@autoreleasepool {\n\t\t\t\tcompleted(compoundDisposable);\n\t\t\t\t[compoundDisposable removeDisposable:weakSelfDisposable];\n\t\t\t}\n\n\t\t\trecurse();\n\t\t}];\n\n\t\t[selfDisposable addDisposable:subscriptionDisposable];\n\t};\n\n\t// Subscribe once immediately, and then use recursive scheduling for any\n\t// further resubscriptions.\n\trecursiveBlock(^{\n\t\tRACScheduler *recursiveScheduler = RACScheduler.currentScheduler ?: [RACScheduler scheduler];\n\n\t\tRACDisposable *schedulingDisposable = [recursiveScheduler scheduleRecursiveBlock:recursiveBlock];\n\t\t[compoundDisposable addDisposable:schedulingDisposable];\n\t});\n\n\treturn compoundDisposable;\n}\n\n@implementation RACSignal (Operations)\n\n- (RACSignal *)doNext:(void (^)(id x))block {\n\tNSCParameterAssert(block != NULL);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\treturn [self subscribeNext:^(id x) {\n\t\t\tblock(x);\n\t\t\t[subscriber sendNext:x];\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -doNext:\", self.name];\n}\n\n- (RACSignal *)doError:(void (^)(NSError *error))block {\n\tNSCParameterAssert(block != NULL);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\treturn [self subscribeNext:^(id x) {\n\t\t\t[subscriber sendNext:x];\n\t\t} error:^(NSError *error) {\n\t\t\tblock(error);\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -doError:\", self.name];\n}\n\n- (RACSignal *)doCompleted:(void (^)(void))block {\n\tNSCParameterAssert(block != NULL);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\treturn [self subscribeNext:^(id x) {\n\t\t\t[subscriber sendNext:x];\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\tblock();\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -doCompleted:\", self.name];\n}\n\n- (RACSignal *)throttle:(NSTimeInterval)interval {\n\treturn [[self throttle:interval valuesPassingTest:^(id _) {\n\t\treturn YES;\n\t}] setNameWithFormat:@\"[%@] -throttle: %f\", self.name, (double)interval];\n}\n\n- (RACSignal *)throttle:(NSTimeInterval)interval valuesPassingTest:(BOOL (^)(id next))predicate {\n\tNSCParameterAssert(interval >= 0);\n\tNSCParameterAssert(predicate != nil);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable];\n\n\t\t// We may never use this scheduler, but we need to set it up ahead of\n\t\t// time so that our scheduled blocks are run serially if we do.\n\t\tRACScheduler *scheduler = [RACScheduler scheduler];\n\n\t\t// Information about any currently-buffered `next` event.\n\t\t__block id nextValue = nil;\n\t\t__block BOOL hasNextValue = NO;\n\t\tRACSerialDisposable *nextDisposable = [[RACSerialDisposable alloc] init];\n\n\t\tvoid (^flushNext)(BOOL send) = ^(BOOL send) {\n\t\t\t@synchronized (compoundDisposable) {\n\t\t\t\t[nextDisposable.disposable dispose];\n\n\t\t\t\tif (!hasNextValue) return;\n\t\t\t\tif (send) [subscriber sendNext:nextValue];\n\n\t\t\t\tnextValue = nil;\n\t\t\t\thasNextValue = NO;\n\t\t\t}\n\t\t};\n\n\t\tRACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) {\n\t\t\tRACScheduler *delayScheduler = RACScheduler.currentScheduler ?: scheduler;\n\t\t\tBOOL shouldThrottle = predicate(x);\n\n\t\t\t@synchronized (compoundDisposable) {\n\t\t\t\tflushNext(NO);\n\t\t\t\tif (!shouldThrottle) {\n\t\t\t\t\t[subscriber sendNext:x];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tnextValue = x;\n\t\t\t\thasNextValue = YES;\n\t\t\t\tnextDisposable.disposable = [delayScheduler afterDelay:interval schedule:^{\n\t\t\t\t\tflushNext(YES);\n\t\t\t\t}];\n\t\t\t}\n\t\t} error:^(NSError *error) {\n\t\t\t[compoundDisposable dispose];\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\tflushNext(YES);\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\n\t\t[compoundDisposable addDisposable:subscriptionDisposable];\n\t\treturn compoundDisposable;\n\t}] setNameWithFormat:@\"[%@] -throttle: %f valuesPassingTest:\", self.name, (double)interval];\n}\n\n- (RACSignal *)delay:(NSTimeInterval)interval {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];\n\n\t\t// We may never use this scheduler, but we need to set it up ahead of\n\t\t// time so that our scheduled blocks are run serially if we do.\n\t\tRACScheduler *scheduler = [RACScheduler scheduler];\n\n\t\tvoid (^schedule)(dispatch_block_t) = ^(dispatch_block_t block) {\n\t\t\tRACScheduler *delayScheduler = RACScheduler.currentScheduler ?: scheduler;\n\t\t\tRACDisposable *schedulerDisposable = [delayScheduler afterDelay:interval schedule:block];\n\t\t\t[disposable addDisposable:schedulerDisposable];\n\t\t};\n\n\t\tRACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) {\n\t\t\tschedule(^{\n\t\t\t\t[subscriber sendNext:x];\n\t\t\t});\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\tschedule(^{\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t});\n\t\t}];\n\n\t\t[disposable addDisposable:subscriptionDisposable];\n\t\treturn disposable;\n\t}] setNameWithFormat:@\"[%@] -delay: %f\", self.name, (double)interval];\n}\n\n- (RACSignal *)repeat {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\treturn subscribeForever(self,\n\t\t\t^(id x) {\n\t\t\t\t[subscriber sendNext:x];\n\t\t\t},\n\t\t\t^(NSError *error, RACDisposable *disposable) {\n\t\t\t\t[disposable dispose];\n\t\t\t\t[subscriber sendError:error];\n\t\t\t},\n\t\t\t^(RACDisposable *disposable) {\n\t\t\t\t// Resubscribe.\n\t\t\t});\n\t}] setNameWithFormat:@\"[%@] -repeat\", self.name];\n}\n\n- (RACSignal *)catch:(RACSignal * (^)(NSError *error))catchBlock {\n\tNSCParameterAssert(catchBlock != NULL);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACSerialDisposable *catchDisposable = [[RACSerialDisposable alloc] init];\n\n\t\tRACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) {\n\t\t\t[subscriber sendNext:x];\n\t\t} error:^(NSError *error) {\n\t\t\tRACSignal *signal = catchBlock(error);\n\t\t\tNSCAssert(signal != nil, @\"Expected non-nil signal from catch block on %@\", self);\n\t\t\tcatchDisposable.disposable = [signal subscribe:subscriber];\n\t\t} completed:^{\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\n\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t[catchDisposable dispose];\n\t\t\t[subscriptionDisposable dispose];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -catch:\", self.name];\n}\n\n- (RACSignal *)catchTo:(RACSignal *)signal {\n\treturn [[self catch:^(NSError *error) {\n\t\treturn signal;\n\t}] setNameWithFormat:@\"[%@] -catchTo: %@\", self.name, signal];\n}\n\n+ (RACSignal *)try:(id (^)(NSError **errorPtr))tryBlock {\n\tNSCParameterAssert(tryBlock != NULL);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tNSError *error;\n\t\tid value = tryBlock(&error);\n\t\tRACSignal *signal = (value == nil ? [RACSignal error:error] : [RACSignal return:value]);\n\t\treturn [signal subscribe:subscriber];\n\t}] setNameWithFormat:@\"+try:\"];\n}\n\n- (RACSignal *)try:(BOOL (^)(id value, NSError **errorPtr))tryBlock {\n\tNSCParameterAssert(tryBlock != NULL);\n\n\treturn [[self flattenMap:^(id value) {\n\t\tNSError *error = nil;\n\t\tBOOL passed = tryBlock(value, &error);\n\t\treturn (passed ? [RACSignal return:value] : [RACSignal error:error]);\n\t}] setNameWithFormat:@\"[%@] -try:\", self.name];\n}\n\n- (RACSignal *)tryMap:(id (^)(id value, NSError **errorPtr))mapBlock {\n\tNSCParameterAssert(mapBlock != NULL);\n\n\treturn [[self flattenMap:^(id value) {\n\t\tNSError *error = nil;\n\t\tid mappedValue = mapBlock(value, &error);\n\t\treturn (mappedValue == nil ? [RACSignal error:error] : [RACSignal return:mappedValue]);\n\t}] setNameWithFormat:@\"[%@] -tryMap:\", self.name];\n}\n\n- (RACSignal *)initially:(void (^)(void))block {\n\tNSCParameterAssert(block != NULL);\n\n\treturn [[RACSignal defer:^{\n\t\tblock();\n\t\treturn self;\n\t}] setNameWithFormat:@\"[%@] -initially:\", self.name];\n}\n\n- (RACSignal *)finally:(void (^)(void))block {\n\tNSCParameterAssert(block != NULL);\n\n\treturn [[[self\n\t\tdoError:^(NSError *error) {\n\t\t\tblock();\n\t\t}]\n\t\tdoCompleted:^{\n\t\t\tblock();\n\t\t}]\n\t\tsetNameWithFormat:@\"[%@] -finally:\", self.name];\n}\n\n- (RACSignal *)bufferWithTime:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler {\n\tNSCParameterAssert(scheduler != nil);\n\tNSCParameterAssert(scheduler != RACScheduler.immediateScheduler);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACSerialDisposable *timerDisposable = [[RACSerialDisposable alloc] init];\n\t\tNSMutableArray *values = [NSMutableArray array];\n\n\t\tvoid (^flushValues)() = ^{\n\t\t\t@synchronized (values) {\n\t\t\t\t[timerDisposable.disposable dispose];\n\n\t\t\t\tif (values.count == 0) return;\n\n\t\t\t\tRACTuple *tuple = [RACTuple tupleWithObjectsFromArray:values];\n\t\t\t\t[values removeAllObjects];\n\t\t\t\t[subscriber sendNext:tuple];\n\t\t\t}\n\t\t};\n\n\t\tRACDisposable *selfDisposable = [self subscribeNext:^(id x) {\n\t\t\t@synchronized (values) {\n\t\t\t\tif (values.count == 0) {\n\t\t\t\t\ttimerDisposable.disposable = [scheduler afterDelay:interval schedule:flushValues];\n\t\t\t\t}\n\n\t\t\t\t[values addObject:x ?: RACTupleNil.tupleNil];\n\t\t\t}\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\tflushValues();\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\n\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t[selfDisposable dispose];\n\t\t\t[timerDisposable dispose];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -bufferWithTime: %f onScheduler: %@\", self.name, (double)interval, scheduler];\n}\n\n- (RACSignal *)collect {\n\treturn [[self aggregateWithStartFactory:^{\n\t\treturn [[NSMutableArray alloc] init];\n\t} reduce:^(NSMutableArray *collectedValues, id x) {\n\t\t[collectedValues addObject:(x ?: NSNull.null)];\n\t\treturn collectedValues;\n\t}] setNameWithFormat:@\"[%@] -collect\", self.name];\n}\n\n- (RACSignal *)takeLast:(NSUInteger)count {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tNSMutableArray *valuesTaken = [NSMutableArray arrayWithCapacity:count];\n\t\treturn [self subscribeNext:^(id x) {\n\t\t\t[valuesTaken addObject:x ? : RACTupleNil.tupleNil];\n\n\t\t\twhile (valuesTaken.count > count) {\n\t\t\t\t[valuesTaken removeObjectAtIndex:0];\n\t\t\t}\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\tfor (id value in valuesTaken) {\n\t\t\t\t[subscriber sendNext:value == RACTupleNil.tupleNil ? nil : value];\n\t\t\t}\n\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -takeLast: %lu\", self.name, (unsigned long)count];\n}\n\n- (RACSignal *)combineLatestWith:(RACSignal *)signal {\n\tNSCParameterAssert(signal != nil);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];\n\n\t\t__block id lastSelfValue = nil;\n\t\t__block BOOL selfCompleted = NO;\n\n\t\t__block id lastOtherValue = nil;\n\t\t__block BOOL otherCompleted = NO;\n\n\t\tvoid (^sendNext)(void) = ^{\n\t\t\t@synchronized (disposable) {\n\t\t\t\tif (lastSelfValue == nil || lastOtherValue == nil) return;\n\t\t\t\t[subscriber sendNext:RACTuplePack(lastSelfValue, lastOtherValue)];\n\t\t\t}\n\t\t};\n\n\t\tRACDisposable *selfDisposable = [self subscribeNext:^(id x) {\n\t\t\t@synchronized (disposable) {\n\t\t\t\tlastSelfValue = x ?: RACTupleNil.tupleNil;\n\t\t\t\tsendNext();\n\t\t\t}\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\t@synchronized (disposable) {\n\t\t\t\tselfCompleted = YES;\n\t\t\t\tif (otherCompleted) [subscriber sendCompleted];\n\t\t\t}\n\t\t}];\n\n\t\t[disposable addDisposable:selfDisposable];\n\n\t\tRACDisposable *otherDisposable = [signal subscribeNext:^(id x) {\n\t\t\t@synchronized (disposable) {\n\t\t\t\tlastOtherValue = x ?: RACTupleNil.tupleNil;\n\t\t\t\tsendNext();\n\t\t\t}\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\t@synchronized (disposable) {\n\t\t\t\totherCompleted = YES;\n\t\t\t\tif (selfCompleted) [subscriber sendCompleted];\n\t\t\t}\n\t\t}];\n\n\t\t[disposable addDisposable:otherDisposable];\n\n\t\treturn disposable;\n\t}] setNameWithFormat:@\"[%@] -combineLatestWith: %@\", self.name, signal];\n}\n\n+ (RACSignal *)combineLatest:(id<NSFastEnumeration>)signals {\n\treturn [[self join:signals block:^(RACSignal *left, RACSignal *right) {\n\t\treturn [left combineLatestWith:right];\n\t}] setNameWithFormat:@\"+combineLatest: %@\", signals];\n}\n\n+ (RACSignal *)combineLatest:(id<NSFastEnumeration>)signals reduce:(id (^)())reduceBlock {\n\tNSCParameterAssert(reduceBlock != nil);\n\n\tRACSignal *result = [self combineLatest:signals];\n\n\t// Although we assert this condition above, older versions of this method\n\t// supported this argument being nil. Avoid crashing Release builds of\n\t// apps that depended on that.\n\tif (reduceBlock != nil) result = [result reduceEach:reduceBlock];\n\n\treturn [result setNameWithFormat:@\"+combineLatest: %@ reduce:\", signals];\n}\n\n- (RACSignal *)merge:(RACSignal *)signal {\n\treturn [[RACSignal\n\t\tmerge:@[ self, signal ]]\n\t\tsetNameWithFormat:@\"[%@] -merge: %@\", self.name, signal];\n}\n\n+ (RACSignal *)merge:(id<NSFastEnumeration>)signals {\n\tNSMutableArray *copiedSignals = [[NSMutableArray alloc] init];\n\tfor (RACSignal *signal in signals) {\n\t\t[copiedSignals addObject:signal];\n\t}\n\n\treturn [[[RACSignal\n\t\tcreateSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\tfor (RACSignal *signal in copiedSignals) {\n\t\t\t\t[subscriber sendNext:signal];\n\t\t\t}\n\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}]\n\t\tflatten]\n\t\tsetNameWithFormat:@\"+merge: %@\", copiedSignals];\n}\n\n- (RACSignal *)flatten:(NSUInteger)maxConcurrent {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACCompoundDisposable *compoundDisposable = [[RACCompoundDisposable alloc] init];\n\n\t\t// Contains disposables for the currently active subscriptions.\n\t\t//\n\t\t// This should only be used while synchronized on `subscriber`.\n\t\tNSMutableArray *activeDisposables = [[NSMutableArray alloc] initWithCapacity:maxConcurrent];\n\n\t\t// Whether the signal-of-signals has completed yet.\n\t\t//\n\t\t// This should only be used while synchronized on `subscriber`.\n\t\t__block BOOL selfCompleted = NO;\n\n\t\t// Subscribes to the given signal.\n\t\t__block void (^subscribeToSignal)(RACSignal *);\n\n\t\t// Weak reference to the above, to avoid a leak.\n\t\t__weak __block void (^recur)(RACSignal *);\n\n\t\t// Sends completed to the subscriber if all signals are finished.\n\t\t//\n\t\t// This should only be used while synchronized on `subscriber`.\n\t\tvoid (^completeIfAllowed)(void) = ^{\n\t\t\tif (selfCompleted && activeDisposables.count == 0) {\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t}\n\t\t};\n\n\t\t// The signals waiting to be started.\n\t\t//\n\t\t// This array should only be used while synchronized on `subscriber`.\n\t\tNSMutableArray *queuedSignals = [NSMutableArray array];\n\n\t\trecur = subscribeToSignal = ^(RACSignal *signal) {\n\t\t\tRACSerialDisposable *serialDisposable = [[RACSerialDisposable alloc] init];\n\n\t\t\t@synchronized (subscriber) {\n\t\t\t\t[compoundDisposable addDisposable:serialDisposable];\n\t\t\t\t[activeDisposables addObject:serialDisposable];\n\t\t\t}\n\n\t\t\tserialDisposable.disposable = [signal subscribeNext:^(id x) {\n\t\t\t\t[subscriber sendNext:x];\n\t\t\t} error:^(NSError *error) {\n\t\t\t\t[subscriber sendError:error];\n\t\t\t} completed:^{\n\t\t\t\t__strong void (^subscribeToSignal)(RACSignal *) = recur;\n\t\t\t\tRACSignal *nextSignal;\n\n\t\t\t\t@synchronized (subscriber) {\n\t\t\t\t\t[compoundDisposable removeDisposable:serialDisposable];\n\t\t\t\t\t[activeDisposables removeObjectIdenticalTo:serialDisposable];\n\n\t\t\t\t\tif (queuedSignals.count == 0) {\n\t\t\t\t\t\tcompleteIfAllowed();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tnextSignal = queuedSignals[0];\n\t\t\t\t\t[queuedSignals removeObjectAtIndex:0];\n\t\t\t\t}\n\n\t\t\t\tsubscribeToSignal(nextSignal);\n\t\t\t}];\n\t\t};\n\n\t\t[compoundDisposable addDisposable:[self subscribeNext:^(RACSignal *signal) {\n\t\t\tif (signal == nil) return;\n\n\t\t\tNSCAssert([signal isKindOfClass:RACSignal.class], @\"Expected a RACSignal, got %@\", signal);\n\n\t\t\t@synchronized (subscriber) {\n\t\t\t\tif (maxConcurrent > 0 && activeDisposables.count >= maxConcurrent) {\n\t\t\t\t\t[queuedSignals addObject:signal];\n\n\t\t\t\t\t// If we need to wait, skip subscribing to this\n\t\t\t\t\t// signal.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsubscribeToSignal(signal);\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\t@synchronized (subscriber) {\n\t\t\t\tselfCompleted = YES;\n\t\t\t\tcompleteIfAllowed();\n\t\t\t}\n\t\t}]];\n\n\t\t[compoundDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t// A strong reference is held to `subscribeToSignal` until we're\n\t\t\t// done, preventing it from deallocating early.\n\t\t\tsubscribeToSignal = nil;\n\t\t}]];\n\n\t\treturn compoundDisposable;\n\t}] setNameWithFormat:@\"[%@] -flatten: %lu\", self.name, (unsigned long)maxConcurrent];\n}\n\n- (RACSignal *)then:(RACSignal * (^)(void))block {\n\tNSCParameterAssert(block != nil);\n\n\treturn [[[self\n\t\tignoreValues]\n\t\tconcat:[RACSignal defer:block]]\n\t\tsetNameWithFormat:@\"[%@] -then:\", self.name];\n}\n\n- (RACSignal *)concat {\n\treturn [[self flatten:1] setNameWithFormat:@\"[%@] -concat\", self.name];\n}\n\n- (RACSignal *)aggregateWithStartFactory:(id (^)(void))startFactory reduce:(id (^)(id running, id next))reduceBlock {\n\tNSCParameterAssert(startFactory != NULL);\n\tNSCParameterAssert(reduceBlock != NULL);\n\n\treturn [[RACSignal defer:^{\n\t\treturn [self aggregateWithStart:startFactory() reduce:reduceBlock];\n\t}] setNameWithFormat:@\"[%@] -aggregateWithStartFactory:reduce:\", self.name];\n}\n\n- (RACSignal *)aggregateWithStart:(id)start reduce:(id (^)(id running, id next))reduceBlock {\n\treturn [[self\n\t\taggregateWithStart:start\n\t\treduceWithIndex:^(id running, id next, NSUInteger index) {\n\t\t\treturn reduceBlock(running, next);\n\t\t}]\n\t\tsetNameWithFormat:@\"[%@] -aggregateWithStart: %@ reduce:\", self.name, RACDescription(start)];\n}\n\n- (RACSignal *)aggregateWithStart:(id)start reduceWithIndex:(id (^)(id, id, NSUInteger))reduceBlock {\n\treturn [[[[self\n\t\tscanWithStart:start reduceWithIndex:reduceBlock]\n\t\tstartWith:start]\n\t\ttakeLast:1]\n\t\tsetNameWithFormat:@\"[%@] -aggregateWithStart: %@ reduceWithIndex:\", self.name, RACDescription(start)];\n}\n\n- (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object {\n\treturn [self setKeyPath:keyPath onObject:object nilValue:nil];\n}\n\n- (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object nilValue:(id)nilValue {\n\tNSCParameterAssert(keyPath != nil);\n\tNSCParameterAssert(object != nil);\n\n\tkeyPath = [keyPath copy];\n\n\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];\n\n\t// Purposely not retaining 'object', since we want to tear down the binding\n\t// when it deallocates normally.\n\t__block void * volatile objectPtr = (__bridge void *)object;\n\n\tRACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) {\n\t\t// Possibly spec, possibly compiler bug, but this __bridge cast does not\n\t\t// result in a retain here, effectively an invisible __unsafe_unretained\n\t\t// qualifier. Using objc_precise_lifetime gives the __strong reference\n\t\t// desired. The explicit use of __strong is strictly defensive.\n\t\t__strong NSObject *object __attribute__((objc_precise_lifetime)) = (__bridge __strong id)objectPtr;\n\t\t[object setValue:x ?: nilValue forKeyPath:keyPath];\n\t} error:^(NSError *error) {\n\t\t__strong NSObject *object __attribute__((objc_precise_lifetime)) = (__bridge __strong id)objectPtr;\n\n\t\tNSCAssert(NO, @\"Received error from %@ in binding for key path \\\"%@\\\" on %@: %@\", self, keyPath, object, error);\n\n\t\t// Log the error if we're running with assertions disabled.\n\t\tNSLog(@\"Received error from %@ in binding for key path \\\"%@\\\" on %@: %@\", self, keyPath, object, error);\n\n\t\t[disposable dispose];\n\t} completed:^{\n\t\t[disposable dispose];\n\t}];\n\n\t[disposable addDisposable:subscriptionDisposable];\n\n\t#if DEBUG\n\tstatic void *bindingsKey = &bindingsKey;\n\tNSMutableDictionary *bindings;\n\n\t@synchronized (object) {\n\t\tbindings = objc_getAssociatedObject(object, bindingsKey);\n\t\tif (bindings == nil) {\n\t\t\tbindings = [NSMutableDictionary dictionary];\n\t\t\tobjc_setAssociatedObject(object, bindingsKey, bindings, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t\t}\n\t}\n\n\t@synchronized (bindings) {\n\t\tNSCAssert(bindings[keyPath] == nil, @\"Signal %@ is already bound to key path \\\"%@\\\" on object %@, adding signal %@ is undefined behavior\", [bindings[keyPath] nonretainedObjectValue], keyPath, object, self);\n\n\t\tbindings[keyPath] = [NSValue valueWithNonretainedObject:self];\n\t}\n\t#endif\n\n\tRACDisposable *clearPointerDisposable = [RACDisposable disposableWithBlock:^{\n\t\t#if DEBUG\n\t\t@synchronized (bindings) {\n\t\t\t[bindings removeObjectForKey:keyPath];\n\t\t}\n\t\t#endif\n\n\t\twhile (YES) {\n\t\t\tvoid *ptr = objectPtr;\n\t\t\tif (OSAtomicCompareAndSwapPtrBarrier(ptr, NULL, &objectPtr)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}];\n\n\t[disposable addDisposable:clearPointerDisposable];\n\n\t[object.rac_deallocDisposable addDisposable:disposable];\n\n\tRACCompoundDisposable *objectDisposable = object.rac_deallocDisposable;\n\treturn [RACDisposable disposableWithBlock:^{\n\t\t[objectDisposable removeDisposable:disposable];\n\t\t[disposable dispose];\n\t}];\n}\n\n+ (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler {\n\treturn [[RACSignal interval:interval onScheduler:scheduler withLeeway:0.0] setNameWithFormat:@\"+interval: %f onScheduler: %@\", (double)interval, scheduler];\n}\n\n+ (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler withLeeway:(NSTimeInterval)leeway {\n\tNSCParameterAssert(scheduler != nil);\n\tNSCParameterAssert(scheduler != RACScheduler.immediateScheduler);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\treturn [scheduler after:[NSDate dateWithTimeIntervalSinceNow:interval] repeatingEvery:interval withLeeway:leeway schedule:^{\n\t\t\t[subscriber sendNext:[NSDate date]];\n\t\t}];\n\t}] setNameWithFormat:@\"+interval: %f onScheduler: %@ withLeeway: %f\", (double)interval, scheduler, (double)leeway];\n}\n\n- (RACSignal *)takeUntil:(RACSignal *)signalTrigger {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];\n\t\tvoid (^triggerCompletion)(void) = ^{\n\t\t\t[disposable dispose];\n\t\t\t[subscriber sendCompleted];\n\t\t};\n\n\t\tRACDisposable *triggerDisposable = [signalTrigger subscribeNext:^(id _) {\n\t\t\ttriggerCompletion();\n\t\t} completed:^{\n\t\t\ttriggerCompletion();\n\t\t}];\n\n\t\t[disposable addDisposable:triggerDisposable];\n\n\t\tif (!disposable.disposed) {\n\t\t\tRACDisposable *selfDisposable = [self subscribeNext:^(id x) {\n\t\t\t\t[subscriber sendNext:x];\n\t\t\t} error:^(NSError *error) {\n\t\t\t\t[subscriber sendError:error];\n\t\t\t} completed:^{\n\t\t\t\t[disposable dispose];\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t}];\n\n\t\t\t[disposable addDisposable:selfDisposable];\n\t\t}\n\n\t\treturn disposable;\n\t}] setNameWithFormat:@\"[%@] -takeUntil: %@\", self.name, signalTrigger];\n}\n\n- (RACSignal *)takeUntilReplacement:(RACSignal *)replacement {\n\treturn [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACSerialDisposable *selfDisposable = [[RACSerialDisposable alloc] init];\n\n\t\tRACDisposable *replacementDisposable = [replacement subscribeNext:^(id x) {\n\t\t\t[selfDisposable dispose];\n\t\t\t[subscriber sendNext:x];\n\t\t} error:^(NSError *error) {\n\t\t\t[selfDisposable dispose];\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\t[selfDisposable dispose];\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\n\t\tif (!selfDisposable.disposed) {\n\t\t\tselfDisposable.disposable = [[self\n\t\t\t\tconcat:[RACSignal never]]\n\t\t\t\tsubscribe:subscriber];\n\t\t}\n\n\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t[selfDisposable dispose];\n\t\t\t[replacementDisposable dispose];\n\t\t}];\n\t}];\n}\n\n- (RACSignal *)switchToLatest {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACMulticastConnection *connection = [self publish];\n\n\t\tRACDisposable *subscriptionDisposable = [[connection.signal\n\t\t\tflattenMap:^(RACSignal *x) {\n\t\t\t\tNSCAssert(x == nil || [x isKindOfClass:RACSignal.class], @\"-switchToLatest requires that the source signal (%@) send signals. Instead we got: %@\", self, x);\n\n\t\t\t\t// -concat:[RACSignal never] prevents completion of the receiver from\n\t\t\t\t// prematurely terminating the inner signal.\n\t\t\t\treturn [x takeUntil:[connection.signal concat:[RACSignal never]]];\n\t\t\t}]\n\t\t\tsubscribe:subscriber];\n\n\t\tRACDisposable *connectionDisposable = [connection connect];\n\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t[subscriptionDisposable dispose];\n\t\t\t[connectionDisposable dispose];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -switchToLatest\", self.name];\n}\n\n+ (RACSignal *)switch:(RACSignal *)signal cases:(NSDictionary *)cases default:(RACSignal *)defaultSignal {\n\tNSCParameterAssert(signal != nil);\n\tNSCParameterAssert(cases != nil);\n\n\tfor (id key in cases) {\n\t\tid value __attribute__((unused)) = cases[key];\n\t\tNSCAssert([value isKindOfClass:RACSignal.class], @\"Expected all cases to be RACSignals, %@ isn't\", value);\n\t}\n\n\tNSDictionary *copy = [cases copy];\n\n\treturn [[[signal\n\t\tmap:^(id key) {\n\t\t\tif (key == nil) key = RACTupleNil.tupleNil;\n\n\t\t\tRACSignal *signal = copy[key] ?: defaultSignal;\n\t\t\tif (signal == nil) {\n\t\t\t\tNSString *description = [NSString stringWithFormat:NSLocalizedString(@\"No matching signal found for value %@\", @\"\"), key];\n\t\t\t\treturn [RACSignal error:[NSError errorWithDomain:RACSignalErrorDomain code:RACSignalErrorNoMatchingCase userInfo:@{ NSLocalizedDescriptionKey: description }]];\n\t\t\t}\n\n\t\t\treturn signal;\n\t\t}]\n\t\tswitchToLatest]\n\t\tsetNameWithFormat:@\"+switch: %@ cases: %@ default: %@\", signal, cases, defaultSignal];\n}\n\n+ (RACSignal *)if:(RACSignal *)boolSignal then:(RACSignal *)trueSignal else:(RACSignal *)falseSignal {\n\tNSCParameterAssert(boolSignal != nil);\n\tNSCParameterAssert(trueSignal != nil);\n\tNSCParameterAssert(falseSignal != nil);\n\n\treturn [[[boolSignal\n\t\tmap:^(NSNumber *value) {\n\t\t\tNSCAssert([value isKindOfClass:NSNumber.class], @\"Expected %@ to send BOOLs, not %@\", boolSignal, value);\n\n\t\t\treturn (value.boolValue ? trueSignal : falseSignal);\n\t\t}]\n\t\tswitchToLatest]\n\t\tsetNameWithFormat:@\"+if: %@ then: %@ else: %@\", boolSignal, trueSignal, falseSignal];\n}\n\n- (id)first {\n\treturn [self firstOrDefault:nil];\n}\n\n- (id)firstOrDefault:(id)defaultValue {\n\treturn [self firstOrDefault:defaultValue success:NULL error:NULL];\n}\n\n- (id)firstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error {\n\tNSCondition *condition = [[NSCondition alloc] init];\n\tcondition.name = [NSString stringWithFormat:@\"[%@] -firstOrDefault: %@ success:error:\", self.name, defaultValue];\n\n\t__block id value = defaultValue;\n\t__block BOOL done = NO;\n\n\t// Ensures that we don't pass values across thread boundaries by reference.\n\t__block NSError *localError;\n\t__block BOOL localSuccess;\n\n\t[[self take:1] subscribeNext:^(id x) {\n\t\t[condition lock];\n\n\t\tvalue = x;\n\t\tlocalSuccess = YES;\n\n\t\tdone = YES;\n\t\t[condition broadcast];\n\t\t[condition unlock];\n\t} error:^(NSError *e) {\n\t\t[condition lock];\n\n\t\tif (!done) {\n\t\t\tlocalSuccess = NO;\n\t\t\tlocalError = e;\n\n\t\t\tdone = YES;\n\t\t\t[condition broadcast];\n\t\t}\n\n\t\t[condition unlock];\n\t} completed:^{\n\t\t[condition lock];\n\n\t\tlocalSuccess = YES;\n\n\t\tdone = YES;\n\t\t[condition broadcast];\n\t\t[condition unlock];\n\t}];\n\n\t[condition lock];\n\twhile (!done) {\n\t\t[condition wait];\n\t}\n\n\tif (success != NULL) *success = localSuccess;\n\tif (error != NULL) *error = localError;\n\n\t[condition unlock];\n\treturn value;\n}\n\n- (BOOL)waitUntilCompleted:(NSError **)error {\n\tBOOL success = NO;\n\n\t[[[self\n\t\tignoreValues]\n\t\tsetNameWithFormat:@\"[%@] -waitUntilCompleted:\", self.name]\n\t\tfirstOrDefault:nil success:&success error:error];\n\n\treturn success;\n}\n\n+ (RACSignal *)defer:(RACSignal * (^)(void))block {\n\tNSCParameterAssert(block != NULL);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\treturn [block() subscribe:subscriber];\n\t}] setNameWithFormat:@\"+defer:\"];\n}\n\n- (NSArray *)toArray {\n\treturn [[[self collect] first] copy];\n}\n\n- (RACSequence *)sequence {\n\treturn [[RACSignalSequence sequenceWithSignal:self] setNameWithFormat:@\"[%@] -sequence\", self.name];\n}\n\n- (RACMulticastConnection *)publish {\n\tRACSubject *subject = [[RACSubject subject] setNameWithFormat:@\"[%@] -publish\", self.name];\n\tRACMulticastConnection *connection = [self multicast:subject];\n\treturn connection;\n}\n\n- (RACMulticastConnection *)multicast:(RACSubject *)subject {\n\t[subject setNameWithFormat:@\"[%@] -multicast: %@\", self.name, subject.name];\n\tRACMulticastConnection *connection = [[RACMulticastConnection alloc] initWithSourceSignal:self subject:subject];\n\treturn connection;\n}\n\n- (RACSignal *)replay {\n\tRACReplaySubject *subject = [[RACReplaySubject subject] setNameWithFormat:@\"[%@] -replay\", self.name];\n\n\tRACMulticastConnection *connection = [self multicast:subject];\n\t[connection connect];\n\n\treturn connection.signal;\n}\n\n- (RACSignal *)replayLast {\n\tRACReplaySubject *subject = [[RACReplaySubject replaySubjectWithCapacity:1] setNameWithFormat:@\"[%@] -replayLast\", self.name];\n\n\tRACMulticastConnection *connection = [self multicast:subject];\n\t[connection connect];\n\n\treturn connection.signal;\n}\n\n- (RACSignal *)replayLazily {\n\tRACMulticastConnection *connection = [self multicast:[RACReplaySubject subject]];\n\treturn [[RACSignal\n\t\tdefer:^{\n\t\t\t[connection connect];\n\t\t\treturn connection.signal;\n\t\t}]\n\t\tsetNameWithFormat:@\"[%@] -replayLazily\", self.name];\n}\n\n- (RACSignal *)timeout:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler {\n\tNSCParameterAssert(scheduler != nil);\n\tNSCParameterAssert(scheduler != RACScheduler.immediateScheduler);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];\n\n\t\tRACDisposable *timeoutDisposable = [scheduler afterDelay:interval schedule:^{\n\t\t\t[disposable dispose];\n\t\t\t[subscriber sendError:[NSError errorWithDomain:RACSignalErrorDomain code:RACSignalErrorTimedOut userInfo:nil]];\n\t\t}];\n\n\t\t[disposable addDisposable:timeoutDisposable];\n\n\t\tRACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) {\n\t\t\t[subscriber sendNext:x];\n\t\t} error:^(NSError *error) {\n\t\t\t[disposable dispose];\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\t[disposable dispose];\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\n\t\t[disposable addDisposable:subscriptionDisposable];\n\t\treturn disposable;\n\t}] setNameWithFormat:@\"[%@] -timeout: %f onScheduler: %@\", self.name, (double)interval, scheduler];\n}\n\n- (RACSignal *)deliverOn:(RACScheduler *)scheduler {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\treturn [self subscribeNext:^(id x) {\n\t\t\t[scheduler schedule:^{\n\t\t\t\t[subscriber sendNext:x];\n\t\t\t}];\n\t\t} error:^(NSError *error) {\n\t\t\t[scheduler schedule:^{\n\t\t\t\t[subscriber sendError:error];\n\t\t\t}];\n\t\t} completed:^{\n\t\t\t[scheduler schedule:^{\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t}];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -deliverOn: %@\", self.name, scheduler];\n}\n\n- (RACSignal *)subscribeOn:(RACScheduler *)scheduler {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];\n\n\t\tRACDisposable *schedulingDisposable = [scheduler schedule:^{\n\t\t\tRACDisposable *subscriptionDisposable = [self subscribe:subscriber];\n\n\t\t\t[disposable addDisposable:subscriptionDisposable];\n\t\t}];\n\n\t\t[disposable addDisposable:schedulingDisposable];\n\t\treturn disposable;\n\t}] setNameWithFormat:@\"[%@] -subscribeOn: %@\", self.name, scheduler];\n}\n\n- (RACSignal *)deliverOnMainThread {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t__block volatile int32_t queueLength = 0;\n\t\t\n\t\tvoid (^performOnMainThread)(dispatch_block_t) = ^(dispatch_block_t block) {\n\t\t\tint32_t queued = OSAtomicIncrement32(&queueLength);\n\t\t\tif (NSThread.isMainThread && queued == 1) {\n\t\t\t\tblock();\n\t\t\t\tOSAtomicDecrement32(&queueLength);\n\t\t\t} else {\n\t\t\t\tdispatch_async(dispatch_get_main_queue(), ^{\n\t\t\t\t\tblock();\n\t\t\t\t\tOSAtomicDecrement32(&queueLength);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\treturn [self subscribeNext:^(id x) {\n\t\t\tperformOnMainThread(^{\n\t\t\t\t[subscriber sendNext:x];\n\t\t\t});\n\t\t} error:^(NSError *error) {\n\t\t\tperformOnMainThread(^{\n\t\t\t\t[subscriber sendError:error];\n\t\t\t});\n\t\t} completed:^{\n\t\t\tperformOnMainThread(^{\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t});\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -deliverOnMainThread\", self.name];\n}\n\n- (RACSignal *)groupBy:(id<NSCopying> (^)(id object))keyBlock transform:(id (^)(id object))transformBlock {\n\tNSCParameterAssert(keyBlock != NULL);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tNSMutableDictionary *groups = [NSMutableDictionary dictionary];\n\t\tNSMutableArray *orderedGroups = [NSMutableArray array];\n\n\t\treturn [self subscribeNext:^(id x) {\n\t\t\tid<NSCopying> key = keyBlock(x);\n\t\t\tRACGroupedSignal *groupSubject = nil;\n\t\t\t@synchronized(groups) {\n\t\t\t\tgroupSubject = groups[key];\n\t\t\t\tif (groupSubject == nil) {\n\t\t\t\t\tgroupSubject = [RACGroupedSignal signalWithKey:key];\n\t\t\t\t\tgroups[key] = groupSubject;\n\t\t\t\t\t[orderedGroups addObject:groupSubject];\n\t\t\t\t\t[subscriber sendNext:groupSubject];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t[groupSubject sendNext:transformBlock != NULL ? transformBlock(x) : x];\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\n\t\t\t[orderedGroups makeObjectsPerformSelector:@selector(sendError:) withObject:error];\n\t\t} completed:^{\n\t\t\t[subscriber sendCompleted];\n\n\t\t\t[orderedGroups makeObjectsPerformSelector:@selector(sendCompleted)];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -groupBy:transform:\", self.name];\n}\n\n- (RACSignal *)groupBy:(id<NSCopying> (^)(id object))keyBlock {\n\treturn [[self groupBy:keyBlock transform:nil] setNameWithFormat:@\"[%@] -groupBy:\", self.name];\n}\n\n- (RACSignal *)any {\n\treturn [[self any:^(id x) {\n\t\treturn YES;\n\t}] setNameWithFormat:@\"[%@] -any\", self.name];\n}\n\n- (RACSignal *)any:(BOOL (^)(id object))predicateBlock {\n\tNSCParameterAssert(predicateBlock != NULL);\n\n\treturn [[[self materialize] bind:^{\n\t\treturn ^(RACEvent *event, BOOL *stop) {\n\t\t\tif (event.finished) {\n\t\t\t\t*stop = YES;\n\t\t\t\treturn [RACSignal return:@NO];\n\t\t\t}\n\n\t\t\tif (predicateBlock(event.value)) {\n\t\t\t\t*stop = YES;\n\t\t\t\treturn [RACSignal return:@YES];\n\t\t\t}\n\n\t\t\treturn [RACSignal empty];\n\t\t};\n\t}] setNameWithFormat:@\"[%@] -any:\", self.name];\n}\n\n- (RACSignal *)all:(BOOL (^)(id object))predicateBlock {\n\tNSCParameterAssert(predicateBlock != NULL);\n\n\treturn [[[self materialize] bind:^{\n\t\treturn ^(RACEvent *event, BOOL *stop) {\n\t\t\tif (event.eventType == RACEventTypeCompleted) {\n\t\t\t\t*stop = YES;\n\t\t\t\treturn [RACSignal return:@YES];\n\t\t\t}\n\n\t\t\tif (event.eventType == RACEventTypeError || !predicateBlock(event.value)) {\n\t\t\t\t*stop = YES;\n\t\t\t\treturn [RACSignal return:@NO];\n\t\t\t}\n\n\t\t\treturn [RACSignal empty];\n\t\t};\n\t}] setNameWithFormat:@\"[%@] -all:\", self.name];\n}\n\n- (RACSignal *)retry:(NSInteger)retryCount {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t__block NSInteger currentRetryCount = 0;\n\t\treturn subscribeForever(self,\n\t\t\t^(id x) {\n\t\t\t\t[subscriber sendNext:x];\n\t\t\t},\n\t\t\t^(NSError *error, RACDisposable *disposable) {\n\t\t\t\tif (retryCount == 0 || currentRetryCount < retryCount) {\n\t\t\t\t\t// Resubscribe.\n\t\t\t\t\tcurrentRetryCount++;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t[disposable dispose];\n\t\t\t\t[subscriber sendError:error];\n\t\t\t},\n\t\t\t^(RACDisposable *disposable) {\n\t\t\t\t[disposable dispose];\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t});\n\t}] setNameWithFormat:@\"[%@] -retry: %lu\", self.name, (unsigned long)retryCount];\n}\n\n- (RACSignal *)retry {\n\treturn [[self retry:0] setNameWithFormat:@\"[%@] -retry\", self.name];\n}\n\n- (RACSignal *)sample:(RACSignal *)sampler {\n\tNSCParameterAssert(sampler != nil);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tNSLock *lock = [[NSLock alloc] init];\n\t\t__block id lastValue;\n\t\t__block BOOL hasValue = NO;\n\n\t\tRACSerialDisposable *samplerDisposable = [[RACSerialDisposable alloc] init];\n\t\tRACDisposable *sourceDisposable = [self subscribeNext:^(id x) {\n\t\t\t[lock lock];\n\t\t\thasValue = YES;\n\t\t\tlastValue = x;\n\t\t\t[lock unlock];\n\t\t} error:^(NSError *error) {\n\t\t\t[samplerDisposable dispose];\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\t[samplerDisposable dispose];\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\n\t\tsamplerDisposable.disposable = [sampler subscribeNext:^(id _) {\n\t\t\tBOOL shouldSend = NO;\n\t\t\tid value;\n\t\t\t[lock lock];\n\t\t\tshouldSend = hasValue;\n\t\t\tvalue = lastValue;\n\t\t\t[lock unlock];\n\n\t\t\tif (shouldSend) {\n\t\t\t\t[subscriber sendNext:value];\n\t\t\t}\n\t\t} error:^(NSError *error) {\n\t\t\t[sourceDisposable dispose];\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\t[sourceDisposable dispose];\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\n\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t[samplerDisposable dispose];\n\t\t\t[sourceDisposable dispose];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -sample: %@\", self.name, sampler];\n}\n\n- (RACSignal *)ignoreValues {\n\treturn [[self filter:^(id _) {\n\t\treturn NO;\n\t}] setNameWithFormat:@\"[%@] -ignoreValues\", self.name];\n}\n\n- (RACSignal *)materialize {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\treturn [self subscribeNext:^(id x) {\n\t\t\t[subscriber sendNext:[RACEvent eventWithValue:x]];\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendNext:[RACEvent eventWithError:error]];\n\t\t\t[subscriber sendCompleted];\n\t\t} completed:^{\n\t\t\t[subscriber sendNext:RACEvent.completedEvent];\n\t\t\t[subscriber sendCompleted];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -materialize\", self.name];\n}\n\n- (RACSignal *)dematerialize {\n\treturn [[self bind:^{\n\t\treturn ^(RACEvent *event, BOOL *stop) {\n\t\t\tswitch (event.eventType) {\n\t\t\t\tcase RACEventTypeCompleted:\n\t\t\t\t\t*stop = YES;\n\t\t\t\t\treturn [RACSignal empty];\n\n\t\t\t\tcase RACEventTypeError:\n\t\t\t\t\t*stop = YES;\n\t\t\t\t\treturn [RACSignal error:event.error];\n\n\t\t\t\tcase RACEventTypeNext:\n\t\t\t\t\treturn [RACSignal return:event.value];\n\t\t\t}\n\t\t};\n\t}] setNameWithFormat:@\"[%@] -dematerialize\", self.name];\n}\n\n- (RACSignal *)not {\n\treturn [[self map:^(NSNumber *value) {\n\t\tNSCAssert([value isKindOfClass:NSNumber.class], @\"-not must only be used on a signal of NSNumbers. Instead, got: %@\", value);\n\n\t\treturn @(!value.boolValue);\n\t}] setNameWithFormat:@\"[%@] -not\", self.name];\n}\n\n- (RACSignal *)and {\n\treturn [[self map:^(RACTuple *tuple) {\n\t\tNSCAssert([tuple isKindOfClass:RACTuple.class], @\"-and must only be used on a signal of RACTuples of NSNumbers. Instead, received: %@\", tuple);\n\t\tNSCAssert(tuple.count > 0, @\"-and must only be used on a signal of RACTuples of NSNumbers, with at least 1 value in the tuple\");\n\n\t\treturn @([tuple.rac_sequence all:^(NSNumber *number) {\n\t\t\tNSCAssert([number isKindOfClass:NSNumber.class], @\"-and must only be used on a signal of RACTuples of NSNumbers. Instead, tuple contains a non-NSNumber value: %@\", tuple);\n\n\t\t\treturn number.boolValue;\n\t\t}]);\n\t}] setNameWithFormat:@\"[%@] -and\", self.name];\n}\n\n- (RACSignal *)or {\n\treturn [[self map:^(RACTuple *tuple) {\n\t\tNSCAssert([tuple isKindOfClass:RACTuple.class], @\"-or must only be used on a signal of RACTuples of NSNumbers. Instead, received: %@\", tuple);\n\t\tNSCAssert(tuple.count > 0, @\"-or must only be used on a signal of RACTuples of NSNumbers, with at least 1 value in the tuple\");\n\n\t\treturn @([tuple.rac_sequence any:^(NSNumber *number) {\n\t\t\tNSCAssert([number isKindOfClass:NSNumber.class], @\"-or must only be used on a signal of RACTuples of NSNumbers. Instead, tuple contains a non-NSNumber value: %@\", tuple);\n\n\t\t\treturn number.boolValue;\n\t\t}]);\n\t}] setNameWithFormat:@\"[%@] -or\", self.name];\n}\n\n- (RACSignal *)reduceApply {\n\treturn [[self map:^(RACTuple *tuple) {\n\t\tNSCAssert([tuple isKindOfClass:RACTuple.class], @\"-reduceApply must only be used on a signal of RACTuples. Instead, received: %@\", tuple);\n\t\tNSCAssert(tuple.count > 1, @\"-reduceApply must only be used on a signal of RACTuples, with at least a block in tuple[0] and its first argument in tuple[1]\");\n\n\t\t// We can't use -array, because we need to preserve RACTupleNil\n\t\tNSMutableArray *tupleArray = [NSMutableArray arrayWithCapacity:tuple.count];\n\t\tfor (id val in tuple) {\n\t\t\t[tupleArray addObject:val];\n\t\t}\n\t\tRACTuple *arguments = [RACTuple tupleWithObjectsFromArray:[tupleArray subarrayWithRange:NSMakeRange(1, tupleArray.count - 1)]];\n\n\t\treturn [RACBlockTrampoline invokeBlock:tuple[0] withArguments:arguments];\n\t}] setNameWithFormat:@\"[%@] -reduceApply\", self.name];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignal.h",
    "content": "//\n//  RACSignal.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/1/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"RACStream.h\"\n\n@class RACDisposable;\n@class RACScheduler;\n@class RACSubject;\n@protocol RACSubscriber;\n\n@interface RACSignal : RACStream\n\n/// Creates a new signal. This is the preferred way to create a new signal\n/// operation or behavior.\n///\n/// Events can be sent to new subscribers immediately in the `didSubscribe`\n/// block, but the subscriber will not be able to dispose of the signal until\n/// a RACDisposable is returned from `didSubscribe`. In the case of infinite\n/// signals, this won't _ever_ happen if events are sent immediately.\n///\n/// To ensure that the signal is disposable, events can be scheduled on the\n/// +[RACScheduler currentScheduler] (so that they're deferred, not sent\n/// immediately), or they can be sent in the background. The RACDisposable\n/// returned by the `didSubscribe` block should cancel any such scheduling or\n/// asynchronous work.\n///\n/// didSubscribe - Called when the signal is subscribed to. The new subscriber is\n///                passed in. You can then manually control the <RACSubscriber> by\n///                sending it -sendNext:, -sendError:, and -sendCompleted,\n///                as defined by the operation you're implementing. This block\n///                should return a RACDisposable which cancels any ongoing work\n///                triggered by the subscription, and cleans up any resources or\n///                disposables created as part of it. When the disposable is\n///                disposed of, the signal must not send any more events to the\n///                `subscriber`. If no cleanup is necessary, return nil.\n///\n/// **Note:** The `didSubscribe` block is called every time a new subscriber\n/// subscribes. Any side effects within the block will thus execute once for each\n/// subscription, not necessarily on one thread, and possibly even\n/// simultaneously!\n+ (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe;\n\n/// Returns a signal that immediately sends the given error.\n+ (RACSignal *)error:(NSError *)error;\n\n/// Returns a signal that never completes.\n+ (RACSignal *)never;\n\n/// Immediately schedules the given block on the given scheduler. The block is\n/// given a subscriber to which it can send events.\n///\n/// scheduler - The scheduler on which `block` will be scheduled and results\n///             delivered. Cannot be nil.\n/// block     - The block to invoke. Cannot be NULL.\n///\n/// Returns a signal which will send all events sent on the subscriber given to\n/// `block`. All events will be sent on `scheduler` and it will replay any missed\n/// events to new subscribers.\n+ (RACSignal *)startEagerlyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id<RACSubscriber> subscriber))block;\n\n/// Invokes the given block only on the first subscription. The block is given a\n/// subscriber to which it can send events.\n///\n/// Note that disposing of the subscription to the returned signal will *not*\n/// dispose of the underlying subscription. If you need that behavior, see\n/// -[RACMulticastConnection autoconnect]. The underlying subscription will never\n/// be disposed of. Because of this, `block` should never return an infinite\n/// signal since there would be no way of ending it.\n///\n/// scheduler - The scheduler on which the block should be scheduled. Note that \n///             if given +[RACScheduler immediateScheduler], the block will be\n///             invoked synchronously on the first subscription. Cannot be nil.\n/// block     - The block to invoke on the first subscription. Cannot be NULL.\n///\n/// Returns a signal which will pass through the events sent to the subscriber\n/// given to `block` and replay any missed events to new subscribers.\n+ (RACSignal *)startLazilyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id<RACSubscriber> subscriber))block;\n\n@end\n\n@interface RACSignal (RACStream)\n\n/// Returns a signal that immediately sends the given value and then completes.\n+ (RACSignal *)return:(id)value;\n\n/// Returns a signal that immediately completes.\n+ (RACSignal *)empty;\n\n/// Subscribes to `signal` when the source signal completes.\n- (RACSignal *)concat:(RACSignal *)signal;\n\n/// Zips the values in the receiver with those of the given signal to create\n/// RACTuples.\n///\n/// The first `next` of each stream will be combined, then the second `next`, and\n/// so forth, until either signal completes or errors.\n///\n/// signal - The signal to zip with. This must not be `nil`.\n///\n/// Returns a new signal of RACTuples, representing the combined values of the\n/// two signals. Any error from one of the original signals will be forwarded on\n/// the returned signal.\n- (RACSignal *)zipWith:(RACSignal *)signal;\n\n@end\n\n@interface RACSignal (Subscription)\n\n/// Subscribes `subscriber` to changes on the receiver. The receiver defines which\n/// events it actually sends and in what situations the events are sent.\n///\n/// Subscription will always happen on a valid RACScheduler. If the\n/// +[RACScheduler currentScheduler] cannot be determined at the time of\n/// subscription (e.g., because the calling code is running on a GCD queue or\n/// NSOperationQueue), subscription will occur on a private background scheduler.\n/// On the main thread, subscriptions will always occur immediately, with a\n/// +[RACScheduler currentScheduler] of +[RACScheduler mainThreadScheduler].\n///\n/// This method must be overridden by any subclasses.\n///\n/// Returns nil or a disposable. You can call -[RACDisposable dispose] if you\n/// need to end your subscription before it would \"naturally\" end, either by\n/// completing or erroring. Once the disposable has been disposed, the subscriber\n/// won't receive any more events from the subscription.\n- (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber;\n\n/// Convenience method to subscribe to the `next` event.\n///\n/// This corresponds to `IObserver<T>.OnNext` in Rx.\n- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock;\n\n/// Convenience method to subscribe to the `next` and `completed` events.\n- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock completed:(void (^)(void))completedBlock;\n\n/// Convenience method to subscribe to the `next`, `completed`, and `error` events.\n- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock completed:(void (^)(void))completedBlock;\n\n/// Convenience method to subscribe to `error` events.\n///\n/// This corresponds to the `IObserver<T>.OnError` in Rx.\n- (RACDisposable *)subscribeError:(void (^)(NSError *error))errorBlock;\n\n/// Convenience method to subscribe to `completed` events.\n///\n/// This corresponds to the `IObserver<T>.OnCompleted` in Rx.\n- (RACDisposable *)subscribeCompleted:(void (^)(void))completedBlock;\n\n/// Convenience method to subscribe to `next` and `error` events.\n- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock;\n\n/// Convenience method to subscribe to `error` and `completed` events.\n- (RACDisposable *)subscribeError:(void (^)(NSError *error))errorBlock completed:(void (^)(void))completedBlock;\n\n@end\n\n/// Additional methods to assist with debugging.\n@interface RACSignal (Debugging)\n\n/// Logs all events that the receiver sends.\n- (RACSignal *)logAll;\n\n/// Logs each `next` that the receiver sends.\n- (RACSignal *)logNext;\n\n/// Logs any error that the receiver sends.\n- (RACSignal *)logError;\n\n/// Logs any `completed` event that the receiver sends.\n- (RACSignal *)logCompleted;\n\n@end\n\n/// Additional methods to assist with unit testing.\n///\n/// **These methods should never ship in production code.**\n@interface RACSignal (Testing)\n\n/// Spins the main run loop for a short while, waiting for the receiver to send a `next`.\n///\n/// **Because this method executes the run loop recursively, it should only be used\n/// on the main thread, and only from a unit test.**\n///\n/// defaultValue - Returned if the receiver completes or errors before sending\n///                a `next`, or if the method times out. This argument may be\n///                nil.\n/// success      - If not NULL, set to whether the receiver completed\n///                successfully.\n/// error        - If not NULL, set to any error that occurred.\n///\n/// Returns the first value received, or `defaultValue` if no value is received\n/// before the signal finishes or the method times out.\n- (id)asynchronousFirstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error;\n\n/// Spins the main run loop for a short while, waiting for the receiver to complete.\n///\n/// **Because this method executes the run loop recursively, it should only be used\n/// on the main thread, and only from a unit test.**\n///\n/// error - If not NULL, set to any error that occurs.\n///\n/// Returns whether the signal completed successfully before timing out. If NO,\n/// `error` will be set to any error that occurred.\n- (BOOL)asynchronouslyWaitUntilCompleted:(NSError **)error;\n\n@end\n\n@interface RACSignal (Unavailable)\n\n+ (RACSignal *)start:(id (^)(BOOL *success, NSError **error))block __attribute__((unavailable(\"Use +startEagerlyWithScheduler:block: instead\")));\n+ (RACSignal *)startWithScheduler:(RACScheduler *)scheduler subjectBlock:(void (^)(RACSubject *subject))block __attribute__((unavailable(\"Use +startEagerlyWithScheduler:block: instead\")));\n+ (RACSignal *)startWithScheduler:(RACScheduler *)scheduler block:(id (^)(BOOL *success, NSError **error))block __attribute__((unavailable(\"Use +startEagerlyWithScheduler:block: instead\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignal.m",
    "content": "//\n//  RACSignal.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/15/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSignal.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACDynamicSignal.h\"\n#import \"RACEmptySignal.h\"\n#import \"RACErrorSignal.h\"\n#import \"RACMulticastConnection.h\"\n#import \"RACReplaySubject.h\"\n#import \"RACReturnSignal.h\"\n#import \"RACScheduler.h\"\n#import \"RACSerialDisposable.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACSubject.h\"\n#import \"RACSubscriber+Private.h\"\n#import \"RACTuple.h\"\n\n@implementation RACSignal\n\n#pragma mark Lifecycle\n\n+ (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe {\n\treturn [RACDynamicSignal createSignal:didSubscribe];\n}\n\n+ (RACSignal *)error:(NSError *)error {\n\treturn [RACErrorSignal error:error];\n}\n\n+ (RACSignal *)never {\n\treturn [[self createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\treturn nil;\n\t}] setNameWithFormat:@\"+never\"];\n}\n\n+ (RACSignal *)startEagerlyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id<RACSubscriber> subscriber))block {\n\tNSCParameterAssert(scheduler != nil);\n\tNSCParameterAssert(block != NULL);\n\n\tRACSignal *signal = [self startLazilyWithScheduler:scheduler block:block];\n\t// Subscribe to force the lazy signal to call its block.\n\t[[signal publish] connect];\n\treturn [signal setNameWithFormat:@\"+startEagerlyWithScheduler: %@ block:\", scheduler];\n}\n\n+ (RACSignal *)startLazilyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id<RACSubscriber> subscriber))block {\n\tNSCParameterAssert(scheduler != nil);\n\tNSCParameterAssert(block != NULL);\n\n\tRACMulticastConnection *connection = [[RACSignal\n\t\tcreateSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\tblock(subscriber);\n\t\t\treturn nil;\n\t\t}]\n\t\tmulticast:[RACReplaySubject subject]];\n\t\n\treturn [[[RACSignal\n\t\tcreateSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[connection.signal subscribe:subscriber];\n\t\t\t[connection connect];\n\t\t\treturn nil;\n\t\t}]\n\t\tsubscribeOn:scheduler]\n\t\tsetNameWithFormat:@\"+startLazilyWithScheduler: %@ block:\", scheduler];\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\treturn [NSString stringWithFormat:@\"<%@: %p> name: %@\", self.class, self, self.name];\n}\n\n@end\n\n@implementation RACSignal (RACStream)\n\n+ (RACSignal *)empty {\n\treturn [RACEmptySignal empty];\n}\n\n+ (RACSignal *)return:(id)value {\n\treturn [RACReturnSignal return:value];\n}\n\n- (RACSignal *)bind:(RACStreamBindBlock (^)(void))block {\n\tNSCParameterAssert(block != NULL);\n\n\t/*\n\t * -bind: should:\n\t * \n\t * 1. Subscribe to the original signal of values.\n\t * 2. Any time the original signal sends a value, transform it using the binding block.\n\t * 3. If the binding block returns a signal, subscribe to it, and pass all of its values through to the subscriber as they're received.\n\t * 4. If the binding block asks the bind to terminate, complete the _original_ signal.\n\t * 5. When _all_ signals complete, send completed to the subscriber.\n\t * \n\t * If any signal sends an error at any point, send that to the subscriber.\n\t */\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACStreamBindBlock bindingBlock = block();\n\n\t\tNSMutableArray *signals = [NSMutableArray arrayWithObject:self];\n\n\t\tRACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable];\n\n\t\tvoid (^completeSignal)(RACSignal *, RACDisposable *) = ^(RACSignal *signal, RACDisposable *finishedDisposable) {\n\t\t\tBOOL removeDisposable = NO;\n\n\t\t\t@synchronized (signals) {\n\t\t\t\t[signals removeObject:signal];\n\n\t\t\t\tif (signals.count == 0) {\n\t\t\t\t\t[subscriber sendCompleted];\n\t\t\t\t\t[compoundDisposable dispose];\n\t\t\t\t} else {\n\t\t\t\t\tremoveDisposable = YES;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (removeDisposable) [compoundDisposable removeDisposable:finishedDisposable];\n\t\t};\n\n\t\tvoid (^addSignal)(RACSignal *) = ^(RACSignal *signal) {\n\t\t\t@synchronized (signals) {\n\t\t\t\t[signals addObject:signal];\n\t\t\t}\n\n\t\t\tRACSerialDisposable *selfDisposable = [[RACSerialDisposable alloc] init];\n\t\t\t[compoundDisposable addDisposable:selfDisposable];\n\n\t\t\tRACDisposable *disposable = [signal subscribeNext:^(id x) {\n\t\t\t\t[subscriber sendNext:x];\n\t\t\t} error:^(NSError *error) {\n\t\t\t\t[compoundDisposable dispose];\n\t\t\t\t[subscriber sendError:error];\n\t\t\t} completed:^{\n\t\t\t\t@autoreleasepool {\n\t\t\t\t\tcompleteSignal(signal, selfDisposable);\n\t\t\t\t}\n\t\t\t}];\n\n\t\t\tselfDisposable.disposable = disposable;\n\t\t};\n\n\t\t@autoreleasepool {\n\t\t\tRACSerialDisposable *selfDisposable = [[RACSerialDisposable alloc] init];\n\t\t\t[compoundDisposable addDisposable:selfDisposable];\n\n\t\t\tRACDisposable *bindingDisposable = [self subscribeNext:^(id x) {\n\t\t\t\t// Manually check disposal to handle synchronous errors.\n\t\t\t\tif (compoundDisposable.disposed) return;\n\n\t\t\t\tBOOL stop = NO;\n\t\t\t\tid signal = bindingBlock(x, &stop);\n\n\t\t\t\t@autoreleasepool {\n\t\t\t\t\tif (signal != nil) addSignal(signal);\n\t\t\t\t\tif (signal == nil || stop) {\n\t\t\t\t\t\t[selfDisposable dispose];\n\t\t\t\t\t\tcompleteSignal(self, selfDisposable);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} error:^(NSError *error) {\n\t\t\t\t[compoundDisposable dispose];\n\t\t\t\t[subscriber sendError:error];\n\t\t\t} completed:^{\n\t\t\t\t@autoreleasepool {\n\t\t\t\t\tcompleteSignal(self, selfDisposable);\n\t\t\t\t}\n\t\t\t}];\n\n\t\t\tselfDisposable.disposable = bindingDisposable;\n\t\t}\n\n\t\treturn compoundDisposable;\n\t}] setNameWithFormat:@\"[%@] -bind:\", self.name];\n}\n\n- (RACSignal *)concat:(RACSignal *)signal {\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tRACCompoundDisposable *compoundDisposable = [[RACCompoundDisposable alloc] init];\n\n\t\tRACDisposable *sourceDisposable = [self subscribeNext:^(id x) {\n\t\t\t[subscriber sendNext:x];\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\tRACDisposable *concattedDisposable = [signal subscribe:subscriber];\n\t\t\t[compoundDisposable addDisposable:concattedDisposable];\n\t\t}];\n\n\t\t[compoundDisposable addDisposable:sourceDisposable];\n\t\treturn compoundDisposable;\n\t}] setNameWithFormat:@\"[%@] -concat: %@\", self.name, signal];\n}\n\n- (RACSignal *)zipWith:(RACSignal *)signal {\n\tNSCParameterAssert(signal != nil);\n\n\treturn [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t__block BOOL selfCompleted = NO;\n\t\tNSMutableArray *selfValues = [NSMutableArray array];\n\n\t\t__block BOOL otherCompleted = NO;\n\t\tNSMutableArray *otherValues = [NSMutableArray array];\n\n\t\tvoid (^sendCompletedIfNecessary)(void) = ^{\n\t\t\t@synchronized (selfValues) {\n\t\t\t\tBOOL selfEmpty = (selfCompleted && selfValues.count == 0);\n\t\t\t\tBOOL otherEmpty = (otherCompleted && otherValues.count == 0);\n\t\t\t\tif (selfEmpty || otherEmpty) [subscriber sendCompleted];\n\t\t\t}\n\t\t};\n\n\t\tvoid (^sendNext)(void) = ^{\n\t\t\t@synchronized (selfValues) {\n\t\t\t\tif (selfValues.count == 0) return;\n\t\t\t\tif (otherValues.count == 0) return;\n\n\t\t\t\tRACTuple *tuple = RACTuplePack(selfValues[0], otherValues[0]);\n\t\t\t\t[selfValues removeObjectAtIndex:0];\n\t\t\t\t[otherValues removeObjectAtIndex:0];\n\n\t\t\t\t[subscriber sendNext:tuple];\n\t\t\t\tsendCompletedIfNecessary();\n\t\t\t}\n\t\t};\n\n\t\tRACDisposable *selfDisposable = [self subscribeNext:^(id x) {\n\t\t\t@synchronized (selfValues) {\n\t\t\t\t[selfValues addObject:x ?: RACTupleNil.tupleNil];\n\t\t\t\tsendNext();\n\t\t\t}\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\t@synchronized (selfValues) {\n\t\t\t\tselfCompleted = YES;\n\t\t\t\tsendCompletedIfNecessary();\n\t\t\t}\n\t\t}];\n\n\t\tRACDisposable *otherDisposable = [signal subscribeNext:^(id x) {\n\t\t\t@synchronized (selfValues) {\n\t\t\t\t[otherValues addObject:x ?: RACTupleNil.tupleNil];\n\t\t\t\tsendNext();\n\t\t\t}\n\t\t} error:^(NSError *error) {\n\t\t\t[subscriber sendError:error];\n\t\t} completed:^{\n\t\t\t@synchronized (selfValues) {\n\t\t\t\totherCompleted = YES;\n\t\t\t\tsendCompletedIfNecessary();\n\t\t\t}\n\t\t}];\n\n\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t[selfDisposable dispose];\n\t\t\t[otherDisposable dispose];\n\t\t}];\n\t}] setNameWithFormat:@\"[%@] -zipWith: %@\", self.name, signal];\n}\n\n@end\n\n@implementation RACSignal (Subscription)\n\n- (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber {\n\tNSCAssert(NO, @\"This method must be overridden by subclasses\");\n\treturn nil;\n}\n\n- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock {\n\tNSCParameterAssert(nextBlock != NULL);\n\t\n\tRACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:NULL completed:NULL];\n\treturn [self subscribe:o];\n}\n\n- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock completed:(void (^)(void))completedBlock {\n\tNSCParameterAssert(nextBlock != NULL);\n\tNSCParameterAssert(completedBlock != NULL);\n\t\n\tRACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:NULL completed:completedBlock];\n\treturn [self subscribe:o];\n}\n\n- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock completed:(void (^)(void))completedBlock {\n\tNSCParameterAssert(nextBlock != NULL);\n\tNSCParameterAssert(errorBlock != NULL);\n\tNSCParameterAssert(completedBlock != NULL);\n\t\n\tRACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:errorBlock completed:completedBlock];\n\treturn [self subscribe:o];\n}\n\n- (RACDisposable *)subscribeError:(void (^)(NSError *error))errorBlock {\n\tNSCParameterAssert(errorBlock != NULL);\n\t\n\tRACSubscriber *o = [RACSubscriber subscriberWithNext:NULL error:errorBlock completed:NULL];\n\treturn [self subscribe:o];\n}\n\n- (RACDisposable *)subscribeCompleted:(void (^)(void))completedBlock {\n\tNSCParameterAssert(completedBlock != NULL);\n\t\n\tRACSubscriber *o = [RACSubscriber subscriberWithNext:NULL error:NULL completed:completedBlock];\n\treturn [self subscribe:o];\n}\n\n- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock {\n\tNSCParameterAssert(nextBlock != NULL);\n\tNSCParameterAssert(errorBlock != NULL);\n\t\n\tRACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:errorBlock completed:NULL];\n\treturn [self subscribe:o];\n}\n\n- (RACDisposable *)subscribeError:(void (^)(NSError *))errorBlock completed:(void (^)(void))completedBlock {\n\tNSCParameterAssert(completedBlock != NULL);\n\tNSCParameterAssert(errorBlock != NULL);\n\t\n\tRACSubscriber *o = [RACSubscriber subscriberWithNext:NULL error:errorBlock completed:completedBlock];\n\treturn [self subscribe:o];\n}\n\n@end\n\n@implementation RACSignal (Debugging)\n\n- (RACSignal *)logAll {\n\treturn [[[self logNext] logError] logCompleted];\n}\n\n- (RACSignal *)logNext {\n\treturn [[self doNext:^(id x) {\n\t\tNSLog(@\"%@ next: %@\", self, x);\n\t}] setNameWithFormat:@\"%@\", self.name];\n}\n\n- (RACSignal *)logError {\n\treturn [[self doError:^(NSError *error) {\n\t\tNSLog(@\"%@ error: %@\", self, error);\n\t}] setNameWithFormat:@\"%@\", self.name];\n}\n\n- (RACSignal *)logCompleted {\n\treturn [[self doCompleted:^{\n\t\tNSLog(@\"%@ completed\", self);\n\t}] setNameWithFormat:@\"%@\", self.name];\n}\n\n@end\n\n@implementation RACSignal (Testing)\n\nstatic const NSTimeInterval RACSignalAsynchronousWaitTimeout = 10;\n\n- (id)asynchronousFirstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error {\n\tNSCAssert([NSThread isMainThread], @\"%s should only be used from the main thread\", __func__);\n\n\t__block id result = defaultValue;\n\t__block BOOL done = NO;\n\n\t// Ensures that we don't pass values across thread boundaries by reference.\n\t__block NSError *localError;\n\t__block BOOL localSuccess = YES;\n\n\t[[[[self\n\t\ttake:1]\n\t\ttimeout:RACSignalAsynchronousWaitTimeout onScheduler:[RACScheduler scheduler]]\n\t\tdeliverOn:RACScheduler.mainThreadScheduler]\n\t\tsubscribeNext:^(id x) {\n\t\t\tresult = x;\n\t\t\tdone = YES;\n\t\t} error:^(NSError *e) {\n\t\t\tif (!done) {\n\t\t\t\tlocalSuccess = NO;\n\t\t\t\tlocalError = e;\n\t\t\t\tdone = YES;\n\t\t\t}\n\t\t} completed:^{\n\t\t\tdone = YES;\n\t\t}];\n\t\n\tdo {\n\t\t[NSRunLoop.mainRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];\n\t} while (!done);\n\n\tif (success != NULL) *success = localSuccess;\n\tif (error != NULL) *error = localError;\n\n\treturn result;\n}\n\n- (BOOL)asynchronouslyWaitUntilCompleted:(NSError **)error {\n\tBOOL success = NO;\n\t[[self ignoreValues] asynchronousFirstOrDefault:nil success:&success error:error];\n\treturn success;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignalProvider.d",
    "content": "provider RACSignal {\n    probe next(char *signal, char *subscriber, char *valueDescription);\n    probe completed(char *signal, char *subscriber);\n    probe error(char *signal, char *subscriber, char *errorDescription);\n};\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignalSequence.h",
    "content": "//\n//  RACSignalSequence.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-11-09.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSequence.h\"\n\n@class RACSignal;\n\n// Private class that adapts a RACSignal to the RACSequence interface.\n@interface RACSignalSequence : RACSequence\n\n// Returns a sequence for enumerating over the given signal.\n+ (RACSequence *)sequenceWithSignal:(RACSignal *)signal;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSignalSequence.m",
    "content": "//\n//  RACSignalSequence.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-11-09.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSignalSequence.h\"\n#import \"RACDisposable.h\"\n#import \"RACReplaySubject.h\"\n#import \"RACSignal+Operations.h\"\n\n@interface RACSignalSequence ()\n\n// Replays the signal given on initialization.\n@property (nonatomic, strong, readonly) RACReplaySubject *subject;\n\n@end\n\n@implementation RACSignalSequence\n\n#pragma mark Lifecycle\n\n+ (RACSequence *)sequenceWithSignal:(RACSignal *)signal {\n\tRACSignalSequence *seq = [[self alloc] init];\n\n\tRACReplaySubject *subject = [RACReplaySubject subject];\n\t[signal subscribeNext:^(id value) {\n\t\t[subject sendNext:value];\n\t} error:^(NSError *error) {\n\t\t[subject sendError:error];\n\t} completed:^{\n\t\t[subject sendCompleted];\n\t}];\n\n\tseq->_subject = subject;\n\treturn seq;\n}\n\n#pragma mark RACSequence\n\n- (id)head {\n\tid value = [self.subject firstOrDefault:self];\n\n\tif (value == self) {\n\t\treturn nil;\n\t} else {\n\t\treturn value ?: NSNull.null;\n\t}\n}\n\n- (RACSequence *)tail {\n\tRACSequence *sequence = [self.class sequenceWithSignal:[self.subject skip:1]];\n\tsequence.name = self.name;\n\treturn sequence;\n}\n\n- (NSArray *)array {\n\treturn self.subject.toArray;\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\t// Synchronously accumulate the values that have been sent so far.\n\tNSMutableArray *values = [NSMutableArray array];\n\tRACDisposable *disposable = [self.subject subscribeNext:^(id value) {\n\t\t@synchronized (values) {\n\t\t\t[values addObject:value ?: NSNull.null];\n\t\t}\n\t}];\n\n\t[disposable dispose];\n\n\treturn [NSString stringWithFormat:@\"<%@: %p>{ name = %@, values = %@ … }\", self.class, self, self.name, values];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACStream+Private.h",
    "content": "//\n//  RACStream+Private.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-07-22.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACStream.h\"\n\n@interface RACStream ()\n\n// Combines a list of streams using the logic of the given block.\n//\n// streams - The streams to combine.\n// block   - An operator that combines two streams and returns a new one. The\n//           returned stream should contain 2-tuples of the streams' combined\n//           values.\n//\n// Returns a combined stream.\n+ (instancetype)join:(id<NSFastEnumeration>)streams block:(RACStream * (^)(id, id))block;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACStream.h",
    "content": "//\n//  RACStream.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-31.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACStream;\n\n/// A block which accepts a value from a RACStream and returns a new instance\n/// of the same stream class.\n///\n/// Setting `stop` to `YES` will cause the bind to terminate after the returned\n/// value. Returning `nil` will result in immediate termination.\ntypedef RACStream * (^RACStreamBindBlock)(id value, BOOL *stop);\n\n/// An abstract class representing any stream of values.\n///\n/// This class represents a monad, upon which many stream-based operations can\n/// be built.\n///\n/// When subclassing RACStream, only the methods in the main @interface body need\n/// to be overridden.\n@interface RACStream : NSObject\n\n/// Returns an empty stream.\n+ (instancetype)empty;\n\n/// Lifts `value` into the stream monad.\n///\n/// Returns a stream containing only the given value.\n+ (instancetype)return:(id)value;\n\n/// Lazily binds a block to the values in the receiver.\n///\n/// This should only be used if you need to terminate the bind early, or close\n/// over some state. -flattenMap: is more appropriate for all other cases.\n///\n/// block - A block returning a RACStreamBindBlock. This block will be invoked\n///         each time the bound stream is re-evaluated. This block must not be\n///         nil or return nil.\n///\n/// Returns a new stream which represents the combined result of all lazy\n/// applications of `block`.\n- (instancetype)bind:(RACStreamBindBlock (^)(void))block;\n\n/// Appends the values of `stream` to the values in the receiver.\n///\n/// stream - A stream to concatenate. This must be an instance of the same\n///          concrete class as the receiver, and should not be `nil`.\n///\n/// Returns a new stream representing the receiver followed by `stream`.\n- (instancetype)concat:(RACStream *)stream;\n\n/// Zips the values in the receiver with those of the given stream to create\n/// RACTuples.\n///\n/// The first value of each stream will be combined, then the second value, and\n/// so forth, until at least one of the streams is exhausted.\n///\n/// stream - The stream to zip with. This must be an instance of the same\n///          concrete class as the receiver, and should not be `nil`.\n///\n/// Returns a new stream of RACTuples, representing the zipped values of the\n/// two streams.\n- (instancetype)zipWith:(RACStream *)stream;\n\n@end\n\n/// This extension contains functionality to support naming streams for\n/// debugging.\n///\n/// Subclasses do not need to override the methods here.\n@interface RACStream ()\n\n/// The name of the stream. This is for debugging/human purposes only.\n@property (copy) NSString *name;\n\n/// Sets the name of the receiver to the given format string.\n///\n/// This is for debugging purposes only, and won't do anything unless the\n/// RAC_DEBUG_SIGNAL_NAMES environment variable is set.\n///\n/// Returns the receiver, for easy method chaining.\n- (instancetype)setNameWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2);\n\n@end\n\n/// Operations built on the RACStream primitives.\n///\n/// These methods do not need to be overridden, although subclasses may\n/// occasionally gain better performance from doing so.\n@interface RACStream (Operations)\n\n/// Maps `block` across the values in the receiver and flattens the result.\n///\n/// Note that operators applied _after_ -flattenMap: behave differently from\n/// operators _within_ -flattenMap:. See the Examples section below.\n///\n/// This corresponds to the `SelectMany` method in Rx.\n///\n/// block - A block which accepts the values in the receiver and returns a new\n///         instance of the receiver's class. Returning `nil` from this block is\n///         equivalent to returning an empty signal.\n///\n/// Examples\n///\n///   [signal flattenMap:^(id x) {\n///       // Logs each time a returned signal completes.\n///       return [[RACSignal return:x] logCompleted];\n///   }];\n///\n///   [[signal\n///       flattenMap:^(id x) {\n///           return [RACSignal return:x];\n///       }]\n///       // Logs only once, when all of the signals complete.\n///       logCompleted];\n///\n/// Returns a new stream which represents the combined streams resulting from\n/// mapping `block`.\n- (instancetype)flattenMap:(RACStream * (^)(id value))block;\n\n/// Flattens a stream of streams.\n///\n/// This corresponds to the `Merge` method in Rx.\n///\n/// Returns a stream consisting of the combined streams obtained from the\n/// receiver.\n- (instancetype)flatten;\n\n/// Maps `block` across the values in the receiver.\n///\n/// This corresponds to the `Select` method in Rx.\n///\n/// Returns a new stream with the mapped values.\n- (instancetype)map:(id (^)(id value))block;\n\n/// Replaces each value in the receiver with the given object.\n///\n/// Returns a new stream which includes the given object once for each value in\n/// the receiver.\n- (instancetype)mapReplace:(id)object;\n\n/// Filters out values in the receiver that don't pass the given test.\n///\n/// This corresponds to the `Where` method in Rx.\n///\n/// Returns a new stream with only those values that passed.\n- (instancetype)filter:(BOOL (^)(id value))block;\n\n/// Filters out values in the receiver that equal (via -isEqual:) the provided value.\n///\n/// value - The value can be `nil`, in which case it ignores `nil` values.\n///\n/// Returns a new stream containing only the values which did not compare equal\n/// to `value`.\n- (instancetype)ignore:(id)value;\n\n/// Unpacks each RACTuple in the receiver and maps the values to a new value.\n///\n/// reduceBlock - The block which reduces each RACTuple's values into one value.\n///               It must take as many arguments as the number of tuple elements\n///               to process. Each argument will be an object argument. The\n///               return value must be an object. This argument cannot be nil.\n///\n/// Returns a new stream of reduced tuple values.\n- (instancetype)reduceEach:(id (^)())reduceBlock;\n\n/// Returns a stream consisting of `value`, followed by the values in the\n/// receiver.\n- (instancetype)startWith:(id)value;\n\n/// Skips the first `skipCount` values in the receiver.\n///\n/// Returns the receiver after skipping the first `skipCount` values. If\n/// `skipCount` is greater than the number of values in the stream, an empty\n/// stream is returned.\n- (instancetype)skip:(NSUInteger)skipCount;\n\n/// Returns a stream of the first `count` values in the receiver. If `count` is\n/// greater than or equal to the number of values in the stream, a stream\n/// equivalent to the receiver is returned.\n- (instancetype)take:(NSUInteger)count;\n\n/// Zips the values in the given streams to create RACTuples.\n///\n/// The first value of each stream will be combined, then the second value, and\n/// so forth, until at least one of the streams is exhausted.\n///\n/// streams - The streams to combine. These must all be instances of the same\n///           concrete class implementing the protocol. If this collection is\n///           empty, the returned stream will be empty.\n///\n/// Returns a new stream containing RACTuples of the zipped values from the\n/// streams.\n+ (instancetype)zip:(id<NSFastEnumeration>)streams;\n\n/// Zips streams using +zip:, then reduces the resulting tuples into a single\n/// value using -reduceEach:\n///\n/// streams     - The streams to combine. These must all be instances of the\n///               same concrete class implementing the protocol. If this\n///               collection is empty, the returned stream will be empty.\n/// reduceBlock - The block which reduces the values from all the streams\n///               into one value. It must take as many arguments as the\n///               number of streams given. Each argument will be an object\n///               argument. The return value must be an object. This argument\n///               must not be nil.\n///\n/// Example:\n///\n///   [RACStream zip:@[ stringSignal, intSignal ] reduce:^(NSString *string, NSNumber *number) {\n///       return [NSString stringWithFormat:@\"%@: %@\", string, number];\n///   }];\n///\n/// Returns a new stream containing the results from each invocation of\n/// `reduceBlock`.\n+ (instancetype)zip:(id<NSFastEnumeration>)streams reduce:(id (^)())reduceBlock;\n\n/// Returns a stream obtained by concatenating `streams` in order.\n+ (instancetype)concat:(id<NSFastEnumeration>)streams;\n\n/// Combines values in the receiver from left to right using the given block.\n///\n/// The algorithm proceeds as follows:\n///\n///  1. `startingValue` is passed into the block as the `running` value, and the\n///  first element of the receiver is passed into the block as the `next` value.\n///  2. The result of the invocation is added to the returned stream.\n///  3. The result of the invocation (`running`) and the next element of the\n///  receiver (`next`) is passed into `block`.\n///  4. Steps 2 and 3 are repeated until all values have been processed.\n///\n/// startingValue - The value to be combined with the first element of the\n///                 receiver. This value may be `nil`.\n/// reduceBlock   - The block that describes how to combine values of the\n///                 receiver. If the receiver is empty, this block will never be\n///                 invoked. Cannot be nil.\n///\n/// Examples\n///\n///      RACSequence *numbers = @[ @1, @2, @3, @4 ].rac_sequence;\n///\n///      // Contains 1, 3, 6, 10\n///      RACSequence *sums = [numbers scanWithStart:@0 reduce:^(NSNumber *sum, NSNumber *next) {\n///          return @(sum.integerValue + next.integerValue);\n///      }];\n///\n/// Returns a new stream that consists of each application of `reduceBlock`. If the\n/// receiver is empty, an empty stream is returned.\n- (instancetype)scanWithStart:(id)startingValue reduce:(id (^)(id running, id next))reduceBlock;\n\n/// Combines values in the receiver from left to right using the given block\n/// which also takes zero-based index of the values.\n///\n/// startingValue - The value to be combined with the first element of the\n///                 receiver. This value may be `nil`.\n/// reduceBlock   - The block that describes how to combine values of the\n///                 receiver. This block takes zero-based index value as the last\n///                 parameter. If the receiver is empty, this block will never\n///                 be invoked. Cannot be nil.\n///\n/// Returns a new stream that consists of each application of `reduceBlock`. If the\n/// receiver is empty, an empty stream is returned.\n- (instancetype)scanWithStart:(id)startingValue reduceWithIndex:(id (^)(id running, id next, NSUInteger index))reduceBlock;\n\n/// Combines each previous and current value into one object.\n///\n/// This method is similar to -scanWithStart:reduce:, but only ever operates on\n/// the previous and current values (instead of the whole stream), and does not\n/// pass the return value of `reduceBlock` into the next invocation of it.\n///\n/// start       - The value passed into `reduceBlock` as `previous` for the\n///               first value.\n/// reduceBlock - The block that combines the previous value and the current\n///               value to create the reduced value. Cannot be nil.\n///\n/// Examples\n///\n///      RACSequence *numbers = @[ @1, @2, @3, @4 ].rac_sequence;\n///\n///      // Contains 1, 3, 5, 7\n///      RACSequence *sums = [numbers combinePreviousWithStart:@0 reduce:^(NSNumber *previous, NSNumber *next) {\n///          return @(previous.integerValue + next.integerValue);\n///      }];\n///\n/// Returns a new stream consisting of the return values from each application of\n/// `reduceBlock`.\n- (instancetype)combinePreviousWithStart:(id)start reduce:(id (^)(id previous, id current))reduceBlock;\n\n/// Takes values until the given block returns `YES`.\n///\n/// Returns a stream of the initial values in the receiver that fail `predicate`.\n/// If `predicate` never returns `YES`, a stream equivalent to the receiver is\n/// returned.\n- (instancetype)takeUntilBlock:(BOOL (^)(id x))predicate;\n\n/// Takes values until the given block returns `NO`.\n///\n/// Returns a stream of the initial values in the receiver that pass `predicate`.\n/// If `predicate` never returns `NO`, a stream equivalent to the receiver is\n/// returned.\n- (instancetype)takeWhileBlock:(BOOL (^)(id x))predicate;\n\n/// Skips values until the given block returns `YES`.\n///\n/// Returns a stream containing the values of the receiver that follow any\n/// initial values failing `predicate`. If `predicate` never returns `YES`,\n/// an empty stream is returned.\n- (instancetype)skipUntilBlock:(BOOL (^)(id x))predicate;\n\n/// Skips values until the given block returns `NO`.\n///\n/// Returns a stream containing the values of the receiver that follow any\n/// initial values passing `predicate`. If `predicate` never returns `NO`, an\n/// empty stream is returned.\n- (instancetype)skipWhileBlock:(BOOL (^)(id x))predicate;\n\n/// Returns a stream of values for which -isEqual: returns NO when compared to the\n/// previous value.\n- (instancetype)distinctUntilChanged;\n\n@end\n\n@interface RACStream (Unavailable)\n\n- (instancetype)sequenceMany:(RACStream * (^)(void))block __attribute__((unavailable(\"Use -flattenMap: instead\")));\n- (instancetype)scanWithStart:(id)startingValue combine:(id (^)(id running, id next))block __attribute__((unavailable(\"Renamed to -scanWithStart:reduce:\")));\n- (instancetype)mapPreviousWithStart:(id)start reduce:(id (^)(id previous, id current))combineBlock __attribute__((unavailable(\"Renamed to -combinePreviousWithStart:reduce:\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACStream.m",
    "content": "//\n//  RACStream.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-31.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACStream.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"RACBlockTrampoline.h\"\n#import \"RACTuple.h\"\n\n@implementation RACStream\n\n#pragma mark Lifecycle\n\n- (id)init {\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\tself.name = @\"\";\n\treturn self;\n}\n\n#pragma mark Abstract methods\n\n+ (instancetype)empty {\n\treturn nil;\n}\n\n- (instancetype)bind:(RACStreamBindBlock (^)(void))block {\n\treturn nil;\n}\n\n+ (instancetype)return:(id)value {\n\treturn nil;\n}\n\n- (instancetype)concat:(RACStream *)stream {\n\treturn nil;\n}\n\n- (instancetype)zipWith:(RACStream *)stream {\n\treturn nil;\n}\n\n#pragma mark Naming\n\n- (instancetype)setNameWithFormat:(NSString *)format, ... {\n\tif (getenv(\"RAC_DEBUG_SIGNAL_NAMES\") == NULL) return self;\n\n\tNSCParameterAssert(format != nil);\n\n\tva_list args;\n\tva_start(args, format);\n\n\tNSString *str = [[NSString alloc] initWithFormat:format arguments:args];\n\tva_end(args);\n\n\tself.name = str;\n\treturn self;\n}\n\n@end\n\n@implementation RACStream (Operations)\n\n- (instancetype)flattenMap:(RACStream * (^)(id value))block {\n\tClass class = self.class;\n\n\treturn [[self bind:^{\n\t\treturn ^(id value, BOOL *stop) {\n\t\t\tid stream = block(value) ?: [class empty];\n\t\t\tNSCAssert([stream isKindOfClass:RACStream.class], @\"Value returned from -flattenMap: is not a stream: %@\", stream);\n\n\t\t\treturn stream;\n\t\t};\n\t}] setNameWithFormat:@\"[%@] -flattenMap:\", self.name];\n}\n\n- (instancetype)flatten {\n\t__weak RACStream *stream __attribute__((unused)) = self;\n\treturn [[self flattenMap:^(id value) {\n\t\treturn value;\n\t}] setNameWithFormat:@\"[%@] -flatten\", self.name];\n}\n\n- (instancetype)map:(id (^)(id value))block {\n\tNSCParameterAssert(block != nil);\n\n\tClass class = self.class;\n\t\n\treturn [[self flattenMap:^(id value) {\n\t\treturn [class return:block(value)];\n\t}] setNameWithFormat:@\"[%@] -map:\", self.name];\n}\n\n- (instancetype)mapReplace:(id)object {\n\treturn [[self map:^(id _) {\n\t\treturn object;\n\t}] setNameWithFormat:@\"[%@] -mapReplace: %@\", self.name, RACDescription(object)];\n}\n\n- (instancetype)combinePreviousWithStart:(id)start reduce:(id (^)(id previous, id next))reduceBlock {\n\tNSCParameterAssert(reduceBlock != NULL);\n\treturn [[[self\n\t\tscanWithStart:RACTuplePack(start)\n\t\treduce:^(RACTuple *previousTuple, id next) {\n\t\t\tid value = reduceBlock(previousTuple[0], next);\n\t\t\treturn RACTuplePack(next, value);\n\t\t}]\n\t\tmap:^(RACTuple *tuple) {\n\t\t\treturn tuple[1];\n\t\t}]\n\t\tsetNameWithFormat:@\"[%@] -combinePreviousWithStart: %@ reduce:\", self.name, RACDescription(start)];\n}\n\n- (instancetype)filter:(BOOL (^)(id value))block {\n\tNSCParameterAssert(block != nil);\n\n\tClass class = self.class;\n\t\n\treturn [[self flattenMap:^ id (id value) {\n\t\tif (block(value)) {\n\t\t\treturn [class return:value];\n\t\t} else {\n\t\t\treturn class.empty;\n\t\t}\n\t}] setNameWithFormat:@\"[%@] -filter:\", self.name];\n}\n\n- (instancetype)ignore:(id)value {\n\treturn [[self filter:^ BOOL (id innerValue) {\n\t\treturn innerValue != value && ![innerValue isEqual:value];\n\t}] setNameWithFormat:@\"[%@] -ignore: %@\", self.name, RACDescription(value)];\n}\n\n- (instancetype)reduceEach:(id (^)())reduceBlock {\n\tNSCParameterAssert(reduceBlock != nil);\n\n\t__weak RACStream *stream __attribute__((unused)) = self;\n\treturn [[self map:^(RACTuple *t) {\n\t\tNSCAssert([t isKindOfClass:RACTuple.class], @\"Value from stream %@ is not a tuple: %@\", stream, t);\n\t\treturn [RACBlockTrampoline invokeBlock:reduceBlock withArguments:t];\n\t}] setNameWithFormat:@\"[%@] -reduceEach:\", self.name];\n}\n\n- (instancetype)startWith:(id)value {\n\treturn [[[self.class return:value]\n\t\tconcat:self]\n\t\tsetNameWithFormat:@\"[%@] -startWith: %@\", self.name, RACDescription(value)];\n}\n\n- (instancetype)skip:(NSUInteger)skipCount {\n\tClass class = self.class;\n\t\n\treturn [[self bind:^{\n\t\t__block NSUInteger skipped = 0;\n\n\t\treturn ^(id value, BOOL *stop) {\n\t\t\tif (skipped >= skipCount) return [class return:value];\n\n\t\t\tskipped++;\n\t\t\treturn class.empty;\n\t\t};\n\t}] setNameWithFormat:@\"[%@] -skip: %lu\", self.name, (unsigned long)skipCount];\n}\n\n- (instancetype)take:(NSUInteger)count {\n\tClass class = self.class;\n\t\n\tif (count == 0) return class.empty;\n\n\treturn [[self bind:^{\n\t\t__block NSUInteger taken = 0;\n\n\t\treturn ^ id (id value, BOOL *stop) {\n\t\t\tif (taken < count) {\n\t\t\t\t++taken;\n\t\t\t\tif (taken == count) *stop = YES;\n\t\t\t\treturn [class return:value];\n\t\t\t} else {\n\t\t\t\treturn nil;\n\t\t\t}\n\t\t};\n\t}] setNameWithFormat:@\"[%@] -take: %lu\", self.name, (unsigned long)count];\n}\n\n+ (instancetype)join:(id<NSFastEnumeration>)streams block:(RACStream * (^)(id, id))block {\n\tRACStream *current = nil;\n\n\t// Creates streams of successively larger tuples by combining the input\n\t// streams one-by-one.\n\tfor (RACStream *stream in streams) {\n\t\t// For the first stream, just wrap its values in a RACTuple. That way,\n\t\t// if only one stream is given, the result is still a stream of tuples.\n\t\tif (current == nil) {\n\t\t\tcurrent = [stream map:^(id x) {\n\t\t\t\treturn RACTuplePack(x);\n\t\t\t}];\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tcurrent = block(current, stream);\n\t}\n\n\tif (current == nil) return [self empty];\n\n\treturn [current map:^(RACTuple *xs) {\n\t\t// Right now, each value is contained in its own tuple, sorta like:\n\t\t//\n\t\t// (((1), 2), 3)\n\t\t//\n\t\t// We need to unwrap all the layers and create a tuple out of the result.\n\t\tNSMutableArray *values = [[NSMutableArray alloc] init];\n\n\t\twhile (xs != nil) {\n\t\t\t[values insertObject:xs.last ?: RACTupleNil.tupleNil atIndex:0];\n\t\t\txs = (xs.count > 1 ? xs.first : nil);\n\t\t}\n\n\t\treturn [RACTuple tupleWithObjectsFromArray:values];\n\t}];\n}\n\n+ (instancetype)zip:(id<NSFastEnumeration>)streams {\n\treturn [[self join:streams block:^(RACStream *left, RACStream *right) {\n\t\treturn [left zipWith:right];\n\t}] setNameWithFormat:@\"+zip: %@\", streams];\n}\n\n+ (instancetype)zip:(id<NSFastEnumeration>)streams reduce:(id (^)())reduceBlock {\n\tNSCParameterAssert(reduceBlock != nil);\n\n\tRACStream *result = [self zip:streams];\n\n\t// Although we assert this condition above, older versions of this method\n\t// supported this argument being nil. Avoid crashing Release builds of\n\t// apps that depended on that.\n\tif (reduceBlock != nil) result = [result reduceEach:reduceBlock];\n\n\treturn [result setNameWithFormat:@\"+zip: %@ reduce:\", streams];\n}\n\n+ (instancetype)concat:(id<NSFastEnumeration>)streams {\n\tRACStream *result = self.empty;\n\tfor (RACStream *stream in streams) {\n\t\tresult = [result concat:stream];\n\t}\n\n\treturn [result setNameWithFormat:@\"+concat: %@\", streams];\n}\n\n- (instancetype)scanWithStart:(id)startingValue reduce:(id (^)(id running, id next))reduceBlock {\n\tNSCParameterAssert(reduceBlock != nil);\n\n\treturn [[self\n\t\tscanWithStart:startingValue\n\t\treduceWithIndex:^(id running, id next, NSUInteger index) {\n\t\t\treturn reduceBlock(running, next);\n\t\t}]\n\t\tsetNameWithFormat:@\"[%@] -scanWithStart: %@ reduce:\", self.name, RACDescription(startingValue)];\n}\n\n- (instancetype)scanWithStart:(id)startingValue reduceWithIndex:(id (^)(id, id, NSUInteger))reduceBlock {\n\tNSCParameterAssert(reduceBlock != nil);\n\n\tClass class = self.class;\n\n\treturn [[self bind:^{\n\t\t__block id running = startingValue;\n\t\t__block NSUInteger index = 0;\n\n\t\treturn ^(id value, BOOL *stop) {\n\t\t\trunning = reduceBlock(running, value, index++);\n\t\t\treturn [class return:running];\n\t\t};\n\t}] setNameWithFormat:@\"[%@] -scanWithStart: %@ reduceWithIndex:\", self.name, RACDescription(startingValue)];\n}\n\n- (instancetype)takeUntilBlock:(BOOL (^)(id x))predicate {\n\tNSCParameterAssert(predicate != nil);\n\n\tClass class = self.class;\n\t\n\treturn [[self bind:^{\n\t\treturn ^ id (id value, BOOL *stop) {\n\t\t\tif (predicate(value)) return nil;\n\n\t\t\treturn [class return:value];\n\t\t};\n\t}] setNameWithFormat:@\"[%@] -takeUntilBlock:\", self.name];\n}\n\n- (instancetype)takeWhileBlock:(BOOL (^)(id x))predicate {\n\tNSCParameterAssert(predicate != nil);\n\n\treturn [[self takeUntilBlock:^ BOOL (id x) {\n\t\treturn !predicate(x);\n\t}] setNameWithFormat:@\"[%@] -takeWhileBlock:\", self.name];\n}\n\n- (instancetype)skipUntilBlock:(BOOL (^)(id x))predicate {\n\tNSCParameterAssert(predicate != nil);\n\n\tClass class = self.class;\n\t\n\treturn [[self bind:^{\n\t\t__block BOOL skipping = YES;\n\n\t\treturn ^ id (id value, BOOL *stop) {\n\t\t\tif (skipping) {\n\t\t\t\tif (predicate(value)) {\n\t\t\t\t\tskipping = NO;\n\t\t\t\t} else {\n\t\t\t\t\treturn class.empty;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn [class return:value];\n\t\t};\n\t}] setNameWithFormat:@\"[%@] -skipUntilBlock:\", self.name];\n}\n\n- (instancetype)skipWhileBlock:(BOOL (^)(id x))predicate {\n\tNSCParameterAssert(predicate != nil);\n\n\treturn [[self skipUntilBlock:^ BOOL (id x) {\n\t\treturn !predicate(x);\n\t}] setNameWithFormat:@\"[%@] -skipWhileBlock:\", self.name];\n}\n\n- (instancetype)distinctUntilChanged {\n\tClass class = self.class;\n\n\treturn [[self bind:^{\n\t\t__block id lastValue = nil;\n\t\t__block BOOL initial = YES;\n\n\t\treturn ^(id x, BOOL *stop) {\n\t\t\tif (!initial && (lastValue == x || [x isEqual:lastValue])) return [class empty];\n\n\t\t\tinitial = NO;\n\t\t\tlastValue = x;\n\t\t\treturn [class return:x];\n\t\t};\n\t}] setNameWithFormat:@\"[%@] -distinctUntilChanged\", self.name];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACStringSequence.h",
    "content": "//\n//  RACStringSequence.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"RACSequence.h\"\n\n// Private class that adapts a string to the RACSequence interface.\n@interface RACStringSequence : RACSequence\n\n// Returns a sequence for enumerating over the given string, starting from the\n// given character offset. The string will be copied to prevent mutation.\n+ (RACSequence *)sequenceWithString:(NSString *)string offset:(NSUInteger)offset;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACStringSequence.m",
    "content": "//\n//  RACStringSequence.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-10-29.\n//  Copyright (c) 2012 GitHub. All rights reserved.\n//\n\n#import \"RACStringSequence.h\"\n\n@interface RACStringSequence ()\n\n// The string being sequenced.\n@property (nonatomic, copy, readonly) NSString *string;\n\n// The index in the string from which the sequence starts.\n@property (nonatomic, assign, readonly) NSUInteger offset;\n\n@end\n\n@implementation RACStringSequence\n\n#pragma mark Lifecycle\n\n+ (RACSequence *)sequenceWithString:(NSString *)string offset:(NSUInteger)offset {\n\tNSCParameterAssert(offset <= string.length);\n\n\tif (offset == string.length) return self.empty;\n\n\tRACStringSequence *seq = [[self alloc] init];\n\tseq->_string = [string copy];\n\tseq->_offset = offset;\n\treturn seq;\n}\n\n#pragma mark RACSequence\n\n- (id)head {\n\treturn [self.string substringWithRange:NSMakeRange(self.offset, 1)];\n}\n\n- (RACSequence *)tail {\n\tRACSequence *sequence = [self.class sequenceWithString:self.string offset:self.offset + 1];\n\tsequence.name = self.name;\n\treturn sequence;\n}\n\n- (NSArray *)array {\n\tNSUInteger substringLength = self.string.length - self.offset;\n\tNSMutableArray *array = [NSMutableArray arrayWithCapacity:substringLength];\n\n\t[self.string enumerateSubstringsInRange:NSMakeRange(self.offset, substringLength) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {\n\t\t[array addObject:substring];\n\t}];\n\n\treturn [array copy];\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\treturn [NSString stringWithFormat:@\"<%@: %p>{ name = %@, string = %@ }\", self.class, self, self.name, [self.string substringFromIndex:self.offset]];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubject.h",
    "content": "//\n//  RACSubject.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/9/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSignal.h\"\n#import \"RACSubscriber.h\"\n\n/// A subject can be thought of as a signal that you can manually control by\n/// sending next, completed, and error.\n///\n/// They're most helpful in bridging the non-RAC world to RAC, since they let you\n/// manually control the sending of events.\n@interface RACSubject : RACSignal <RACSubscriber>\n\n/// Returns a new subject.\n+ (instancetype)subject;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubject.m",
    "content": "//\n//  RACSubject.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/9/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSubject.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"RACCompoundDisposable.h\"\n#import \"RACPassthroughSubscriber.h\"\n\n@interface RACSubject ()\n\n// Contains all current subscribers to the receiver.\n//\n// This should only be used while synchronized on `self`.\n@property (nonatomic, strong, readonly) NSMutableArray *subscribers;\n\n// Contains all of the receiver's subscriptions to other signals.\n@property (nonatomic, strong, readonly) RACCompoundDisposable *disposable;\n\n// Enumerates over each of the receiver's `subscribers` and invokes `block` for\n// each.\n- (void)enumerateSubscribersUsingBlock:(void (^)(id<RACSubscriber> subscriber))block;\n\n@end\n\n@implementation RACSubject\n\n#pragma mark Lifecycle\n\n+ (instancetype)subject {\n\treturn [[self alloc] init];\n}\n\n- (id)init {\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_disposable = [RACCompoundDisposable compoundDisposable];\n\t_subscribers = [[NSMutableArray alloc] initWithCapacity:1];\n\t\n\treturn self;\n}\n\n- (void)dealloc {\n\t[self.disposable dispose];\n}\n\n#pragma mark Subscription\n\n- (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber {\n\tNSCParameterAssert(subscriber != nil);\n\n\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];\n\tsubscriber = [[RACPassthroughSubscriber alloc] initWithSubscriber:subscriber signal:self disposable:disposable];\n\n\tNSMutableArray *subscribers = self.subscribers;\n\t@synchronized (subscribers) {\n\t\t[subscribers addObject:subscriber];\n\t}\n\t\n\treturn [RACDisposable disposableWithBlock:^{\n\t\t@synchronized (subscribers) {\n\t\t\t// Since newer subscribers are generally shorter-lived, search\n\t\t\t// starting from the end of the list.\n\t\t\tNSUInteger index = [subscribers indexOfObjectWithOptions:NSEnumerationReverse passingTest:^ BOOL (id<RACSubscriber> obj, NSUInteger index, BOOL *stop) {\n\t\t\t\treturn obj == subscriber;\n\t\t\t}];\n\n\t\t\tif (index != NSNotFound) [subscribers removeObjectAtIndex:index];\n\t\t}\n\t}];\n}\n\n- (void)enumerateSubscribersUsingBlock:(void (^)(id<RACSubscriber> subscriber))block {\n\tNSArray *subscribers;\n\t@synchronized (self.subscribers) {\n\t\tsubscribers = [self.subscribers copy];\n\t}\n\n\tfor (id<RACSubscriber> subscriber in subscribers) {\n\t\tblock(subscriber);\n\t}\n}\n\n#pragma mark RACSubscriber\n\n- (void)sendNext:(id)value {\n\t[self enumerateSubscribersUsingBlock:^(id<RACSubscriber> subscriber) {\n\t\t[subscriber sendNext:value];\n\t}];\n}\n\n- (void)sendError:(NSError *)error {\n\t[self.disposable dispose];\n\t\n\t[self enumerateSubscribersUsingBlock:^(id<RACSubscriber> subscriber) {\n\t\t[subscriber sendError:error];\n\t}];\n}\n\n- (void)sendCompleted {\n\t[self.disposable dispose];\n\t\n\t[self enumerateSubscribersUsingBlock:^(id<RACSubscriber> subscriber) {\n\t\t[subscriber sendCompleted];\n\t}];\n}\n\n- (void)didSubscribeWithDisposable:(RACCompoundDisposable *)d {\n\tif (d.disposed) return;\n\t[self.disposable addDisposable:d];\n\n\t@weakify(self, d);\n\t[d addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t@strongify(self, d);\n\t\t[self.disposable removeDisposable:d];\n\t}]];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriber+Private.h",
    "content": "//\n//  RACSubscriber+Private.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-06-13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSubscriber.h\"\n\n// A simple block-based subscriber.\n@interface RACSubscriber : NSObject <RACSubscriber>\n\n// Creates a new subscriber with the given blocks.\n+ (instancetype)subscriberWithNext:(void (^)(id x))next error:(void (^)(NSError *error))error completed:(void (^)(void))completed;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriber.h",
    "content": "//\n//  RACSubscriber.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/1/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class RACCompoundDisposable;\n\n/// Represents any object which can directly receive values from a RACSignal.\n///\n/// You generally shouldn't need to implement this protocol. +[RACSignal\n/// createSignal:], RACSignal's subscription methods, or RACSubject should work\n/// for most uses.\n///\n/// Implementors of this protocol may receive messages and values from multiple\n/// threads simultaneously, and so should be thread-safe. Subscribers will also\n/// be weakly referenced so implementations must allow that.\n@protocol RACSubscriber <NSObject>\n@required\n\n/// Sends the next value to subscribers.\n///\n/// value - The value to send. This can be `nil`.\n- (void)sendNext:(id)value;\n\n/// Sends the error to subscribers.\n///\n/// error - The error to send. This can be `nil`.\n///\n/// This terminates the subscription, and invalidates the subscriber (such that\n/// it cannot subscribe to anything else in the future).\n- (void)sendError:(NSError *)error;\n\n/// Sends completed to subscribers.\n///\n/// This terminates the subscription, and invalidates the subscriber (such that\n/// it cannot subscribe to anything else in the future).\n- (void)sendCompleted;\n\n/// Sends the subscriber a disposable that represents one of its subscriptions.\n///\n/// A subscriber may receive multiple disposables if it gets subscribed to\n/// multiple signals; however, any error or completed events must terminate _all_\n/// subscriptions.\n- (void)didSubscribeWithDisposable:(RACCompoundDisposable *)disposable;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriber.m",
    "content": "//\n//  RACSubscriber.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/1/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSubscriber.h\"\n#import \"RACSubscriber+Private.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"RACCompoundDisposable.h\"\n\n@interface RACSubscriber ()\n\n// These callbacks should only be accessed while synchronized on self.\n@property (nonatomic, copy) void (^next)(id value);\n@property (nonatomic, copy) void (^error)(NSError *error);\n@property (nonatomic, copy) void (^completed)(void);\n\n@property (nonatomic, strong, readonly) RACCompoundDisposable *disposable;\n\n@end\n\n@implementation RACSubscriber\n\n#pragma mark Lifecycle\n\n+ (instancetype)subscriberWithNext:(void (^)(id x))next error:(void (^)(NSError *error))error completed:(void (^)(void))completed {\n\tRACSubscriber *subscriber = [[self alloc] init];\n\n\tsubscriber->_next = [next copy];\n\tsubscriber->_error = [error copy];\n\tsubscriber->_completed = [completed copy];\n\n\treturn subscriber;\n}\n\n- (id)init {\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t@unsafeify(self);\n\n\tRACDisposable *selfDisposable = [RACDisposable disposableWithBlock:^{\n\t\t@strongify(self);\n\n\t\t@synchronized (self) {\n\t\t\tself.next = nil;\n\t\t\tself.error = nil;\n\t\t\tself.completed = nil;\n\t\t}\n\t}];\n\n\t_disposable = [RACCompoundDisposable compoundDisposable];\n\t[_disposable addDisposable:selfDisposable];\n\n\treturn self;\n}\n\n- (void)dealloc {\n\t[self.disposable dispose];\n}\n\n#pragma mark RACSubscriber\n\n- (void)sendNext:(id)value {\n\t@synchronized (self) {\n\t\tvoid (^nextBlock)(id) = [self.next copy];\n\t\tif (nextBlock == nil) return;\n\n\t\tnextBlock(value);\n\t}\n}\n\n- (void)sendError:(NSError *)e {\n\t@synchronized (self) {\n\t\tvoid (^errorBlock)(NSError *) = [self.error copy];\n\t\t[self.disposable dispose];\n\n\t\tif (errorBlock == nil) return;\n\t\terrorBlock(e);\n\t}\n}\n\n- (void)sendCompleted {\n\t@synchronized (self) {\n\t\tvoid (^completedBlock)(void) = [self.completed copy];\n\t\t[self.disposable dispose];\n\n\t\tif (completedBlock == nil) return;\n\t\tcompletedBlock();\n\t}\n}\n\n- (void)didSubscribeWithDisposable:(RACCompoundDisposable *)otherDisposable {\n\tif (otherDisposable.disposed) return;\n\n\tRACCompoundDisposable *selfDisposable = self.disposable;\n\t[selfDisposable addDisposable:otherDisposable];\n\n\t@unsafeify(otherDisposable);\n\n\t// If this subscription terminates, purge its disposable to avoid unbounded\n\t// memory growth.\n\t[otherDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t@strongify(otherDisposable);\n\t\t[selfDisposable removeDisposable:otherDisposable];\n\t}]];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriptingAssignmentTrampoline.h",
    "content": "//\n//  RACSubscriptingAssignmentTrampoline.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 9/24/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n\n@class RACSignal;\n\n/// Assigns a signal to an object property, automatically setting the given key\n/// path on every `next`. When the signal completes, the binding is automatically\n/// disposed of.\n///\n/// There are two different versions of this macro:\n///\n///  - RAC(TARGET, KEYPATH, NILVALUE) will bind the `KEYPATH` of `TARGET` to the\n///    given signal. If the signal ever sends a `nil` value, the property will be\n///    set to `NILVALUE` instead. `NILVALUE` may itself be `nil` for object\n///    properties, but an NSValue should be used for primitive properties, to\n///    avoid an exception if `nil` is sent (which might occur if an intermediate\n///    object is set to `nil`).\n///  - RAC(TARGET, KEYPATH) is the same as the above, but `NILVALUE` defaults to\n///    `nil`.\n///\n/// See -[RACSignal setKeyPath:onObject:nilValue:] for more information about the\n/// binding's semantics.\n///\n/// Examples\n///\n///  RAC(self, objectProperty) = objectSignal;\n///  RAC(self, stringProperty, @\"foobar\") = stringSignal;\n///  RAC(self, integerProperty, @42) = integerSignal;\n///\n/// WARNING: Under certain conditions, use of this macro can be thread-unsafe.\n///          See the documentation of -setKeyPath:onObject:nilValue:.\n#define RAC(TARGET, ...) \\\n    metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \\\n        (RAC_(TARGET, __VA_ARGS__, nil)) \\\n        (RAC_(TARGET, __VA_ARGS__))\n\n/// Do not use this directly. Use the RAC macro above.\n#define RAC_(TARGET, KEYPATH, NILVALUE) \\\n    [[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:(TARGET) nilValue:(NILVALUE)][@keypath(TARGET, KEYPATH)]\n\n@interface RACSubscriptingAssignmentTrampoline : NSObject\n\n- (id)initWithTarget:(id)target nilValue:(id)nilValue;\n- (void)setObject:(RACSignal *)signal forKeyedSubscript:(NSString *)keyPath;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriptingAssignmentTrampoline.m",
    "content": "//\n//  RACSubscriptingAssignmentTrampoline.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 9/24/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSubscriptingAssignmentTrampoline.h\"\n#import \"RACSignal+Operations.h\"\n\n@interface RACSubscriptingAssignmentTrampoline ()\n\n// The object to bind to.\n@property (nonatomic, strong, readonly) id target;\n\n// A value to use when `nil` is sent on the bound signal.\n@property (nonatomic, strong, readonly) id nilValue;\n\n@end\n\n@implementation RACSubscriptingAssignmentTrampoline\n\n- (id)initWithTarget:(id)target nilValue:(id)nilValue {\n\t// This is often a programmer error, but this prevents crashes if the target\n\t// object has unexpectedly deallocated.\n\tif (target == nil) return nil;\n\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_target = target;\n\t_nilValue = nilValue;\n\n\treturn self;\n}\n\n- (void)setObject:(RACSignal *)signal forKeyedSubscript:(NSString *)keyPath {\n\t[signal setKeyPath:keyPath onObject:self.target nilValue:self.nilValue];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriptionScheduler.h",
    "content": "//\n//  RACSubscriptionScheduler.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/30/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACScheduler.h\"\n\n// A private scheduler used only for subscriptions. See the private\n// +[RACScheduler subscriptionScheduler] method for more information.\n@interface RACSubscriptionScheduler : RACScheduler\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACSubscriptionScheduler.m",
    "content": "//\n//  RACSubscriptionScheduler.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/30/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSubscriptionScheduler.h\"\n#import \"RACScheduler+Private.h\"\n\n@interface RACSubscriptionScheduler ()\n\n// A private background scheduler on which to subscribe if the +currentScheduler\n// is unknown.\n@property (nonatomic, strong, readonly) RACScheduler *backgroundScheduler;\n\n@end\n\n@implementation RACSubscriptionScheduler\n\n#pragma mark Lifecycle\n\n- (id)init {\n\tself = [super initWithName:@\"com.ReactiveCocoa.RACScheduler.subscriptionScheduler\"];\n\tif (self == nil) return nil;\n\n\t_backgroundScheduler = [RACScheduler scheduler];\n\n\treturn self;\n}\n\n#pragma mark RACScheduler\n\n- (RACDisposable *)schedule:(void (^)(void))block {\n\tNSCParameterAssert(block != NULL);\n\n\tif (RACScheduler.currentScheduler == nil) return [self.backgroundScheduler schedule:block];\n\n\tblock();\n\treturn nil;\n}\n\n- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block {\n\tRACScheduler *scheduler = RACScheduler.currentScheduler ?: self.backgroundScheduler;\n\treturn [scheduler after:date schedule:block];\n}\n\n- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block {\n\tRACScheduler *scheduler = RACScheduler.currentScheduler ?: self.backgroundScheduler;\n\treturn [scheduler after:date repeatingEvery:interval withLeeway:leeway schedule:block];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTargetQueueScheduler.h",
    "content": "//\n//  RACTargetQueueScheduler.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 6/6/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACQueueScheduler.h\"\n\n/// A scheduler that enqueues blocks on a private serial queue, targeting an\n/// arbitrary GCD queue.\n@interface RACTargetQueueScheduler : RACQueueScheduler\n\n/// Initializes the receiver with a serial queue that will target the given\n/// `targetQueue`.\n///\n/// name        - The name of the scheduler. If nil, a default name will be used.\n/// targetQueue - The queue to target. Cannot be NULL.\n///\n/// Returns the initialized object.\n- (id)initWithName:(NSString *)name targetQueue:(dispatch_queue_t)targetQueue;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTargetQueueScheduler.m",
    "content": "//\n//  RACTargetQueueScheduler.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 6/6/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACTargetQueueScheduler.h\"\n#import \"RACQueueScheduler+Subclass.h\"\n\n@implementation RACTargetQueueScheduler\n\n#pragma mark Lifecycle\n\n- (id)initWithName:(NSString *)name targetQueue:(dispatch_queue_t)targetQueue {\n\tNSCParameterAssert(targetQueue != NULL);\n\n\tif (name == nil) {\n\t\tname = [NSString stringWithFormat:@\"com.ReactiveCocoa.RACTargetQueueScheduler(%s)\", dispatch_queue_get_label(targetQueue)];\n\t}\n\n\tdispatch_queue_t queue = dispatch_queue_create(name.UTF8String, DISPATCH_QUEUE_SERIAL);\n\tif (queue == NULL) return nil;\n\n\tdispatch_set_target_queue(queue, targetQueue);\n\n\treturn [super initWithName:name queue:queue];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTestScheduler.h",
    "content": "//\n//  RACTestScheduler.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-07-06.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACScheduler.h\"\n\n/// A special kind of scheduler that steps through virtualized time.\n///\n/// This scheduler class can be used in unit tests to verify asynchronous\n/// behaviors without spending significant time waiting.\n///\n/// This class can be used from multiple threads, but only one thread can `step`\n/// through the enqueued actions at a time. Other threads will wait while the\n/// scheduled blocks are being executed.\n@interface RACTestScheduler : RACScheduler\n\n/// Initializes a new test scheduler.\n- (instancetype)init;\n\n/// Executes the next scheduled block, if any.\n///\n/// This method will block until the scheduled action has completed.\n- (void)step;\n\n/// Executes up to the next `ticks` scheduled blocks.\n///\n/// This method will block until the scheduled actions have completed.\n///\n/// ticks - The number of scheduled blocks to execute. If there aren't this many\n///         blocks enqueued, all scheduled blocks are executed.\n- (void)step:(NSUInteger)ticks;\n\n/// Executes all of the scheduled blocks on the receiver.\n///\n/// This method will block until the scheduled actions have completed.\n- (void)stepAll;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTestScheduler.m",
    "content": "//\n//  RACTestScheduler.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-07-06.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACTestScheduler.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACScheduler+Private.h\"\n\n@interface RACTestSchedulerAction : NSObject\n\n// The date at which the action should be executed.\n//\n// This absolute time will not actually be honored. This date is only used for\n// comparison, to determine which block should be run _next_.\n@property (nonatomic, copy, readonly) NSDate *date;\n\n// The scheduled block.\n@property (nonatomic, copy, readonly) void (^block)(void);\n\n// A disposable for this action.\n//\n// When disposed, the action should not start executing if it hasn't already.\n@property (nonatomic, strong, readonly) RACDisposable *disposable;\n\n// Initializes a new scheduler action.\n- (id)initWithDate:(NSDate *)date block:(void (^)(void))block;\n\n@end\n\nstatic CFComparisonResult RACCompareScheduledActions(const void *ptr1, const void *ptr2, void *info) {\n\tRACTestSchedulerAction *action1 = (__bridge id)ptr1;\n\tRACTestSchedulerAction *action2 = (__bridge id)ptr2;\n\treturn CFDateCompare((__bridge CFDateRef)action1.date, (__bridge CFDateRef)action2.date, NULL);\n}\n\nstatic const void *RACRetainScheduledAction(CFAllocatorRef allocator, const void *ptr) {\n\treturn CFRetain(ptr);\n}\n\nstatic void RACReleaseScheduledAction(CFAllocatorRef allocator, const void *ptr) {\n\tCFRelease(ptr);\n}\n\n@interface RACTestScheduler ()\n\n// All of the RACTestSchedulerActions that have been enqueued and not yet\n// executed.\n//\n// The minimum value in the heap represents the action to execute next.\n//\n// This property should only be used while synchronized on self.\n@property (nonatomic, assign, readonly) CFBinaryHeapRef scheduledActions;\n\n// The number of blocks that have been directly enqueued with -schedule: so\n// far.\n//\n// This is used to ensure unique dates when two blocks are enqueued\n// simultaneously.\n//\n// This property should only be used while synchronized on self.\n@property (nonatomic, assign) NSUInteger numberOfDirectlyScheduledBlocks;\n\n@end\n\n@implementation RACTestScheduler\n\n#pragma mark Lifecycle\n\n- (instancetype)init {\n\tself = [super initWithName:@\"org.reactivecocoa.ReactiveCocoa.RACTestScheduler\"];\n\tif (self == nil) return nil;\n\n\tCFBinaryHeapCallBacks callbacks = (CFBinaryHeapCallBacks){\n\t\t.version = 0,\n\t\t.retain = &RACRetainScheduledAction,\n\t\t.release = &RACReleaseScheduledAction,\n\t\t.copyDescription = &CFCopyDescription,\n\t\t.compare = &RACCompareScheduledActions\n\t};\n\n\t_scheduledActions = CFBinaryHeapCreate(NULL, 0, &callbacks, NULL);\n\treturn self;\n}\n\n- (void)dealloc {\n\t[self stepAll];\n\n\tif (_scheduledActions != NULL) {\n\t\tCFBridgingRelease(_scheduledActions);\n\t\t_scheduledActions = NULL;\n\t}\n}\n\n#pragma mark Execution\n\n- (void)step {\n\t[self step:1];\n}\n\n- (void)step:(NSUInteger)ticks {\n\t@synchronized (self) {\n\t\tfor (NSUInteger i = 0; i < ticks; i++) {\n\t\t\tconst void *actionPtr = NULL;\n\t\t\tif (!CFBinaryHeapGetMinimumIfPresent(self.scheduledActions, &actionPtr)) break;\n\n\t\t\tRACTestSchedulerAction *action = (__bridge id)actionPtr;\n\t\t\tCFBinaryHeapRemoveMinimumValue(self.scheduledActions);\n\n\t\t\tif (action.disposable.disposed) continue;\n\n\t\t\tRACScheduler *previousScheduler = RACScheduler.currentScheduler;\n\t\t\tNSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = self;\n\n\t\t\taction.block();\n\n\t\t\tif (previousScheduler != nil) {\n\t\t\t\tNSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = previousScheduler;\n\t\t\t} else {\n\t\t\t\t[NSThread.currentThread.threadDictionary removeObjectForKey:RACSchedulerCurrentSchedulerKey];\n\t\t\t}\n\t\t}\n\t}\n}\n\n- (void)stepAll {\n\t[self step:NSUIntegerMax];\n}\n\n#pragma mark RACScheduler\n\n- (RACDisposable *)schedule:(void (^)(void))block {\n\tNSCParameterAssert(block != nil);\n\n\t@synchronized (self) {\n\t\tNSDate *uniqueDate = [NSDate dateWithTimeIntervalSinceReferenceDate:self.numberOfDirectlyScheduledBlocks];\n\t\tself.numberOfDirectlyScheduledBlocks++;\n\n\t\tRACTestSchedulerAction *action = [[RACTestSchedulerAction alloc] initWithDate:uniqueDate block:block];\n\t\tCFBinaryHeapAddValue(self.scheduledActions, (__bridge void *)action);\n\n\t\treturn action.disposable;\n\t}\n}\n\n- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block {\n\tNSCParameterAssert(date != nil);\n\tNSCParameterAssert(block != nil);\n\n\t@synchronized (self) {\n\t\tRACTestSchedulerAction *action = [[RACTestSchedulerAction alloc] initWithDate:date block:block];\n\t\tCFBinaryHeapAddValue(self.scheduledActions, (__bridge void *)action);\n\n\t\treturn action.disposable;\n\t}\n}\n\n- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block {\n\tNSCParameterAssert(date != nil);\n\tNSCParameterAssert(block != nil);\n\tNSCParameterAssert(interval >= 0);\n\tNSCParameterAssert(leeway >= 0);\n\n\tRACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable];\n\n\t@weakify(self);\n\t@synchronized (self) {\n\t\t__block RACDisposable *thisDisposable = nil;\n\n\t\tvoid (^reschedulingBlock)(void) = ^{\n\t\t\t@strongify(self);\n\n\t\t\t[compoundDisposable removeDisposable:thisDisposable];\n\n\t\t\t// Schedule the next interval.\n\t\t\tRACDisposable *schedulingDisposable = [self after:[date dateByAddingTimeInterval:interval] repeatingEvery:interval withLeeway:leeway schedule:block];\n\t\t\t[compoundDisposable addDisposable:schedulingDisposable];\n\n\t\t\tblock();\n\t\t};\n\n\t\tRACTestSchedulerAction *action = [[RACTestSchedulerAction alloc] initWithDate:date block:reschedulingBlock];\n\t\tCFBinaryHeapAddValue(self.scheduledActions, (__bridge void *)action);\n\n\t\tthisDisposable = action.disposable;\n\t\t[compoundDisposable addDisposable:thisDisposable];\n\t}\n\n\treturn compoundDisposable;\n}\n\n@end\n\n@implementation RACTestSchedulerAction\n\n#pragma mark Lifecycle\n\n- (id)initWithDate:(NSDate *)date block:(void (^)(void))block {\n\tNSCParameterAssert(date != nil);\n\tNSCParameterAssert(block != nil);\n\n\tself = [super init];\n\tif (self == nil) return nil;\n\n\t_date = [date copy];\n\t_block = [block copy];\n\t_disposable = [[RACDisposable alloc] init];\n\n\treturn self;\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\treturn [NSString stringWithFormat:@\"<%@: %p>{ date: %@ }\", self.class, self, self.date];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTuple.h",
    "content": "//\n//  RACTuple.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/12/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"metamacros.h\"\n\n@class RACSequence;\n\n/// Creates a new tuple with the given values. At least one value must be given.\n/// Values can be nil.\n#define RACTuplePack(...) \\\n    RACTuplePack_(__VA_ARGS__)\n\n/// Declares new object variables and unpacks a RACTuple into them.\n///\n/// This macro should be used on the left side of an assignment, with the\n/// tuple on the right side. Nothing else should appear on the same line, and the\n/// macro should not be the only statement in a conditional or loop body.\n///\n/// If the tuple has more values than there are variables listed, the excess\n/// values are ignored.\n///\n/// If the tuple has fewer values than there are variables listed, the excess\n/// variables are initialized to nil.\n///\n/// Examples\n///\n///   RACTupleUnpack(NSString *string, NSNumber *num) = [RACTuple tupleWithObjects:@\"foo\", @5, nil];\n///   NSLog(@\"string: %@\", string);\n///   NSLog(@\"num: %@\", num);\n///\n///   /* The above is equivalent to: */\n///   RACTuple *t = [RACTuple tupleWithObjects:@\"foo\", @5, nil];\n///   NSString *string = t[0];\n///   NSNumber *num = t[1];\n///   NSLog(@\"string: %@\", string);\n///   NSLog(@\"num: %@\", num);\n#define RACTupleUnpack(...) \\\n        RACTupleUnpack_(__VA_ARGS__)\n\n/// A sentinel object that represents nils in the tuple.\n///\n/// It should never be necessary to create a tuple nil yourself. Just use\n/// +tupleNil.\n@interface RACTupleNil : NSObject <NSCopying, NSCoding>\n/// A singleton instance.\n+ (RACTupleNil *)tupleNil;\n@end\n\n\n/// A tuple is an ordered collection of objects. It may contain nils, represented\n/// by RACTupleNil.\n@interface RACTuple : NSObject <NSCoding, NSCopying, NSFastEnumeration>\n\n@property (nonatomic, readonly) NSUInteger count;\n\n/// These properties all return the object at that index or nil if the number of \n/// objects is less than the index.\n@property (nonatomic, readonly) id first;\n@property (nonatomic, readonly) id second;\n@property (nonatomic, readonly) id third;\n@property (nonatomic, readonly) id fourth;\n@property (nonatomic, readonly) id fifth;\n@property (nonatomic, readonly) id last;\n\n/// Creates a new tuple out of the array. Does not convert nulls to nils.\n+ (instancetype)tupleWithObjectsFromArray:(NSArray *)array;\n\n/// Creates a new tuple out of the array. If `convert` is YES, it also converts\n/// every NSNull to RACTupleNil.\n+ (instancetype)tupleWithObjectsFromArray:(NSArray *)array convertNullsToNils:(BOOL)convert;\n\n/// Creates a new tuple with the given objects. Use RACTupleNil to represent\n/// nils.\n+ (instancetype)tupleWithObjects:(id)object, ... NS_REQUIRES_NIL_TERMINATION;\n\n/// Returns the object at `index` or nil if the object is a RACTupleNil. Unlike\n/// NSArray and friends, it's perfectly fine to ask for the object at an index\n/// past the tuple's count - 1. It will simply return nil.\n- (id)objectAtIndex:(NSUInteger)index;\n\n/// Returns an array of all the objects. RACTupleNils are converted to NSNulls.\n- (NSArray *)allObjects;\n\n/// Appends `obj` to the receiver.\n///\n/// obj - The object to add to the tuple. This argument may be nil.\n///\n/// Returns a new tuple.\n- (instancetype)tupleByAddingObject:(id)obj;\n\n@end\n\n@interface RACTuple (RACSequenceAdditions)\n\n/// Returns a sequence of all the objects. RACTupleNils are converted to NSNulls.\n@property (nonatomic, copy, readonly) RACSequence *rac_sequence;\n\n@end\n\n@interface RACTuple (ObjectSubscripting)\n/// Returns the object at that index or nil if the number of objects is less\n/// than the index.\n- (id)objectAtIndexedSubscript:(NSUInteger)idx; \n@end\n\n/// This and everything below is for internal use only.\n///\n/// See RACTuplePack() and RACTupleUnpack() instead.\n#define RACTuplePack_(...) \\\n    ([RACTuple tupleWithObjectsFromArray:@[ metamacro_foreach(RACTuplePack_object_or_ractuplenil,, __VA_ARGS__) ]])\n\n#define RACTuplePack_object_or_ractuplenil(INDEX, ARG) \\\n    (ARG) ?: RACTupleNil.tupleNil,\n\n#define RACTupleUnpack_(...) \\\n    metamacro_foreach(RACTupleUnpack_decl,, __VA_ARGS__) \\\n    \\\n    int RACTupleUnpack_state = 0; \\\n    \\\n    RACTupleUnpack_after: \\\n        ; \\\n        metamacro_foreach(RACTupleUnpack_assign,, __VA_ARGS__) \\\n        if (RACTupleUnpack_state != 0) RACTupleUnpack_state = 2; \\\n        \\\n        while (RACTupleUnpack_state != 2) \\\n            if (RACTupleUnpack_state == 1) { \\\n                goto RACTupleUnpack_after; \\\n            } else \\\n                for (; RACTupleUnpack_state != 1; RACTupleUnpack_state = 1) \\\n                    [RACTupleUnpackingTrampoline trampoline][ @[ metamacro_foreach(RACTupleUnpack_value,, __VA_ARGS__) ] ]\n\n#define RACTupleUnpack_state metamacro_concat(RACTupleUnpack_state, __LINE__)\n#define RACTupleUnpack_after metamacro_concat(RACTupleUnpack_after, __LINE__)\n#define RACTupleUnpack_loop metamacro_concat(RACTupleUnpack_loop, __LINE__)\n\n#define RACTupleUnpack_decl_name(INDEX) \\\n    metamacro_concat(metamacro_concat(RACTupleUnpack, __LINE__), metamacro_concat(_var, INDEX))\n\n#define RACTupleUnpack_decl(INDEX, ARG) \\\n    __strong id RACTupleUnpack_decl_name(INDEX);\n\n#define RACTupleUnpack_assign(INDEX, ARG) \\\n    __strong ARG = RACTupleUnpack_decl_name(INDEX);\n\n#define RACTupleUnpack_value(INDEX, ARG) \\\n    [NSValue valueWithPointer:&RACTupleUnpack_decl_name(INDEX)],\n\n@interface RACTupleUnpackingTrampoline : NSObject\n\n+ (instancetype)trampoline;\n- (void)setObject:(RACTuple *)tuple forKeyedSubscript:(NSArray *)variables;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTuple.m",
    "content": "//\n//  RACTuple.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/12/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACTuple.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"RACTupleSequence.h\"\n\n@implementation RACTupleNil\n\n+ (RACTupleNil *)tupleNil {\n\tstatic dispatch_once_t onceToken;\n\tstatic RACTupleNil *tupleNil = nil;\n\tdispatch_once(&onceToken, ^{\n\t\ttupleNil = [[self alloc] init];\n\t});\n\t\n\treturn tupleNil;\n}\n\n#pragma mark NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n\treturn self;\n}\n\n#pragma mark NSCoding\n\n- (id)initWithCoder:(NSCoder *)coder {\n\t// Always return the singleton.\n\treturn self.class.tupleNil;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n}\n\n@end\n\n\n@interface RACTuple ()\n@property (nonatomic, strong) NSArray *backingArray;\n@end\n\n\n@implementation RACTuple\n\n- (instancetype)init {\n\tself = [super init];\n\tif (self == nil) return nil;\n\t\n\tself.backingArray = [NSArray array];\n\t\n\treturn self;\n}\n\n- (NSString *)description {\n\treturn [NSString stringWithFormat:@\"<%@: %p> %@\", self.class, self, self.allObjects];\n}\n\n- (BOOL)isEqual:(RACTuple *)object {\n\tif (object == self) return YES;\n\tif (![object isKindOfClass:self.class]) return NO;\n\t\n\treturn [self.backingArray isEqual:object.backingArray];\n}\n\n- (NSUInteger)hash {\n\treturn self.backingArray.hash;\n}\n\n\n#pragma mark NSFastEnumeration\n\n- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id __unsafe_unretained [])buffer count:(NSUInteger)len {\n\treturn [self.backingArray countByEnumeratingWithState:state objects:buffer count:len];\n}\n\n\n#pragma mark NSCopying\n\n- (instancetype)copyWithZone:(NSZone *)zone {\n\t// we're immutable, bitches!\n\treturn self;\n}\n\n\n#pragma mark NSCoding\n\n- (id)initWithCoder:(NSCoder *)coder {\n\tself = [self init];\n\tif (self == nil) return nil;\n\t\n\tself.backingArray = [coder decodeObjectForKey:@keypath(self.backingArray)];\n\treturn self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n\tif (self.backingArray != nil) [coder encodeObject:self.backingArray forKey:@keypath(self.backingArray)];\n}\n\n\n#pragma mark API\n\n+ (instancetype)tupleWithObjectsFromArray:(NSArray *)array {\n\treturn [self tupleWithObjectsFromArray:array convertNullsToNils:NO];\n}\n\n+ (instancetype)tupleWithObjectsFromArray:(NSArray *)array convertNullsToNils:(BOOL)convert {\n\tRACTuple *tuple = [[self alloc] init];\n\t\n\tif (convert) {\n\t\tNSMutableArray *newArray = [NSMutableArray arrayWithCapacity:array.count];\n\t\tfor (id object in array) {\n\t\t\t[newArray addObject:(object == NSNull.null ? RACTupleNil.tupleNil : object)];\n\t\t}\n\t\t\n\t\ttuple.backingArray = newArray;\n\t} else {\n\t\ttuple.backingArray = [array copy];\n\t}\n\t\n\treturn tuple;\n}\n\n+ (instancetype)tupleWithObjects:(id)object, ... {\n\tRACTuple *tuple = [[self alloc] init];\n\n\tva_list args;\n\tva_start(args, object);\n\n\tNSUInteger count = 0;\n\tfor (id currentObject = object; currentObject != nil; currentObject = va_arg(args, id)) {\n\t\t++count;\n\t}\n\n\tva_end(args);\n\n\tif (count == 0) {\n\t\ttuple.backingArray = @[];\n\t\treturn tuple;\n\t}\n\t\n\tNSMutableArray *objects = [[NSMutableArray alloc] initWithCapacity:count];\n\t\n\tva_start(args, object);\n\tfor (id currentObject = object; currentObject != nil; currentObject = va_arg(args, id)) {\n\t\t[objects addObject:currentObject];\n\t}\n\n\tva_end(args);\n\t\n\ttuple.backingArray = objects;\n\treturn tuple;\n}\n\n- (id)objectAtIndex:(NSUInteger)index {\n\tif (index >= self.count) return nil;\n\t\n\tid object = self.backingArray[index];\n\treturn (object == RACTupleNil.tupleNil ? nil : object);\n}\n\n- (NSArray *)allObjects {\n\tNSMutableArray *newArray = [NSMutableArray arrayWithCapacity:self.backingArray.count];\n\tfor (id object in self.backingArray) {\n\t\t[newArray addObject:(object == RACTupleNil.tupleNil ? NSNull.null : object)];\n\t}\n\t\n\treturn newArray;\n}\n\n- (instancetype)tupleByAddingObject:(id)obj {\n\tNSArray *newArray = [self.backingArray arrayByAddingObject:obj ?: RACTupleNil.tupleNil];\n\treturn [self.class tupleWithObjectsFromArray:newArray];\n}\n\n- (NSUInteger)count {\n\treturn self.backingArray.count;\n}\n\n- (id)first {\n\treturn self[0];\n}\n\n- (id)second {\n\treturn self[1];\n}\n\n- (id)third {\n\treturn self[2];\n}\n\n- (id)fourth {\n\treturn self[3];\n}\n\n- (id)fifth {\n\treturn self[4];\n}\n\n- (id)last {\n\treturn self[self.count - 1];\n}\n\n@end\n\n\n@implementation RACTuple (RACSequenceAdditions)\n\n- (RACSequence *)rac_sequence {\n\treturn [RACTupleSequence sequenceWithTupleBackingArray:self.backingArray offset:0];\n}\n\n@end\n\n@implementation RACTuple (ObjectSubscripting)\n\n- (id)objectAtIndexedSubscript:(NSUInteger)idx {\n\treturn [self objectAtIndex:idx];\n}\n\n@end\n\n\n@implementation RACTupleUnpackingTrampoline\n\n#pragma mark Lifecycle\n\n+ (instancetype)trampoline {\n\tstatic dispatch_once_t onceToken;\n\tstatic id trampoline = nil;\n\tdispatch_once(&onceToken, ^{\n\t\ttrampoline = [[self alloc] init];\n\t});\n\t\n\treturn trampoline;\n}\n\n- (void)setObject:(RACTuple *)tuple forKeyedSubscript:(NSArray *)variables {\n\tNSCParameterAssert(variables != nil);\n\t\n\t[variables enumerateObjectsUsingBlock:^(NSValue *value, NSUInteger index, BOOL *stop) {\n\t\t__strong id *ptr = (__strong id *)value.pointerValue;\n\t\t*ptr = tuple[index];\n\t}];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTupleSequence.h",
    "content": "//\n//  RACTupleSequence.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-05-01.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSequence.h\"\n\n// Private class that adapts a RACTuple to the RACSequence interface.\n@interface RACTupleSequence : RACSequence\n\n// Returns a sequence for enumerating over the given backing array (from a\n// RACTuple), starting from the given offset.\n+ (instancetype)sequenceWithTupleBackingArray:(NSArray *)backingArray offset:(NSUInteger)offset;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACTupleSequence.m",
    "content": "//\n//  RACTupleSequence.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-05-01.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACTupleSequence.h\"\n#import \"RACTuple.h\"\n\n@interface RACTupleSequence ()\n\n// The array being sequenced, as taken from RACTuple.backingArray.\n@property (nonatomic, strong, readonly) NSArray *tupleBackingArray;\n\n// The index in the array from which the sequence starts.\n@property (nonatomic, assign, readonly) NSUInteger offset;\n\n@end\n\n@implementation RACTupleSequence\n\n#pragma mark Lifecycle\n\n+ (instancetype)sequenceWithTupleBackingArray:(NSArray *)backingArray offset:(NSUInteger)offset {\n\tNSCParameterAssert(offset <= backingArray.count);\n\n\tif (offset == backingArray.count) return self.empty;\n\n\tRACTupleSequence *seq = [[self alloc] init];\n\tseq->_tupleBackingArray = backingArray;\n\tseq->_offset = offset;\n\treturn seq;\n}\n\n#pragma mark RACSequence\n\n- (id)head {\n\tid object = self.tupleBackingArray[self.offset];\n\treturn (object == RACTupleNil.tupleNil ? NSNull.null : object);\n}\n\n- (RACSequence *)tail {\n\tRACSequence *sequence = [self.class sequenceWithTupleBackingArray:self.tupleBackingArray offset:self.offset + 1];\n\tsequence.name = self.name;\n\treturn sequence;\n}\n\n- (NSArray *)array {\n\tNSRange range = NSMakeRange(self.offset, self.tupleBackingArray.count - self.offset);\n\tNSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:range.length];\n\n\t[self.tupleBackingArray enumerateObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range] options:0 usingBlock:^(id object, NSUInteger index, BOOL *stop) {\n\t\tid mappedObject = (object == RACTupleNil.tupleNil ? NSNull.null : object);\n\t\t[array addObject:mappedObject];\n\t}];\n\n\treturn array;\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\treturn [NSString stringWithFormat:@\"<%@: %p>{ name = %@, tuple = %@ }\", self.class, self, self.name, self.tupleBackingArray];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACUnarySequence.h",
    "content": "//\n//  RACUnarySequence.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-05-01.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSequence.h\"\n\n// Private class representing a sequence of exactly one value.\n@interface RACUnarySequence : RACSequence\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACUnarySequence.m",
    "content": "//\n//  RACUnarySequence.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-05-01.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACUnarySequence.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"NSObject+RACDescription.h\"\n\n@interface RACUnarySequence ()\n\n// The single value stored in this sequence.\n@property (nonatomic, strong, readwrite) id head;\n\n@end\n\n@implementation RACUnarySequence\n\n#pragma mark Properties\n\n@synthesize head = _head;\n\n#pragma mark Lifecycle\n\n+ (instancetype)return:(id)value {\n\tRACUnarySequence *sequence = [[self alloc] init];\n\tsequence.head = value;\n\treturn [sequence setNameWithFormat:@\"+return: %@\", RACDescription(value)];\n}\n\n#pragma mark RACSequence\n\n- (RACSequence *)tail {\n\treturn nil;\n}\n\n- (instancetype)bind:(RACStreamBindBlock (^)(void))block {\n\tRACStreamBindBlock bindBlock = block();\n\tBOOL stop = NO;\n\n\tRACSequence *result = (id)[bindBlock(self.head, &stop) setNameWithFormat:@\"[%@] -bind:\", self.name];\n\treturn result ?: self.class.empty;\n}\n\n#pragma mark NSCoding\n\n- (Class)classForCoder {\n\t// Unary sequences should be encoded as themselves, not array sequences.\n\treturn self.class;\n}\n\n- (id)initWithCoder:(NSCoder *)coder {\n\tid value = [coder decodeObjectForKey:@keypath(self.head)];\n\treturn [self.class return:value];\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n\tif (self.head != nil) [coder encodeObject:self.head forKey:@keypath(self.head)];\n}\n\n#pragma mark NSObject\n\n- (NSString *)description {\n\treturn [NSString stringWithFormat:@\"<%@: %p>{ name = %@, head = %@ }\", self.class, self, self.name, self.head];\n}\n\n- (NSUInteger)hash {\n\treturn [self.head hash];\n}\n\n- (BOOL)isEqual:(RACUnarySequence *)seq {\n\tif (self == seq) return YES;\n\tif (![seq isKindOfClass:RACUnarySequence.class]) return NO;\n\n\treturn self.head == seq.head || [(NSObject *)self.head isEqual:seq.head];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACUnit.h",
    "content": "//\n//  RACUnit.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/27/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n/// A unit represents an empty value.\n///\n/// It should never be necessary to create a unit yourself. Just use +defaultUnit.\n@interface RACUnit : NSObject\n\n/// A singleton instance.\n+ (RACUnit *)defaultUnit;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACUnit.m",
    "content": "//\n//  RACUnit.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/27/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACUnit.h\"\n\n@implementation RACUnit\n\n#pragma mark API\n\n+ (RACUnit *)defaultUnit {\n\tstatic dispatch_once_t onceToken;\n\tstatic RACUnit *defaultUnit = nil;\n\tdispatch_once(&onceToken, ^{\n\t\tdefaultUnit = [[self alloc] init];\n\t});\n\t\n\treturn defaultUnit;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACValueTransformer.h",
    "content": "//\n//  RACValueTransformer.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/6/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n// A private block based transformer.\n@interface RACValueTransformer : NSValueTransformer\n\n+ (instancetype)transformerWithBlock:(id (^)(id value))block;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/RACValueTransformer.m",
    "content": "//\n//  RACValueTransformer.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/6/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACValueTransformer.h\"\n\n@interface RACValueTransformer ()\n@property (nonatomic, copy) id (^transformBlock)(id value);\n@end\n\n\n@implementation RACValueTransformer\n\n\n#pragma mark NSValueTransformer\n\n+ (BOOL)allowsReverseTransformation {\n\treturn NO;\n}\n\n- (id)transformedValue:(id)value {\n    return self.transformBlock(value);\n}\n\n\n#pragma mark API\n\n@synthesize transformBlock;\n\n+ (instancetype)transformerWithBlock:(id (^)(id value))block {\n\tNSCParameterAssert(block != NULL);\n\t\n\tRACValueTransformer *transformer = [[self alloc] init];\n\ttransformer.transformBlock = block;\n\treturn transformer;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/ReactiveCocoa-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n#import \"RACCommand.h\"\n#import \"RACDisposable.h\"\n#import \"RACEvent.h\"\n#import \"RACScheduler.h\"\n#import \"RACTargetQueueScheduler.h\"\n#import \"RACSignal.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACStream.h\"\n#import \"RACSubscriber.h\"\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIActionSheet+RACSignalSupport.h",
    "content": "//\n//  UIActionSheet+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Dave Lee on 2013-06-22.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACDelegateProxy;\n@class RACSignal;\n\n@interface UIActionSheet (RACSignalSupport)\n\n/// A delegate proxy which will be set as the receiver's delegate when any of the\n/// methods in this category are used.\n@property (nonatomic, strong, readonly) RACDelegateProxy *rac_delegateProxy;\n\n/// Creates a signal for button clicks on the receiver.\n///\n/// When this method is invoked, the `rac_delegateProxy` will become the\n/// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy\n/// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't\n/// know how to handle. Setting the receiver's `delegate` afterward is\n/// considered undefined behavior.\n///\n/// Returns a signal which will send the index of the specific button clicked.\n/// The signal will complete when the receiver is deallocated.\n- (RACSignal *)rac_buttonClickedSignal;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIActionSheet+RACSignalSupport.m",
    "content": "//\n//  UIActionSheet+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Dave Lee on 2013-06-22.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UIActionSheet+RACSignalSupport.h\"\n#import \"RACDelegateProxy.h\"\n#import \"RACSignal+Operations.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACDescription.h\"\n#import <objc/runtime.h>\n\n@implementation UIActionSheet (RACSignalSupport)\n\nstatic void RACUseDelegateProxy(UIActionSheet *self) {\n    if (self.delegate == self.rac_delegateProxy) return;\n\n    self.rac_delegateProxy.rac_proxiedDelegate = self.delegate;\n    self.delegate = (id)self.rac_delegateProxy;\n}\n\n- (RACDelegateProxy *)rac_delegateProxy {\n\tRACDelegateProxy *proxy = objc_getAssociatedObject(self, _cmd);\n\tif (proxy == nil) {\n\t\tproxy = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UIActionSheetDelegate)];\n\t\tobjc_setAssociatedObject(self, _cmd, proxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t}\n\n\treturn proxy;\n}\n\n- (RACSignal *)rac_buttonClickedSignal {\n\tRACSignal *signal = [[[[self.rac_delegateProxy\n\t\tsignalForSelector:@selector(actionSheet:clickedButtonAtIndex:)]\n\t\treduceEach:^(UIActionSheet *actionSheet, NSNumber *buttonIndex) {\n\t\t\treturn buttonIndex;\n\t\t}]\n\t\ttakeUntil:self.rac_willDeallocSignal]\n\t\tsetNameWithFormat:@\"%@ -rac_buttonClickedSignal\", RACDescription(self)];\n\n\tRACUseDelegateProxy(self);\n\n\treturn signal;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIAlertView+RACSignalSupport.h",
    "content": "//\n//  UIAlertView+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Henrik Hodne on 6/16/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACDelegateProxy;\n@class RACSignal;\n\n@interface UIAlertView (RACSignalSupport)\n\n/// A delegate proxy which will be set as the receiver's delegate when any of the\n/// methods in this category are used.\n@property (nonatomic, strong, readonly) RACDelegateProxy *rac_delegateProxy;\n\n/// Creates a signal for button clicks on the receiver.\n///\n/// When this method is invoked, the `rac_delegateProxy` will become the\n/// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy\n/// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't\n/// know how to handle. Setting the receiver's `delegate` afterward is considered\n/// undefined behavior.\n///\n/// Note that this signal will not send a value when the alert is dismissed\n/// programatically.\n///\n/// Returns a signal which will send the index of the specific button clicked.\n/// The signal will complete itself when the receiver is deallocated.\n- (RACSignal *)rac_buttonClickedSignal;\n\n/// Creates a signal for dismissal of the receiver.\n///\n/// When this method is invoked, the `rac_delegateProxy` will become the\n/// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy\n/// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't\n/// know how to handle. Setting the receiver's `delegate` afterward is considered\n/// undefined behavior.\n///\n/// Returns a signal which will send the index of the button associated with the\n/// dismissal. The signal will complete itself when the receiver is deallocated.\n- (RACSignal *)rac_willDismissSignal;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIAlertView+RACSignalSupport.m",
    "content": "//\n//  UIAlertView+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Henrik Hodne on 6/16/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UIAlertView+RACSignalSupport.h\"\n#import \"RACDelegateProxy.h\"\n#import \"RACSignal+Operations.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACDescription.h\"\n#import <objc/runtime.h>\n\n@implementation UIAlertView (RACSignalSupport)\n\nstatic void RACUseDelegateProxy(UIAlertView *self) {\n\tif (self.delegate == self.rac_delegateProxy) return;\n\n\tself.rac_delegateProxy.rac_proxiedDelegate = self.delegate;\n\tself.delegate = (id)self.rac_delegateProxy;\n}\n\n- (RACDelegateProxy *)rac_delegateProxy {\n\tRACDelegateProxy *proxy = objc_getAssociatedObject(self, _cmd);\n\tif (proxy == nil) {\n\t\tproxy = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UIAlertViewDelegate)];\n\t\tobjc_setAssociatedObject(self, _cmd, proxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t}\n\n\treturn proxy;\n}\n\n- (RACSignal *)rac_buttonClickedSignal {\n\tRACSignal *signal = [[[[self.rac_delegateProxy\n\t\tsignalForSelector:@selector(alertView:clickedButtonAtIndex:)]\n\t\treduceEach:^(UIAlertView *alertView, NSNumber *buttonIndex) {\n\t\t\treturn buttonIndex;\n\t\t}]\n\t\ttakeUntil:self.rac_willDeallocSignal]\n\t\tsetNameWithFormat:@\"%@ -rac_buttonClickedSignal\", RACDescription(self)];\n\n\tRACUseDelegateProxy(self);\n\n\treturn signal;\n}\n\n- (RACSignal *)rac_willDismissSignal {\n\tRACSignal *signal = [[[[self.rac_delegateProxy\n\t\tsignalForSelector:@selector(alertView:willDismissWithButtonIndex:)]\n\t\treduceEach:^(UIAlertView *alertView, NSNumber *buttonIndex) {\n\t\t\treturn buttonIndex;\n\t\t}]\n\t\ttakeUntil:self.rac_willDeallocSignal]\n\t\tsetNameWithFormat:@\"%@ -rac_willDismissSignal\", RACDescription(self)];\n\n\tRACUseDelegateProxy(self);\n\n\treturn signal;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIBarButtonItem+RACCommandSupport.h",
    "content": "//\n//  UIBarButtonItem+RACCommandSupport.h\n//  ReactiveCocoa\n//\n//  Created by Kyle LeNeau on 3/27/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACCommand;\n\n@interface UIBarButtonItem (RACCommandSupport)\n\n/// Sets the control's command. When the control is clicked, the command is\n/// executed with the sender of the event. The control's enabledness is bound\n/// to the command's `canExecute`.\n///\n/// Note: this will reset the control's target and action.\n@property (nonatomic, strong) RACCommand *rac_command;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIBarButtonItem+RACCommandSupport.m",
    "content": "//\n//  UIBarButtonItem+RACCommandSupport.m\n//  ReactiveCocoa\n//\n//  Created by Kyle LeNeau on 3/27/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UIBarButtonItem+RACCommandSupport.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"RACCommand.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal+Operations.h\"\n#import <objc/runtime.h>\n\nstatic void *UIControlRACCommandKey = &UIControlRACCommandKey;\nstatic void *UIControlEnabledDisposableKey = &UIControlEnabledDisposableKey;\n\n@implementation UIBarButtonItem (RACCommandSupport)\n\n- (RACCommand *)rac_command {\n\treturn objc_getAssociatedObject(self, UIControlRACCommandKey);\n}\n\n- (void)setRac_command:(RACCommand *)command {\n\tobjc_setAssociatedObject(self, UIControlRACCommandKey, command, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t\n\t// Check for stored signal in order to remove it and add a new one\n\tRACDisposable *disposable = objc_getAssociatedObject(self, UIControlEnabledDisposableKey);\n\t[disposable dispose];\n\t\n\tif (command == nil) return;\n\t\n\tdisposable = [command.enabled setKeyPath:@keypath(self.enabled) onObject:self];\n\tobjc_setAssociatedObject(self, UIControlEnabledDisposableKey, disposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t\n\t[self rac_hijackActionAndTargetIfNeeded];\n}\n\n- (void)rac_hijackActionAndTargetIfNeeded {\n\tSEL hijackSelector = @selector(rac_commandPerformAction:);\n\tif (self.target == self && self.action == hijackSelector) return;\n\t\n\tif (self.target != nil) NSLog(@\"WARNING: UIBarButtonItem.rac_command hijacks the control's existing target and action.\");\n\t\n\tself.target = self;\n\tself.action = hijackSelector;\n}\n\n- (void)rac_commandPerformAction:(id)sender {\n\t[self.rac_command execute:sender];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIButton+RACCommandSupport.h",
    "content": "//\n//  UIButton+RACCommandSupport.h\n//  ReactiveCocoa\n//\n//  Created by Ash Furrow on 2013-06-06.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACCommand;\n\n@interface UIButton (RACCommandSupport)\n\n/// Sets the button's command. When the button is clicked, the command is\n/// executed with the sender of the event. The button's enabledness is bound\n/// to the command's `canExecute`.\n@property (nonatomic, strong) RACCommand *rac_command;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIButton+RACCommandSupport.m",
    "content": "//\n//  UIButton+RACCommandSupport.m\n//  ReactiveCocoa\n//\n//  Created by Ash Furrow on 2013-06-06.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UIButton+RACCommandSupport.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"RACCommand.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal+Operations.h\"\n#import <objc/runtime.h>\n\nstatic void *UIButtonRACCommandKey = &UIButtonRACCommandKey;\nstatic void *UIButtonEnabledDisposableKey = &UIButtonEnabledDisposableKey;\n\n@implementation UIButton (RACCommandSupport)\n\n- (RACCommand *)rac_command {\n\treturn objc_getAssociatedObject(self, UIButtonRACCommandKey);\n}\n\n- (void)setRac_command:(RACCommand *)command {\n\tobjc_setAssociatedObject(self, UIButtonRACCommandKey, command, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t\n\t// Check for stored signal in order to remove it and add a new one\n\tRACDisposable *disposable = objc_getAssociatedObject(self, UIButtonEnabledDisposableKey);\n\t[disposable dispose];\n\t\n\tif (command == nil) return;\n\t\n\tdisposable = [command.enabled setKeyPath:@keypath(self.enabled) onObject:self];\n\tobjc_setAssociatedObject(self, UIButtonEnabledDisposableKey, disposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t\n\t[self rac_hijackActionAndTargetIfNeeded];\n}\n\n- (void)rac_hijackActionAndTargetIfNeeded {\n\tSEL hijackSelector = @selector(rac_commandPerformAction:);\n\t\n\tfor (NSString *selector in [self actionsForTarget:self forControlEvent:UIControlEventTouchUpInside]) {\n\t\tif (hijackSelector == NSSelectorFromString(selector)) {\n\t\t\treturn;\n\t\t}\n\t}\n\t\n\t[self addTarget:self action:hijackSelector forControlEvents:UIControlEventTouchUpInside];\n}\n\n- (void)rac_commandPerformAction:(id)sender {\n\t[self.rac_command execute:sender];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UICollectionReusableView+RACSignalSupport.h",
    "content": "//\n//  UICollectionReusableView+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Kent Wong on 2013-10-04.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACSignal;\n\n// This category is only applicable to iOS >= 6.0.\n@interface UICollectionReusableView (RACSignalSupport)\n\n/// A signal which will send a RACUnit whenever -prepareForReuse is invoked upon\n/// the receiver.\n///\n/// Examples\n///\n///  [[[self.cancelButton\n///     rac_signalForControlEvents:UIControlEventTouchUpInside]\n///     takeUntil:self.rac_prepareForReuseSignal]\n///     subscribeNext:^(UIButton *x) {\n///         // do other things\n///     }];\n@property (nonatomic, strong, readonly) RACSignal *rac_prepareForReuseSignal;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UICollectionReusableView+RACSignalSupport.m",
    "content": "//\n//  UICollectionReusableView+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Kent Wong on 2013-10-04.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UICollectionReusableView+RACSignalSupport.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"NSObject+RACSelectorSignal.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACUnit.h\"\n#import <objc/runtime.h>\n\n@implementation UICollectionReusableView (RACSignalSupport)\n\n- (RACSignal *)rac_prepareForReuseSignal {\n\tRACSignal *signal = objc_getAssociatedObject(self, _cmd);\n\tif (signal != nil) return signal;\n\t\n\tsignal = [[[self\n\t\trac_signalForSelector:@selector(prepareForReuse)]\n\t\tmapReplace:RACUnit.defaultUnit]\n\t\tsetNameWithFormat:@\"%@ -rac_prepareForReuseSignal\", RACDescription(self)];\n\t\n\tobjc_setAssociatedObject(self, _cmd, signal, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\treturn signal;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIControl+RACSignalSupport.h",
    "content": "//\n//  UIControl+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/17/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACSignal;\n\n@interface UIControl (RACSignalSupport)\n\n/// Creates and returns a signal that sends the sender of the control event\n/// whenever one of the control events is triggered.\n- (RACSignal *)rac_signalForControlEvents:(UIControlEvents)controlEvents;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIControl+RACSignalSupport.m",
    "content": "//\n//  UIControl+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/17/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"UIControl+RACSignalSupport.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal.h\"\n#import \"RACSubscriber.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACDescription.h\"\n\n@implementation UIControl (RACSignalSupport)\n\n- (RACSignal *)rac_signalForControlEvents:(UIControlEvents)controlEvents {\n\t@weakify(self);\n\n\treturn [[RACSignal\n\t\tcreateSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t@strongify(self);\n\n\t\t\t[self addTarget:subscriber action:@selector(sendNext:) forControlEvents:controlEvents];\n\t\t\t[self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t}]];\n\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\t@strongify(self);\n\t\t\t\t[self removeTarget:subscriber action:@selector(sendNext:) forControlEvents:controlEvents];\n\t\t\t}];\n\t\t}]\n\t\tsetNameWithFormat:@\"%@ -rac_signalForControlEvents: %lx\", RACDescription(self), (unsigned long)controlEvents];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIControl+RACSignalSupportPrivate.h",
    "content": "//\n//  UIControl+RACSignalSupportPrivate.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 06/08/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACChannelTerminal;\n\n@interface UIControl (RACSignalSupportPrivate)\n\n// Adds a RACChannel-based interface to the receiver for the given\n// UIControlEvents and exposes it.\n//\n// controlEvents - A mask of UIControlEvents on which to send new values.\n// key           - The key whose value should be read and set when a control\n//                 event fires and when a value is sent to the\n//                 RACChannelTerminal respectively.\n// nilValue      - The value to be assigned to the key when `nil` is sent to the\n//                 RACChannelTerminal.\n//\n// Returns a RACChannelTerminal which will send future values from the receiver,\n// and update the receiver when values are sent to the terminal.\n- (RACChannelTerminal *)rac_channelForControlEvents:(UIControlEvents)controlEvents key:(NSString *)key nilValue:(id)nilValue;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIControl+RACSignalSupportPrivate.m",
    "content": "//\n//  UIControl+RACSignalSupportPrivate.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 06/08/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UIControl+RACSignalSupportPrivate.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACLifting.h\"\n#import \"RACChannel.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal+Operations.h\"\n#import \"UIControl+RACSignalSupport.h\"\n\n@implementation UIControl (RACSignalSupportPrivate)\n\n- (RACChannelTerminal *)rac_channelForControlEvents:(UIControlEvents)controlEvents key:(NSString *)key nilValue:(id)nilValue {\n\tNSCParameterAssert(key.length > 0);\n\tkey = [key copy];\n\tRACChannel *channel = [[RACChannel alloc] init];\n\n\t[self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t[channel.followingTerminal sendCompleted];\n\t}]];\n\n\tRACSignal *eventSignal = [[[self\n\t\trac_signalForControlEvents:controlEvents]\n\t\tmapReplace:key]\n\t\ttakeUntil:[[channel.followingTerminal\n\t\t\tignoreValues]\n\t\t\tcatchTo:RACSignal.empty]];\n\t[[self\n\t\trac_liftSelector:@selector(valueForKey:) withSignals:eventSignal, nil]\n\t\tsubscribe:channel.followingTerminal];\n\n\tRACSignal *valuesSignal = [channel.followingTerminal\n\t\tmap:^(id value) {\n\t\t\treturn value ?: nilValue;\n\t\t}];\n\t[self rac_liftSelector:@selector(setValue:forKey:) withSignals:valuesSignal, [RACSignal return:key], nil];\n\n\treturn channel.leadingTerminal;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIDatePicker+RACSignalSupport.h",
    "content": "//\n//  UIDatePicker+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 20/07/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACChannelTerminal;\n\n@interface UIDatePicker (RACSignalSupport)\n\n/// Creates a new RACChannel-based binding to the receiver.\n///\n/// nilValue - The date to set when the terminal receives `nil`.\n///\n/// Returns a RACChannelTerminal that sends the receiver's date whenever the\n/// UIControlEventValueChanged control event is fired, and sets the date to the\n/// values it receives.\n- (RACChannelTerminal *)rac_newDateChannelWithNilValue:(NSDate *)nilValue;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIDatePicker+RACSignalSupport.m",
    "content": "//\n//  UIDatePicker+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 20/07/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UIDatePicker+RACSignalSupport.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"UIControl+RACSignalSupportPrivate.h\"\n\n@implementation UIDatePicker (RACSignalSupport)\n\n- (RACChannelTerminal *)rac_newDateChannelWithNilValue:(NSDate *)nilValue {\n\treturn [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.date) nilValue:nilValue];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIGestureRecognizer+RACSignalSupport.h",
    "content": "//\n//  UIGestureRecognizer+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Josh Vera on 5/5/13.\n//  Copyright (c) 2013 GitHub. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACSignal;\n\n@interface UIGestureRecognizer (RACSignalSupport)\n\n/// Returns a signal that sends the receiver when its gesture occurs.\n- (RACSignal *)rac_gestureSignal;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIGestureRecognizer+RACSignalSupport.m",
    "content": "//\n//  UIGestureRecognizer+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Josh Vera on 5/5/13.\n//  Copyright (c) 2013 GitHub. All rights reserved.\n//\n\n#import \"UIGestureRecognizer+RACSignalSupport.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal.h\"\n#import \"RACSubscriber.h\"\n\n@implementation UIGestureRecognizer (RACSignalSupport)\n\n- (RACSignal *)rac_gestureSignal {\n\t@weakify(self);\n\n\treturn [[RACSignal\n\t\tcreateSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t@strongify(self);\n\n\t\t\t[self addTarget:subscriber action:@selector(sendNext:)];\n\t\t\t[self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t}]];\n\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\t@strongify(self);\n\t\t\t\t[self removeTarget:subscriber action:@selector(sendNext:)];\n\t\t\t}];\n\t\t}]\n\t\tsetNameWithFormat:@\"%@ -rac_gestureSignal\", RACDescription(self)];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIImagePickerController+RACSignalSupport.h",
    "content": "//\n//  UIImagePickerController+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Timur Kuchkarov on 28.03.14.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACDelegateProxy;\n@class RACSignal;\n\n@interface UIImagePickerController (RACSignalSupport)\n\n/// A delegate proxy which will be set as the receiver's delegate when any of the\n/// methods in this category are used.\n@property (nonatomic, strong, readonly) RACDelegateProxy *rac_delegateProxy;\n\n/// Creates a signal for every new selected image.\n///\n/// When this method is invoked, the `rac_delegateProxy` will become the\n/// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy\n/// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't\n/// know how to handle. Setting the receiver's `delegate` afterward is considered\n/// undefined behavior.\n///\n/// Returns a signal which will send the dictionary with info for the selected image.\n/// Caller is responsible for picker controller dismissal. The signal will complete\n/// itself when the receiver is deallocated or when user cancels selection.\n- (RACSignal *)rac_imageSelectedSignal;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIImagePickerController+RACSignalSupport.m",
    "content": "//\n//  UIImagePickerController+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Timur Kuchkarov on 28.03.14.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\n#import \"UIImagePickerController+RACSignalSupport.h\"\n#import \"RACDelegateProxy.h\"\n#import \"RACSignal+Operations.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACDescription.h\"\n#import <objc/runtime.h>\n\n@implementation UIImagePickerController (RACSignalSupport)\n\nstatic void RACUseDelegateProxy(UIImagePickerController *self) {\n\tif (self.delegate == self.rac_delegateProxy) return;\n    \n\tself.rac_delegateProxy.rac_proxiedDelegate = self.delegate;\n\tself.delegate = (id)self.rac_delegateProxy;\n}\n\n- (RACDelegateProxy *)rac_delegateProxy {\n\tRACDelegateProxy *proxy = objc_getAssociatedObject(self, _cmd);\n\tif (proxy == nil) {\n\t\tproxy = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UIImagePickerControllerDelegate)];\n\t\tobjc_setAssociatedObject(self, _cmd, proxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t}\n    \n\treturn proxy;\n}\n\n- (RACSignal *)rac_imageSelectedSignal {\n\tRACSignal *pickerCancelledSignal = [[self.rac_delegateProxy\n\t\tsignalForSelector:@selector(imagePickerControllerDidCancel:)]\n\t\tmerge:self.rac_willDeallocSignal];\n\t\t\n\tRACSignal *imagePickerSignal = [[[[self.rac_delegateProxy\n\t\tsignalForSelector:@selector(imagePickerController:didFinishPickingMediaWithInfo:)]\n\t\treduceEach:^(UIImagePickerController *pickerController, NSDictionary *userInfo) {\n\t\t\treturn userInfo;\n\t\t}]\n\t\ttakeUntil:pickerCancelledSignal]\n\t\tsetNameWithFormat:@\"%@ -rac_imageSelectedSignal\", RACDescription(self)];\n    \n\tRACUseDelegateProxy(self);\n    \n\treturn imagePickerSignal;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIRefreshControl+RACCommandSupport.h",
    "content": "//\n//  UIRefreshControl+RACCommandSupport.h\n//  ReactiveCocoa\n//\n//  Created by Dave Lee on 2013-10-17.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACCommand;\n\n@interface UIRefreshControl (RACCommandSupport)\n\n/// Manipulate the RACCommand property associated with this refresh control.\n///\n/// When this refresh control is activated by the user, the command will be\n/// executed. Upon completion or error of the execution signal, -endRefreshing\n/// will be invoked.\n@property (nonatomic, strong) RACCommand *rac_command;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIRefreshControl+RACCommandSupport.m",
    "content": "//\n//  UIRefreshControl+RACCommandSupport.m\n//  ReactiveCocoa\n//\n//  Created by Dave Lee on 2013-10-17.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UIRefreshControl+RACCommandSupport.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"RACCommand.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal.h\"\n#import \"RACSignal+Operations.h\"\n#import \"UIControl+RACSignalSupport.h\"\n#import <objc/runtime.h>\n\nstatic void *UIRefreshControlRACCommandKey = &UIRefreshControlRACCommandKey;\nstatic void *UIRefreshControlDisposableKey = &UIRefreshControlDisposableKey;\n\n@implementation UIRefreshControl (RACCommandSupport)\n\n- (RACCommand *)rac_command {\n\treturn objc_getAssociatedObject(self, UIRefreshControlRACCommandKey);\n}\n\n- (void)setRac_command:(RACCommand *)command {\n\tobjc_setAssociatedObject(self, UIRefreshControlRACCommandKey, command, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\n\t// Dispose of any active command associations.\n\t[objc_getAssociatedObject(self, UIRefreshControlDisposableKey) dispose];\n\n\tif (command == nil) return;\n\n\t// Like RAC(self, enabled) = command.enabled; but with access to disposable.\n\tRACDisposable *enabledDisposable = [command.enabled setKeyPath:@keypath(self.enabled) onObject:self];\n\n\tRACDisposable *executionDisposable = [[[[[self\n\t\trac_signalForControlEvents:UIControlEventValueChanged]\n\t\tmap:^(UIRefreshControl *x) {\n\t\t\treturn [[[command\n\t\t\t\texecute:x]\n\t\t\t\tcatchTo:[RACSignal empty]]\n\t\t\t\tthen:^{\n\t\t\t\t\treturn [RACSignal return:x];\n\t\t\t\t}];\n\t\t}]\n\t\tconcat]\n\t\tdeliverOnMainThread]\n\t\tsubscribeNext:^(UIRefreshControl *x) {\n\t\t\t[x endRefreshing];\n\t\t}];\n\n\tRACDisposable *commandDisposable = [RACCompoundDisposable compoundDisposableWithDisposables:@[ enabledDisposable, executionDisposable ]];\n\tobjc_setAssociatedObject(self, UIRefreshControlDisposableKey, commandDisposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISegmentedControl+RACSignalSupport.h",
    "content": "//\n//  UISegmentedControl+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 20/07/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACChannelTerminal;\n\n@interface UISegmentedControl (RACSignalSupport)\n\n/// Creates a new RACChannel-based binding to the receiver.\n///\n/// nilValue - The segment to select when the terminal receives `nil`.\n///\n/// Returns a RACChannelTerminal that sends the receiver's currently selected\n/// segment's index whenever the UIControlEventValueChanged control event is\n/// fired, and sets the selected segment index to the values it receives.\n- (RACChannelTerminal *)rac_newSelectedSegmentIndexChannelWithNilValue:(NSNumber *)nilValue;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISegmentedControl+RACSignalSupport.m",
    "content": "//\n//  UISegmentedControl+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 20/07/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UISegmentedControl+RACSignalSupport.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"UIControl+RACSignalSupportPrivate.h\"\n\n@implementation UISegmentedControl (RACSignalSupport)\n\n- (RACChannelTerminal *)rac_newSelectedSegmentIndexChannelWithNilValue:(NSNumber *)nilValue {\n\treturn [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.selectedSegmentIndex) nilValue:nilValue];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISlider+RACSignalSupport.h",
    "content": "//\n//  UISlider+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 20/07/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACChannelTerminal;\n\n@interface UISlider (RACSignalSupport)\n\n/// Creates a new RACChannel-based binding to the receiver.\n///\n/// nilValue - The value to set when the terminal receives `nil`.\n///\n/// Returns a RACChannelTerminal that sends the receiver's value whenever the\n/// UIControlEventValueChanged control event is fired, and sets the value to the\n/// values it receives.\n- (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISlider+RACSignalSupport.m",
    "content": "//\n//  UISlider+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 20/07/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UISlider+RACSignalSupport.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"UIControl+RACSignalSupportPrivate.h\"\n\n@implementation UISlider (RACSignalSupport)\n\n- (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue {\n\treturn [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.value) nilValue:nilValue];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIStepper+RACSignalSupport.h",
    "content": "//\n//  UIStepper+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 20/07/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACChannelTerminal;\n\n@interface UIStepper (RACSignalSupport)\n\n/// Creates a new RACChannel-based binding to the receiver.\n///\n/// nilValue - The value to set when the terminal receives `nil`.\n///\n/// Returns a RACChannelTerminal that sends the receiver's value whenever the\n/// UIControlEventValueChanged control event is fired, and sets the value to the\n/// values it receives.\n- (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UIStepper+RACSignalSupport.m",
    "content": "//\n//  UIStepper+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 20/07/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UIStepper+RACSignalSupport.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"UIControl+RACSignalSupportPrivate.h\"\n\n@implementation UIStepper (RACSignalSupport)\n\n- (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue {\n\treturn [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.value) nilValue:nilValue];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISwitch+RACSignalSupport.h",
    "content": "//\n//  UISwitch+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 20/07/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACChannelTerminal;\n\n@interface UISwitch (RACSignalSupport)\n\n/// Creates a new RACChannel-based binding to the receiver.\n///\n/// Returns a RACChannelTerminal that sends whether the receiver is on whenever\n/// the UIControlEventValueChanged control event is fired, and sets it on or off\n/// when it receives @YES or @NO respectively.\n- (RACChannelTerminal *)rac_newOnChannel;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UISwitch+RACSignalSupport.m",
    "content": "//\n//  UISwitch+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 20/07/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UISwitch+RACSignalSupport.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"UIControl+RACSignalSupportPrivate.h\"\n\n@implementation UISwitch (RACSignalSupport)\n\n- (RACChannelTerminal *)rac_newOnChannel {\n\treturn [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.on) nilValue:@NO];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITableViewCell+RACSignalSupport.h",
    "content": "//\n//  UITableViewCell+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-07-22.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACSignal;\n\n@interface UITableViewCell (RACSignalSupport)\n\n/// A signal which will send a RACUnit whenever -prepareForReuse is invoked upon\n/// the receiver.\n///\n/// Examples\n///\n///  [[[self.cancelButton\n///     rac_signalForControlEvents:UIControlEventTouchUpInside]\n///     takeUntil:self.rac_prepareForReuseSignal]\n///     subscribeNext:^(UIButton *x) {\n///         // do other things\n///     }];\n@property (nonatomic, strong, readonly) RACSignal *rac_prepareForReuseSignal;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITableViewCell+RACSignalSupport.m",
    "content": "//\n//  UITableViewCell+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-07-22.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UITableViewCell+RACSignalSupport.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"NSObject+RACSelectorSignal.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACUnit.h\"\n#import <objc/runtime.h>\n\n@implementation UITableViewCell (RACSignalSupport)\n\n- (RACSignal *)rac_prepareForReuseSignal {\n\tRACSignal *signal = objc_getAssociatedObject(self, _cmd);\n\tif (signal != nil) return signal;\n\n\tsignal = [[[self\n\t\trac_signalForSelector:@selector(prepareForReuse)]\n\t\tmapReplace:RACUnit.defaultUnit]\n\t\tsetNameWithFormat:@\"%@ -rac_prepareForReuseSignal\", RACDescription(self)];\n\t\n\tobjc_setAssociatedObject(self, _cmd, signal, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\treturn signal;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITableViewHeaderFooterView+RACSignalSupport.h",
    "content": "//\n//  UITableViewHeaderFooterView+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Syo Ikeda on 12/30/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACSignal;\n\n// This category is only applicable to iOS >= 6.0.\n@interface UITableViewHeaderFooterView (RACSignalSupport)\n\n/// A signal which will send a RACUnit whenever -prepareForReuse is invoked upon\n/// the receiver.\n///\n/// Examples\n///\n///  [[[self.cancelButton\n///     rac_signalForControlEvents:UIControlEventTouchUpInside]\n///     takeUntil:self.rac_prepareForReuseSignal]\n///     subscribeNext:^(UIButton *x) {\n///         // do other things\n///     }];\n@property (nonatomic, strong, readonly) RACSignal *rac_prepareForReuseSignal;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITableViewHeaderFooterView+RACSignalSupport.m",
    "content": "//\n//  UITableViewHeaderFooterView+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Syo Ikeda on 12/30/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"UITableViewHeaderFooterView+RACSignalSupport.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"NSObject+RACSelectorSignal.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACUnit.h\"\n#import <objc/runtime.h>\n\n@implementation UITableViewHeaderFooterView (RACSignalSupport)\n\n- (RACSignal *)rac_prepareForReuseSignal {\n\tRACSignal *signal = objc_getAssociatedObject(self, _cmd);\n\tif (signal != nil) return signal;\n\n\tsignal = [[[self\n\t\trac_signalForSelector:@selector(prepareForReuse)]\n\t\tmapReplace:RACUnit.defaultUnit]\n\t\tsetNameWithFormat:@\"%@ -rac_prepareForReuseSignal\", RACDescription(self)];\n\n\tobjc_setAssociatedObject(self, _cmd, signal, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\treturn signal;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITextField+RACSignalSupport.h",
    "content": "//\n//  UITextField+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/17/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACChannelTerminal;\n@class RACSignal;\n\n@interface UITextField (RACSignalSupport)\n\n/// Creates and returns a signal for the text of the field. It always starts with\n/// the current text. The signal sends next when the UIControlEventAllEditingEvents\n/// control event is fired on the control.\n- (RACSignal *)rac_textSignal;\n\n/// Creates a new RACChannel-based binding to the receiver.\n///\n/// Returns a RACChannelTerminal that sends the receiver's text whenever the\n/// UIControlEventAllEditingEvents control event is fired, and sets the text\n/// to the values it receives.\n- (RACChannelTerminal *)rac_newTextChannel;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITextField+RACSignalSupport.m",
    "content": "//\n//  UITextField+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 4/17/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"UITextField+RACSignalSupport.h\"\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"RACSignal+Operations.h\"\n#import \"UIControl+RACSignalSupport.h\"\n#import \"UIControl+RACSignalSupportPrivate.h\"\n\n@implementation UITextField (RACSignalSupport)\n\n- (RACSignal *)rac_textSignal {\n\t@weakify(self);\n\treturn [[[[[RACSignal\n\t\tdefer:^{\n\t\t\t@strongify(self);\n\t\t\treturn [RACSignal return:self];\n\t\t}]\n\t\tconcat:[self rac_signalForControlEvents:UIControlEventAllEditingEvents]]\n\t\tmap:^(UITextField *x) {\n\t\t\treturn x.text;\n\t\t}]\n\t\ttakeUntil:self.rac_willDeallocSignal]\n\t\tsetNameWithFormat:@\"%@ -rac_textSignal\", RACDescription(self)];\n}\n\n- (RACChannelTerminal *)rac_newTextChannel {\n\treturn [self rac_channelForControlEvents:UIControlEventAllEditingEvents key:@keypath(self.text) nilValue:@\"\"];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITextView+RACSignalSupport.h",
    "content": "//\n//  UITextView+RACSignalSupport.h\n//  ReactiveCocoa\n//\n//  Created by Cody Krieger on 5/18/12.\n//  Copyright (c) 2012 Cody Krieger. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class RACDelegateProxy;\n@class RACSignal;\n\n@interface UITextView (RACSignalSupport)\n\n/// A delegate proxy which will be set as the receiver's delegate when any of the\n/// methods in this category are used.\n@property (nonatomic, strong, readonly) RACDelegateProxy *rac_delegateProxy;\n\n/// Creates a signal for the text of the receiver.\n///\n/// When this method is invoked, the `rac_delegateProxy` will become the\n/// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy\n/// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't\n/// know how to handle. Setting the receiver's `delegate` afterward is\n/// considered undefined behavior.\n///\n/// Returns a signal which will send the current text upon subscription, then\n/// again whenever the receiver's text is changed. The signal will complete when\n/// the receiver is deallocated.\n- (RACSignal *)rac_textSignal;\n\n@end\n\n@interface UITextView (RACSignalSupportUnavailable)\n\n- (RACSignal *)rac_signalForDelegateMethod:(SEL)method __attribute__((unavailable(\"Use -rac_signalForSelector:fromProtocol: instead\")));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/UITextView+RACSignalSupport.m",
    "content": "//\n//  UITextView+RACSignalSupport.m\n//  ReactiveCocoa\n//\n//  Created by Cody Krieger on 5/18/12.\n//  Copyright (c) 2012 Cody Krieger. All rights reserved.\n//\n\n#import \"UITextView+RACSignalSupport.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACDescription.h\"\n#import \"RACDelegateProxy.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACTuple.h\"\n#import <objc/runtime.h>\n\n@implementation UITextView (RACSignalSupport)\n\nstatic void RACUseDelegateProxy(UITextView *self) {\n    if (self.delegate == self.rac_delegateProxy) return;\n\n    self.rac_delegateProxy.rac_proxiedDelegate = self.delegate;\n    self.delegate = (id)self.rac_delegateProxy;\n}\n\n- (RACDelegateProxy *)rac_delegateProxy {\n\tRACDelegateProxy *proxy = objc_getAssociatedObject(self, _cmd);\n\tif (proxy == nil) {\n\t\tproxy = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UITextViewDelegate)];\n\t\tobjc_setAssociatedObject(self, _cmd, proxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t}\n\n\treturn proxy;\n}\n\n- (RACSignal *)rac_textSignal {\n\t@weakify(self);\n\tRACSignal *signal = [[[[[RACSignal\n\t\tdefer:^{\n\t\t\t@strongify(self);\n\t\t\treturn [RACSignal return:RACTuplePack(self)];\n\t\t}]\n\t\tconcat:[self.rac_delegateProxy signalForSelector:@selector(textViewDidChange:)]]\n\t\treduceEach:^(UITextView *x) {\n\t\t\treturn x.text;\n\t\t}]\n\t\ttakeUntil:self.rac_willDeallocSignal]\n\t\tsetNameWithFormat:@\"%@ -rac_textSignal\", RACDescription(self)];\n\n\tRACUseDelegateProxy(self);\n\n\treturn signal;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/extobjc/EXTKeyPathCoding.h",
    "content": "//\n//  EXTKeyPathCoding.h\n//  extobjc\n//\n//  Created by Justin Spahr-Summers on 19.06.12.\n//  Copyright (C) 2012 Justin Spahr-Summers.\n//  Released under the MIT license.\n//\n\n#import <Foundation/Foundation.h>\n#import \"metamacros.h\"\n\n/**\n * \\@keypath allows compile-time verification of key paths. Given a real object\n * receiver and key path:\n *\n * @code\n\nNSString *UTF8StringPath = @keypath(str.lowercaseString.UTF8String);\n// => @\"lowercaseString.UTF8String\"\n\nNSString *versionPath = @keypath(NSObject, version);\n// => @\"version\"\n\nNSString *lowercaseStringPath = @keypath(NSString.new, lowercaseString);\n// => @\"lowercaseString\"\n\n * @endcode\n *\n * ... the macro returns an \\c NSString containing all but the first path\n * component or argument (e.g., @\"lowercaseString.UTF8String\", @\"version\").\n *\n * In addition to simply creating a key path, this macro ensures that the key\n * path is valid at compile-time (causing a syntax error if not), and supports\n * refactoring, such that changing the name of the property will also update any\n * uses of \\@keypath.\n */\n#define keypath(...) \\\n    metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__))(keypath1(__VA_ARGS__))(keypath2(__VA_ARGS__))\n\n#define keypath1(PATH) \\\n    (((void)(NO && ((void)PATH, NO)), strchr(# PATH, '.') + 1))\n\n#define keypath2(OBJ, PATH) \\\n    (((void)(NO && ((void)OBJ.PATH, NO)), # PATH))\n\n/**\n * \\@collectionKeypath allows compile-time verification of key paths across collections NSArray/NSSet etc. Given a real object\n * receiver, collection object receiver and related keypaths:\n *\n * @code\n \n NSString *employessFirstNamePath = @collectionKeypath(department.employees, Employee.new, firstName)\n // => @\"employees.firstName\"\n \n NSString *employessFirstNamePath = @collectionKeypath(Department.new, employees, Employee.new, firstName)\n // => @\"employees.firstName\"\n\n * @endcode\n *\n */\n#define collectionKeypath(...) \\\n    metamacro_if_eq(3, metamacro_argcount(__VA_ARGS__))(collectionKeypath3(__VA_ARGS__))(collectionKeypath4(__VA_ARGS__))\n\n#define collectionKeypath3(PATH, COLLECTION_OBJECT, COLLECTION_PATH) ([[NSString stringWithFormat:@\"%s.%s\",keypath(PATH), keypath(COLLECTION_OBJECT, COLLECTION_PATH)] UTF8String])\n\n#define collectionKeypath4(OBJ, PATH, COLLECTION_OBJECT, COLLECTION_PATH) ([[NSString stringWithFormat:@\"%s.%s\",keypath(OBJ, PATH), keypath(COLLECTION_OBJECT, COLLECTION_PATH)] UTF8String])\n\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/extobjc/EXTRuntimeExtensions.h",
    "content": "//\n//  EXTRuntimeExtensions.h\n//  extobjc\n//\n//  Created by Justin Spahr-Summers on 2011-03-05.\n//  Copyright (C) 2012 Justin Spahr-Summers.\n//  Released under the MIT license.\n//\n\n#import <objc/runtime.h>\n\n/**\n * Describes the memory management policy of a property.\n */\ntypedef enum {\n    /**\n     * The value is assigned.\n     */\n    rac_propertyMemoryManagementPolicyAssign = 0,\n\n    /**\n     * The value is retained.\n     */\n    rac_propertyMemoryManagementPolicyRetain,\n\n    /**\n     * The value is copied.\n     */\n    rac_propertyMemoryManagementPolicyCopy\n} rac_propertyMemoryManagementPolicy;\n\n/**\n * Describes the attributes and type information of a property.\n */\ntypedef struct {\n    /**\n     * Whether this property was declared with the \\c readonly attribute.\n     */\n    BOOL readonly;\n\n    /**\n     * Whether this property was declared with the \\c nonatomic attribute.\n     */\n    BOOL nonatomic;\n\n    /**\n     * Whether the property is a weak reference.\n     */\n    BOOL weak;\n\n    /**\n     * Whether the property is eligible for garbage collection.\n     */\n    BOOL canBeCollected;\n\n    /**\n     * Whether this property is defined with \\c \\@dynamic.\n     */\n    BOOL dynamic;\n\n    /**\n     * The memory management policy for this property. This will always be\n     * #rac_propertyMemoryManagementPolicyAssign if #readonly is \\c YES.\n     */\n    rac_propertyMemoryManagementPolicy memoryManagementPolicy;\n\n    /**\n     * The selector for the getter of this property. This will reflect any\n     * custom \\c getter= attribute provided in the property declaration, or the\n     * inferred getter name otherwise.\n     */\n    SEL getter;\n\n    /**\n     * The selector for the setter of this property. This will reflect any\n     * custom \\c setter= attribute provided in the property declaration, or the\n     * inferred setter name otherwise.\n     *\n     * @note If #readonly is \\c YES, this value will represent what the setter\n     * \\e would be, if the property were writable.\n     */\n    SEL setter;\n\n    /**\n     * The backing instance variable for this property, or \\c NULL if \\c\n     * \\c @synthesize was not used, and therefore no instance variable exists. This\n     * would also be the case if the property is implemented dynamically.\n     */\n    const char *ivar;\n\n    /**\n     * If this property is defined as being an instance of a specific class,\n     * this will be the class object representing it.\n     *\n     * This will be \\c nil if the property was defined as type \\c id, if the\n     * property is not of an object type, or if the class could not be found at\n     * runtime.\n     */\n    Class objectClass;\n\n    /**\n     * The type encoding for the value of this property. This is the type as it\n     * would be returned by the \\c \\@encode() directive.\n     */\n    char type[];\n} rac_propertyAttributes;\n\n/**\n * Finds the instance method named \\a aSelector on \\a aClass and returns it, or\n * returns \\c NULL if no such instance method exists. Unlike \\c\n * class_getInstanceMethod(), this does not search superclasses.\n *\n * @note To get class methods in this manner, use a metaclass for \\a aClass.\n */\nMethod rac_getImmediateInstanceMethod (Class aClass, SEL aSelector);\n\n/**\n * Returns a pointer to a structure containing information about \\a property.\n * You must \\c free() the returned pointer. Returns \\c NULL if there is an error\n * obtaining information from \\a property.\n */\nrac_propertyAttributes *rac_copyPropertyAttributes (objc_property_t property);\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/extobjc/EXTRuntimeExtensions.m",
    "content": "//\n//  EXTRuntimeExtensions.m\n//  extobjc\n//\n//  Created by Justin Spahr-Summers on 2011-03-05.\n//  Copyright (C) 2012 Justin Spahr-Summers.\n//  Released under the MIT license.\n//\n\n#import <ReactiveCocoa/EXTRuntimeExtensions.h>\n\n#import <ctype.h>\n#import <Foundation/Foundation.h>\n#import <libkern/OSAtomic.h>\n#import <objc/message.h>\n#import <pthread.h>\n#import <stdio.h>\n#import <stdlib.h>\n#import <string.h>\n\nrac_propertyAttributes *rac_copyPropertyAttributes (objc_property_t property) {\n    const char * const attrString = property_getAttributes(property);\n    if (!attrString) {\n        fprintf(stderr, \"ERROR: Could not get attribute string from property %s\\n\", property_getName(property));\n        return NULL;\n    }\n\n    if (attrString[0] != 'T') {\n        fprintf(stderr, \"ERROR: Expected attribute string \\\"%s\\\" for property %s to start with 'T'\\n\", attrString, property_getName(property));\n        return NULL;\n    }\n\n    const char *typeString = attrString + 1;\n    const char *next = NSGetSizeAndAlignment(typeString, NULL, NULL);\n    if (!next) {\n        fprintf(stderr, \"ERROR: Could not read past type in attribute string \\\"%s\\\" for property %s\\n\", attrString, property_getName(property));\n        return NULL;\n    }\n\n    size_t typeLength = (size_t)(next - typeString);\n    if (!typeLength) {\n        fprintf(stderr, \"ERROR: Invalid type in attribute string \\\"%s\\\" for property %s\\n\", attrString, property_getName(property));\n        return NULL;\n    }\n\n    // allocate enough space for the structure and the type string (plus a NUL)\n    rac_propertyAttributes *attributes = calloc(1, sizeof(rac_propertyAttributes) + typeLength + 1);\n    if (!attributes) {\n        fprintf(stderr, \"ERROR: Could not allocate rac_propertyAttributes structure for attribute string \\\"%s\\\" for property %s\\n\", attrString, property_getName(property));\n        return NULL;\n    }\n\n    // copy the type string\n    strncpy(attributes->type, typeString, typeLength);\n    attributes->type[typeLength] = '\\0';\n\n    // if this is an object type, and immediately followed by a quoted string...\n    if (typeString[0] == *(@encode(id)) && typeString[1] == '\"') {\n        // we should be able to extract a class name\n        const char *className = typeString + 2;\n        next = strchr(className, '\"');\n\n        if (!next) {\n            fprintf(stderr, \"ERROR: Could not read class name in attribute string \\\"%s\\\" for property %s\\n\", attrString, property_getName(property));\n            return NULL;\n        }\n\n        if (className != next) {\n            size_t classNameLength = (size_t)(next - className);\n            char trimmedName[classNameLength + 1];\n\n            strncpy(trimmedName, className, classNameLength);\n            trimmedName[classNameLength] = '\\0';\n\n            // attempt to look up the class in the runtime\n            attributes->objectClass = objc_getClass(trimmedName);\n        }\n    }\n\n    if (*next != '\\0') {\n        // skip past any junk before the first flag\n        next = strchr(next, ',');\n    }\n\n    while (next && *next == ',') {\n        char flag = next[1];\n        next += 2;\n\n        switch (flag) {\n        case '\\0':\n            break;\n\n        case 'R':\n            attributes->readonly = YES;\n            break;\n\n        case 'C':\n            attributes->memoryManagementPolicy = rac_propertyMemoryManagementPolicyCopy;\n            break;\n\n        case '&':\n            attributes->memoryManagementPolicy = rac_propertyMemoryManagementPolicyRetain;\n            break;\n\n        case 'N':\n            attributes->nonatomic = YES;\n            break;\n\n        case 'G':\n        case 'S':\n            {\n                const char *nextFlag = strchr(next, ',');\n                SEL name = NULL;\n\n                if (!nextFlag) {\n                    // assume that the rest of the string is the selector\n                    const char *selectorString = next;\n                    next = \"\";\n\n                    name = sel_registerName(selectorString);\n                } else {\n                    size_t selectorLength = (size_t)(nextFlag - next);\n                    if (!selectorLength) {\n                        fprintf(stderr, \"ERROR: Found zero length selector name in attribute string \\\"%s\\\" for property %s\\n\", attrString, property_getName(property));\n                        goto errorOut;\n                    }\n\n                    char selectorString[selectorLength + 1];\n\n                    strncpy(selectorString, next, selectorLength);\n                    selectorString[selectorLength] = '\\0';\n\n                    name = sel_registerName(selectorString);\n                    next = nextFlag;\n                }\n\n                if (flag == 'G')\n                    attributes->getter = name;\n                else\n                    attributes->setter = name;\n            }\n\n            break;\n\n        case 'D':\n            attributes->dynamic = YES;\n            attributes->ivar = NULL;\n            break;\n\n        case 'V':\n            // assume that the rest of the string (if present) is the ivar name\n            if (*next == '\\0') {\n                // if there's nothing there, let's assume this is dynamic\n                attributes->ivar = NULL;\n            } else {\n                attributes->ivar = next;\n                next = \"\";\n            }\n\n            break;\n\n        case 'W':\n            attributes->weak = YES;\n            break;\n\n        case 'P':\n            attributes->canBeCollected = YES;\n            break;\n\n        case 't':\n            fprintf(stderr, \"ERROR: Old-style type encoding is unsupported in attribute string \\\"%s\\\" for property %s\\n\", attrString, property_getName(property));\n\n            // skip over this type encoding\n            while (*next != ',' && *next != '\\0')\n                ++next;\n\n            break;\n\n        default:\n            fprintf(stderr, \"ERROR: Unrecognized attribute string flag '%c' in attribute string \\\"%s\\\" for property %s\\n\", flag, attrString, property_getName(property));\n        }\n    }\n\n    if (next && *next != '\\0') {\n        fprintf(stderr, \"Warning: Unparsed data \\\"%s\\\" in attribute string \\\"%s\\\" for property %s\\n\", next, attrString, property_getName(property));\n    }\n\n    if (!attributes->getter) {\n        // use the property name as the getter by default\n        attributes->getter = sel_registerName(property_getName(property));\n    }\n\n    if (!attributes->setter) {\n        const char *propertyName = property_getName(property);\n        size_t propertyNameLength = strlen(propertyName);\n\n        // we want to transform the name to setProperty: style\n        size_t setterLength = propertyNameLength + 4;\n\n        char setterName[setterLength + 1];\n        strncpy(setterName, \"set\", 3);\n        strncpy(setterName + 3, propertyName, propertyNameLength);\n\n        // capitalize property name for the setter\n        setterName[3] = (char)toupper(setterName[3]);\n\n        setterName[setterLength - 1] = ':';\n        setterName[setterLength] = '\\0';\n\n        attributes->setter = sel_registerName(setterName);\n    }\n\n    return attributes;\n\nerrorOut:\n    free(attributes);\n    return NULL;\n}\n\nMethod rac_getImmediateInstanceMethod (Class aClass, SEL aSelector) {\n    unsigned methodCount = 0;\n    Method *methods = class_copyMethodList(aClass, &methodCount);\n    Method foundMethod = NULL;\n\n    for (unsigned methodIndex = 0;methodIndex < methodCount;++methodIndex) {\n        if (method_getName(methods[methodIndex]) == aSelector) {\n            foundMethod = methods[methodIndex];\n            break;\n        }\n    }\n\n    free(methods);\n    return foundMethod;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/extobjc/EXTScope.h",
    "content": "//\n//  EXTScope.h\n//  extobjc\n//\n//  Created by Justin Spahr-Summers on 2011-05-04.\n//  Copyright (C) 2012 Justin Spahr-Summers.\n//  Released under the MIT license.\n//\n\n#import \"metamacros.h\"\n\n/**\n * \\@onExit defines some code to be executed when the current scope exits. The\n * code must be enclosed in braces and terminated with a semicolon, and will be\n * executed regardless of how the scope is exited, including from exceptions,\n * \\c goto, \\c return, \\c break, and \\c continue.\n *\n * Provided code will go into a block to be executed later. Keep this in mind as\n * it pertains to memory management, restrictions on assignment, etc. Because\n * the code is used within a block, \\c return is a legal (though perhaps\n * confusing) way to exit the cleanup block early.\n *\n * Multiple \\@onExit statements in the same scope are executed in reverse\n * lexical order. This helps when pairing resource acquisition with \\@onExit\n * statements, as it guarantees teardown in the opposite order of acquisition.\n *\n * @note This statement cannot be used within scopes defined without braces\n * (like a one line \\c if). In practice, this is not an issue, since \\@onExit is\n * a useless construct in such a case anyways.\n */\n#define onExit \\\n    rac_keywordify \\\n    __strong rac_cleanupBlock_t metamacro_concat(rac_exitBlock_, __LINE__) __attribute__((cleanup(rac_executeCleanupBlock), unused)) = ^\n\n/**\n * Creates \\c __weak shadow variables for each of the variables provided as\n * arguments, which can later be made strong again with #strongify.\n *\n * This is typically used to weakly reference variables in a block, but then\n * ensure that the variables stay alive during the actual execution of the block\n * (if they were live upon entry).\n *\n * See #strongify for an example of usage.\n */\n#define weakify(...) \\\n    rac_keywordify \\\n    metamacro_foreach_cxt(rac_weakify_,, __weak, __VA_ARGS__)\n\n/**\n * Like #weakify, but uses \\c __unsafe_unretained instead, for targets or\n * classes that do not support weak references.\n */\n#define unsafeify(...) \\\n    rac_keywordify \\\n    metamacro_foreach_cxt(rac_weakify_,, __unsafe_unretained, __VA_ARGS__)\n\n/**\n * Strongly references each of the variables provided as arguments, which must\n * have previously been passed to #weakify.\n *\n * The strong references created will shadow the original variable names, such\n * that the original names can be used without issue (and a significantly\n * reduced risk of retain cycles) in the current scope.\n *\n * @code\n\n    id foo = [[NSObject alloc] init];\n    id bar = [[NSObject alloc] init];\n\n    @weakify(foo, bar);\n\n    // this block will not keep 'foo' or 'bar' alive\n    BOOL (^matchesFooOrBar)(id) = ^ BOOL (id obj){\n        // but now, upon entry, 'foo' and 'bar' will stay alive until the block has\n        // finished executing\n        @strongify(foo, bar);\n\n        return [foo isEqual:obj] || [bar isEqual:obj];\n    };\n\n * @endcode\n */\n#define strongify(...) \\\n    rac_keywordify \\\n    _Pragma(\"clang diagnostic push\") \\\n    _Pragma(\"clang diagnostic ignored \\\"-Wshadow\\\"\") \\\n    metamacro_foreach(rac_strongify_,, __VA_ARGS__) \\\n    _Pragma(\"clang diagnostic pop\")\n\n/*** implementation details follow ***/\ntypedef void (^rac_cleanupBlock_t)();\n\nstatic inline void rac_executeCleanupBlock (__strong rac_cleanupBlock_t *block) {\n    (*block)();\n}\n\n#define rac_weakify_(INDEX, CONTEXT, VAR) \\\n    CONTEXT __typeof__(VAR) metamacro_concat(VAR, _weak_) = (VAR);\n\n#define rac_strongify_(INDEX, VAR) \\\n    __strong __typeof__(VAR) VAR = metamacro_concat(VAR, _weak_);\n\n// Details about the choice of backing keyword:\n//\n// The use of @try/@catch/@finally can cause the compiler to suppress\n// return-type warnings.\n// The use of @autoreleasepool {} is not optimized away by the compiler,\n// resulting in superfluous creation of autorelease pools.\n//\n// Since neither option is perfect, and with no other alternatives, the\n// compromise is to use @autorelease in DEBUG builds to maintain compiler\n// analysis, and to use @try/@catch otherwise to avoid insertion of unnecessary\n// autorelease pools.\n#if DEBUG\n#define rac_keywordify autoreleasepool {}\n#else\n#define rac_keywordify try {} @catch (...) {}\n#endif\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Objective-C/extobjc/metamacros.h",
    "content": "/**\n * Macros for metaprogramming\n * ExtendedC\n *\n * Copyright (C) 2012 Justin Spahr-Summers\n * Released under the MIT license\n */\n\n#ifndef EXTC_METAMACROS_H\n#define EXTC_METAMACROS_H\n\n/**\n * Executes one or more expressions (which may have a void type, such as a call\n * to a function that returns no value) and always returns true.\n */\n#define metamacro_exprify(...) \\\n    ((__VA_ARGS__), true)\n\n/**\n * Returns a string representation of VALUE after full macro expansion.\n */\n#define metamacro_stringify(VALUE) \\\n        metamacro_stringify_(VALUE)\n\n/**\n * Returns A and B concatenated after full macro expansion.\n */\n#define metamacro_concat(A, B) \\\n        metamacro_concat_(A, B)\n\n/**\n * Returns the Nth variadic argument (starting from zero). At least\n * N + 1 variadic arguments must be given. N must be between zero and twenty,\n * inclusive.\n */\n#define metamacro_at(N, ...) \\\n        metamacro_concat(metamacro_at, N)(__VA_ARGS__)\n\n/**\n * Returns the number of arguments (up to twenty) provided to the macro. At\n * least one argument must be provided.\n *\n * Inspired by P99: http://p99.gforge.inria.fr\n */\n#define metamacro_argcount(...) \\\n        metamacro_at(20, __VA_ARGS__, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)\n\n/**\n * Identical to #metamacro_foreach_cxt, except that no CONTEXT argument is\n * given. Only the index and current argument will thus be passed to MACRO.\n */\n#define metamacro_foreach(MACRO, SEP, ...) \\\n        metamacro_foreach_cxt(metamacro_foreach_iter, SEP, MACRO, __VA_ARGS__)\n\n/**\n * For each consecutive variadic argument (up to twenty), MACRO is passed the\n * zero-based index of the current argument, CONTEXT, and then the argument\n * itself. The results of adjoining invocations of MACRO are then separated by\n * SEP.\n *\n * Inspired by P99: http://p99.gforge.inria.fr\n */\n#define metamacro_foreach_cxt(MACRO, SEP, CONTEXT, ...) \\\n        metamacro_concat(metamacro_foreach_cxt, metamacro_argcount(__VA_ARGS__))(MACRO, SEP, CONTEXT, __VA_ARGS__)\n\n/**\n * Identical to #metamacro_foreach_cxt. This can be used when the former would\n * fail due to recursive macro expansion.\n */\n#define metamacro_foreach_cxt_recursive(MACRO, SEP, CONTEXT, ...) \\\n        metamacro_concat(metamacro_foreach_cxt_recursive, metamacro_argcount(__VA_ARGS__))(MACRO, SEP, CONTEXT, __VA_ARGS__)\n\n/**\n * In consecutive order, appends each variadic argument (up to twenty) onto\n * BASE. The resulting concatenations are then separated by SEP.\n *\n * This is primarily useful to manipulate a list of macro invocations into instead\n * invoking a different, possibly related macro.\n */\n#define metamacro_foreach_concat(BASE, SEP, ...) \\\n        metamacro_foreach_cxt(metamacro_foreach_concat_iter, SEP, BASE, __VA_ARGS__)\n\n/**\n * Iterates COUNT times, each time invoking MACRO with the current index\n * (starting at zero) and CONTEXT. The results of adjoining invocations of MACRO\n * are then separated by SEP.\n *\n * COUNT must be an integer between zero and twenty, inclusive.\n */\n#define metamacro_for_cxt(COUNT, MACRO, SEP, CONTEXT) \\\n        metamacro_concat(metamacro_for_cxt, COUNT)(MACRO, SEP, CONTEXT)\n\n/**\n * Returns the first argument given. At least one argument must be provided.\n *\n * This is useful when implementing a variadic macro, where you may have only\n * one variadic argument, but no way to retrieve it (for example, because \\c ...\n * always needs to match at least one argument).\n *\n * @code\n\n#define varmacro(...) \\\n    metamacro_head(__VA_ARGS__)\n\n * @endcode\n */\n#define metamacro_head(...) \\\n        metamacro_head_(__VA_ARGS__, 0)\n\n/**\n * Returns every argument except the first. At least two arguments must be\n * provided.\n */\n#define metamacro_tail(...) \\\n        metamacro_tail_(__VA_ARGS__)\n\n/**\n * Returns the first N (up to twenty) variadic arguments as a new argument list.\n * At least N variadic arguments must be provided.\n */\n#define metamacro_take(N, ...) \\\n        metamacro_concat(metamacro_take, N)(__VA_ARGS__)\n\n/**\n * Removes the first N (up to twenty) variadic arguments from the given argument\n * list. At least N variadic arguments must be provided.\n */\n#define metamacro_drop(N, ...) \\\n        metamacro_concat(metamacro_drop, N)(__VA_ARGS__)\n\n/**\n * Decrements VAL, which must be a number between zero and twenty, inclusive.\n *\n * This is primarily useful when dealing with indexes and counts in\n * metaprogramming.\n */\n#define metamacro_dec(VAL) \\\n        metamacro_at(VAL, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)\n\n/**\n * Increments VAL, which must be a number between zero and twenty, inclusive.\n *\n * This is primarily useful when dealing with indexes and counts in\n * metaprogramming.\n */\n#define metamacro_inc(VAL) \\\n        metamacro_at(VAL, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21)\n\n/**\n * If A is equal to B, the next argument list is expanded; otherwise, the\n * argument list after that is expanded. A and B must be numbers between zero\n * and twenty, inclusive. Additionally, B must be greater than or equal to A.\n *\n * @code\n\n// expands to true\nmetamacro_if_eq(0, 0)(true)(false)\n\n// expands to false\nmetamacro_if_eq(0, 1)(true)(false)\n\n * @endcode\n *\n * This is primarily useful when dealing with indexes and counts in\n * metaprogramming.\n */\n#define metamacro_if_eq(A, B) \\\n        metamacro_concat(metamacro_if_eq, A)(B)\n\n/**\n * Identical to #metamacro_if_eq. This can be used when the former would fail\n * due to recursive macro expansion.\n */\n#define metamacro_if_eq_recursive(A, B) \\\n        metamacro_concat(metamacro_if_eq_recursive, A)(B)\n\n/**\n * Returns 1 if N is an even number, or 0 otherwise. N must be between zero and\n * twenty, inclusive.\n *\n * For the purposes of this test, zero is considered even.\n */\n#define metamacro_is_even(N) \\\n        metamacro_at(N, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1)\n\n/**\n * Returns the logical NOT of B, which must be the number zero or one.\n */\n#define metamacro_not(B) \\\n        metamacro_at(B, 1, 0)\n\n// IMPLEMENTATION DETAILS FOLLOW!\n// Do not write code that depends on anything below this line.\n#define metamacro_stringify_(VALUE) # VALUE\n#define metamacro_concat_(A, B) A ## B\n#define metamacro_foreach_iter(INDEX, MACRO, ARG) MACRO(INDEX, ARG)\n#define metamacro_head_(FIRST, ...) FIRST\n#define metamacro_tail_(FIRST, ...) __VA_ARGS__\n#define metamacro_consume_(...)\n#define metamacro_expand_(...) __VA_ARGS__\n\n// implemented from scratch so that metamacro_concat() doesn't end up nesting\n#define metamacro_foreach_concat_iter(INDEX, BASE, ARG) metamacro_foreach_concat_iter_(BASE, ARG)\n#define metamacro_foreach_concat_iter_(BASE, ARG) BASE ## ARG\n\n// metamacro_at expansions\n#define metamacro_at0(...) metamacro_head(__VA_ARGS__)\n#define metamacro_at1(_0, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at2(_0, _1, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at3(_0, _1, _2, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at4(_0, _1, _2, _3, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at5(_0, _1, _2, _3, _4, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at6(_0, _1, _2, _3, _4, _5, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at7(_0, _1, _2, _3, _4, _5, _6, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at8(_0, _1, _2, _3, _4, _5, _6, _7, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at9(_0, _1, _2, _3, _4, _5, _6, _7, _8, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at10(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at11(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at12(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at13(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at14(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at15(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at16(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at17(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at18(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at19(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) metamacro_head(__VA_ARGS__)\n#define metamacro_at20(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, ...) metamacro_head(__VA_ARGS__)\n\n// metamacro_foreach_cxt expansions\n#define metamacro_foreach_cxt0(MACRO, SEP, CONTEXT)\n#define metamacro_foreach_cxt1(MACRO, SEP, CONTEXT, _0) MACRO(0, CONTEXT, _0)\n\n#define metamacro_foreach_cxt2(MACRO, SEP, CONTEXT, _0, _1) \\\n    metamacro_foreach_cxt1(MACRO, SEP, CONTEXT, _0) \\\n    SEP \\\n    MACRO(1, CONTEXT, _1)\n\n#define metamacro_foreach_cxt3(MACRO, SEP, CONTEXT, _0, _1, _2) \\\n    metamacro_foreach_cxt2(MACRO, SEP, CONTEXT, _0, _1) \\\n    SEP \\\n    MACRO(2, CONTEXT, _2)\n\n#define metamacro_foreach_cxt4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \\\n    metamacro_foreach_cxt3(MACRO, SEP, CONTEXT, _0, _1, _2) \\\n    SEP \\\n    MACRO(3, CONTEXT, _3)\n\n#define metamacro_foreach_cxt5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \\\n    metamacro_foreach_cxt4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \\\n    SEP \\\n    MACRO(4, CONTEXT, _4)\n\n#define metamacro_foreach_cxt6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \\\n    metamacro_foreach_cxt5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \\\n    SEP \\\n    MACRO(5, CONTEXT, _5)\n\n#define metamacro_foreach_cxt7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \\\n    metamacro_foreach_cxt6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \\\n    SEP \\\n    MACRO(6, CONTEXT, _6)\n\n#define metamacro_foreach_cxt8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \\\n    metamacro_foreach_cxt7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \\\n    SEP \\\n    MACRO(7, CONTEXT, _7)\n\n#define metamacro_foreach_cxt9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \\\n    metamacro_foreach_cxt8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \\\n    SEP \\\n    MACRO(8, CONTEXT, _8)\n\n#define metamacro_foreach_cxt10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \\\n    metamacro_foreach_cxt9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \\\n    SEP \\\n    MACRO(9, CONTEXT, _9)\n\n#define metamacro_foreach_cxt11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \\\n    metamacro_foreach_cxt10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \\\n    SEP \\\n    MACRO(10, CONTEXT, _10)\n\n#define metamacro_foreach_cxt12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \\\n    metamacro_foreach_cxt11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \\\n    SEP \\\n    MACRO(11, CONTEXT, _11)\n\n#define metamacro_foreach_cxt13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \\\n    metamacro_foreach_cxt12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \\\n    SEP \\\n    MACRO(12, CONTEXT, _12)\n\n#define metamacro_foreach_cxt14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \\\n    metamacro_foreach_cxt13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \\\n    SEP \\\n    MACRO(13, CONTEXT, _13)\n\n#define metamacro_foreach_cxt15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \\\n    metamacro_foreach_cxt14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \\\n    SEP \\\n    MACRO(14, CONTEXT, _14)\n\n#define metamacro_foreach_cxt16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \\\n    metamacro_foreach_cxt15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \\\n    SEP \\\n    MACRO(15, CONTEXT, _15)\n\n#define metamacro_foreach_cxt17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \\\n    metamacro_foreach_cxt16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \\\n    SEP \\\n    MACRO(16, CONTEXT, _16)\n\n#define metamacro_foreach_cxt18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \\\n    metamacro_foreach_cxt17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \\\n    SEP \\\n    MACRO(17, CONTEXT, _17)\n\n#define metamacro_foreach_cxt19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \\\n    metamacro_foreach_cxt18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \\\n    SEP \\\n    MACRO(18, CONTEXT, _18)\n\n#define metamacro_foreach_cxt20(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) \\\n    metamacro_foreach_cxt19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \\\n    SEP \\\n    MACRO(19, CONTEXT, _19)\n\n// metamacro_foreach_cxt_recursive expansions\n#define metamacro_foreach_cxt_recursive0(MACRO, SEP, CONTEXT)\n#define metamacro_foreach_cxt_recursive1(MACRO, SEP, CONTEXT, _0) MACRO(0, CONTEXT, _0)\n\n#define metamacro_foreach_cxt_recursive2(MACRO, SEP, CONTEXT, _0, _1) \\\n    metamacro_foreach_cxt_recursive1(MACRO, SEP, CONTEXT, _0) \\\n    SEP \\\n    MACRO(1, CONTEXT, _1)\n\n#define metamacro_foreach_cxt_recursive3(MACRO, SEP, CONTEXT, _0, _1, _2) \\\n    metamacro_foreach_cxt_recursive2(MACRO, SEP, CONTEXT, _0, _1) \\\n    SEP \\\n    MACRO(2, CONTEXT, _2)\n\n#define metamacro_foreach_cxt_recursive4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \\\n    metamacro_foreach_cxt_recursive3(MACRO, SEP, CONTEXT, _0, _1, _2) \\\n    SEP \\\n    MACRO(3, CONTEXT, _3)\n\n#define metamacro_foreach_cxt_recursive5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \\\n    metamacro_foreach_cxt_recursive4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \\\n    SEP \\\n    MACRO(4, CONTEXT, _4)\n\n#define metamacro_foreach_cxt_recursive6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \\\n    metamacro_foreach_cxt_recursive5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \\\n    SEP \\\n    MACRO(5, CONTEXT, _5)\n\n#define metamacro_foreach_cxt_recursive7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \\\n    metamacro_foreach_cxt_recursive6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \\\n    SEP \\\n    MACRO(6, CONTEXT, _6)\n\n#define metamacro_foreach_cxt_recursive8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \\\n    metamacro_foreach_cxt_recursive7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \\\n    SEP \\\n    MACRO(7, CONTEXT, _7)\n\n#define metamacro_foreach_cxt_recursive9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \\\n    metamacro_foreach_cxt_recursive8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \\\n    SEP \\\n    MACRO(8, CONTEXT, _8)\n\n#define metamacro_foreach_cxt_recursive10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \\\n    metamacro_foreach_cxt_recursive9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \\\n    SEP \\\n    MACRO(9, CONTEXT, _9)\n\n#define metamacro_foreach_cxt_recursive11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \\\n    metamacro_foreach_cxt_recursive10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \\\n    SEP \\\n    MACRO(10, CONTEXT, _10)\n\n#define metamacro_foreach_cxt_recursive12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \\\n    metamacro_foreach_cxt_recursive11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \\\n    SEP \\\n    MACRO(11, CONTEXT, _11)\n\n#define metamacro_foreach_cxt_recursive13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \\\n    metamacro_foreach_cxt_recursive12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \\\n    SEP \\\n    MACRO(12, CONTEXT, _12)\n\n#define metamacro_foreach_cxt_recursive14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \\\n    metamacro_foreach_cxt_recursive13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \\\n    SEP \\\n    MACRO(13, CONTEXT, _13)\n\n#define metamacro_foreach_cxt_recursive15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \\\n    metamacro_foreach_cxt_recursive14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \\\n    SEP \\\n    MACRO(14, CONTEXT, _14)\n\n#define metamacro_foreach_cxt_recursive16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \\\n    metamacro_foreach_cxt_recursive15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \\\n    SEP \\\n    MACRO(15, CONTEXT, _15)\n\n#define metamacro_foreach_cxt_recursive17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \\\n    metamacro_foreach_cxt_recursive16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \\\n    SEP \\\n    MACRO(16, CONTEXT, _16)\n\n#define metamacro_foreach_cxt_recursive18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \\\n    metamacro_foreach_cxt_recursive17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \\\n    SEP \\\n    MACRO(17, CONTEXT, _17)\n\n#define metamacro_foreach_cxt_recursive19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \\\n    metamacro_foreach_cxt_recursive18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \\\n    SEP \\\n    MACRO(18, CONTEXT, _18)\n\n#define metamacro_foreach_cxt_recursive20(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) \\\n    metamacro_foreach_cxt_recursive19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \\\n    SEP \\\n    MACRO(19, CONTEXT, _19)\n\n// metamacro_for_cxt expansions\n#define metamacro_for_cxt0(MACRO, SEP, CONTEXT)\n#define metamacro_for_cxt1(MACRO, SEP, CONTEXT) MACRO(0, CONTEXT)\n\n#define metamacro_for_cxt2(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt1(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(1, CONTEXT)\n\n#define metamacro_for_cxt3(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt2(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(2, CONTEXT)\n\n#define metamacro_for_cxt4(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt3(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(3, CONTEXT)\n\n#define metamacro_for_cxt5(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt4(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(4, CONTEXT)\n\n#define metamacro_for_cxt6(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt5(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(5, CONTEXT)\n\n#define metamacro_for_cxt7(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt6(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(6, CONTEXT)\n\n#define metamacro_for_cxt8(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt7(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(7, CONTEXT)\n\n#define metamacro_for_cxt9(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt8(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(8, CONTEXT)\n\n#define metamacro_for_cxt10(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt9(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(9, CONTEXT)\n\n#define metamacro_for_cxt11(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt10(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(10, CONTEXT)\n\n#define metamacro_for_cxt12(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt11(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(11, CONTEXT)\n\n#define metamacro_for_cxt13(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt12(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(12, CONTEXT)\n\n#define metamacro_for_cxt14(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt13(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(13, CONTEXT)\n\n#define metamacro_for_cxt15(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt14(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(14, CONTEXT)\n\n#define metamacro_for_cxt16(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt15(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(15, CONTEXT)\n\n#define metamacro_for_cxt17(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt16(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(16, CONTEXT)\n\n#define metamacro_for_cxt18(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt17(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(17, CONTEXT)\n\n#define metamacro_for_cxt19(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt18(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(18, CONTEXT)\n\n#define metamacro_for_cxt20(MACRO, SEP, CONTEXT) \\\n    metamacro_for_cxt19(MACRO, SEP, CONTEXT) \\\n    SEP \\\n    MACRO(19, CONTEXT)\n\n// metamacro_if_eq expansions\n#define metamacro_if_eq0(VALUE) \\\n    metamacro_concat(metamacro_if_eq0_, VALUE)\n\n#define metamacro_if_eq0_0(...) __VA_ARGS__ metamacro_consume_\n#define metamacro_if_eq0_1(...) metamacro_expand_\n#define metamacro_if_eq0_2(...) metamacro_expand_\n#define metamacro_if_eq0_3(...) metamacro_expand_\n#define metamacro_if_eq0_4(...) metamacro_expand_\n#define metamacro_if_eq0_5(...) metamacro_expand_\n#define metamacro_if_eq0_6(...) metamacro_expand_\n#define metamacro_if_eq0_7(...) metamacro_expand_\n#define metamacro_if_eq0_8(...) metamacro_expand_\n#define metamacro_if_eq0_9(...) metamacro_expand_\n#define metamacro_if_eq0_10(...) metamacro_expand_\n#define metamacro_if_eq0_11(...) metamacro_expand_\n#define metamacro_if_eq0_12(...) metamacro_expand_\n#define metamacro_if_eq0_13(...) metamacro_expand_\n#define metamacro_if_eq0_14(...) metamacro_expand_\n#define metamacro_if_eq0_15(...) metamacro_expand_\n#define metamacro_if_eq0_16(...) metamacro_expand_\n#define metamacro_if_eq0_17(...) metamacro_expand_\n#define metamacro_if_eq0_18(...) metamacro_expand_\n#define metamacro_if_eq0_19(...) metamacro_expand_\n#define metamacro_if_eq0_20(...) metamacro_expand_\n\n#define metamacro_if_eq1(VALUE) metamacro_if_eq0(metamacro_dec(VALUE))\n#define metamacro_if_eq2(VALUE) metamacro_if_eq1(metamacro_dec(VALUE))\n#define metamacro_if_eq3(VALUE) metamacro_if_eq2(metamacro_dec(VALUE))\n#define metamacro_if_eq4(VALUE) metamacro_if_eq3(metamacro_dec(VALUE))\n#define metamacro_if_eq5(VALUE) metamacro_if_eq4(metamacro_dec(VALUE))\n#define metamacro_if_eq6(VALUE) metamacro_if_eq5(metamacro_dec(VALUE))\n#define metamacro_if_eq7(VALUE) metamacro_if_eq6(metamacro_dec(VALUE))\n#define metamacro_if_eq8(VALUE) metamacro_if_eq7(metamacro_dec(VALUE))\n#define metamacro_if_eq9(VALUE) metamacro_if_eq8(metamacro_dec(VALUE))\n#define metamacro_if_eq10(VALUE) metamacro_if_eq9(metamacro_dec(VALUE))\n#define metamacro_if_eq11(VALUE) metamacro_if_eq10(metamacro_dec(VALUE))\n#define metamacro_if_eq12(VALUE) metamacro_if_eq11(metamacro_dec(VALUE))\n#define metamacro_if_eq13(VALUE) metamacro_if_eq12(metamacro_dec(VALUE))\n#define metamacro_if_eq14(VALUE) metamacro_if_eq13(metamacro_dec(VALUE))\n#define metamacro_if_eq15(VALUE) metamacro_if_eq14(metamacro_dec(VALUE))\n#define metamacro_if_eq16(VALUE) metamacro_if_eq15(metamacro_dec(VALUE))\n#define metamacro_if_eq17(VALUE) metamacro_if_eq16(metamacro_dec(VALUE))\n#define metamacro_if_eq18(VALUE) metamacro_if_eq17(metamacro_dec(VALUE))\n#define metamacro_if_eq19(VALUE) metamacro_if_eq18(metamacro_dec(VALUE))\n#define metamacro_if_eq20(VALUE) metamacro_if_eq19(metamacro_dec(VALUE))\n\n// metamacro_if_eq_recursive expansions\n#define metamacro_if_eq_recursive0(VALUE) \\\n    metamacro_concat(metamacro_if_eq_recursive0_, VALUE)\n\n#define metamacro_if_eq_recursive0_0(...) __VA_ARGS__ metamacro_consume_\n#define metamacro_if_eq_recursive0_1(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_2(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_3(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_4(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_5(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_6(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_7(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_8(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_9(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_10(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_11(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_12(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_13(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_14(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_15(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_16(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_17(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_18(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_19(...) metamacro_expand_\n#define metamacro_if_eq_recursive0_20(...) metamacro_expand_\n\n#define metamacro_if_eq_recursive1(VALUE) metamacro_if_eq_recursive0(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive2(VALUE) metamacro_if_eq_recursive1(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive3(VALUE) metamacro_if_eq_recursive2(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive4(VALUE) metamacro_if_eq_recursive3(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive5(VALUE) metamacro_if_eq_recursive4(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive6(VALUE) metamacro_if_eq_recursive5(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive7(VALUE) metamacro_if_eq_recursive6(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive8(VALUE) metamacro_if_eq_recursive7(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive9(VALUE) metamacro_if_eq_recursive8(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive10(VALUE) metamacro_if_eq_recursive9(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive11(VALUE) metamacro_if_eq_recursive10(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive12(VALUE) metamacro_if_eq_recursive11(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive13(VALUE) metamacro_if_eq_recursive12(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive14(VALUE) metamacro_if_eq_recursive13(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive15(VALUE) metamacro_if_eq_recursive14(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive16(VALUE) metamacro_if_eq_recursive15(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive17(VALUE) metamacro_if_eq_recursive16(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive18(VALUE) metamacro_if_eq_recursive17(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive19(VALUE) metamacro_if_eq_recursive18(metamacro_dec(VALUE))\n#define metamacro_if_eq_recursive20(VALUE) metamacro_if_eq_recursive19(metamacro_dec(VALUE))\n\n// metamacro_take expansions\n#define metamacro_take0(...)\n#define metamacro_take1(...) metamacro_head(__VA_ARGS__)\n#define metamacro_take2(...) metamacro_head(__VA_ARGS__), metamacro_take1(metamacro_tail(__VA_ARGS__))\n#define metamacro_take3(...) metamacro_head(__VA_ARGS__), metamacro_take2(metamacro_tail(__VA_ARGS__))\n#define metamacro_take4(...) metamacro_head(__VA_ARGS__), metamacro_take3(metamacro_tail(__VA_ARGS__))\n#define metamacro_take5(...) metamacro_head(__VA_ARGS__), metamacro_take4(metamacro_tail(__VA_ARGS__))\n#define metamacro_take6(...) metamacro_head(__VA_ARGS__), metamacro_take5(metamacro_tail(__VA_ARGS__))\n#define metamacro_take7(...) metamacro_head(__VA_ARGS__), metamacro_take6(metamacro_tail(__VA_ARGS__))\n#define metamacro_take8(...) metamacro_head(__VA_ARGS__), metamacro_take7(metamacro_tail(__VA_ARGS__))\n#define metamacro_take9(...) metamacro_head(__VA_ARGS__), metamacro_take8(metamacro_tail(__VA_ARGS__))\n#define metamacro_take10(...) metamacro_head(__VA_ARGS__), metamacro_take9(metamacro_tail(__VA_ARGS__))\n#define metamacro_take11(...) metamacro_head(__VA_ARGS__), metamacro_take10(metamacro_tail(__VA_ARGS__))\n#define metamacro_take12(...) metamacro_head(__VA_ARGS__), metamacro_take11(metamacro_tail(__VA_ARGS__))\n#define metamacro_take13(...) metamacro_head(__VA_ARGS__), metamacro_take12(metamacro_tail(__VA_ARGS__))\n#define metamacro_take14(...) metamacro_head(__VA_ARGS__), metamacro_take13(metamacro_tail(__VA_ARGS__))\n#define metamacro_take15(...) metamacro_head(__VA_ARGS__), metamacro_take14(metamacro_tail(__VA_ARGS__))\n#define metamacro_take16(...) metamacro_head(__VA_ARGS__), metamacro_take15(metamacro_tail(__VA_ARGS__))\n#define metamacro_take17(...) metamacro_head(__VA_ARGS__), metamacro_take16(metamacro_tail(__VA_ARGS__))\n#define metamacro_take18(...) metamacro_head(__VA_ARGS__), metamacro_take17(metamacro_tail(__VA_ARGS__))\n#define metamacro_take19(...) metamacro_head(__VA_ARGS__), metamacro_take18(metamacro_tail(__VA_ARGS__))\n#define metamacro_take20(...) metamacro_head(__VA_ARGS__), metamacro_take19(metamacro_tail(__VA_ARGS__))\n\n// metamacro_drop expansions\n#define metamacro_drop0(...) __VA_ARGS__\n#define metamacro_drop1(...) metamacro_tail(__VA_ARGS__)\n#define metamacro_drop2(...) metamacro_drop1(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop3(...) metamacro_drop2(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop4(...) metamacro_drop3(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop5(...) metamacro_drop4(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop6(...) metamacro_drop5(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop7(...) metamacro_drop6(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop8(...) metamacro_drop7(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop9(...) metamacro_drop8(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop10(...) metamacro_drop9(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop11(...) metamacro_drop10(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop12(...) metamacro_drop11(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop13(...) metamacro_drop12(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop14(...) metamacro_drop13(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop15(...) metamacro_drop14(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop16(...) metamacro_drop15(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop17(...) metamacro_drop16(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop18(...) metamacro_drop17(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop19(...) metamacro_drop18(metamacro_tail(__VA_ARGS__))\n#define metamacro_drop20(...) metamacro_drop19(metamacro_tail(__VA_ARGS__))\n\n#endif\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/ReactiveCocoa.h",
    "content": "//\n//  ReactiveCocoa.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/5/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n//! Project version number for ReactiveCocoa.\nFOUNDATION_EXPORT double ReactiveCocoaVersionNumber;\n\n//! Project version string for ReactiveCocoa.\nFOUNDATION_EXPORT const unsigned char ReactiveCocoaVersionString[];\n\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import <ReactiveCocoa/EXTScope.h>\n#import <ReactiveCocoa/NSArray+RACSequenceAdditions.h>\n#import <ReactiveCocoa/NSData+RACSupport.h>\n#import <ReactiveCocoa/NSDictionary+RACSequenceAdditions.h>\n#import <ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h>\n#import <ReactiveCocoa/NSFileHandle+RACSupport.h>\n#import <ReactiveCocoa/NSNotificationCenter+RACSupport.h>\n#import <ReactiveCocoa/NSObject+RACDeallocating.h>\n#import <ReactiveCocoa/NSObject+RACLifting.h>\n#import <ReactiveCocoa/NSObject+RACPropertySubscribing.h>\n#import <ReactiveCocoa/NSObject+RACSelectorSignal.h>\n#import <ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h>\n#import <ReactiveCocoa/NSSet+RACSequenceAdditions.h>\n#import <ReactiveCocoa/NSString+RACSequenceAdditions.h>\n#import <ReactiveCocoa/NSString+RACSupport.h>\n#import <ReactiveCocoa/NSIndexSet+RACSequenceAdditions.h>\n#import <ReactiveCocoa/NSUserDefaults+RACSupport.h>\n#import <ReactiveCocoa/RACBehaviorSubject.h>\n#import <ReactiveCocoa/RACChannel.h>\n#import <ReactiveCocoa/RACCommand.h>\n#import <ReactiveCocoa/RACCompoundDisposable.h>\n#import <ReactiveCocoa/RACDisposable.h>\n#import <ReactiveCocoa/RACDynamicPropertySuperclass.h>\n#import <ReactiveCocoa/RACEvent.h>\n#import <ReactiveCocoa/RACGroupedSignal.h>\n#import <ReactiveCocoa/RACKVOChannel.h>\n#import <ReactiveCocoa/RACMulticastConnection.h>\n#import <ReactiveCocoa/RACQueueScheduler.h>\n#import <ReactiveCocoa/RACQueueScheduler+Subclass.h>\n#import <ReactiveCocoa/RACReplaySubject.h>\n#import <ReactiveCocoa/RACScheduler.h>\n#import <ReactiveCocoa/RACScheduler+Subclass.h>\n#import <ReactiveCocoa/RACScopedDisposable.h>\n#import <ReactiveCocoa/RACSequence.h>\n#import <ReactiveCocoa/RACSerialDisposable.h>\n#import <ReactiveCocoa/RACSignal+Operations.h>\n#import <ReactiveCocoa/RACSignal.h>\n#import <ReactiveCocoa/RACStream.h>\n#import <ReactiveCocoa/RACSubject.h>\n#import <ReactiveCocoa/RACSubscriber.h>\n#import <ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h>\n#import <ReactiveCocoa/RACTargetQueueScheduler.h>\n#import <ReactiveCocoa/RACTestScheduler.h>\n#import <ReactiveCocoa/RACTuple.h>\n#import <ReactiveCocoa/RACUnit.h>\n\n#if TARGET_OS_WATCH\n#elif TARGET_OS_IOS || TARGET_OS_TV\n\t#import <ReactiveCocoa/UIButton+RACCommandSupport.h>\n\t#import <ReactiveCocoa/UICollectionReusableView+RACSignalSupport.h>\n\t#import <ReactiveCocoa/UIControl+RACSignalSupport.h>\n\t#import <ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h>\n\t#import <ReactiveCocoa/UISegmentedControl+RACSignalSupport.h>\n\t#import <ReactiveCocoa/UITableViewCell+RACSignalSupport.h>\n\t#import <ReactiveCocoa/UITableViewHeaderFooterView+RACSignalSupport.h>\n\t#import <ReactiveCocoa/UITextField+RACSignalSupport.h>\n\t#import <ReactiveCocoa/UITextView+RACSignalSupport.h>\n\n\t#if TARGET_OS_IOS\n\t\t#import <ReactiveCocoa/NSURLConnection+RACSupport.h>\n\t\t#import <ReactiveCocoa/UIStepper+RACSignalSupport.h>\n\t\t#import <ReactiveCocoa/UIDatePicker+RACSignalSupport.h>\n\t\t#import <ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h>\n\t\t#import <ReactiveCocoa/UIAlertView+RACSignalSupport.h>\n\t\t#import <ReactiveCocoa/UIActionSheet+RACSignalSupport.h>\n\t\t#import <ReactiveCocoa/MKAnnotationView+RACSignalSupport.h>\n\t\t#import <ReactiveCocoa/UIImagePickerController+RACSignalSupport.h>\n\t\t#import <ReactiveCocoa/UIRefreshControl+RACCommandSupport.h>\n\t\t#import <ReactiveCocoa/UISlider+RACSignalSupport.h>\n\t\t#import <ReactiveCocoa/UISwitch+RACSignalSupport.h>\n\t#endif\n#elif TARGET_OS_MAC\n\t#import <ReactiveCocoa/NSControl+RACCommandSupport.h>\n\t#import <ReactiveCocoa/NSControl+RACTextSignalSupport.h>\n\t#import <ReactiveCocoa/NSObject+RACAppKitBindings.h>\n\t#import <ReactiveCocoa/NSText+RACSignalSupport.h>\n\t#import <ReactiveCocoa/NSURLConnection+RACSupport.h>\n#endif\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Action.swift",
    "content": "import Foundation\nimport enum Result.NoError\n\n/// Represents an action that will do some work when executed with a value of\n/// type `Input`, then return zero or more values of type `Output` and/or fail\n/// with an error of type `Error`. If no failure should be possible, NoError can\n/// be specified for the `Error` parameter.\n///\n/// Actions enforce serial execution. Any attempt to execute an action multiple\n/// times concurrently will return an error.\npublic final class Action<Input, Output, Error: ErrorType> {\n\tprivate let executeClosure: Input -> SignalProducer<Output, Error>\n\tprivate let eventsObserver: Signal<Event<Output, Error>, NoError>.Observer\n\n\t/// A signal of all events generated from applications of the Action.\n\t///\n\t/// In other words, this will send every `Event` from every signal generated\n\t/// by each SignalProducer returned from apply().\n\tpublic let events: Signal<Event<Output, Error>, NoError>\n\n\t/// A signal of all values generated from applications of the Action.\n\t///\n\t/// In other words, this will send every value from every signal generated\n\t/// by each SignalProducer returned from apply().\n\tpublic let values: Signal<Output, NoError>\n\n\t/// A signal of all errors generated from applications of the Action.\n\t///\n\t/// In other words, this will send errors from every signal generated by\n\t/// each SignalProducer returned from apply().\n\tpublic let errors: Signal<Error, NoError>\n\n\t/// Whether the action is currently executing.\n\tpublic var executing: AnyProperty<Bool> {\n\t\treturn AnyProperty(_executing)\n\t}\n\n\tprivate let _executing: MutableProperty<Bool> = MutableProperty(false)\n\n\t/// Whether the action is currently enabled.\n\tpublic var enabled: AnyProperty<Bool> {\n\t\treturn AnyProperty(_enabled)\n\t}\n\n\tprivate let _enabled: MutableProperty<Bool> = MutableProperty(false)\n\n\t/// Whether the instantiator of this action wants it to be enabled.\n\tprivate let userEnabled: AnyProperty<Bool>\n\n\t/// Lazy creation and storage of a UI bindable `CocoaAction`. The default behavior\n\t/// force casts the AnyObject? input to match the action's `Input` type. This makes\n\t/// it unsafe for use when the action is parameterized for something like `Void`\n\t/// input. In those cases, explicitly assign a value to this property that transforms\n\t/// the input to suit your needs.\n\tpublic lazy var unsafeCocoaAction: CocoaAction = CocoaAction(self) { $0 as! Input }\n\n\t/// This queue is used for read-modify-write operations on the `_executing`\n\t/// property.\n\tprivate let executingQueue = dispatch_queue_create(\"org.reactivecocoa.ReactiveCocoa.Action.executingQueue\", DISPATCH_QUEUE_SERIAL)\n\n\t/// Whether the action should be enabled for the given combination of user\n\t/// enabledness and executing status.\n\tprivate static func shouldBeEnabled(userEnabled userEnabled: Bool, executing: Bool) -> Bool {\n\t\treturn userEnabled && !executing\n\t}\n\n\t/// Initializes an action that will be conditionally enabled, and create a\n\t/// SignalProducer for each input.\n\tpublic init<P: PropertyType where P.Value == Bool>(enabledIf: P, _ execute: Input -> SignalProducer<Output, Error>) {\n\t\texecuteClosure = execute\n\t\tuserEnabled = AnyProperty(enabledIf)\n\n\t\t(events, eventsObserver) = Signal<Event<Output, Error>, NoError>.pipe()\n\n\t\tvalues = events.map { $0.value }.ignoreNil()\n\t\terrors = events.map { $0.error }.ignoreNil()\n\n\t\t_enabled <~ enabledIf.producer\n\t\t\t.combineLatestWith(executing.producer)\n\t\t\t.map(Action.shouldBeEnabled)\n\t}\n\n\t/// Initializes an action that will be enabled by default, and create a\n\t/// SignalProducer for each input.\n\tpublic convenience init(_ execute: Input -> SignalProducer<Output, Error>) {\n\t\tself.init(enabledIf: ConstantProperty(true), execute)\n\t}\n\n\tdeinit {\n\t\teventsObserver.sendCompleted()\n\t}\n\n\t/// Creates a SignalProducer that, when started, will execute the action\n\t/// with the given input, then forward the results upon the produced Signal.\n\t///\n\t/// If the action is disabled when the returned SignalProducer is started,\n\t/// the produced signal will send `ActionError.NotEnabled`, and nothing will\n\t/// be sent upon `values` or `errors` for that particular signal.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func apply(input: Input) -> SignalProducer<Output, ActionError<Error>> {\n\t\treturn SignalProducer { observer, disposable in\n\t\t\tvar startedExecuting = false\n\n\t\t\tdispatch_sync(self.executingQueue) {\n\t\t\t\tif self._enabled.value {\n\t\t\t\t\tself._executing.value = true\n\t\t\t\t\tstartedExecuting = true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif !startedExecuting {\n\t\t\t\tobserver.sendFailed(.NotEnabled)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tself.executeClosure(input).startWithSignal { signal, signalDisposable in\n\t\t\t\tdisposable.addDisposable(signalDisposable)\n\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tobserver.action(event.mapError { .ProducerError($0) })\n\t\t\t\t\tself.eventsObserver.sendNext(event)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdisposable.addDisposable {\n\t\t\t\tself._executing.value = false\n\t\t\t}\n\t\t}\n\t}\n}\n\n/// Wraps an Action for use by a GUI control (such as `NSControl` or\n/// `UIControl`), with KVO, or with Cocoa Bindings.\npublic final class CocoaAction: NSObject {\n\t/// The selector that a caller should invoke upon a CocoaAction in order to\n\t/// execute it.\n\tpublic static let selector: Selector = \"execute:\"\n\n\t/// Whether the action is enabled.\n\t///\n\t/// This property will only change on the main thread, and will generate a\n\t/// KVO notification for every change.\n\tpublic var enabled: Bool {\n\t\treturn _enabled\n\t}\n\n\t/// Whether the action is executing.\n\t///\n\t/// This property will only change on the main thread, and will generate a\n\t/// KVO notification for every change.\n\tpublic var executing: Bool {\n\t\treturn _executing\n\t}\n\n\tprivate var _enabled = false\n\tprivate var _executing = false\n\tprivate let _execute: AnyObject? -> ()\n\tprivate let disposable = CompositeDisposable()\n\n\t/// Initializes a Cocoa action that will invoke the given Action by\n\t/// transforming the object given to execute().\n\tpublic init<Input, Output, Error>(_ action: Action<Input, Output, Error>, _ inputTransform: AnyObject? -> Input) {\n\t\t_execute = { input in\n\t\t\tlet producer = action.apply(inputTransform(input))\n\t\t\tproducer.start()\n\t\t}\n\n\t\tsuper.init()\n\n\t\tdisposable += action.enabled.producer\n\t\t\t.observeOn(UIScheduler())\n\t\t\t.startWithNext { [weak self] value in\n\t\t\t\tself?.willChangeValueForKey(\"enabled\")\n\t\t\t\tself?._enabled = value\n\t\t\t\tself?.didChangeValueForKey(\"enabled\")\n\t\t\t}\n\n\t\tdisposable += action.executing.producer\n\t\t\t.observeOn(UIScheduler())\n\t\t\t.startWithNext { [weak self] value in\n\t\t\t\tself?.willChangeValueForKey(\"executing\")\n\t\t\t\tself?._executing = value\n\t\t\t\tself?.didChangeValueForKey(\"executing\")\n\t\t\t}\n\t}\n\n\t/// Initializes a Cocoa action that will invoke the given Action by\n\t/// always providing the given input.\n\tpublic convenience init<Input, Output, Error>(_ action: Action<Input, Output, Error>, input: Input) {\n\t\tself.init(action, { _ in input })\n\t}\n\n\tdeinit {\n\t\tdisposable.dispose()\n\t}\n\n\t/// Attempts to execute the underlying action with the given input, subject\n\t/// to the behavior described by the initializer that was used.\n\t@IBAction public func execute(input: AnyObject?) {\n\t\t_execute(input)\n\t}\n\n\tpublic override class func automaticallyNotifiesObserversForKey(key: String) -> Bool {\n\t\treturn false\n\t}\n}\n\n/// The type of error that can occur from Action.apply, where `Error` is the type of\n/// error that can be generated by the specific Action instance.\npublic enum ActionError<Error: ErrorType>: ErrorType {\n\t/// The producer returned from apply() was started while the Action was\n\t/// disabled.\n\tcase NotEnabled\n\n\t/// The producer returned from apply() sent the given error.\n\tcase ProducerError(Error)\n}\n\npublic func == <Error: Equatable>(lhs: ActionError<Error>, rhs: ActionError<Error>) -> Bool {\n\tswitch (lhs, rhs) {\n\tcase (.NotEnabled, .NotEnabled):\n\t\treturn true\n\n\tcase let (.ProducerError(left), .ProducerError(right)):\n\t\treturn left == right\n\n\tdefault:\n\t\treturn false\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Atomic.swift",
    "content": "//\n//  Atomic.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-06-10.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\nimport Foundation\n\n/// An atomic variable.\npublic final class Atomic<Value> {\n\tprivate var spinLock = OS_SPINLOCK_INIT\n\tprivate var _value: Value\n\t\n\t/// Atomically gets or sets the value of the variable.\n\tpublic var value: Value {\n\t\tget {\n\t\t\treturn withValue { $0 }\n\t\t}\n\t\n\t\tset(newValue) {\n\t\t\tmodify { _ in newValue }\n\t\t}\n\t}\n\t\n\t/// Initializes the variable with the given initial value.\n\tpublic init(_ value: Value) {\n\t\t_value = value\n\t}\n\t\n\tprivate func lock() {\n\t\tOSSpinLockLock(&spinLock)\n\t}\n\t\n\tprivate func unlock() {\n\t\tOSSpinLockUnlock(&spinLock)\n\t}\n\t\n\t/// Atomically replaces the contents of the variable.\n\t///\n\t/// Returns the old value.\n\tpublic func swap(newValue: Value) -> Value {\n\t\treturn modify { _ in newValue }\n\t}\n\n\t/// Atomically modifies the variable.\n\t///\n\t/// Returns the old value.\n\tpublic func modify(@noescape action: (Value) throws -> Value) rethrows -> Value {\n\t\tlock()\n\t\tdefer { unlock() }\n\n\t\tlet oldValue = _value\n\t\t_value = try action(_value)\n\t\treturn oldValue\n\t}\n\t\n\t/// Atomically performs an arbitrary action using the current value of the\n\t/// variable.\n\t///\n\t/// Returns the result of the action.\n\tpublic func withValue<Result>(@noescape action: (Value) throws -> Result) rethrows -> Result {\n\t\tlock()\n\t\tdefer { unlock() }\n\n\t\treturn try action(_value)\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Bag.swift",
    "content": "//\n//  Bag.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-07-10.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\n/// A uniquely identifying token for removing a value that was inserted into a\n/// Bag.\npublic final class RemovalToken {\n\tprivate var identifier: UInt?\n\n\tprivate init(identifier: UInt) {\n\t\tself.identifier = identifier\n\t}\n}\n\n/// An unordered, non-unique collection of values of type `Element`.\npublic struct Bag<Element> {\n\tprivate var elements: [BagElement<Element>] = []\n\tprivate var currentIdentifier: UInt = 0\n\n\tpublic init() {\n\t}\n\n\t/// Inserts the given value in the collection, and returns a token that can\n\t/// later be passed to removeValueForToken().\n\tpublic mutating func insert(value: Element) -> RemovalToken {\n\t\tlet (nextIdentifier, overflow) = UInt.addWithOverflow(currentIdentifier, 1)\n\t\tif overflow {\n\t\t\treindex()\n\t\t}\n\n\t\tlet token = RemovalToken(identifier: currentIdentifier)\n\t\tlet element = BagElement(value: value, identifier: currentIdentifier, token: token)\n\n\t\telements.append(element)\n\t\tcurrentIdentifier = nextIdentifier\n\n\t\treturn token\n\t}\n\n\t/// Removes a value, given the token returned from insert().\n\t///\n\t/// If the value has already been removed, nothing happens.\n\tpublic mutating func removeValueForToken(token: RemovalToken) {\n\t\tif let identifier = token.identifier {\n\t\t\t// Removal is more likely for recent objects than old ones.\n\t\t\tfor i in elements.indices.reverse() {\n\t\t\t\tif elements[i].identifier == identifier {\n\t\t\t\t\telements.removeAtIndex(i)\n\t\t\t\t\ttoken.identifier = nil\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/// In the event of an identifier overflow (highly, highly unlikely), this\n\t/// will reset all current identifiers to reclaim a contiguous set of\n\t/// available identifiers for the future.\n\tprivate mutating func reindex() {\n\t\tfor i in elements.indices {\n\t\t\tcurrentIdentifier = UInt(i)\n\n\t\t\telements[i].identifier = currentIdentifier\n\t\t\telements[i].token.identifier = currentIdentifier\n\t\t}\n\t}\n}\n\nextension Bag: CollectionType {\n\tpublic typealias Index = Array<Element>.Index\n\n\tpublic var startIndex: Index {\n\t\treturn elements.startIndex\n\t}\n\t\n\tpublic var endIndex: Index {\n\t\treturn elements.endIndex\n\t}\n\n\tpublic subscript(index: Index) -> Element {\n\t\treturn elements[index].value\n\t}\n}\n\nprivate struct BagElement<Value> {\n\tlet value: Value\n\tvar identifier: UInt\n\tlet token: RemovalToken\n}\n\nextension BagElement: CustomStringConvertible {\n\tvar description: String {\n\t\treturn \"BagElement(\\(value))\"\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Disposable.swift",
    "content": "//\n//  Disposable.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-06-02.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\n/// Represents something that can be “disposed,” usually associated with freeing\n/// resources or canceling work.\npublic protocol Disposable: class {\n\t/// Whether this disposable has been disposed already.\n\tvar disposed: Bool { get }\n\n\tfunc dispose()\n}\n\n/// A disposable that only flips `disposed` upon disposal, and performs no other\n/// work.\npublic final class SimpleDisposable: Disposable {\n\tprivate let _disposed = Atomic(false)\n\n\tpublic var disposed: Bool {\n\t\treturn _disposed.value\n\t}\n\n\tpublic init() {}\n\n\tpublic func dispose() {\n\t\t_disposed.value = true\n\t}\n}\n\n/// A disposable that will run an action upon disposal.\npublic final class ActionDisposable: Disposable {\n\tprivate let action: Atomic<(() -> ())?>\n\n\tpublic var disposed: Bool {\n\t\treturn action.value == nil\n\t}\n\n\t/// Initializes the disposable to run the given action upon disposal.\n\tpublic init(action: () -> ()) {\n\t\tself.action = Atomic(action)\n\t}\n\n\tpublic func dispose() {\n\t\tlet oldAction = action.swap(nil)\n\t\toldAction?()\n\t}\n}\n\n/// A disposable that will dispose of any number of other disposables.\npublic final class CompositeDisposable: Disposable {\n\tprivate let disposables: Atomic<Bag<Disposable>?>\n\n\t/// Represents a handle to a disposable previously added to a\n\t/// CompositeDisposable.\n\tpublic final class DisposableHandle {\n\t\tprivate let bagToken: Atomic<RemovalToken?>\n\t\tprivate weak var disposable: CompositeDisposable?\n\n\t\tprivate static let empty = DisposableHandle()\n\n\t\tprivate init() {\n\t\t\tself.bagToken = Atomic(nil)\n\t\t}\n\n\t\tprivate init(bagToken: RemovalToken, disposable: CompositeDisposable) {\n\t\t\tself.bagToken = Atomic(bagToken)\n\t\t\tself.disposable = disposable\n\t\t}\n\n\t\t/// Removes the pointed-to disposable from its CompositeDisposable.\n\t\t///\n\t\t/// This is useful to minimize memory growth, by removing disposables\n\t\t/// that are no longer needed.\n\t\tpublic func remove() {\n\t\t\tif let token = bagToken.swap(nil) {\n\t\t\t\tdisposable?.disposables.modify { bag in\n\t\t\t\t\tguard let immutableBag = bag else { return nil }\n\t\t\t\t\tvar mutableBag = immutableBag\n\n\t\t\t\t\tmutableBag.removeValueForToken(token)\n\t\t\t\t\treturn mutableBag\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic var disposed: Bool {\n\t\treturn disposables.value == nil\n\t}\n\n\t/// Initializes a CompositeDisposable containing the given sequence of\n\t/// disposables.\n\tpublic init<S: SequenceType where S.Generator.Element == Disposable>(_ disposables: S) {\n\t\tvar bag: Bag<Disposable> = Bag()\n\n\t\tfor disposable in disposables {\n\t\t\tbag.insert(disposable)\n\t\t}\n\n\t\tself.disposables = Atomic(bag)\n\t}\n\n\t/// Initializes an empty CompositeDisposable.\n\tpublic convenience init() {\n\t\tself.init([])\n\t}\n\n\tpublic func dispose() {\n\t\tif let ds = disposables.swap(nil) {\n\t\t\tfor d in ds.reverse() {\n\t\t\t\td.dispose()\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Adds the given disposable to the list, then returns a handle which can\n\t/// be used to opaquely remove the disposable later (if desired).\n\tpublic func addDisposable(d: Disposable?) -> DisposableHandle {\n\t\tguard let d = d else {\n\t\t\treturn DisposableHandle.empty\n\t\t}\n\n\t\tvar handle: DisposableHandle? = nil\n\t\tdisposables.modify { ds in\n\t\t\tguard let immutableDs = ds else { return nil }\n\t\t\tvar mutableDs = immutableDs\n\n\t\t\tlet token = mutableDs.insert(d)\n\t\t\thandle = DisposableHandle(bagToken: token, disposable: self)\n\n\t\t\treturn mutableDs\n\t\t}\n\n\t\tif let handle = handle {\n\t\t\treturn handle\n\t\t} else {\n\t\t\td.dispose()\n\t\t\treturn DisposableHandle.empty\n\t\t}\n\t}\n\n\t/// Adds an ActionDisposable to the list.\n\tpublic func addDisposable(action: () -> ()) -> DisposableHandle {\n\t\treturn addDisposable(ActionDisposable(action: action))\n\t}\n}\n\n/// A disposable that, upon deinitialization, will automatically dispose of\n/// another disposable.\npublic final class ScopedDisposable: Disposable {\n\t/// The disposable which will be disposed when the ScopedDisposable\n\t/// deinitializes.\n\tpublic let innerDisposable: Disposable\n\n\tpublic var disposed: Bool {\n\t\treturn innerDisposable.disposed\n\t}\n\n\t/// Initializes the receiver to dispose of the argument upon\n\t/// deinitialization.\n\tpublic init(_ disposable: Disposable) {\n\t\tinnerDisposable = disposable\n\t}\n\n\tdeinit {\n\t\tdispose()\n\t}\n\n\tpublic func dispose() {\n\t\tinnerDisposable.dispose()\n\t}\n}\n\n/// A disposable that will optionally dispose of another disposable.\npublic final class SerialDisposable: Disposable {\n\tprivate struct State {\n\t\tvar innerDisposable: Disposable? = nil\n\t\tvar disposed = false\n\t}\n\n\tprivate let state = Atomic(State())\n\n\tpublic var disposed: Bool {\n\t\treturn state.value.disposed\n\t}\n\n\t/// The inner disposable to dispose of.\n\t///\n\t/// Whenever this property is set (even to the same value!), the previous\n\t/// disposable is automatically disposed.\n\tpublic var innerDisposable: Disposable? {\n\t\tget {\n\t\t\treturn state.value.innerDisposable\n\t\t}\n\n\t\tset(d) {\n\t\t\tlet oldState = state.modify { state in\n\t\t\t\tvar mutableState = state\n\t\t\t\tmutableState.innerDisposable = d\n\t\t\t\treturn mutableState\n\t\t\t}\n\n\t\t\toldState.innerDisposable?.dispose()\n\t\t\tif oldState.disposed {\n\t\t\t\td?.dispose()\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Initializes the receiver to dispose of the argument when the\n\t/// SerialDisposable is disposed.\n\tpublic init(_ disposable: Disposable? = nil) {\n\t\tinnerDisposable = disposable\n\t}\n\n\tpublic func dispose() {\n\t\tlet orig = state.swap(State(innerDisposable: nil, disposed: true))\n\t\torig.innerDisposable?.dispose()\n\t}\n}\n\n/// Adds the right-hand-side disposable to the left-hand-side\n/// `CompositeDisposable`.\n///\n///     disposable += producer\n///         .filter { ... }\n///         .map    { ... }\n///         .start(observer)\n///\npublic func +=(lhs: CompositeDisposable, rhs: Disposable?) -> CompositeDisposable.DisposableHandle {\n\treturn lhs.addDisposable(rhs)\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Event.swift",
    "content": "//\n//  Event.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2015-01-16.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\n/// Represents a signal event.\n///\n/// Signals must conform to the grammar:\n/// `Next* (Failed | Completed | Interrupted)?`\npublic enum Event<Value, Error: ErrorType> {\n\t/// A value provided by the signal.\n\tcase Next(Value)\n\n\t/// The signal terminated because of an error. No further events will be\n\t/// received.\n\tcase Failed(Error)\n\n\t/// The signal successfully terminated. No further events will be received.\n\tcase Completed\n\n\t/// Event production on the signal has been interrupted. No further events\n\t/// will be received.\n\tcase Interrupted\n\n\n\t/// Whether this event indicates signal termination (i.e., that no further\n\t/// events will be received).\n\tpublic var isTerminating: Bool {\n\t\tswitch self {\n\t\tcase .Next:\n\t\t\treturn false\n\n\t\tcase .Failed, .Completed, .Interrupted:\n\t\t\treturn true\n\t\t}\n\t}\n\n\t/// Lifts the given function over the event's value.\n\tpublic func map<U>(f: Value -> U) -> Event<U, Error> {\n\t\tswitch self {\n\t\tcase let .Next(value):\n\t\t\treturn .Next(f(value))\n\n\t\tcase let .Failed(error):\n\t\t\treturn .Failed(error)\n\n\t\tcase .Completed:\n\t\t\treturn .Completed\n\n\t\tcase .Interrupted:\n\t\t\treturn .Interrupted\n\t\t}\n\t}\n\n\t/// Lifts the given function over the event's error.\n\tpublic func mapError<F>(f: Error -> F) -> Event<Value, F> {\n\t\tswitch self {\n\t\tcase let .Next(value):\n\t\t\treturn .Next(value)\n\n\t\tcase let .Failed(error):\n\t\t\treturn .Failed(f(error))\n\n\t\tcase .Completed:\n\t\t\treturn .Completed\n\n\t\tcase .Interrupted:\n\t\t\treturn .Interrupted\n\t\t}\n\t}\n\n\t/// Unwraps the contained `Next` value.\n\tpublic var value: Value? {\n\t\tif case let .Next(value) = self {\n\t\t\treturn value\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t/// Unwraps the contained `Error` value.\n\tpublic var error: Error? {\n\t\tif case let .Failed(error) = self {\n\t\t\treturn error\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t}\n}\n\npublic func == <Value: Equatable, Error: Equatable> (lhs: Event<Value, Error>, rhs: Event<Value, Error>) -> Bool {\n\tswitch (lhs, rhs) {\n\tcase let (.Next(left), .Next(right)):\n\t\treturn left == right\n\n\tcase let (.Failed(left), .Failed(right)):\n\t\treturn left == right\n\n\tcase (.Completed, .Completed):\n\t\treturn true\n\n\tcase (.Interrupted, .Interrupted):\n\t\treturn true\n\n\tdefault:\n\t\treturn false\n\t}\n}\n\nextension Event: CustomStringConvertible {\n\tpublic var description: String {\n\t\tswitch self {\n\t\tcase let .Next(value):\n\t\t\treturn \"NEXT \\(value)\"\n\n\t\tcase let .Failed(error):\n\t\t\treturn \"FAILED \\(error)\"\n\n\t\tcase .Completed:\n\t\t\treturn \"COMPLETED\"\n\n\t\tcase .Interrupted:\n\t\t\treturn \"INTERRUPTED\"\n\t\t}\n\t}\n}\n\n/// Event protocol for constraining signal extensions\npublic protocol EventType {\n\t// The value type of an event.\n\ttypealias Value\n\t/// The error type of an event. If errors aren't possible then `NoError` can be used.\n\ttypealias Error: ErrorType\n\t/// Extracts the event from the receiver.\n\tvar event: Event<Value, Error> { get }\n}\n\nextension Event: EventType {\n\tpublic var event: Event<Value, Error> {\n\t\treturn self\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Flatten.swift",
    "content": "//\n//  Flatten.swift\n//  ReactiveCocoa\n//\n//  Created by Neil Pankey on 11/30/15.\n//  Copyright © 2015 GitHub. All rights reserved.\n//\n\n/// Describes how multiple producers should be joined together.\npublic enum FlattenStrategy: Equatable {\n\t/// The producers should be merged, so that any value received on any of the\n\t/// input producers will be forwarded immediately to the output producer.\n\t///\n\t/// The resulting producer will complete only when all inputs have completed.\n\tcase Merge\n\n\t/// The producers should be concatenated, so that their values are sent in the\n\t/// order of the producers themselves.\n\t///\n\t/// The resulting producer will complete only when all inputs have completed.\n\tcase Concat\n\n\t/// Only the events from the latest input producer should be considered for\n\t/// the output. Any producers received before that point will be disposed of.\n\t///\n\t/// The resulting producer will complete only when the producer-of-producers and\n\t/// the latest producer has completed.\n\tcase Latest\n}\n\n\nextension SignalType where Value: SignalProducerType, Error == Value.Error {\n\t/// Flattens the inner producers sent upon `signal` (into a single signal of\n\t/// values), according to the semantics of the given strategy.\n\t///\n\t/// If `signal` or an active inner producer fails, the returned signal will\n\t/// forward that failure immediately.\n\t///\n\t/// `Interrupted` events on inner producers will be treated like `Completed`\n\t/// events on inner producers.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func flatten(strategy: FlattenStrategy) -> Signal<Value.Value, Error> {\n\t\tswitch strategy {\n\t\tcase .Merge:\n\t\t\treturn self.merge()\n\n\t\tcase .Concat:\n\t\t\treturn self.concat()\n\n\t\tcase .Latest:\n\t\t\treturn self.switchToLatest()\n\t\t}\n\t}\n}\n\nextension SignalProducerType where Value: SignalProducerType, Error == Value.Error {\n\t/// Flattens the inner producers sent upon `producer` (into a single producer of\n\t/// values), according to the semantics of the given strategy.\n\t///\n\t/// If `producer` or an active inner producer fails, the returned producer will\n\t/// forward that failure immediately.\n\t///\n\t/// `Interrupted` events on inner producers will be treated like `Completed`\n\t/// events on inner producers.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func flatten(strategy: FlattenStrategy) -> SignalProducer<Value.Value, Error> {\n\t\tswitch strategy {\n\t\tcase .Merge:\n\t\t\treturn self.merge()\n\n\t\tcase .Concat:\n\t\t\treturn self.concat()\n\n\t\tcase .Latest:\n\t\t\treturn self.switchToLatest()\n\t\t}\n\t}\n}\n\nextension SignalType where Value: SignalType, Error == Value.Error {\n\t/// Flattens the inner signals sent upon `signal` (into a single signal of\n\t/// values), according to the semantics of the given strategy.\n\t///\n\t/// If `signal` or an active inner signal emits an error, the returned\n\t/// signal will forward that error immediately.\n\t///\n\t/// `Interrupted` events on inner signals will be treated like `Completed`\n\t/// events on inner signals.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func flatten(strategy: FlattenStrategy) -> Signal<Value.Value, Error> {\n\t\treturn self.map(SignalProducer.init).flatten(strategy)\n\t}\n}\n\nextension SignalProducerType where Value: SignalType, Error == Value.Error {\n\t/// Flattens the inner signals sent upon `producer` (into a single producer of\n\t/// values), according to the semantics of the given strategy.\n\t///\n\t/// If `producer` or an active inner signal emits an error, the returned\n\t/// producer will forward that error immediately.\n\t///\n\t/// `Interrupted` events on inner signals will be treated like `Completed`\n\t/// events on inner signals.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func flatten(strategy: FlattenStrategy) -> SignalProducer<Value.Value, Error> {\n\t\treturn self.map(SignalProducer.init).flatten(strategy)\n\t}\n}\n\n\nextension SignalType where Value: SignalProducerType, Error == Value.Error {\n\t/// Returns a signal which sends all the values from producer signal emitted from\n\t/// `signal`, waiting until each inner producer completes before beginning to\n\t/// send the values from the next inner producer.\n\t///\n\t/// If any of the inner producers fail, the returned signal will forward\n\t/// that failure immediately\n\t///\n\t/// The returned signal completes only when `signal` and all producers\n\t/// emitted from `signal` complete.\n\tprivate func concat() -> Signal<Value.Value, Error> {\n\t\treturn Signal<Value.Value, Error> { relayObserver in\n\t\t\tlet disposable = CompositeDisposable()\n\t\t\tlet relayDisposable = CompositeDisposable()\n\n\t\t\tdisposable += relayDisposable\n\t\t\tdisposable += self.observeConcat(relayObserver, relayDisposable)\n\n\t\t\treturn disposable\n\t\t}\n\t}\n\n\tprivate func observeConcat(observer: Observer<Value.Value, Error>, _ disposable: CompositeDisposable? = nil) -> Disposable? {\n\t\tlet state = ConcatState(observer: observer, disposable: disposable)\n\n\t\treturn self.observe { event in\n\t\t\tswitch event {\n\t\t\tcase let .Next(value):\n\t\t\t\tstate.enqueueSignalProducer(value.producer)\n\n\t\t\tcase let .Failed(error):\n\t\t\t\tobserver.sendFailed(error)\n\n\t\t\tcase .Completed:\n\t\t\t\t// Add one last producer to the queue, whose sole job is to\n\t\t\t\t// \"turn out the lights\" by completing `observer`.\n\t\t\t\tstate.enqueueSignalProducer(SignalProducer.empty.on(completed: {\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t}))\n\n\t\t\tcase .Interrupted:\n\t\t\t\tobserver.sendInterrupted()\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalProducerType where Value: SignalProducerType, Error == Value.Error {\n\t/// Returns a producer which sends all the values from each producer emitted from\n\t/// `producer`, waiting until each inner producer completes before beginning to\n\t/// send the values from the next inner producer.\n\t///\n\t/// If any of the inner producers emit an error, the returned producer will emit\n\t/// that error.\n\t///\n\t/// The returned producer completes only when `producer` and all producers\n\t/// emitted from `producer` complete.\n\tprivate func concat() -> SignalProducer<Value.Value, Error> {\n\t\treturn SignalProducer<Value.Value, Error> { observer, disposable in\n\t\t\tself.startWithSignal { signal, signalDisposable in\n\t\t\t\tdisposable += signalDisposable\n\t\t\t\tsignal.observeConcat(observer, disposable)\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalProducerType {\n\t/// `concat`s `next` onto `self`.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func concat(next: SignalProducer<Value, Error>) -> SignalProducer<Value, Error> {\n\t\treturn SignalProducer<SignalProducer<Value, Error>, Error>(values: [self.producer, next]).flatten(.Concat)\n\t}\n}\n\nprivate final class ConcatState<Value, Error: ErrorType> {\n\t/// The observer of a started `concat` producer.\n\tlet observer: Observer<Value, Error>\n\n\t/// The top level disposable of a started `concat` producer.\n\tlet disposable: CompositeDisposable?\n\n\t/// The active producer, if any, and the producers waiting to be started.\n\tlet queuedSignalProducers: Atomic<[SignalProducer<Value, Error>]> = Atomic([])\n\n\tinit(observer: Signal<Value, Error>.Observer, disposable: CompositeDisposable?) {\n\t\tself.observer = observer\n\t\tself.disposable = disposable\n\t}\n\n\tfunc enqueueSignalProducer(producer: SignalProducer<Value, Error>) {\n\t\tif let d = disposable where d.disposed {\n\t\t\treturn\n\t\t}\n\n\t\tvar shouldStart = true\n\n\t\tqueuedSignalProducers.modify {\n\t\t\t// An empty queue means the concat is idle, ready & waiting to start\n\t\t\t// the next producer.\n\t\t\tvar queue = $0\n\t\t\tshouldStart = queue.isEmpty\n\t\t\tqueue.append(producer)\n\t\t\treturn queue\n\t\t}\n\n\t\tif shouldStart {\n\t\t\tstartNextSignalProducer(producer)\n\t\t}\n\t}\n\n\tfunc dequeueSignalProducer() -> SignalProducer<Value, Error>? {\n\t\tif let d = disposable where d.disposed {\n\t\t\treturn nil\n\t\t}\n\n\t\tvar nextSignalProducer: SignalProducer<Value, Error>?\n\n\t\tqueuedSignalProducers.modify {\n\t\t\t// Active producers remain in the queue until completed. Since\n\t\t\t// dequeueing happens at completion of the active producer, the\n\t\t\t// first producer in the queue can be removed.\n\t\t\tvar queue = $0\n\t\t\tif !queue.isEmpty { queue.removeAtIndex(0) }\n\t\t\tnextSignalProducer = queue.first\n\t\t\treturn queue\n\t\t}\n\n\t\treturn nextSignalProducer\n\t}\n\n\t/// Subscribes to the given signal producer.\n\tfunc startNextSignalProducer(signalProducer: SignalProducer<Value, Error>) {\n\t\tsignalProducer.startWithSignal { signal, disposable in\n\t\t\tlet handle = self.disposable?.addDisposable(disposable) ?? nil\n\n\t\t\tsignal.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase .Completed, .Interrupted:\n\t\t\t\t\thandle?.remove()\n\n\t\t\t\t\tif let nextSignalProducer = self.dequeueSignalProducer() {\n\t\t\t\t\t\tself.startNextSignalProducer(nextSignalProducer)\n\t\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tself.observer.action(event)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalType where Value: SignalProducerType, Error == Value.Error {\n\t/// Merges a `signal` of SignalProducers down into a single signal, biased toward the producer\n\t/// added earlier. Returns a Signal that will forward events from the inner producers as they arrive.\n\tprivate func merge() -> Signal<Value.Value, Error> {\n\t\treturn Signal<Value.Value, Error> { relayObserver in\n\t\t\tlet disposable = CompositeDisposable()\n\t\t\tlet relayDisposable = CompositeDisposable()\n\n\t\t\tdisposable += relayDisposable\n\t\t\tdisposable += self.observeMerge(relayObserver, relayDisposable)\n\n\t\t\treturn disposable\n\t\t}\n\t}\n\n\tprivate func observeMerge(observer: Observer<Value.Value, Error>, _ disposable: CompositeDisposable) -> Disposable? {\n\t\tlet inFlight = Atomic(1)\n\t\tlet decrementInFlight: () -> () = {\n\t\t\tlet orig = inFlight.modify { $0 - 1 }\n\t\t\tif orig == 1 {\n\t\t\t\tobserver.sendCompleted()\n\t\t\t}\n\t\t}\n\n\t\treturn self.observe { event in\n\t\t\tswitch event {\n\t\t\tcase let .Next(producer):\n\t\t\t\tproducer.startWithSignal { innerSignal, innerDisposable in\n\t\t\t\t\tinFlight.modify { $0 + 1 }\n\t\t\t\t\tlet handle = disposable.addDisposable(innerDisposable)\n\n\t\t\t\t\tinnerSignal.observe { event in\n\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\tcase .Completed, .Interrupted:\n\t\t\t\t\t\t\thandle.remove()\n\t\t\t\t\t\t\tdecrementInFlight()\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tobserver.action(event)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase let .Failed(error):\n\t\t\t\tobserver.sendFailed(error)\n\n\t\t\tcase .Completed:\n\t\t\t\tdecrementInFlight()\n\n\t\t\tcase .Interrupted:\n\t\t\t\tobserver.sendInterrupted()\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalProducerType where Value: SignalProducerType, Error == Value.Error {\n\t/// Merges a `signal` of SignalProducers down into a single signal, biased toward the producer\n\t/// added earlier. Returns a Signal that will forward events from the inner producers as they arrive.\n\tprivate func merge() -> SignalProducer<Value.Value, Error> {\n\t\treturn SignalProducer<Value.Value, Error> { relayObserver, disposable in\n\t\t\tself.startWithSignal { signal, signalDisposable in\n\t\t\t\tdisposable.addDisposable(signalDisposable)\n\n\t\t\t\tsignal.observeMerge(relayObserver, disposable)\n\t\t\t}\n\n\t\t}\n\t}\n}\n\nextension SignalType {\n\t/// Merges the given signals into a single `Signal` that will emit all values\n\t/// from each of them, and complete when all of them have completed.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic static func merge<S: SequenceType where S.Generator.Element == Signal<Value, Error>>(signals: S) -> Signal<Value, Error> {\n\t\tlet producer = SignalProducer<Signal<Value, Error>, Error>(values: signals)\n\t\tvar result: Signal<Value, Error>!\n\n\t\tproducer.startWithSignal { (signal, _) in\n\t\t\tresult = signal.flatten(.Merge)\n\t\t}\n\n\t\treturn result\n\t}\n}\n\nextension SignalType where Value: SignalProducerType, Error == Value.Error {\n\t/// Returns a signal that forwards values from the latest signal sent on\n\t/// `signal`, ignoring values sent on previous inner signal.\n\t///\n\t/// An error sent on `signal` or the latest inner signal will be sent on the\n\t/// returned signal.\n\t///\n\t/// The returned signal completes when `signal` and the latest inner\n\t/// signal have both completed.\n\tprivate func switchToLatest() -> Signal<Value.Value, Error> {\n\t\treturn Signal<Value.Value, Error> { observer in\n\t\t\tlet composite = CompositeDisposable()\n\t\t\tlet serial = SerialDisposable()\n\n\t\t\tcomposite += serial\n\t\t\tcomposite += self.observeSwitchToLatest(observer, serial)\n\n\t\t\treturn composite\n\t\t}\n\t}\n\n\tprivate func observeSwitchToLatest(observer: Observer<Value.Value, Error>, _ latestInnerDisposable: SerialDisposable) -> Disposable? {\n\t\tlet state = Atomic(LatestState<Value, Error>())\n\n\t\treturn self.observe { event in\n\t\t\tswitch event {\n\t\t\tcase let .Next(innerProducer):\n\t\t\t\tinnerProducer.startWithSignal { innerSignal, innerDisposable in\n\t\t\t\t\tstate.modify {\n\t\t\t\t\t\t// When we replace the disposable below, this prevents the\n\t\t\t\t\t\t// generated Interrupted event from doing any work.\n\t\t\t\t\t\tvar state = $0\n\t\t\t\t\t\tstate.replacingInnerSignal = true\n\t\t\t\t\t\treturn state\n\t\t\t\t\t}\n\n\t\t\t\t\tlatestInnerDisposable.innerDisposable = innerDisposable\n\n\t\t\t\t\tstate.modify {\n\t\t\t\t\t\tvar state = $0\n\t\t\t\t\t\tstate.replacingInnerSignal = false\n\t\t\t\t\t\tstate.innerSignalComplete = false\n\t\t\t\t\t\treturn state\n\t\t\t\t\t}\n\n\t\t\t\t\tinnerSignal.observe { event in\n\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\tcase .Interrupted:\n\t\t\t\t\t\t\t// If interruption occurred as a result of a new producer\n\t\t\t\t\t\t\t// arriving, we don't want to notify our observer.\n\t\t\t\t\t\t\tlet original = state.modify {\n\t\t\t\t\t\t\t\tvar state = $0\n\t\t\t\t\t\t\t\tif !state.replacingInnerSignal {\n\t\t\t\t\t\t\t\t\tstate.innerSignalComplete = true\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn state\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif !original.replacingInnerSignal && original.outerSignalComplete {\n\t\t\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\tlet original = state.modify {\n\t\t\t\t\t\t\t\tvar state = $0\n\t\t\t\t\t\t\t\tstate.innerSignalComplete = true\n\t\t\t\t\t\t\t\treturn state\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif original.outerSignalComplete {\n\t\t\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tobserver.action(event)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase let .Failed(error):\n\t\t\t\tobserver.sendFailed(error)\n\t\t\tcase .Completed:\n\t\t\t\tlet original = state.modify {\n\t\t\t\t\tvar state = $0\n\t\t\t\t\tstate.outerSignalComplete = true\n\t\t\t\t\treturn state\n\t\t\t\t}\n\n\t\t\t\tif original.innerSignalComplete {\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t}\n\t\t\tcase .Interrupted:\n\t\t\t\tobserver.sendInterrupted()\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalProducerType where Value: SignalProducerType, Error == Value.Error {\n\t/// Returns a signal that forwards values from the latest signal sent on\n\t/// `signal`, ignoring values sent on previous inner signal.\n\t///\n\t/// An error sent on `signal` or the latest inner signal will be sent on the\n\t/// returned signal.\n\t///\n\t/// The returned signal completes when `signal` and the latest inner\n\t/// signal have both completed.\n\tprivate func switchToLatest() -> SignalProducer<Value.Value, Error> {\n\t\treturn SignalProducer<Value.Value, Error> { observer, disposable in\n\t\t\tlet latestInnerDisposable = SerialDisposable()\n\t\t\tdisposable.addDisposable(latestInnerDisposable)\n\n\t\t\tself.startWithSignal { signal, signalDisposable in\n\t\t\t\tdisposable += signalDisposable\n\t\t\t\tdisposable += signal.observeSwitchToLatest(observer, latestInnerDisposable)\n\t\t\t}\n\t\t}\n\t}\n}\n\nprivate struct LatestState<Value, Error: ErrorType> {\n\tvar outerSignalComplete: Bool = false\n\tvar innerSignalComplete: Bool = true\n\t\n\tvar replacingInnerSignal: Bool = false\n}\n\n\nextension SignalType {\n\t/// Maps each event from `signal` to a new signal, then flattens the\n\t/// resulting producers (into a signal of values), according to the\n\t/// semantics of the given strategy.\n\t///\n\t/// If `signal` or any of the created producers fail, the returned signal\n\t/// will forward that failure immediately.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func flatMap<U>(strategy: FlattenStrategy, transform: Value -> SignalProducer<U, Error>) -> Signal<U, Error> {\n\t\treturn map(transform).flatten(strategy)\n\t}\n\n\t/// Maps each event from `signal` to a new signal, then flattens the\n\t/// resulting signals (into a signal of values), according to the\n\t/// semantics of the given strategy.\n\t///\n\t/// If `signal` or any of the created signals emit an error, the returned\n\t/// signal will forward that error immediately.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func flatMap<U>(strategy: FlattenStrategy, transform: Value -> Signal<U, Error>) -> Signal<U, Error> {\n\t\treturn map(transform).flatten(strategy)\n\t}\n}\n\nextension SignalProducerType {\n\t/// Maps each event from `self` to a new producer, then flattens the\n\t/// resulting producers (into a producer of values), according to the\n\t/// semantics of the given strategy.\n\t///\n\t/// If `self` or any of the created producers fail, the returned producer\n\t/// will forward that failure immediately.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func flatMap<U>(strategy: FlattenStrategy, transform: Value -> SignalProducer<U, Error>) -> SignalProducer<U, Error> {\n\t\treturn map(transform).flatten(strategy)\n\t}\n\n\t/// Maps each event from `self` to a new producer, then flattens the\n\t/// resulting signals (into a producer of values), according to the\n\t/// semantics of the given strategy.\n\t///\n\t/// If `self` or any of the created signals emit an error, the returned\n\t/// producer will forward that error immediately.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func flatMap<U>(strategy: FlattenStrategy, transform: Value -> Signal<U, Error>) -> SignalProducer<U, Error> {\n\t\treturn map(transform).flatten(strategy)\n\t}\n}\n\n\nextension SignalType {\n\t/// Catches any failure that may occur on the input signal, mapping to a new producer\n\t/// that starts in its place.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func flatMapError<F>(handler: Error -> SignalProducer<Value, F>) -> Signal<Value, F> {\n\t\treturn Signal { observer in\n\t\t\tself.observeFlatMapError(handler, observer, SerialDisposable())\n\t\t}\n\t}\n\n\tprivate func observeFlatMapError<F>(handler: Error -> SignalProducer<Value, F>, _ observer: Observer<Value, F>, _ serialDisposable: SerialDisposable) -> Disposable? {\n\t\treturn self.observe { event in\n\t\t\tswitch event {\n\t\t\tcase let .Next(value):\n\t\t\t\tobserver.sendNext(value)\n\t\t\tcase let .Failed(error):\n\t\t\t\thandler(error).startWithSignal { signal, disposable in\n\t\t\t\t\tserialDisposable.innerDisposable = disposable\n\t\t\t\t\tsignal.observe(observer)\n\t\t\t\t}\n\t\t\tcase .Completed:\n\t\t\t\tobserver.sendCompleted()\n\t\t\tcase .Interrupted:\n\t\t\t\tobserver.sendInterrupted()\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalProducerType {\n\t/// Catches any failure that may occur on the input producer, mapping to a new producer\n\t/// that starts in its place.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func flatMapError<F>(handler: Error -> SignalProducer<Value, F>) -> SignalProducer<Value, F> {\n\t\treturn SignalProducer { observer, disposable in\n\t\t\tlet serialDisposable = SerialDisposable()\n\t\t\tdisposable.addDisposable(serialDisposable)\n\n\t\t\tself.startWithSignal { signal, signalDisposable in\n\t\t\t\tserialDisposable.innerDisposable = signalDisposable\n\n\t\t\t\tsignal.observeFlatMapError(handler, observer, serialDisposable)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/FoundationExtensions.swift",
    "content": "//\n//  FoundationExtensions.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-10-19.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\nimport Foundation\nimport enum Result.NoError\n\nextension NSNotificationCenter {\n\t/// Returns a producer of notifications posted that match the given criteria.\n\t/// This producer will not terminate naturally, so it must be explicitly\n\t/// disposed to avoid leaks.\n\tpublic func rac_notifications(name: String? = nil, object: AnyObject? = nil) -> SignalProducer<NSNotification, NoError> {\n\t\treturn SignalProducer { observer, disposable in\n\t\t\tlet notificationObserver = self.addObserverForName(name, object: object, queue: nil) { notification in\n\t\t\t\tobserver.sendNext(notification)\n\t\t\t}\n\n\t\t\tdisposable.addDisposable {\n\t\t\t\tself.removeObserver(notificationObserver)\n\t\t\t}\n\t\t}\n\t}\n}\n\nprivate let defaultSessionError = NSError(domain: \"org.reactivecocoa.ReactiveCocoa.rac_dataWithRequest\", code: 1, userInfo: nil)\n\nextension NSURLSession {\n\t/// Returns a producer that will execute the given request once for each\n\t/// invocation of start().\n\tpublic func rac_dataWithRequest(request: NSURLRequest) -> SignalProducer<(NSData, NSURLResponse), NSError> {\n\t\treturn SignalProducer { observer, disposable in\n\t\t\tlet task = self.dataTaskWithRequest(request) { data, response, error in\n\t\t\t\tif let data = data, response = response {\n\t\t\t\t\tobserver.sendNext((data, response))\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t} else {\n\t\t\t\t\tobserver.sendFailed(error ?? defaultSessionError)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdisposable.addDisposable {\n\t\t\t\ttask.cancel()\n\t\t\t}\n\t\t\ttask.resume()\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/ObjectiveCBridging.swift",
    "content": "//\n//  ObjectiveCBridging.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-07-02.\n//  Copyright (c) 2014 GitHub, Inc. All rights reserved.\n//\n\nimport Result\n\nextension RACDisposable: Disposable {}\nextension RACScheduler: DateSchedulerType {\n\tpublic var currentDate: NSDate {\n\t\treturn NSDate()\n\t}\n\n\tpublic func schedule(action: () -> ()) -> Disposable? {\n\t\tlet disposable: RACDisposable = self.schedule(action) // Call the Objective-C implementation\n\t\treturn disposable as Disposable?\n\t}\n\n\tpublic func scheduleAfter(date: NSDate, action: () -> ()) -> Disposable? {\n\t\treturn self.after(date, schedule: action)\n\t}\n\n\tpublic func scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, withLeeway: NSTimeInterval, action: () -> ()) -> Disposable? {\n\t\treturn self.after(date, repeatingEvery: repeatingEvery, withLeeway: withLeeway, schedule: action)\n\t}\n}\n\nextension ImmediateScheduler {\n\tpublic func toRACScheduler() -> RACScheduler {\n\t\treturn RACScheduler.immediateScheduler()\n\t}\n}\n\nextension UIScheduler {\n\tpublic func toRACScheduler() -> RACScheduler {\n\t\treturn RACScheduler.mainThreadScheduler()\n\t}\n}\n\nextension QueueScheduler {\n\tpublic func toRACScheduler() -> RACScheduler {\n\t\treturn RACTargetQueueScheduler(name: \"org.reactivecocoa.ReactiveCocoa.QueueScheduler.toRACScheduler()\", targetQueue: queue)\n\t}\n}\n\nprivate func defaultNSError(message: String, file: String, line: Int) -> NSError {\n\treturn Result<(), NSError>.error(message, file: file, line: line)\n}\n\nextension RACSignal {\n\t/// Creates a SignalProducer which will subscribe to the receiver once for\n\t/// each invocation of start().\n\tpublic func toSignalProducer(file: String = __FILE__, line: Int = __LINE__) -> SignalProducer<AnyObject?, NSError> {\n\t\treturn SignalProducer { observer, disposable in\n\t\t\tlet next = { obj in\n\t\t\t\tobserver.sendNext(obj)\n\t\t\t}\n\n\t\t\tlet failed = { nsError in\n\t\t\t\tobserver.sendFailed(nsError ?? defaultNSError(\"Nil RACSignal error\", file: file, line: line))\n\t\t\t}\n\n\t\t\tlet completed = {\n\t\t\t\tobserver.sendCompleted()\n\t\t\t}\n\n\t\t\tdisposable += self.subscribeNext(next, error: failed, completed: completed)\n\t\t}\n\t}\n}\n\nextension SignalType {\n\t/// Turns each value into an Optional.\n\tprivate func optionalize() -> Signal<Value?, Error> {\n\t\treturn signal.map(Optional.init)\n\t}\n}\n\n// MARK: - toRACSignal\n\nextension SignalProducerType where Value: AnyObject {\n\t/// Creates a RACSignal that will start() the producer once for each\n\t/// subscription.\n\t///\n\t/// Any `Interrupted` events will be silently discarded.\n\tpublic func toRACSignal() -> RACSignal {\n\t\treturn self\n\t\t\t.lift { $0.optionalize() }\n\t\t\t.toRACSignal()\n\t}\n}\n\nextension SignalProducerType where Value: OptionalType, Value.Wrapped: AnyObject {\n\t/// Creates a RACSignal that will start() the producer once for each\n\t/// subscription.\n\t///\n\t/// Any `Interrupted` events will be silently discarded.\n\tpublic func toRACSignal() -> RACSignal {\n\t\treturn self\n\t\t\t.mapError { $0 as NSError }\n\t\t\t.toRACSignal()\n\t}\n}\n\nextension SignalProducerType where Value: AnyObject, Error: NSError {\n\t/// Creates a RACSignal that will start() the producer once for each\n\t/// subscription.\n\t///\n\t/// Any `Interrupted` events will be silently discarded.\n\tpublic func toRACSignal() -> RACSignal {\n\t\treturn self\n\t\t\t.lift { $0.optionalize() }\n\t\t\t.toRACSignal()\n\t}\n}\n\nextension SignalProducerType where Value: OptionalType, Value.Wrapped: AnyObject, Error: NSError {\n\t/// Creates a RACSignal that will start() the producer once for each\n\t/// subscription.\n\t///\n\t/// Any `Interrupted` events will be silently discarded.\n\tpublic func toRACSignal() -> RACSignal {\n\t\t// This special casing of `Error: NSError` is a workaround for rdar://22708537\n\t\t// which causes an NSError's UserInfo dictionary to get discarded\n\t\t// during a cast from ErrorType to NSError in a generic function\n\t\treturn RACSignal.createSignal { subscriber in\n\t\t\tlet selfDisposable = self.start { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(value):\n\t\t\t\t\tsubscriber.sendNext(value.optional)\n\t\t\t\tcase let .Failed(error):\n\t\t\t\t\tsubscriber.sendError(error)\n\t\t\t\tcase .Completed:\n\t\t\t\t\tsubscriber.sendCompleted()\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn RACDisposable {\n\t\t\t\tselfDisposable.dispose()\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalType where Value: AnyObject {\n\t/// Creates a RACSignal that will observe the given signal.\n\t///\n\t/// Any `Interrupted` event will be silently discarded.\n\tpublic func toRACSignal() -> RACSignal {\n\t\treturn self\n\t\t\t.optionalize()\n\t\t\t.toRACSignal()\n\t}\n}\n\nextension SignalType where Value: AnyObject, Error: NSError {\n\t/// Creates a RACSignal that will observe the given signal.\n\t///\n\t/// Any `Interrupted` event will be silently discarded.\n\tpublic func toRACSignal() -> RACSignal {\n\t\treturn self\n\t\t\t.optionalize()\n\t\t\t.toRACSignal()\n\t}\n}\n\nextension SignalType where Value: OptionalType, Value.Wrapped: AnyObject {\n\t/// Creates a RACSignal that will observe the given signal.\n\t///\n\t/// Any `Interrupted` event will be silently discarded.\n\tpublic func toRACSignal() -> RACSignal {\n\t\treturn self\n\t\t\t.mapError { $0 as NSError }\n\t\t\t.toRACSignal()\n\t}\n}\n\nextension SignalType where Value: OptionalType, Value.Wrapped: AnyObject, Error: NSError {\n\t/// Creates a RACSignal that will observe the given signal.\n\t///\n\t/// Any `Interrupted` event will be silently discarded.\n\tpublic func toRACSignal() -> RACSignal {\n\t\t// This special casing of `Error: NSError` is a workaround for rdar://22708537\n\t\t// which causes an NSError's UserInfo dictionary to get discarded\n\t\t// during a cast from ErrorType to NSError in a generic function\n\t\treturn RACSignal.createSignal { subscriber in\n\t\t\tlet selfDisposable = self.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(value):\n\t\t\t\t\tsubscriber.sendNext(value.optional)\n\t\t\t\tcase let .Failed(error):\n\t\t\t\t\tsubscriber.sendError(error)\n\t\t\t\tcase .Completed:\n\t\t\t\t\tsubscriber.sendCompleted()\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn RACDisposable {\n\t\t\t\tselfDisposable?.dispose()\n\t\t\t}\n\t\t}\n\t}\n}\n\n// MARK: -\n\nextension RACCommand {\n\t/// Creates an Action that will execute the receiver.\n\t///\n\t/// Note that the returned Action will not necessarily be marked as\n\t/// executing when the command is. However, the reverse is always true:\n\t/// the RACCommand will always be marked as executing when the action is.\n\tpublic func toAction(file: String = __FILE__, line: Int = __LINE__) -> Action<AnyObject?, AnyObject?, NSError> {\n\t\tlet enabledProperty = MutableProperty(true)\n\n\t\tenabledProperty <~ self.enabled.toSignalProducer()\n\t\t\t.map { $0 as! Bool }\n\t\t\t.flatMapError { _ in SignalProducer<Bool, NoError>(value: false) }\n\n\t\treturn Action(enabledIf: enabledProperty) { input -> SignalProducer<AnyObject?, NSError> in\n\t\t\tlet executionSignal = RACSignal.`defer` {\n\t\t\t\treturn self.execute(input)\n\t\t\t}\n\n\t\t\treturn executionSignal.toSignalProducer(file, line: line)\n\t\t}\n\t}\n}\n\nextension Action {\n\tprivate var commandEnabled: RACSignal {\n\t\treturn self.enabled.producer\n\t\t\t.map { $0 as NSNumber }\n\t\t\t.toRACSignal()\n\t}\n}\n\n/// Creates a RACCommand that will execute the action.\n///\n/// Note that the returned command will not necessarily be marked as\n/// executing when the action is. However, the reverse is always true:\n/// the Action will always be marked as executing when the RACCommand is.\npublic func toRACCommand<Output: AnyObject, Error>(action: Action<AnyObject?, Output, Error>) -> RACCommand {\n\treturn RACCommand(enabled: action.commandEnabled) { input -> RACSignal in\n\t\treturn action\n\t\t\t.apply(input)\n\t\t\t.toRACSignal()\n\t}\n}\n\n/// Creates a RACCommand that will execute the action.\n///\n/// Note that the returned command will not necessarily be marked as\n/// executing when the action is. However, the reverse is always true:\n/// the Action will always be marked as executing when the RACCommand is.\npublic func toRACCommand<Output: AnyObject, Error>(action: Action<AnyObject?, Output?, Error>) -> RACCommand {\n\treturn RACCommand(enabled: action.commandEnabled) { input -> RACSignal in\n\t\treturn action\n\t\t\t.apply(input)\n\t\t\t.toRACSignal()\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Observer.swift",
    "content": "//\n//  Observer.swift\n//  ReactiveCocoa\n//\n//  Created by Andy Matuschak on 10/2/15.\n//  Copyright © 2015 GitHub. All rights reserved.\n//\n\n/// An Observer is a simple wrapper around a function which can receive Events\n/// (typically from a Signal).\npublic struct Observer<Value, Error: ErrorType> {\n\tpublic typealias Action = Event<Value, Error> -> ()\n\n\tpublic let action: Action\n\n\tpublic init(_ action: Action) {\n\t\tself.action = action\n\t}\n\n\tpublic init(failed: (Error -> ())? = nil, completed: (() -> ())? = nil, interrupted: (() -> ())? = nil, next: (Value -> ())? = nil) {\n\t\tself.init { event in\n\t\t\tswitch event {\n\t\t\tcase let .Next(value):\n\t\t\t\tnext?(value)\n\n\t\t\tcase let .Failed(error):\n\t\t\t\tfailed?(error)\n\n\t\t\tcase .Completed:\n\t\t\t\tcompleted?()\n\n\t\t\tcase .Interrupted:\n\t\t\t\tinterrupted?()\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Puts a `Next` event into the given observer.\n\tpublic func sendNext(value: Value) {\n\t\taction(.Next(value))\n\t}\n\n\t/// Puts an `Failed` event into the given observer.\n\tpublic func sendFailed(error: Error) {\n\t\taction(.Failed(error))\n\t}\n\n\t/// Puts a `Completed` event into the given observer.\n\tpublic func sendCompleted() {\n\t\taction(.Completed)\n\t}\n\n\t/// Puts a `Interrupted` event into the given observer.\n\tpublic func sendInterrupted() {\n\t\taction(.Interrupted)\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Optional.swift",
    "content": "//\n//  Optional.swift\n//  ReactiveCocoa\n//\n//  Created by Neil Pankey on 6/24/15.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\n/// An optional protocol for use in type constraints.\npublic protocol OptionalType {\n\t/// The type contained in the otpional.\n\ttypealias Wrapped\n\n\t/// Extracts an optional from the receiver.\n\tvar optional: Wrapped? { get }\n}\n\nextension Optional: OptionalType {\n\tpublic var optional: Wrapped? {\n\t\treturn self\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Property.swift",
    "content": "import Foundation\nimport enum Result.NoError\n\n/// Represents a property that allows observation of its changes.\npublic protocol PropertyType {\n\ttypealias Value\n\n\t/// The current value of the property.\n\tvar value: Value { get }\n\n\t/// A producer for Signals that will send the property's current value,\n\t/// followed by all changes over time.\n\tvar producer: SignalProducer<Value, NoError> { get }\n\n\t/// A signal that will send the property's changes over time.\n\tvar signal: Signal<Value, NoError> { get }\n}\n\n/// A read-only property that allows observation of its changes.\npublic struct AnyProperty<Value>: PropertyType {\n\n\tprivate let _value: () -> Value\n\tprivate let _producer: () -> SignalProducer<Value, NoError>\n\tprivate let _signal: () -> Signal<Value, NoError>\n\n\n\tpublic var value: Value {\n\t\treturn _value()\n\t}\n\n\tpublic var producer: SignalProducer<Value, NoError> {\n\t\treturn _producer()\n\t}\n\n\tpublic var signal: Signal<Value, NoError> {\n\t\treturn _signal()\n\t}\n\t\n\t/// Initializes a property as a read-only view of the given property.\n\tpublic init<P: PropertyType where P.Value == Value>(_ property: P) {\n\t\t_value = { property.value }\n\t\t_producer = { property.producer }\n\t\t_signal = { property.signal }\n\t}\n\t\n\t/// Initializes a property that first takes on `initialValue`, then each value\n\t/// sent on a signal created by `producer`.\n\tpublic init(initialValue: Value, producer: SignalProducer<Value, NoError>) {\n\t\tlet mutableProperty = MutableProperty(initialValue)\n\t\tmutableProperty <~ producer\n\t\tself.init(mutableProperty)\n\t}\n\t\n\t/// Initializes a property that first takes on `initialValue`, then each value\n\t/// sent on `signal`.\n\tpublic init(initialValue: Value, signal: Signal<Value, NoError>) {\n\t\tlet mutableProperty = MutableProperty(initialValue)\n\t\tmutableProperty <~ signal\n\t\tself.init(mutableProperty)\n\t}\n}\n\n/// A property that never changes.\npublic struct ConstantProperty<Value>: PropertyType {\n\n\tpublic let value: Value\n\tpublic let producer: SignalProducer<Value, NoError>\n\tpublic let signal: Signal<Value, NoError>\n\n\t/// Initializes the property to have the given value.\n\tpublic init(_ value: Value) {\n\t\tself.value = value\n\t\tself.producer = SignalProducer(value: value)\n\t\tself.signal = .empty\n\t}\n}\n\n/// Represents an observable property that can be mutated directly.\n///\n/// Only classes can conform to this protocol, because instances must support\n/// weak references (and value types currently do not).\npublic protocol MutablePropertyType: class, PropertyType {\n\tvar value: Value { get set }\n}\n\n/// A mutable property of type `Value` that allows observation of its changes.\n///\n/// Instances of this class are thread-safe.\npublic final class MutableProperty<Value>: MutablePropertyType {\n\n\tprivate let observer: Signal<Value, NoError>.Observer\n\n\t/// Need a recursive lock around `value` to allow recursive access to\n\t/// `value`. Note that recursive sets will still deadlock because the\n\t/// underlying producer prevents sending recursive events.\n\tprivate let lock: NSRecursiveLock\n\tprivate var _value: Value\n\n\t/// The current value of the property.\n\t///\n\t/// Setting this to a new value will notify all observers of any Signals\n\t/// created from the `values` producer.\n\tpublic var value: Value {\n\t\tget {\n\t\t\treturn withValue { $0 }\n\t\t}\n\n\t\tset {\n\t\t\tmodify { _ in newValue }\n\t\t}\n\t}\n\n\t/// A signal that will send the property's changes over time,\n\t/// then complete when the property has deinitialized.\n\tpublic lazy var signal: Signal<Value, NoError> = { [unowned self] in\n\t\tvar extractedSignal: Signal<Value, NoError>!\n\t\tself.producer.startWithSignal { signal, _ in\n\t\t\textractedSignal = signal\n\t\t}\n\t\treturn extractedSignal\n\t}()\n\n\t/// A producer for Signals that will send the property's current value,\n\t/// followed by all changes over time, then complete when the property has\n\t/// deinitialized.\n\tpublic let producer: SignalProducer<Value, NoError>\n\n\t/// Initializes the property with the given value to start.\n\tpublic init(_ initialValue: Value) {\n\t\t_value = initialValue\n\n\t\tlock = NSRecursiveLock()\n\t\tlock.name = \"org.reactivecocoa.ReactiveCocoa.MutableProperty\"\n\n\t\t(producer, observer) = SignalProducer.buffer(1)\n\t\tobserver.sendNext(initialValue)\n\t}\n\n\t/// Atomically replaces the contents of the variable.\n\t///\n\t/// Returns the old value.\n\tpublic func swap(newValue: Value) -> Value {\n\t\treturn modify { _ in newValue }\n\t}\n\n\t/// Atomically modifies the variable.\n\t///\n\t/// Returns the old value.\n\tpublic func modify(@noescape action: (Value) throws -> Value) rethrows -> Value {\n\t\tlock.lock()\n\t\tdefer { lock.unlock() }\n\n\t\tlet oldValue = _value\n\t\t_value = try action(_value)\n\t\tobserver.sendNext(_value)\n\t\treturn oldValue\n\t}\n\n\t/// Atomically performs an arbitrary action using the current value of the\n\t/// variable.\n\t///\n\t/// Returns the result of the action.\n\tpublic func withValue<Result>(@noescape action: (Value) throws -> Result) rethrows -> Result {\n\t\tlock.lock()\n\t\tdefer { lock.unlock() }\n\n\t\treturn try action(_value)\n\t}\n\n\tdeinit {\n\t\tobserver.sendCompleted()\n\t}\n}\n\n/// Wraps a `dynamic` property, or one defined in Objective-C, using Key-Value\n/// Coding and Key-Value Observing.\n///\n/// Use this class only as a last resort! `MutableProperty` is generally better\n/// unless KVC/KVO is required by the API you're using (for example,\n/// `NSOperation`).\n@objc public final class DynamicProperty: RACDynamicPropertySuperclass, MutablePropertyType {\n\tpublic typealias Value = AnyObject?\n\n\tprivate weak var object: NSObject?\n\tprivate let keyPath: String\n\n\tprivate var property: MutableProperty<AnyObject?>?\n\n\t/// The current value of the property, as read and written using Key-Value\n\t/// Coding.\n\tpublic var value: AnyObject? {\n\t\t@objc(rac_value) get {\n\t\t\treturn object?.valueForKeyPath(keyPath)\n\t\t}\n\n\t\t@objc(setRac_value:) set(newValue) {\n\t\t\tobject?.setValue(newValue, forKeyPath: keyPath)\n\t\t}\n\t}\n\n\t/// A producer that will create a Key-Value Observer for the given object,\n\t/// send its initial value then all changes over time, and then complete\n\t/// when the observed object has deallocated.\n\t///\n\t/// By definition, this only works if the object given to init() is\n\t/// KVO-compliant. Most UI controls are not!\n\tpublic var producer: SignalProducer<AnyObject?, NoError> {\n\t\treturn property?.producer ?? .empty\n\t}\n\n\tpublic var signal: Signal<AnyObject?, NoError> {\n\t\treturn property?.signal ?? .empty\n\t}\n\n\t/// Initializes a property that will observe and set the given key path of\n\t/// the given object. `object` must support weak references!\n\tpublic init(object: NSObject?, keyPath: String) {\n\t\tself.object = object\n\t\tself.keyPath = keyPath\n\t\tself.property = MutableProperty(nil)\n\n\t\t/// DynamicProperty stay alive as long as object is alive.\n\t\t/// This is made possible by strong reference cycles.\n\t\tsuper.init()\n\n\t\tobject?.rac_valuesForKeyPath(keyPath, observer: nil)?\n\t\t\t.toSignalProducer()\n\t\t\t.start { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(newValue):\n\t\t\t\t\tself.property?.value = newValue\n\t\t\t\tcase let .Failed(error):\n\t\t\t\t\tfatalError(\"Received unexpected error from KVO signal: \\(error)\")\n\t\t\t\tcase .Interrupted, .Completed:\n\t\t\t\t\tself.property = nil\n\t\t\t\t}\n\t\t\t}\n\t}\n}\n\ninfix operator <~ {\n\tassociativity right\n\n\t// Binds tighter than assignment but looser than everything else\n\tprecedence 93\n}\n\n/// Binds a signal to a property, updating the property's value to the latest\n/// value sent by the signal.\n///\n/// The binding will automatically terminate when the property is deinitialized,\n/// or when the signal sends a `Completed` event.\npublic func <~ <P: MutablePropertyType>(property: P, signal: Signal<P.Value, NoError>) -> Disposable {\n\tlet disposable = CompositeDisposable()\n\tdisposable += property.producer.startWithCompleted {\n\t\tdisposable.dispose()\n\t}\n\n\tdisposable += signal.observe { [weak property] event in\n\t\tswitch event {\n\t\tcase let .Next(value):\n\t\t\tproperty?.value = value\n\t\tcase .Completed:\n\t\t\tdisposable.dispose()\n\t\tdefault:\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn disposable\n}\n\n\n/// Creates a signal from the given producer, which will be immediately bound to\n/// the given property, updating the property's value to the latest value sent\n/// by the signal.\n///\n/// The binding will automatically terminate when the property is deinitialized,\n/// or when the created signal sends a `Completed` event.\npublic func <~ <P: MutablePropertyType>(property: P, producer: SignalProducer<P.Value, NoError>) -> Disposable {\n\tvar disposable: Disposable!\n\n\tproducer.startWithSignal { signal, signalDisposable in\n\t\tproperty <~ signal\n\t\tdisposable = signalDisposable\n\n\t\tproperty.producer.startWithCompleted {\n\t\t\tsignalDisposable.dispose()\n\t\t}\n\t}\n\n\treturn disposable\n}\n\n\n/// Binds `destinationProperty` to the latest values of `sourceProperty`.\n///\n/// The binding will automatically terminate when either property is\n/// deinitialized.\npublic func <~ <Destination: MutablePropertyType, Source: PropertyType where Source.Value == Destination.Value>(destinationProperty: Destination, sourceProperty: Source) -> Disposable {\n\treturn destinationProperty <~ sourceProperty.producer\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Scheduler.swift",
    "content": "//\n//  Scheduler.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-06-02.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\nimport Foundation\n\n/// Represents a serial queue of work items.\npublic protocol SchedulerType {\n\t/// Enqueues an action on the scheduler.\n\t///\n\t/// When the work is executed depends on the scheduler in use.\n\t///\n\t/// Optionally returns a disposable that can be used to cancel the work\n\t/// before it begins.\n\tfunc schedule(action: () -> ()) -> Disposable?\n}\n\n/// A particular kind of scheduler that supports enqueuing actions at future\n/// dates.\npublic protocol DateSchedulerType: SchedulerType {\n\t/// The current date, as determined by this scheduler.\n\t///\n\t/// This can be implemented to deterministic return a known date (e.g., for\n\t/// testing purposes).\n\tvar currentDate: NSDate { get }\n\n\t/// Schedules an action for execution at or after the given date.\n\t///\n\t/// Optionally returns a disposable that can be used to cancel the work\n\t/// before it begins.\n\tfunc scheduleAfter(date: NSDate, action: () -> ()) -> Disposable?\n\n\t/// Schedules a recurring action at the given interval, beginning at the\n\t/// given start time.\n\t///\n\t/// Optionally returns a disposable that can be used to cancel the work\n\t/// before it begins.\n\tfunc scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, withLeeway: NSTimeInterval, action: () -> ()) -> Disposable?\n}\n\n/// A scheduler that performs all work synchronously.\npublic final class ImmediateScheduler: SchedulerType {\n\tpublic init() {}\n\n\tpublic func schedule(action: () -> ()) -> Disposable? {\n\t\taction()\n\t\treturn nil\n\t}\n}\n\n/// A scheduler that performs all work on the main thread, as soon as possible.\n///\n/// If the caller is already running on the main thread when an action is\n/// scheduled, it may be run synchronously. However, ordering between actions\n/// will always be preserved.\npublic final class UIScheduler: SchedulerType {\n\tprivate var queueLength: Int32 = 0\n\n\tpublic init() {}\n\n\tpublic func schedule(action: () -> ()) -> Disposable? {\n\t\tlet disposable = SimpleDisposable()\n\t\tlet actionAndDecrement: () -> () = {\n\t\t\tif !disposable.disposed {\n\t\t\t\taction()\n\t\t\t}\n\n\t\t\tOSAtomicDecrement32(&self.queueLength)\n\t\t}\n\n\t\tlet queued = OSAtomicIncrement32(&queueLength)\n\n\t\t// If we're already running on the main thread, and there isn't work\n\t\t// already enqueued, we can skip scheduling and just execute directly.\n\t\tif NSThread.isMainThread() && queued == 1 {\n\t\t\tactionAndDecrement()\n\t\t} else {\n\t\t\tdispatch_async(dispatch_get_main_queue(), actionAndDecrement)\n\t\t}\n\n\t\treturn disposable\n\t}\n}\n\n/// A scheduler backed by a serial GCD queue.\npublic final class QueueScheduler: DateSchedulerType {\n\tinternal let queue: dispatch_queue_t\n\t\n\tinternal init(internalQueue: dispatch_queue_t) {\n\t\tqueue = internalQueue\n\t}\n\t\n\t/// Initializes a scheduler that will target the given queue with its work.\n\t///\n\t/// Even if the queue is concurrent, all work items enqueued with the\n\t/// QueueScheduler will be serial with respect to each other.\n\t///\n  \t/// - warning: Obsoleted in OS X 10.11\n\t@available(OSX, deprecated=10.10, obsoleted=10.11, message=\"Use init(qos:, name:) instead\")\n\tpublic convenience init(queue: dispatch_queue_t, name: String = \"org.reactivecocoa.ReactiveCocoa.QueueScheduler\") {\n\t\tself.init(internalQueue: dispatch_queue_create(name, DISPATCH_QUEUE_SERIAL))\n\t\tdispatch_set_target_queue(self.queue, queue)\n\t}\n\n\t/// A singleton QueueScheduler that always targets the main thread's GCD\n\t/// queue.\n\t///\n\t/// Unlike UIScheduler, this scheduler supports scheduling for a future\n\t/// date, and will always schedule asynchronously (even if already running\n\t/// on the main thread).\n\tpublic static let mainQueueScheduler = QueueScheduler(internalQueue: dispatch_get_main_queue())\n\t\n\tpublic var currentDate: NSDate {\n\t\treturn NSDate()\n\t}\n\n\t/// Initializes a scheduler that will target a new serial\n\t/// queue with the given quality of service class.\n\t@available(iOS 8, watchOS 2, OSX 10.10, *)\n\tpublic convenience init(qos: dispatch_qos_class_t = QOS_CLASS_DEFAULT, name: String = \"org.reactivecocoa.ReactiveCocoa.QueueScheduler\") {\n\t\tself.init(internalQueue: dispatch_queue_create(name, dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, qos, 0)))\n\t}\n\n\tpublic func schedule(action: () -> ()) -> Disposable? {\n\t\tlet d = SimpleDisposable()\n\n\t\tdispatch_async(queue) {\n\t\t\tif !d.disposed {\n\t\t\t\taction()\n\t\t\t}\n\t\t}\n\n\t\treturn d\n\t}\n\n\tprivate func wallTimeWithDate(date: NSDate) -> dispatch_time_t {\n\n\t\tlet (seconds, frac) = modf(date.timeIntervalSince1970)\n\n\t\tlet nsec: Double = frac * Double(NSEC_PER_SEC)\n\t\tvar walltime = timespec(tv_sec: Int(seconds), tv_nsec: Int(nsec))\n\n\t\treturn dispatch_walltime(&walltime, 0)\n\t}\n\n\tpublic func scheduleAfter(date: NSDate, action: () -> ()) -> Disposable? {\n\t\tlet d = SimpleDisposable()\n\n\t\tdispatch_after(wallTimeWithDate(date), queue) {\n\t\t\tif !d.disposed {\n\t\t\t\taction()\n\t\t\t}\n\t\t}\n\n\t\treturn d\n\t}\n\n\t/// Schedules a recurring action at the given interval, beginning at the\n\t/// given start time, and with a reasonable default leeway.\n\t///\n\t/// Optionally returns a disposable that can be used to cancel the work\n\t/// before it begins.\n\tpublic func scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, action: () -> ()) -> Disposable? {\n\t\t// Apple's \"Power Efficiency Guide for Mac Apps\" recommends a leeway of\n\t\t// at least 10% of the timer interval.\n\t\treturn scheduleAfter(date, repeatingEvery: repeatingEvery, withLeeway: repeatingEvery * 0.1, action: action)\n\t}\n\n\tpublic func scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, withLeeway leeway: NSTimeInterval, action: () -> ()) -> Disposable? {\n\t\tprecondition(repeatingEvery >= 0)\n\t\tprecondition(leeway >= 0)\n\n\t\tlet nsecInterval = repeatingEvery * Double(NSEC_PER_SEC)\n\t\tlet nsecLeeway = leeway * Double(NSEC_PER_SEC)\n\n\t\tlet timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue)\n\t\tdispatch_source_set_timer(timer, wallTimeWithDate(date), UInt64(nsecInterval), UInt64(nsecLeeway))\n\t\tdispatch_source_set_event_handler(timer, action)\n\t\tdispatch_resume(timer)\n\n\t\treturn ActionDisposable {\n\t\t\tdispatch_source_cancel(timer)\n\t\t}\n\t}\n}\n\n/// A scheduler that implements virtualized time, for use in testing.\npublic final class TestScheduler: DateSchedulerType {\n\tprivate final class ScheduledAction {\n\t\tlet date: NSDate\n\t\tlet action: () -> ()\n\n\t\tinit(date: NSDate, action: () -> ()) {\n\t\t\tself.date = date\n\t\t\tself.action = action\n\t\t}\n\n\t\tfunc less(rhs: ScheduledAction) -> Bool {\n\t\t\treturn date.compare(rhs.date) == .OrderedAscending\n\t\t}\n\t}\n\n\tprivate let lock = NSRecursiveLock()\n\tprivate var _currentDate: NSDate\n\n\t/// The virtual date that the scheduler is currently at.\n\tpublic var currentDate: NSDate {\n\t\tlet d: NSDate\n\n\t\tlock.lock()\n\t\td = _currentDate\n\t\tlock.unlock()\n\n\t\treturn d\n\t}\n\n\tprivate var scheduledActions: [ScheduledAction] = []\n\n\t/// Initializes a TestScheduler with the given start date.\n\tpublic init(startDate: NSDate = NSDate(timeIntervalSinceReferenceDate: 0)) {\n\t\tlock.name = \"org.reactivecocoa.ReactiveCocoa.TestScheduler\"\n\t\t_currentDate = startDate\n\t}\n\n\tprivate func schedule(action: ScheduledAction) -> Disposable {\n\t\tlock.lock()\n\t\tscheduledActions.append(action)\n\t\tscheduledActions.sortInPlace { $0.less($1) }\n\t\tlock.unlock()\n\n\t\treturn ActionDisposable {\n\t\t\tself.lock.lock()\n\t\t\tself.scheduledActions = self.scheduledActions.filter { $0 !== action }\n\t\t\tself.lock.unlock()\n\t\t}\n\t}\n\n\tpublic func schedule(action: () -> ()) -> Disposable? {\n\t\treturn schedule(ScheduledAction(date: currentDate, action: action))\n\t}\n\n\t/// Schedules an action for execution at or after the given interval\n\t/// (counted from `currentDate`).\n\t///\n\t/// Optionally returns a disposable that can be used to cancel the work\n\t/// before it begins.\n\tpublic func scheduleAfter(interval: NSTimeInterval, action: () -> ()) -> Disposable? {\n\t\treturn scheduleAfter(currentDate.dateByAddingTimeInterval(interval), action: action)\n\t}\n\n\tpublic func scheduleAfter(date: NSDate, action: () -> ()) -> Disposable? {\n\t\treturn schedule(ScheduledAction(date: date, action: action))\n\t}\n\n\tprivate func scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, disposable: SerialDisposable, action: () -> ()) {\n\t\tprecondition(repeatingEvery >= 0)\n\n\t\tdisposable.innerDisposable = scheduleAfter(date) { [unowned self] in\n\t\t\taction()\n\t\t\tself.scheduleAfter(date.dateByAddingTimeInterval(repeatingEvery), repeatingEvery: repeatingEvery, disposable: disposable, action: action)\n\t\t}\n\t}\n\n\t/// Schedules a recurring action at the given interval, beginning at the\n\t/// given interval (counted from `currentDate`).\n\t///\n\t/// Optionally returns a disposable that can be used to cancel the work\n\t/// before it begins.\n\tpublic func scheduleAfter(interval: NSTimeInterval, repeatingEvery: NSTimeInterval, withLeeway leeway: NSTimeInterval = 0, action: () -> ()) -> Disposable? {\n\t\treturn scheduleAfter(currentDate.dateByAddingTimeInterval(interval), repeatingEvery: repeatingEvery, withLeeway: leeway, action: action)\n\t}\n\n\tpublic func scheduleAfter(date: NSDate, repeatingEvery: NSTimeInterval, withLeeway: NSTimeInterval = 0, action: () -> ()) -> Disposable? {\n\t\tlet disposable = SerialDisposable()\n\t\tscheduleAfter(date, repeatingEvery: repeatingEvery, disposable: disposable, action: action)\n\t\treturn disposable\n\t}\n\n\t/// Advances the virtualized clock by an extremely tiny interval, dequeuing\n\t/// and executing any actions along the way.\n\t///\n\t/// This is intended to be used as a way to execute actions that have been\n\t/// scheduled to run as soon as possible.\n\tpublic func advance() {\n\t\tadvanceByInterval(DBL_EPSILON)\n\t}\n\n\t/// Advances the virtualized clock by the given interval, dequeuing and\n\t/// executing any actions along the way.\n\tpublic func advanceByInterval(interval: NSTimeInterval) {\n\t\tlock.lock()\n\t\tadvanceToDate(currentDate.dateByAddingTimeInterval(interval))\n\t\tlock.unlock()\n\t}\n\n\t/// Advances the virtualized clock to the given future date, dequeuing and\n\t/// executing any actions up until that point.\n\tpublic func advanceToDate(newDate: NSDate) {\n\t\tlock.lock()\n\n\t\tassert(currentDate.compare(newDate) != .OrderedDescending)\n\t\t_currentDate = newDate\n\n\t\twhile scheduledActions.count > 0 {\n\t\t\tif newDate.compare(scheduledActions[0].date) == .OrderedAscending {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tlet scheduledAction = scheduledActions.removeAtIndex(0)\n\t\t\tscheduledAction.action()\n\t\t}\n\n\t\tlock.unlock()\n\t}\n\n\t/// Dequeues and executes all scheduled actions, leaving the scheduler's\n\t/// date at `NSDate.distantFuture()`.\n\tpublic func run() {\n\t\tadvanceToDate(NSDate.distantFuture())\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/Signal.swift",
    "content": "import Foundation\nimport Result\n\n/// A push-driven stream that sends Events over time, parameterized by the type\n/// of values being sent (`Value`) and the type of failure that can occur (`Error`).\n/// If no failures should be possible, NoError can be specified for `Error`.\n///\n/// An observer of a Signal will see the exact same sequence of events as all\n/// other observers. In other words, events will be sent to all observers at the\n/// same time.\n///\n/// Signals are generally used to represent event streams that are already “in\n/// progress,” like notifications, user input, etc. To represent streams that\n/// must first be _started_, see the SignalProducer type.\n///\n/// Signals do not need to be retained. A Signal will be automatically kept\n/// alive until the event stream has terminated.\npublic final class Signal<Value, Error: ErrorType> {\n\tpublic typealias Observer = ReactiveCocoa.Observer<Value, Error>\n\n\tprivate let atomicObservers: Atomic<Bag<Observer>?> = Atomic(Bag())\n\n\t/// Initializes a Signal that will immediately invoke the given generator,\n\t/// then forward events sent to the given observer.\n\t///\n\t/// The disposable returned from the closure will be automatically disposed\n\t/// if a terminating event is sent to the observer. The Signal itself will\n\t/// remain alive until the observer is released.\n\tpublic init(@noescape _ generator: Observer -> Disposable?) {\n\n\t\t/// Used to ensure that events are serialized during delivery to observers.\n\t\tlet sendLock = NSLock()\n\t\tsendLock.name = \"org.reactivecocoa.ReactiveCocoa.Signal\"\n\n\t\tlet generatorDisposable = SerialDisposable()\n\n\t\t/// When set to `true`, the Signal should interrupt as soon as possible.\n\t\tlet interrupted = Atomic(false)\n\n\t\tlet observer = Observer { event in\n\t\t\tif case .Interrupted = event {\n\t\t\t\t// Normally we disallow recursive events, but\n\t\t\t\t// Interrupted is kind of a special snowflake, since it\n\t\t\t\t// can inadvertently be sent by downstream consumers.\n\t\t\t\t//\n\t\t\t\t// So we'll flag Interrupted events specially, and if it\n\t\t\t\t// happened to occur while we're sending something else,\n\t\t\t\t// we'll wait to deliver it.\n\t\t\t\tinterrupted.value = true\n\n\t\t\t\tif sendLock.tryLock() {\n\t\t\t\t\tself.interrupt()\n\t\t\t\t\tsendLock.unlock()\n\n\t\t\t\t\tgeneratorDisposable.dispose()\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tif let observers = (event.isTerminating ? self.atomicObservers.swap(nil) : self.atomicObservers.value) {\n\t\t\t\t\tsendLock.lock()\n\n\t\t\t\t\tfor observer in observers {\n\t\t\t\t\t\tobserver.action(event)\n\t\t\t\t\t}\n\n\t\t\t\t\tlet shouldInterrupt = !event.isTerminating && interrupted.value\n\t\t\t\t\tif shouldInterrupt {\n\t\t\t\t\t\tself.interrupt()\n\t\t\t\t\t}\n\n\t\t\t\t\tsendLock.unlock()\n\n\t\t\t\t\tif event.isTerminating || shouldInterrupt {\n\t\t\t\t\t\t// Dispose only after notifying observers, so disposal logic\n\t\t\t\t\t\t// is consistently the last thing to run.\n\t\t\t\t\t\tgeneratorDisposable.dispose()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tgeneratorDisposable.innerDisposable = generator(observer)\n\t}\n\n\t/// A Signal that never sends any events to its observers.\n\tpublic static var never: Signal {\n\t\treturn self.init { _ in nil }\n\t}\n\n\t/// A Signal that completes immediately without emitting any value.\n\tpublic static var empty: Signal {\n\t\treturn self.init { observer in\n\t\t\tobserver.sendCompleted()\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t/// Creates a Signal that will be controlled by sending events to the given\n\t/// observer.\n\t///\n\t/// The Signal will remain alive until a terminating event is sent to the\n\t/// observer.\n\tpublic static func pipe() -> (Signal, Observer) {\n\t\tvar observer: Observer!\n\t\tlet signal = self.init { innerObserver in\n\t\t\tobserver = innerObserver\n\t\t\treturn nil\n\t\t}\n\n\t\treturn (signal, observer)\n\t}\n\n\t/// Interrupts all observers and terminates the stream.\n\tprivate func interrupt() {\n\t\tif let observers = self.atomicObservers.swap(nil) {\n\t\t\tfor observer in observers {\n\t\t\t\tobserver.sendInterrupted()\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Observes the Signal by sending any future events to the given observer. If\n\t/// the Signal has already terminated, the observer will immediately receive an\n\t/// `Interrupted` event.\n\t///\n\t/// Returns a Disposable which can be used to disconnect the observer. Disposing\n\t/// of the Disposable will have no effect on the Signal itself.\n\tpublic func observe(observer: Observer) -> Disposable? {\n\t\tvar token: RemovalToken?\n\t\tatomicObservers.modify { observers in\n\t\t\tguard let immutableObservers = observers else { return nil }\n\t\t\tvar mutableObservers = immutableObservers\n\t\t\t\n\t\t\ttoken = mutableObservers.insert(observer)\n\t\t\treturn mutableObservers\n\t\t}\n\n\t\tif let token = token {\n\t\t\treturn ActionDisposable { [weak self] in\n\t\t\t\tself?.atomicObservers.modify { observers in\n\t\t\t\t\tguard let immutableObservers = observers else { return nil }\n\t\t\t\t\tvar mutableObservers = immutableObservers\n\n\t\t\t\t\tmutableObservers.removeValueForToken(token)\n\t\t\t\t\treturn mutableObservers\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tobserver.sendInterrupted()\n\t\t\treturn nil\n\t\t}\n\t}\n}\n\npublic protocol SignalType {\n\t/// The type of values being sent on the signal.\n\ttypealias Value\n\t/// The type of error that can occur on the signal. If errors aren't possible\n\t/// then `NoError` can be used.\n\ttypealias Error: ErrorType\n\n\t/// Extracts a signal from the receiver.\n\tvar signal: Signal<Value, Error> { get }\n\n\t/// Observes the Signal by sending any future events to the given observer.\n\tfunc observe(observer: Signal<Value, Error>.Observer) -> Disposable?\n}\n\nextension Signal: SignalType {\n\tpublic var signal: Signal {\n\t\treturn self\n\t}\n}\n\nextension SignalType {\n\t/// Convenience override for observe(_:) to allow trailing-closure style\n\t/// invocations.\n\tpublic func observe(action: Signal<Value, Error>.Observer.Action) -> Disposable? {\n\t\treturn observe(Observer(action))\n\t}\n\n\t/// Observes the Signal by invoking the given callback when `next` events are\n\t/// received.\n\t///\n\t/// Returns a Disposable which can be used to stop the invocation of the\n\t/// callbacks. Disposing of the Disposable will have no effect on the Signal\n\t/// itself.\n\tpublic func observeNext(next: Value -> ()) -> Disposable? {\n\t\treturn observe(Observer(next: next))\n\t}\n\n\t/// Observes the Signal by invoking the given callback when a `completed` event is\n\t/// received.\n\t///\n\t/// Returns a Disposable which can be used to stop the invocation of the\n\t/// callback. Disposing of the Disposable will have no effect on the Signal\n\t/// itself.\n\tpublic func observeCompleted(completed: () -> ()) -> Disposable? {\n\t\treturn observe(Observer(completed: completed))\n\t}\n\t\n\t/// Observes the Signal by invoking the given callback when a `failed` event is\n\t/// received.\n\t///\n\t/// Returns a Disposable which can be used to stop the invocation of the\n\t/// callback. Disposing of the Disposable will have no effect on the Signal\n\t/// itself.\n\tpublic func observeFailed(error: Error -> ()) -> Disposable? {\n\t\treturn observe(Observer(failed: error))\n\t}\n\t\n\t/// Observes the Signal by invoking the given callback when an `interrupted` event is\n\t/// received. If the Signal has already terminated, the callback will be invoked\n\t/// immediately.\n\t///\n\t/// Returns a Disposable which can be used to stop the invocation of the\n\t/// callback. Disposing of the Disposable will have no effect on the Signal\n\t/// itself.\n\tpublic func observeInterrupted(interrupted: () -> ()) -> Disposable? {\n\t\treturn observe(Observer(interrupted: interrupted))\n\t}\n\n\t/// Maps each value in the signal to a new value.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func map<U>(transform: Value -> U) -> Signal<U, Error> {\n\t\treturn Signal { observer in\n\t\t\treturn self.observe { event in\n\t\t\t\tobserver.action(event.map(transform))\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Maps errors in the signal to a new error.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func mapError<F>(transform: Error -> F) -> Signal<Value, F> {\n\t\treturn Signal { observer in\n\t\t\treturn self.observe { event in\n\t\t\t\tobserver.action(event.mapError(transform))\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Preserves only the values of the signal that pass the given predicate.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func filter(predicate: Value -> Bool) -> Signal<Value, Error> {\n\t\treturn Signal { observer in\n\t\t\treturn self.observe { (event: Event<Value, Error>) -> () in\n\t\t\t\tif case let .Next(value) = event {\n\t\t\t\t\tif predicate(value) {\n\t\t\t\t\t\tobserver.sendNext(value)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tobserver.action(event)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalType where Value: OptionalType {\n\t/// Unwraps non-`nil` values and forwards them on the returned signal, `nil`\n\t/// values are dropped.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func ignoreNil() -> Signal<Value.Wrapped, Error> {\n\t\treturn filter { $0.optional != nil }.map { $0.optional! }\n\t}\n}\n\nextension SignalType {\n\t/// Returns a signal that will yield the first `count` values from `self`\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func take(count: Int) -> Signal<Value, Error> {\n\t\tprecondition(count >= 0)\n\n\t\treturn Signal { observer in\n\t\t\tif count == 0 {\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tvar taken = 0\n\n\t\t\treturn self.observe { event in\n\t\t\t\tif case let .Next(value) = event {\n\t\t\t\t\tif taken < count {\n\t\t\t\t\t\ttaken++\n\t\t\t\t\t\tobserver.sendNext(value)\n\t\t\t\t\t}\n\n\t\t\t\t\tif taken == count {\n\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tobserver.action(event)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/// A reference type which wraps an array to avoid copying it for performance and\n/// memory usage optimization.\nprivate final class CollectState<Value> {\n\tvar values: [Value] = []\n\n\tfunc append(value: Value) -> Self {\n\t\tvalues.append(value)\n\t\treturn self\n\t}\n}\n\nextension SignalType {\n\t/// Returns a signal that will yield an array of values when `self` completes.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func collect() -> Signal<[Value], Error> {\n\t\treturn self\n\t\t\t.reduce(CollectState()) { $0.append($1) }\n\t\t\t.map { $0.values }\n\t}\n\n\t/// Forwards all events onto the given scheduler, instead of whichever\n\t/// scheduler they originally arrived upon.\n\tpublic func observeOn(scheduler: SchedulerType) -> Signal<Value, Error> {\n\t\treturn Signal { observer in\n\t\t\treturn self.observe { event in\n\t\t\t\tscheduler.schedule {\n\t\t\t\t\tobserver.action(event)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nprivate final class CombineLatestState<Value> {\n\tvar latestValue: Value?\n\tvar completed = false\n}\n\nextension SignalType {\n\tprivate func observeWithStates<U>(signalState: CombineLatestState<Value>, _ otherState: CombineLatestState<U>, _ lock: NSLock, _ onBothNext: () -> (), _ onFailed: Error -> (), _ onBothCompleted: () -> (), _ onInterrupted: () -> ()) -> Disposable? {\n\t\treturn self.observe { event in\n\t\t\tswitch event {\n\t\t\tcase let .Next(value):\n\t\t\t\tlock.lock()\n\n\t\t\t\tsignalState.latestValue = value\n\t\t\t\tif otherState.latestValue != nil {\n\t\t\t\t\tonBothNext()\n\t\t\t\t}\n\n\t\t\t\tlock.unlock()\n\n\t\t\tcase let .Failed(error):\n\t\t\t\tonFailed(error)\n\n\t\t\tcase .Completed:\n\t\t\t\tlock.lock()\n\n\t\t\t\tsignalState.completed = true\n\t\t\t\tif otherState.completed {\n\t\t\t\t\tonBothCompleted()\n\t\t\t\t}\n\n\t\t\t\tlock.unlock()\n\n\t\t\tcase .Interrupted:\n\t\t\t\tonInterrupted()\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Combines the latest value of the receiver with the latest value from\n\t/// the given signal.\n\t///\n\t/// The returned signal will not send a value until both inputs have sent\n\t/// at least one value each. If either signal is interrupted, the returned signal\n\t/// will also be interrupted.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func combineLatestWith<U>(otherSignal: Signal<U, Error>) -> Signal<(Value, U), Error> {\n\t\treturn Signal { observer in\n\t\t\tlet lock = NSLock()\n\t\t\tlock.name = \"org.reactivecocoa.ReactiveCocoa.combineLatestWith\"\n\n\t\t\tlet signalState = CombineLatestState<Value>()\n\t\t\tlet otherState = CombineLatestState<U>()\n\t\t\t\n\t\t\tlet onBothNext = { () -> () in\n\t\t\t\tobserver.sendNext((signalState.latestValue!, otherState.latestValue!))\n\t\t\t}\n\t\t\t\n\t\t\tlet onFailed = observer.sendFailed\n\t\t\tlet onBothCompleted = observer.sendCompleted\n\t\t\tlet onInterrupted = observer.sendInterrupted\n\n\t\t\tlet disposable = CompositeDisposable()\n\t\t\tdisposable += self.observeWithStates(signalState, otherState, lock, onBothNext, onFailed, onBothCompleted, onInterrupted)\n\t\t\tdisposable += otherSignal.observeWithStates(otherState, signalState, lock, onBothNext, onFailed, onBothCompleted, onInterrupted)\n\t\t\t\n\t\t\treturn disposable\n\t\t}\n\t}\n\n\t/// Delays `Next` and `Completed` events by the given interval, forwarding\n\t/// them on the given scheduler.\n\t///\n\t/// `Failed` and `Interrupted` events are always scheduled immediately.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func delay(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> Signal<Value, Error> {\n\t\tprecondition(interval >= 0)\n\n\t\treturn Signal { observer in\n\t\t\treturn self.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase .Failed, .Interrupted:\n\t\t\t\t\tscheduler.schedule {\n\t\t\t\t\t\tobserver.action(event)\n\t\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tlet date = scheduler.currentDate.dateByAddingTimeInterval(interval)\n\t\t\t\t\tscheduler.scheduleAfter(date) {\n\t\t\t\t\t\tobserver.action(event)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Returns a signal that will skip the first `count` values, then forward\n\t/// everything afterward.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func skip(count: Int) -> Signal<Value, Error> {\n\t\tprecondition(count >= 0)\n\n\t\tif count == 0 {\n\t\t\treturn signal\n\t\t}\n\n\t\treturn Signal { observer in\n\t\t\tvar skipped = 0\n\n\t\t\treturn self.observe { event in\n\t\t\t\tif case .Next = event where skipped < count {\n\t\t\t\t\tskipped++\n\t\t\t\t} else {\n\t\t\t\t\tobserver.action(event)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Treats all Events from `self` as plain values, allowing them to be manipulated\n\t/// just like any other value.\n\t///\n\t/// In other words, this brings Events “into the monad.”\n\t///\n\t/// When a Completed or Failed event is received, the resulting signal will send\n\t/// the Event itself and then complete. When an Interrupted event is received,\n\t/// the resulting signal will send the Event itself and then interrupt.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func materialize() -> Signal<Event<Value, Error>, NoError> {\n\t\treturn Signal { observer in\n\t\t\treturn self.observe { event in\n\t\t\t\tobserver.sendNext(event)\n\n\t\t\t\tswitch event {\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tobserver.sendInterrupted()\n\n\t\t\t\tcase .Completed, .Failed:\n\t\t\t\t\tobserver.sendCompleted()\n\n\t\t\t\tcase .Next:\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalType where Value: EventType, Error == NoError {\n\t/// The inverse of materialize(), this will translate a signal of `Event`\n\t/// _values_ into a signal of those events themselves.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func dematerialize() -> Signal<Value.Value, Value.Error> {\n\t\treturn Signal<Value.Value, Value.Error> { observer in\n\t\t\treturn self.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(innerEvent):\n\t\t\t\t\tobserver.action(innerEvent.event)\n\n\t\t\t\tcase .Failed:\n\t\t\t\t\tfatalError(\"NoError is impossible to construct\")\n\n\t\t\t\tcase .Completed:\n\t\t\t\t\tobserver.sendCompleted()\n\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tobserver.sendInterrupted()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalType {\n\t/// Injects side effects to be performed upon the specified signal events.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func on(event event: (Event<Value, Error> -> ())? = nil, failed: (Error -> ())? = nil, completed: (() -> ())? = nil, interrupted: (() -> ())? = nil, terminated: (() -> ())? = nil, disposed: (() -> ())? = nil, next: (Value -> ())? = nil) -> Signal<Value, Error> {\n\t\treturn Signal { observer in\n\t\t\tlet disposable = CompositeDisposable()\n\n\t\t\t_ = disposed.map(disposable.addDisposable)\n\n\t\t\tdisposable += signal.observe { receivedEvent in\n\t\t\t\tevent?(receivedEvent)\n\n\t\t\t\tswitch receivedEvent {\n\t\t\t\tcase let .Next(value):\n\t\t\t\t\tnext?(value)\n\n\t\t\t\tcase let .Failed(error):\n\t\t\t\t\tfailed?(error)\n\n\t\t\t\tcase .Completed:\n\t\t\t\t\tcompleted?()\n\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tinterrupted?()\n\t\t\t\t}\n\n\t\t\t\tif receivedEvent.isTerminating {\n\t\t\t\t\tterminated?()\n\t\t\t\t}\n\n\t\t\t\tobserver.action(receivedEvent)\n\t\t\t}\n\n\t\t\treturn disposable\n\t\t}\n\t}\n}\n\nprivate struct SampleState<Value> {\n\tvar latestValue: Value? = nil\n\tvar signalCompleted: Bool = false\n\tvar samplerCompleted: Bool = false\n}\n\nextension SignalType {\n\t/// Forwards the latest value from `signal` whenever `sampler` sends a Next\n\t/// event.\n\t///\n\t/// If `sampler` fires before a value has been observed on `signal`, nothing\n\t/// happens.\n\t///\n\t/// Returns a signal that will send values from `signal`, sampled (possibly\n\t/// multiple times) by `sampler`, then complete once both input signals have\n\t/// completed, or interrupt if either input signal is interrupted.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func sampleOn(sampler: Signal<(), NoError>) -> Signal<Value, Error> {\n\t\treturn Signal { observer in\n\t\t\tlet state = Atomic(SampleState<Value>())\n\t\t\tlet disposable = CompositeDisposable()\n\n\t\t\tdisposable += self.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(value):\n\t\t\t\t\tstate.modify { st in\n\t\t\t\t\t\tvar mutableSt = st\n\t\t\t\t\t\tmutableSt.latestValue = value\n\t\t\t\t\t\treturn mutableSt\n\t\t\t\t\t}\n\t\t\t\tcase let .Failed(error):\n\t\t\t\t\tobserver.sendFailed(error)\n\t\t\t\tcase .Completed:\n\t\t\t\t\tlet oldState = state.modify { st in\n\t\t\t\t\t\tvar mutableSt = st\n\t\t\t\t\t\tmutableSt.signalCompleted = true\n\t\t\t\t\t\treturn mutableSt\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif oldState.samplerCompleted {\n\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t}\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tobserver.sendInterrupted()\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tdisposable += sampler.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase .Next:\n\t\t\t\t\tif let value = state.value.latestValue {\n\t\t\t\t\t\tobserver.sendNext(value)\n\t\t\t\t\t}\n\t\t\t\tcase .Completed:\n\t\t\t\t\tlet oldState = state.modify { st in\n\t\t\t\t\t\tvar mutableSt = st\n\t\t\t\t\t\tmutableSt.samplerCompleted = true\n\t\t\t\t\t\treturn mutableSt\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif oldState.signalCompleted {\n\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t}\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tobserver.sendInterrupted()\n\t\t\t\tdefault:\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn disposable\n\t\t}\n\t}\n\n\t/// Forwards events from `self` until `trigger` sends a Next or Completed\n\t/// event, at which point the returned signal will complete.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func takeUntil(trigger: Signal<(), NoError>) -> Signal<Value, Error> {\n\t\treturn Signal { observer in\n\t\t\tlet disposable = CompositeDisposable()\n\t\t\tdisposable += self.observe(observer)\n\n\t\t\tdisposable += trigger.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase .Next, .Completed:\n\t\t\t\t\tobserver.sendCompleted()\n\n\t\t\t\tcase .Failed, .Interrupted:\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn disposable\n\t\t}\n\t}\n\t\n\t/// Does not forward any values from `self` until `trigger` sends a Next or\n\t/// Completed event, at which point the returned signal behaves exactly like\n\t/// `signal`.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func skipUntil(trigger: Signal<(), NoError>) -> Signal<Value, Error> {\n\t\treturn Signal { observer in\n\t\t\tlet disposable = SerialDisposable()\n\t\t\t\n\t\t\tdisposable.innerDisposable = trigger.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase .Next, .Completed:\n\t\t\t\t\tdisposable.innerDisposable = self.observe(observer)\n\t\t\t\t\t\n\t\t\t\tcase .Failed, .Interrupted:\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn disposable\n\t\t}\n\t}\n\n\t/// Forwards events from `self` with history: values of the returned signal\n\t/// are a tuple whose first member is the previous value and whose second member\n\t/// is the current value. `initial` is supplied as the first member when `self`\n\t/// sends its first value.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func combinePrevious(initial: Value) -> Signal<(Value, Value), Error> {\n\t\treturn scan((initial, initial)) { previousCombinedValues, newValue in\n\t\t\treturn (previousCombinedValues.1, newValue)\n\t\t}\n\t}\n\n\t/// Like `scan`, but sends only the final value and then immediately completes.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func reduce<U>(initial: U, _ combine: (U, Value) -> U) -> Signal<U, Error> {\n\t\t// We need to handle the special case in which `signal` sends no values.\n\t\t// We'll do that by sending `initial` on the output signal (before taking\n\t\t// the last value).\n\t\tlet (scannedSignalWithInitialValue, outputSignalObserver) = Signal<U, Error>.pipe()\n\t\tlet outputSignal = scannedSignalWithInitialValue.takeLast(1)\n\n\t\t// Now that we've got takeLast() listening to the piped signal, send that initial value.\n\t\toutputSignalObserver.sendNext(initial)\n\n\t\t// Pipe the scanned input signal into the output signal.\n\t\tscan(initial, combine).observe(outputSignalObserver)\n\n\t\treturn outputSignal\n\t}\n\n\t/// Aggregates `selfs`'s values into a single combined value. When `self` emits\n\t/// its first value, `combine` is invoked with `initial` as the first argument and\n\t/// that emitted value as the second argument. The result is emitted from the\n\t/// signal returned from `scan`. That result is then passed to `combine` as the\n\t/// first argument when the next value is emitted, and so on.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func scan<U>(initial: U, _ combine: (U, Value) -> U) -> Signal<U, Error> {\n\t\treturn Signal { observer in\n\t\t\tvar accumulator = initial\n\n\t\t\treturn self.observe { event in\n\t\t\t\tobserver.action(event.map { value in\n\t\t\t\t\taccumulator = combine(accumulator, value)\n\t\t\t\t\treturn accumulator\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalType where Value: Equatable {\n\t/// Forwards only those values from `self` which are not duplicates of the\n\t/// immedately preceding value. The first value is always forwarded.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func skipRepeats() -> Signal<Value, Error> {\n\t\treturn skipRepeats(==)\n\t}\n}\n\nextension SignalType {\n\t/// Forwards only those values from `self` which do not pass `isRepeat` with\n\t/// respect to the previous value. The first value is always forwarded.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func skipRepeats(isRepeat: (Value, Value) -> Bool) -> Signal<Value, Error> {\n\t\treturn self\n\t\t\t.map(Optional.init)\n\t\t\t.combinePrevious(nil)\n\t\t\t.filter { a, b in\n\t\t\t\tif let a = a, b = b where isRepeat(a, b) {\n\t\t\t\t\treturn false\n\t\t\t\t} else {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\t.map { $0.1! }\n\t}\n\n\t/// Does not forward any values from `self` until `predicate` returns false,\n\t/// at which point the returned signal behaves exactly like `signal`.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func skipWhile(predicate: Value -> Bool) -> Signal<Value, Error> {\n\t\treturn Signal { observer in\n\t\t\tvar shouldSkip = true\n\n\t\t\treturn self.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(value):\n\t\t\t\t\tshouldSkip = shouldSkip && predicate(value)\n\t\t\t\t\tif !shouldSkip {\n\t\t\t\t\t\tfallthrough\n\t\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tobserver.action(event)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Forwards events from `self` until `replacement` begins sending events.\n\t///\n\t/// Returns a signal which passes through `Next`, `Failed`, and `Interrupted`\n\t/// events from `signal` until `replacement` sends an event, at which point the\n\t/// returned signal will send that event and switch to passing through events\n\t/// from `replacement` instead, regardless of whether `self` has sent events\n\t/// already.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func takeUntilReplacement(replacement: Signal<Value, Error>) -> Signal<Value, Error> {\n\t\treturn Signal { observer in\n\t\t\tlet disposable = CompositeDisposable()\n\n\t\t\tlet signalDisposable = self.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase .Completed:\n\t\t\t\t\tbreak\n\n\t\t\t\tcase .Next, .Failed, .Interrupted:\n\t\t\t\t\tobserver.action(event)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdisposable += signalDisposable\n\t\t\tdisposable += replacement.observe { event in\n\t\t\t\tsignalDisposable?.dispose()\n\t\t\t\tobserver.action(event)\n\t\t\t}\n\n\t\t\treturn disposable\n\t\t}\n\t}\n\n\t/// Waits until `self` completes and then forwards the final `count` values\n\t/// on the returned signal.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func takeLast(count: Int) -> Signal<Value, Error> {\n\t\treturn Signal { observer in\n\t\t\tvar buffer: [Value] = []\n\t\t\tbuffer.reserveCapacity(count)\n\n\t\t\treturn self.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(value):\n\t\t\t\t\t// To avoid exceeding the reserved capacity of the buffer, we remove then add.\n\t\t\t\t\t// Remove elements until we have room to add one more.\n\t\t\t\t\twhile (buffer.count + 1) > count {\n\t\t\t\t\t\tbuffer.removeAtIndex(0)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tbuffer.append(value)\n\t\t\t\tcase let .Failed(error):\n\t\t\t\t\tobserver.sendFailed(error)\n\t\t\t\tcase .Completed:\n\t\t\t\t\tbuffer.forEach(observer.sendNext)\n\t\t\t\t\t\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tobserver.sendInterrupted()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Forwards any values from `self` until `predicate` returns false,\n\t/// at which point the returned signal will complete.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func takeWhile(predicate: Value -> Bool) -> Signal<Value, Error> {\n\t\treturn Signal { observer in\n\t\t\treturn self.observe { event in\n\t\t\t\tif case let .Next(value) = event where !predicate(value) {\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t} else {\n\t\t\t\t\tobserver.action(event)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nprivate struct ZipState<Value> {\n\tvar values: [Value] = []\n\tvar completed = false\n\n\tvar isFinished: Bool {\n\t\treturn values.isEmpty && completed\n\t}\n}\n\nextension SignalType {\n\t/// Zips elements of two signals into pairs. The elements of any Nth pair\n\t/// are the Nth elements of the two input signals.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func zipWith<U>(otherSignal: Signal<U, Error>) -> Signal<(Value, U), Error> {\n\t\treturn Signal { observer in\n\t\t\tlet states = Atomic(ZipState<Value>(), ZipState<U>())\n\t\t\tlet disposable = CompositeDisposable()\n\t\t\t\n\t\t\tlet flush = { () -> () in\n\t\t\t\tvar originalStates: (ZipState<Value>, ZipState<U>)!\n\t\t\t\tstates.modify { states in\n\t\t\t\t\toriginalStates = states\n\t\t\t\t\t\n\t\t\t\t\tvar updatedStates = states\n\t\t\t\t\tlet extractCount = min(states.0.values.count, states.1.values.count)\n\t\t\t\t\t\n\t\t\t\t\tupdatedStates.0.values.removeRange(0 ..< extractCount)\n\t\t\t\t\tupdatedStates.1.values.removeRange(0 ..< extractCount)\n\t\t\t\t\treturn updatedStates\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\twhile !originalStates.0.values.isEmpty && !originalStates.1.values.isEmpty {\n\t\t\t\t\tlet left = originalStates.0.values.removeAtIndex(0)\n\t\t\t\t\tlet right = originalStates.1.values.removeAtIndex(0)\n\t\t\t\t\tobserver.sendNext((left, right))\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif originalStates.0.isFinished || originalStates.1.isFinished {\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tlet onFailed = observer.sendFailed\n\t\t\tlet onInterrupted = observer.sendInterrupted\n\n\t\t\tdisposable += self.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(value):\n\t\t\t\t\tstates.modify { states in\n\t\t\t\t\t\tvar mutableStates = states\n\t\t\t\t\t\tmutableStates.0.values.append(value)\n\t\t\t\t\t\treturn mutableStates\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tflush()\n\t\t\t\tcase let .Failed(error):\n\t\t\t\t\tonFailed(error)\n\t\t\t\tcase .Completed:\n\t\t\t\t\tstates.modify { states in\n\t\t\t\t\t\tvar mutableStates = states\n\t\t\t\t\t\tmutableStates.0.completed = true\n\t\t\t\t\t\treturn mutableStates\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tflush()\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tonInterrupted()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdisposable += otherSignal.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(value):\n\t\t\t\t\tstates.modify { states in\n\t\t\t\t\t\tvar mutableStates = states\n\t\t\t\t\t\tmutableStates.1.values.append(value)\n\t\t\t\t\t\treturn mutableStates\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tflush()\n\t\t\t\tcase let .Failed(error):\n\t\t\t\t\tonFailed(error)\n\t\t\t\tcase .Completed:\n\t\t\t\t\tstates.modify { states in\n\t\t\t\t\t\tvar mutableStates = states\n\t\t\t\t\t\tmutableStates.1.completed = true\n\t\t\t\t\t\treturn mutableStates\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tflush()\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tonInterrupted()\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn disposable\n\t\t}\n\t}\n\n\t/// Applies `operation` to values from `self` with `Success`ful results\n\t/// forwarded on the returned signal and `Failure`s sent as `Failed` events.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func attempt(operation: Value -> Result<(), Error>) -> Signal<Value, Error> {\n\t\treturn attemptMap { value in\n\t\t\treturn operation(value).map {\n\t\t\t\treturn value\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Applies `operation` to values from `self` with `Success`ful results mapped\n\t/// on the returned signal and `Failure`s sent as `Failed` events.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func attemptMap<U>(operation: Value -> Result<U, Error>) -> Signal<U, Error> {\n\t\treturn Signal { observer in\n\t\t\tself.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(value):\n\t\t\t\t\toperation(value).analysis(\n\t\t\t\t\t\tifSuccess: observer.sendNext,\n\t\t\t\t\t\tifFailure: observer.sendFailed\n\t\t\t\t\t)\n\t\t\t\tcase let .Failed(error):\n\t\t\t\t\tobserver.sendFailed(error)\n\t\t\t\tcase .Completed:\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tobserver.sendInterrupted()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Throttle values sent by the receiver, so that at least `interval`\n\t/// seconds pass between each, then forwards them on the given scheduler.\n\t///\n\t/// If multiple values are received before the interval has elapsed, the\n\t/// latest value is the one that will be passed on.\n\t///\n\t/// If the input signal terminates while a value is being throttled, that value\n\t/// will be discarded and the returned signal will terminate immediately.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func throttle(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> Signal<Value, Error> {\n\t\tprecondition(interval >= 0)\n\n\t\treturn Signal { observer in\n\t\t\tlet state: Atomic<ThrottleState<Value>> = Atomic(ThrottleState())\n\t\t\tlet schedulerDisposable = SerialDisposable()\n\n\t\t\tlet disposable = CompositeDisposable()\n\t\t\tdisposable.addDisposable(schedulerDisposable)\n\n\t\t\tdisposable += self.observe { event in\n\t\t\t\tif case let .Next(value) = event {\n\t\t\t\t\tvar scheduleDate: NSDate!\n\t\t\t\t\tstate.modify { state in\n\t\t\t\t\t\tvar mutableState = state\n\t\t\t\t\t\tmutableState.pendingValue = value\n\n\t\t\t\t\t\tlet proposedScheduleDate = mutableState.previousDate?.dateByAddingTimeInterval(interval) ?? scheduler.currentDate\n\t\t\t\t\t\tscheduleDate = proposedScheduleDate.laterDate(scheduler.currentDate)\n\n\t\t\t\t\t\treturn mutableState\n\t\t\t\t\t}\n\n\t\t\t\t\tschedulerDisposable.innerDisposable = scheduler.scheduleAfter(scheduleDate) {\n\t\t\t\t\t\tlet previousState = state.modify { state in\n\t\t\t\t\t\t\tvar mutableState = state\n\n\t\t\t\t\t\t\tif mutableState.pendingValue != nil {\n\t\t\t\t\t\t\t\tmutableState.pendingValue = nil\n\t\t\t\t\t\t\t\tmutableState.previousDate = scheduleDate\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn mutableState\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif let pendingValue = previousState.pendingValue {\n\t\t\t\t\t\t\tobserver.sendNext(pendingValue)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tschedulerDisposable.innerDisposable = scheduler.schedule {\n\t\t\t\t\t\tobserver.action(event)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn disposable\n\t\t}\n\t}\n}\n\nprivate struct ThrottleState<Value> {\n\tvar previousDate: NSDate? = nil\n\tvar pendingValue: Value? = nil\n}\n\n/// Combines the values of all the given signals, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func combineLatest<A, B, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>) -> Signal<(A, B), Error> {\n\treturn a.combineLatestWith(b)\n}\n\n/// Combines the values of all the given signals, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func combineLatest<A, B, C, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>) -> Signal<(A, B, C), Error> {\n\treturn combineLatest(a, b)\n\t\t.combineLatestWith(c)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given signals, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func combineLatest<A, B, C, D, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>) -> Signal<(A, B, C, D), Error> {\n\treturn combineLatest(a, b, c)\n\t\t.combineLatestWith(d)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given signals, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func combineLatest<A, B, C, D, E, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>) -> Signal<(A, B, C, D, E), Error> {\n\treturn combineLatest(a, b, c, d)\n\t\t.combineLatestWith(e)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given signals, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func combineLatest<A, B, C, D, E, F, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>, _ f: Signal<F, Error>) -> Signal<(A, B, C, D, E, F), Error> {\n\treturn combineLatest(a, b, c, d, e)\n\t\t.combineLatestWith(f)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given signals, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func combineLatest<A, B, C, D, E, F, G, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>, _ f: Signal<F, Error>, _ g: Signal<G, Error>) -> Signal<(A, B, C, D, E, F, G), Error> {\n\treturn combineLatest(a, b, c, d, e, f)\n\t\t.combineLatestWith(g)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given signals, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func combineLatest<A, B, C, D, E, F, G, H, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>, _ f: Signal<F, Error>, _ g: Signal<G, Error>, _ h: Signal<H, Error>) -> Signal<(A, B, C, D, E, F, G, H), Error> {\n\treturn combineLatest(a, b, c, d, e, f, g)\n\t\t.combineLatestWith(h)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given signals, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func combineLatest<A, B, C, D, E, F, G, H, I, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>, _ f: Signal<F, Error>, _ g: Signal<G, Error>, _ h: Signal<H, Error>, _ i: Signal<I, Error>) -> Signal<(A, B, C, D, E, F, G, H, I), Error> {\n\treturn combineLatest(a, b, c, d, e, f, g, h)\n\t\t.combineLatestWith(i)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given signals, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func combineLatest<A, B, C, D, E, F, G, H, I, J, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>, _ f: Signal<F, Error>, _ g: Signal<G, Error>, _ h: Signal<H, Error>, _ i: Signal<I, Error>, _ j: Signal<J, Error>) -> Signal<(A, B, C, D, E, F, G, H, I, J), Error> {\n\treturn combineLatest(a, b, c, d, e, f, g, h, i)\n\t\t.combineLatestWith(j)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given signals, in the manner described by\n/// `combineLatestWith`. No events will be sent if the sequence is empty.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func combineLatest<S: SequenceType, Value, Error where S.Generator.Element == Signal<Value, Error>>(signals: S) -> Signal<[Value], Error> {\n\tvar generator = signals.generate()\n\tif let first = generator.next() {\n\t\tlet initial = first.map { [$0] }\n\t\treturn GeneratorSequence(generator).reduce(initial) { signal, next in\n\t\t\tsignal.combineLatestWith(next).map { $0.0 + [$0.1] }\n\t\t}\n\t}\n\t\n\treturn .never\n}\n\n/// Zips the values of all the given signals, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func zip<A, B, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>) -> Signal<(A, B), Error> {\n\treturn a.zipWith(b)\n}\n\n/// Zips the values of all the given signals, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func zip<A, B, C, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>) -> Signal<(A, B, C), Error> {\n\treturn zip(a, b)\n\t\t.zipWith(c)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given signals, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func zip<A, B, C, D, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>) -> Signal<(A, B, C, D), Error> {\n\treturn zip(a, b, c)\n\t\t.zipWith(d)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given signals, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func zip<A, B, C, D, E, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>) -> Signal<(A, B, C, D, E), Error> {\n\treturn zip(a, b, c, d)\n\t\t.zipWith(e)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given signals, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func zip<A, B, C, D, E, F, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>, _ f: Signal<F, Error>) -> Signal<(A, B, C, D, E, F), Error> {\n\treturn zip(a, b, c, d, e)\n\t\t.zipWith(f)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given signals, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func zip<A, B, C, D, E, F, G, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>, _ f: Signal<F, Error>, _ g: Signal<G, Error>) -> Signal<(A, B, C, D, E, F, G), Error> {\n\treturn zip(a, b, c, d, e, f)\n\t\t.zipWith(g)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given signals, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func zip<A, B, C, D, E, F, G, H, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>, _ f: Signal<F, Error>, _ g: Signal<G, Error>, _ h: Signal<H, Error>) -> Signal<(A, B, C, D, E, F, G, H), Error> {\n\treturn zip(a, b, c, d, e, f, g)\n\t\t.zipWith(h)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given signals, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func zip<A, B, C, D, E, F, G, H, I, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>, _ f: Signal<F, Error>, _ g: Signal<G, Error>, _ h: Signal<H, Error>, _ i: Signal<I, Error>) -> Signal<(A, B, C, D, E, F, G, H, I), Error> {\n\treturn zip(a, b, c, d, e, f, g, h)\n\t\t.zipWith(i)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given signals, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func zip<A, B, C, D, E, F, G, H, I, J, Error>(a: Signal<A, Error>, _ b: Signal<B, Error>, _ c: Signal<C, Error>, _ d: Signal<D, Error>, _ e: Signal<E, Error>, _ f: Signal<F, Error>, _ g: Signal<G, Error>, _ h: Signal<H, Error>, _ i: Signal<I, Error>, _ j: Signal<J, Error>) -> Signal<(A, B, C, D, E, F, G, H, I, J), Error> {\n\treturn zip(a, b, c, d, e, f, g, h, i)\n\t\t.zipWith(j)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given signals, in the manner described by\n/// `zipWith`. No events will be sent if the sequence is empty.\n@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\npublic func zip<S: SequenceType, Value, Error where S.Generator.Element == Signal<Value, Error>>(signals: S) -> Signal<[Value], Error> {\n\tvar generator = signals.generate()\n\tif let first = generator.next() {\n\t\tlet initial = first.map { [$0] }\n\t\treturn GeneratorSequence(generator).reduce(initial) { signal, next in\n\t\t\tsignal.zipWith(next).map { $0.0 + [$0.1] }\n\t\t}\n\t}\n\t\n\treturn .never\n}\n\nextension SignalType {\n\t/// Forwards events from `self` until `interval`. Then if signal isn't completed yet,\n\t/// fails with `error` on `scheduler`.\n\t///\n\t/// If the interval is 0, the timeout will be scheduled immediately. The signal\n\t/// must complete synchronously (or on a faster scheduler) to avoid the timeout.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func timeoutWithError(error: Error, afterInterval interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> Signal<Value, Error> {\n\t\tprecondition(interval >= 0)\n\n\t\treturn Signal { observer in\n\t\t\tlet disposable = CompositeDisposable()\n\t\t\tlet date = scheduler.currentDate.dateByAddingTimeInterval(interval)\n\n\t\t\tdisposable += scheduler.scheduleAfter(date) {\n\t\t\t\tobserver.sendFailed(error)\n\t\t\t}\n\n\t\t\tdisposable += self.observe(observer)\n\t\t\treturn disposable\n\t\t}\n\t}\n}\n\nextension SignalType where Error == NoError {\n\t/// Promotes a signal that does not generate failures into one that can.\n\t///\n\t/// This does not actually cause failures to be generated for the given signal,\n\t/// but makes it easier to combine with other signals that may fail; for\n\t/// example, with operators like `combineLatestWith`, `zipWith`, `flatten`, etc.\n\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n\tpublic func promoteErrors<F: ErrorType>(_: F.Type) -> Signal<Value, F> {\n\t\treturn Signal { observer in\n\t\t\treturn self.observe { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(value):\n\t\t\t\t\tobserver.sendNext(value)\n\t\t\t\tcase .Failed:\n\t\t\t\t\tfatalError(\"NoError is impossible to construct\")\n\t\t\t\tcase .Completed:\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\tcase .Interrupted:\n\t\t\t\t\tobserver.sendInterrupted()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/SignalProducer.swift",
    "content": "import Foundation\nimport Result\n\n/// A SignalProducer creates Signals that can produce values of type `Value` and/or\n/// fail with errors of type `Error`. If no failure should be possible, NoError\n/// can be specified for `Error`.\n///\n/// SignalProducers can be used to represent operations or tasks, like network\n/// requests, where each invocation of start() will create a new underlying\n/// operation. This ensures that consumers will receive the results, versus a\n/// plain Signal, where the results might be sent before any observers are\n/// attached.\n///\n/// Because of the behavior of start(), different Signals created from the\n/// producer may see a different version of Events. The Events may arrive in a\n/// different order between Signals, or the stream might be completely\n/// different!\npublic struct SignalProducer<Value, Error: ErrorType> {\n\tpublic typealias ProducedSignal = Signal<Value, Error>\n\n\tprivate let startHandler: (Signal<Value, Error>.Observer, CompositeDisposable) -> ()\n\n\t/// Initializes a SignalProducer that will emit the same events as the given signal.\n\t///\n\t/// If the Disposable returned from start() is disposed or a terminating\n\t/// event is sent to the observer, the given signal will be\n\t/// disposed.\n\tpublic init<S: SignalType where S.Value == Value, S.Error == Error>(signal: S) {\n\t\tself.init { observer, disposable in\n\t\t\tdisposable += signal.observe(observer)\n\t\t}\n\t}\n\n\t/// Initializes a SignalProducer that will invoke the given closure once\n\t/// for each invocation of start().\n\t///\n\t/// The events that the closure puts into the given observer will become\n\t/// the events sent by the started Signal to its observers.\n\t///\n\t/// If the Disposable returned from start() is disposed or a terminating\n\t/// event is sent to the observer, the given CompositeDisposable will be\n\t/// disposed, at which point work should be interrupted and any temporary\n\t/// resources cleaned up.\n\tpublic init(_ startHandler: (Signal<Value, Error>.Observer, CompositeDisposable) -> ()) {\n\t\tself.startHandler = startHandler\n\t}\n\n\t/// Creates a producer for a Signal that will immediately send one value\n\t/// then complete.\n\tpublic init(value: Value) {\n\t\tself.init { observer, disposable in\n\t\t\tobserver.sendNext(value)\n\t\t\tobserver.sendCompleted()\n\t\t}\n\t}\n\n\t/// Creates a producer for a Signal that will immediately fail with the\n\t/// given error.\n\tpublic init(error: Error) {\n\t\tself.init { observer, disposable in\n\t\t\tobserver.sendFailed(error)\n\t\t}\n\t}\n\n\t/// Creates a producer for a Signal that will immediately send one value\n\t/// then complete, or immediately fail, depending on the given Result.\n\tpublic init(result: Result<Value, Error>) {\n\t\tswitch result {\n\t\tcase let .Success(value):\n\t\t\tself.init(value: value)\n\n\t\tcase let .Failure(error):\n\t\t\tself.init(error: error)\n\t\t}\n\t}\n\n\t/// Creates a producer for a Signal that will immediately send the values\n\t/// from the given sequence, then complete.\n\tpublic init<S: SequenceType where S.Generator.Element == Value>(values: S) {\n\t\tself.init { observer, disposable in\n\t\t\tfor value in values {\n\t\t\t\tobserver.sendNext(value)\n\n\t\t\t\tif disposable.disposed {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tobserver.sendCompleted()\n\t\t}\n\t}\n\n\t/// A producer for a Signal that will immediately complete without sending\n\t/// any values.\n\tpublic static var empty: SignalProducer {\n\t\treturn self.init { observer, disposable in\n\t\t\tobserver.sendCompleted()\n\t\t}\n\t}\n\n\t/// A producer for a Signal that never sends any events to its observers.\n\tpublic static var never: SignalProducer {\n\t\treturn self.init { _ in return }\n\t}\n\n\t/// Creates a queue for events that replays them when new signals are\n\t/// created from the returned producer.\n\t///\n\t/// When values are put into the returned observer (observer), they will be\n\t/// added to an internal buffer. If the buffer is already at capacity,\n\t/// the earliest (oldest) value will be dropped to make room for the new\n\t/// value.\n\t///\n\t/// Signals created from the returned producer will stay alive until a\n\t/// terminating event is added to the queue. If the queue does not contain\n\t/// such an event when the Signal is started, all values sent to the\n\t/// returned observer will be automatically forwarded to the Signal’s\n\t/// observers until a terminating event is received.\n\t///\n\t/// After a terminating event has been added to the queue, the observer\n\t/// will not add any further events. This _does not_ count against the\n\t/// value capacity so no buffered values will be dropped on termination.\n\tpublic static func buffer(capacity: Int) -> (SignalProducer, Signal<Value, Error>.Observer) {\n\t\tprecondition(capacity >= 0, \"Invalid capacity: \\(capacity)\")\n\n\t\t// This is effectively used as a synchronous mutex, but permitting\n\t\t// limited recursive locking (see below).\n\t\t//\n\t\t// The queue is a \"variable\" just so we can use its address as the key\n\t\t// and the value for dispatch_queue_set_specific().\n\t\tvar queue = dispatch_queue_create(\"org.reactivecocoa.ReactiveCocoa.SignalProducer.buffer\", DISPATCH_QUEUE_SERIAL)\n\t\tdispatch_queue_set_specific(queue, &queue, &queue, nil)\n\n\t\t// Used as an atomic variable so we can remove observers without needing\n\t\t// to run on the queue.\n\t\tlet state: Atomic<BufferState<Value, Error>> = Atomic(BufferState())\n\n\t\tlet producer = self.init { observer, disposable in\n\t\t\t// Assigned to when replay() is invoked synchronously below.\n\t\t\tvar token: RemovalToken?\n\n\t\t\tlet replay: () -> () = {\n\t\t\t\tlet originalState = state.modify { state in\n\t\t\t\t\tvar mutableState = state\n\t\t\t\t\ttoken = mutableState.observers?.insert(observer)\n\t\t\t\t\treturn mutableState\n\t\t\t\t}\n\n\t\t\t\toriginalState.values.forEach(observer.sendNext)\n\n\t\t\t\tif let terminationEvent = originalState.terminationEvent {\n\t\t\t\t\tobserver.action(terminationEvent)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Prevent other threads from sending events while we're replaying,\n\t\t\t// but don't deadlock if we're replaying in response to a buffer\n\t\t\t// event observed elsewhere.\n\t\t\t//\n\t\t\t// In other words, this permits limited signal recursion for the\n\t\t\t// specific case of replaying past events.\n\t\t\tif dispatch_get_specific(&queue) != nil {\n\t\t\t\treplay()\n\t\t\t} else {\n\t\t\t\tdispatch_sync(queue, replay)\n\t\t\t}\n\n\t\t\tif let token = token {\n\t\t\t\tdisposable.addDisposable {\n\t\t\t\t\tstate.modify { state in\n\t\t\t\t\t\tvar mutableState = state\n\t\t\t\t\t\tmutableState.observers?.removeValueForToken(token)\n\t\t\t\t\t\treturn mutableState\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet bufferingObserver: Signal<Value, Error>.Observer = Observer { event in\n\t\t\t// Send serially with respect to other senders, and never while\n\t\t\t// another thread is in the process of replaying.\n\t\t\tdispatch_sync(queue) {\n\t\t\t\tlet originalState = state.modify { state in\n\t\t\t\t\tvar mutableState = state\n\n\t\t\t\t\tif let value = event.value {\n\t\t\t\t\t\tmutableState.addValue(value, upToCapacity: capacity)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Disconnect all observers and prevent future\n\t\t\t\t\t\t// attachments.\n\t\t\t\t\t\tmutableState.terminationEvent = event\n\t\t\t\t\t\tmutableState.observers = nil\n\t\t\t\t\t}\n\n\t\t\t\t\treturn mutableState\n\t\t\t\t}\n\n\t\t\t\tif let observers = originalState.observers {\n\t\t\t\t\tfor observer in observers {\n\t\t\t\t\t\tobserver.action(event)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn (producer, bufferingObserver)\n\t}\n\n\t/// Creates a SignalProducer that will attempt the given operation once for\n\t/// each invocation of start().\n\t///\n\t/// Upon success, the started signal will send the resulting value then\n\t/// complete. Upon failure, the started signal will fail with the error that\n\t/// occurred.\n\tpublic static func attempt(operation: () -> Result<Value, Error>) -> SignalProducer {\n\t\treturn self.init { observer, disposable in\n\t\t\toperation().analysis(ifSuccess: { value in\n\t\t\t\tobserver.sendNext(value)\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\t}, ifFailure: { error in\n\t\t\t\t\tobserver.sendFailed(error)\n\t\t\t})\n\t\t}\n\t}\n\n\t/// Creates a Signal from the producer, passes it into the given closure,\n\t/// then starts sending events on the Signal when the closure has returned.\n\t///\n\t/// The closure will also receive a disposable which can be used to\n\t/// interrupt the work associated with the signal and immediately send an\n\t/// `Interrupted` event.\n\tpublic func startWithSignal(@noescape setUp: (Signal<Value, Error>, Disposable) -> ()) {\n\t\tlet (signal, observer) = Signal<Value, Error>.pipe()\n\n\t\t// Disposes of the work associated with the SignalProducer and any\n\t\t// upstream producers.\n\t\tlet producerDisposable = CompositeDisposable()\n\n\t\t// Directly disposed of when start() or startWithSignal() is disposed.\n\t\tlet cancelDisposable = ActionDisposable {\n\t\t\tobserver.sendInterrupted()\n\t\t\tproducerDisposable.dispose()\n\t\t}\n\n\t\tsetUp(signal, cancelDisposable)\n\n\t\tif cancelDisposable.disposed {\n\t\t\treturn\n\t\t}\n\n\t\tlet wrapperObserver: Signal<Value, Error>.Observer = Observer { event in\n\t\t\tobserver.action(event)\n\n\t\t\tif event.isTerminating {\n\t\t\t\t// Dispose only after notifying the Signal, so disposal\n\t\t\t\t// logic is consistently the last thing to run.\n\t\t\t\tproducerDisposable.dispose()\n\t\t\t}\n\t\t}\n\n\t\tstartHandler(wrapperObserver, producerDisposable)\n\t}\n}\n\nprivate struct BufferState<Value, Error: ErrorType> {\n\t// All values in the buffer.\n\tvar values: [Value] = []\n\n\t// Any terminating event sent to the buffer.\n\t//\n\t// This will be nil if termination has not occurred.\n\tvar terminationEvent: Event<Value, Error>?\n\n\t// The observers currently attached to the buffered producer, or nil if the\n\t// producer was terminated.\n\tvar observers: Bag<Signal<Value, Error>.Observer>? = Bag()\n\n\t// Appends a new value to the buffer, trimming it down to the given capacity\n\t// if necessary.\n\tmutating func addValue(value: Value, upToCapacity capacity: Int) {\n\t\tvalues.append(value)\n\n\t\tlet overflow = values.count - capacity\n\t\tif overflow > 0 {\n\t\t\tvalues.removeRange(0..<overflow)\n\t\t}\n\t}\n}\n\npublic protocol SignalProducerType {\n\t/// The type of values being sent on the producer\n\ttypealias Value\n\t/// The type of error that can occur on the producer. If errors aren't possible\n\t/// then `NoError` can be used.\n\ttypealias Error: ErrorType\n\n\t/// Extracts a signal producer from the receiver.\n\tvar producer: SignalProducer<Value, Error> { get }\n\n\t/// Creates a Signal from the producer, passes it into the given closure,\n\t/// then starts sending events on the Signal when the closure has returned.\n\tfunc startWithSignal(@noescape setUp: (Signal<Value, Error>, Disposable) -> ())\n}\n\nextension SignalProducer: SignalProducerType {\n\tpublic var producer: SignalProducer {\n\t\treturn self\n\t}\n}\n\nextension SignalProducerType {\n\t/// Creates a Signal from the producer, then attaches the given observer to\n\t/// the Signal as an observer.\n\t///\n\t/// Returns a Disposable which can be used to interrupt the work associated\n\t/// with the signal and immediately send an `Interrupted` event.\n\tpublic func start(observer: Signal<Value, Error>.Observer = Signal<Value, Error>.Observer()) -> Disposable {\n\t\tvar disposable: Disposable!\n\n\t\tstartWithSignal { signal, innerDisposable in\n\t\t\tsignal.observe(observer)\n\t\t\tdisposable = innerDisposable\n\t\t}\n\n\t\treturn disposable\n\t}\n\n\t/// Convenience override for start(_:) to allow trailing-closure style\n\t/// invocations.\n\tpublic func start(observerAction: Signal<Value, Error>.Observer.Action) -> Disposable {\n\t\treturn start(Observer(observerAction))\n\t}\n\n\t/// Creates a Signal from the producer, then adds exactly one observer to\n\t/// the Signal, which will invoke the given callback when `next` events are\n\t/// received.\n\t///\n\t/// Returns a Disposable which can be used to interrupt the work associated\n\t/// with the Signal, and prevent any future callbacks from being invoked.\n\tpublic func startWithNext(next: Value -> ()) -> Disposable {\n\t\treturn start(Observer(next: next))\n\t}\n\n\t/// Creates a Signal from the producer, then adds exactly one observer to\n\t/// the Signal, which will invoke the given callback when a `completed` event is\n\t/// received.\n\t///\n\t/// Returns a Disposable which can be used to interrupt the work associated\n\t/// with the Signal.\n\tpublic func startWithCompleted(completed: () -> ()) -> Disposable {\n\t\treturn start(Observer(completed: completed))\n\t}\n\t\n\t/// Creates a Signal from the producer, then adds exactly one observer to\n\t/// the Signal, which will invoke the given callback when a `failed` event is\n\t/// received.\n\t///\n\t/// Returns a Disposable which can be used to interrupt the work associated\n\t/// with the Signal.\n\tpublic func startWithFailed(failed: Error -> ()) -> Disposable {\n\t\treturn start(Observer(failed: failed))\n\t}\n\t\n\t/// Creates a Signal from the producer, then adds exactly one observer to\n\t/// the Signal, which will invoke the given callback when an `interrupted` event is\n\t/// received.\n\t///\n\t/// Returns a Disposable which can be used to interrupt the work associated\n\t/// with the Signal.\n\tpublic func startWithInterrupted(interrupted: () -> ()) -> Disposable {\n\t\treturn start(Observer(interrupted: interrupted))\n\t}\n\n\t/// Lifts an unary Signal operator to operate upon SignalProducers instead.\n\t///\n\t/// In other words, this will create a new SignalProducer which will apply\n\t/// the given Signal operator to _every_ created Signal, just as if the\n\t/// operator had been applied to each Signal yielded from start().\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func lift<U, F>(transform: Signal<Value, Error> -> Signal<U, F>) -> SignalProducer<U, F> {\n\t\treturn SignalProducer { observer, outerDisposable in\n\t\t\tself.startWithSignal { signal, innerDisposable in\n\t\t\t\touterDisposable.addDisposable(innerDisposable)\n\n\t\t\t\ttransform(signal).observe(observer)\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Lifts a binary Signal operator to operate upon SignalProducers instead.\n\t///\n\t/// In other words, this will create a new SignalProducer which will apply\n\t/// the given Signal operator to _every_ Signal created from the two\n\t/// producers, just as if the operator had been applied to each Signal\n\t/// yielded from start().\n\t///\n\t/// Note: starting the returned producer will start the receiver of the operator,\n\t/// which may not be adviseable for some operators.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func lift<U, F, V, G>(transform: Signal<Value, Error> -> Signal<U, F> -> Signal<V, G>) -> SignalProducer<U, F> -> SignalProducer<V, G> {\n\t\treturn liftRight(transform)\n\t}\n\n\t/// Right-associative lifting of a binary signal operator over producers. That\n\t/// is, the argument producer will be started before the receiver. When both\n\t/// producers are synchronous this order can be important depending on the operator\n\t/// to generate correct results.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tprivate func liftRight<U, F, V, G>(transform: Signal<Value, Error> -> Signal<U, F> -> Signal<V, G>) -> SignalProducer<U, F> -> SignalProducer<V, G> {\n\t\treturn { otherProducer in\n\t\t\treturn SignalProducer { observer, outerDisposable in\n\t\t\t\tself.startWithSignal { signal, disposable in\n\t\t\t\t\touterDisposable.addDisposable(disposable)\n\n\t\t\t\t\totherProducer.startWithSignal { otherSignal, otherDisposable in\n\t\t\t\t\t\touterDisposable.addDisposable(otherDisposable)\n\n\t\t\t\t\t\ttransform(signal)(otherSignal).observe(observer)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Left-associative lifting of a binary signal operator over producers. That\n\t/// is, the receiver will be started before the argument producer. When both\n\t/// producers are synchronous this order can be important depending on the operator\n\t/// to generate correct results.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tprivate func liftLeft<U, F, V, G>(transform: Signal<Value, Error> -> Signal<U, F> -> Signal<V, G>) -> SignalProducer<U, F> -> SignalProducer<V, G> {\n\t\treturn { otherProducer in\n\t\t\treturn SignalProducer { observer, outerDisposable in\n\t\t\t\totherProducer.startWithSignal { otherSignal, otherDisposable in\n\t\t\t\t\touterDisposable.addDisposable(otherDisposable)\n\t\t\t\t\t\n\t\t\t\t\tself.startWithSignal { signal, disposable in\n\t\t\t\t\t\touterDisposable.addDisposable(disposable)\n\n\t\t\t\t\t\ttransform(signal)(otherSignal).observe(observer)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Lifts a binary Signal operator to operate upon a Signal and a SignalProducer instead.\n\t///\n\t/// In other words, this will create a new SignalProducer which will apply\n\t/// the given Signal operator to _every_ Signal created from the two\n\t/// producers, just as if the operator had been applied to each Signal\n\t/// yielded from start().\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func lift<U, F, V, G>(transform: Signal<Value, Error> -> Signal<U, F> -> Signal<V, G>) -> Signal<U, F> -> SignalProducer<V, G> {\n\t\treturn { otherSignal in\n\t\t\treturn SignalProducer { observer, outerDisposable in\n\t\t\t\tself.startWithSignal { signal, disposable in\n\t\t\t\t\touterDisposable += disposable\n\t\t\t\t\touterDisposable += transform(signal)(otherSignal).observe(observer)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/// Maps each value in the producer to a new value.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func map<U>(transform: Value -> U) -> SignalProducer<U, Error> {\n\t\treturn lift { $0.map(transform) }\n\t}\n\n\t/// Maps errors in the producer to a new error.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func mapError<F>(transform: Error -> F) -> SignalProducer<Value, F> {\n\t\treturn lift { $0.mapError(transform) }\n\t}\n\n\t/// Preserves only the values of the producer that pass the given predicate.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func filter(predicate: Value -> Bool) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.filter(predicate) }\n\t}\n\n\t/// Returns a producer that will yield the first `count` values from the\n\t/// input producer.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func take(count: Int) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.take(count) }\n\t}\n\n\t/// Returns a signal that will yield an array of values when `signal` completes.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func collect() -> SignalProducer<[Value], Error> {\n\t\treturn lift { $0.collect() }\n\t}\n\n\t/// Forwards all events onto the given scheduler, instead of whichever\n\t/// scheduler they originally arrived upon.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func observeOn(scheduler: SchedulerType) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.observeOn(scheduler) }\n\t}\n\n\t/// Combines the latest value of the receiver with the latest value from\n\t/// the given producer.\n\t///\n\t/// The returned producer will not send a value until both inputs have sent at\n\t/// least one value each. If either producer is interrupted, the returned producer\n\t/// will also be interrupted.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func combineLatestWith<U>(otherProducer: SignalProducer<U, Error>) -> SignalProducer<(Value, U), Error> {\n\t\treturn liftRight(Signal.combineLatestWith)(otherProducer)\n\t}\n\n\t/// Combines the latest value of the receiver with the latest value from\n\t/// the given signal.\n\t///\n\t/// The returned producer will not send a value until both inputs have sent at\n\t/// least one value each. If either input is interrupted, the returned producer\n\t/// will also be interrupted.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func combineLatestWith<U>(otherSignal: Signal<U, Error>) -> SignalProducer<(Value, U), Error> {\n\t\treturn lift(Signal.combineLatestWith)(otherSignal)\n\t}\n\n\t/// Delays `Next` and `Completed` events by the given interval, forwarding\n\t/// them on the given scheduler.\n\t///\n\t/// `Failed` and `Interrupted` events are always scheduled immediately.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func delay(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.delay(interval, onScheduler: scheduler) }\n\t}\n\n\t/// Returns a producer that will skip the first `count` values, then forward\n\t/// everything afterward.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func skip(count: Int) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.skip(count) }\n\t}\n\n\t/// Treats all Events from the input producer as plain values, allowing them to be\n\t/// manipulated just like any other value.\n\t///\n\t/// In other words, this brings Events “into the monad.”\n\t///\n\t/// When a Completed or Failed event is received, the resulting producer will send\n\t/// the Event itself and then complete. When an Interrupted event is received,\n\t/// the resulting producer will send the Event itself and then interrupt.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func materialize() -> SignalProducer<Event<Value, Error>, NoError> {\n\t\treturn lift { $0.materialize() }\n\t}\n\n\t/// Forwards the latest value from `self` whenever `sampler` sends a Next\n\t/// event.\n\t///\n\t/// If `sampler` fires before a value has been observed on `self`, nothing\n\t/// happens.\n\t///\n\t/// Returns a producer that will send values from `self`, sampled (possibly\n\t/// multiple times) by `sampler`, then complete once both input producers have\n\t/// completed, or interrupt if either input producer is interrupted.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func sampleOn(sampler: SignalProducer<(), NoError>) -> SignalProducer<Value, Error> {\n\t\treturn liftLeft(Signal.sampleOn)(sampler)\n\t}\n\n\t/// Forwards the latest value from `self` whenever `sampler` sends a Next\n\t/// event.\n\t///\n\t/// If `sampler` fires before a value has been observed on `self`, nothing\n\t/// happens.\n\t///\n\t/// Returns a producer that will send values from `self`, sampled (possibly\n\t/// multiple times) by `sampler`, then complete once both inputs have\n\t/// completed, or interrupt if either input is interrupted.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func sampleOn(sampler: Signal<(), NoError>) -> SignalProducer<Value, Error> {\n\t\treturn lift(Signal.sampleOn)(sampler)\n\t}\n\n\t/// Forwards events from `self` until `trigger` sends a Next or Completed\n\t/// event, at which point the returned producer will complete.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func takeUntil(trigger: SignalProducer<(), NoError>) -> SignalProducer<Value, Error> {\n\t\treturn liftRight(Signal.takeUntil)(trigger)\n\t}\n\n\t/// Forwards events from `self` until `trigger` sends a Next or Completed\n\t/// event, at which point the returned producer will complete.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func takeUntil(trigger: Signal<(), NoError>) -> SignalProducer<Value, Error> {\n\t\treturn lift(Signal.takeUntil)(trigger)\n\t}\n\n\t/// Does not forward any values from `self` until `trigger` sends a Next or\n\t/// Completed, at which point the returned signal behaves exactly like `signal`.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func skipUntil(trigger: SignalProducer<(), NoError>) -> SignalProducer<Value, Error> {\n\t\treturn liftRight(Signal.skipUntil)(trigger)\n\t}\n\t\n\t/// Does not forward any values from `self` until `trigger` sends a Next or\n\t/// Completed, at which point the returned signal behaves exactly like `signal`.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func skipUntil(trigger: Signal<(), NoError>) -> SignalProducer<Value, Error> {\n\t\treturn lift(Signal.skipUntil)(trigger)\n\t}\n\t\n\t/// Forwards events from `self` with history: values of the returned producer\n\t/// are a tuple whose first member is the previous value and whose second member\n\t/// is the current value. `initial` is supplied as the first member when `self`\n\t/// sends its first value.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func combinePrevious(initial: Value) -> SignalProducer<(Value, Value), Error> {\n\t\treturn lift { $0.combinePrevious(initial) }\n\t}\n\n\t/// Like `scan`, but sends only the final value and then immediately completes.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func reduce<U>(initial: U, _ combine: (U, Value) -> U) -> SignalProducer<U, Error> {\n\t\treturn lift { $0.reduce(initial, combine) }\n\t}\n\n\t/// Aggregates `self`'s values into a single combined value. When `self` emits\n\t/// its first value, `combine` is invoked with `initial` as the first argument and\n\t/// that emitted value as the second argument. The result is emitted from the\n\t/// producer returned from `scan`. That result is then passed to `combine` as the\n\t/// first argument when the next value is emitted, and so on.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func scan<U>(initial: U, _ combine: (U, Value) -> U) -> SignalProducer<U, Error> {\n\t\treturn lift { $0.scan(initial, combine) }\n\t}\n\n\t/// Forwards only those values from `self` which do not pass `isRepeat` with\n\t/// respect to the previous value. The first value is always forwarded.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func skipRepeats(isRepeat: (Value, Value) -> Bool) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.skipRepeats(isRepeat) }\n\t}\n\n\t/// Does not forward any values from `self` until `predicate` returns false,\n\t/// at which point the returned signal behaves exactly like `self`.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func skipWhile(predicate: Value -> Bool) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.skipWhile(predicate) }\n\t}\n\n\t/// Forwards events from `self` until `replacement` begins sending events.\n\t///\n\t/// Returns a producer which passes through `Next`, `Failed`, and `Interrupted`\n\t/// events from `self` until `replacement` sends an event, at which point the\n\t/// returned producer will send that event and switch to passing through events\n\t/// from `replacement` instead, regardless of whether `self` has sent events\n\t/// already.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func takeUntilReplacement(replacement: SignalProducer<Value, Error>) -> SignalProducer<Value, Error> {\n\t\treturn liftRight(Signal.takeUntilReplacement)(replacement)\n\t}\n\n\t/// Forwards events from `self` until `replacement` begins sending events.\n\t///\n\t/// Returns a producer which passes through `Next`, `Error`, and `Interrupted`\n\t/// events from `self` until `replacement` sends an event, at which point the\n\t/// returned producer will send that event and switch to passing through events\n\t/// from `replacement` instead, regardless of whether `self` has sent events\n\t/// already.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func takeUntilReplacement(replacement: Signal<Value, Error>) -> SignalProducer<Value, Error> {\n\t\treturn lift(Signal.takeUntilReplacement)(replacement)\n\t}\n\n\t/// Waits until `self` completes and then forwards the final `count` values\n\t/// on the returned producer.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func takeLast(count: Int) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.takeLast(count) }\n\t}\n\n\t/// Forwards any values from `self` until `predicate` returns false,\n\t/// at which point the returned producer will complete.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func takeWhile(predicate: Value -> Bool) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.takeWhile(predicate) }\n\t}\n\n\t/// Zips elements of two producers into pairs. The elements of any Nth pair\n\t/// are the Nth elements of the two input producers.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func zipWith<U>(otherProducer: SignalProducer<U, Error>) -> SignalProducer<(Value, U), Error> {\n\t\treturn liftRight(Signal.zipWith)(otherProducer)\n\t}\n\n\t/// Zips elements of this producer and a signal into pairs. The elements of \n\t/// any Nth pair are the Nth elements of the two.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func zipWith<U>(otherSignal: Signal<U, Error>) -> SignalProducer<(Value, U), Error> {\n\t\treturn lift(Signal.zipWith)(otherSignal)\n\t}\n\n\t/// Applies `operation` to values from `self` with `Success`ful results\n\t/// forwarded on the returned producer and `Failure`s sent as `Failed` events.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func attempt(operation: Value -> Result<(), Error>) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.attempt(operation) }\n\t}\n\n\t/// Applies `operation` to values from `self` with `Success`ful results mapped\n\t/// on the returned producer and `Failure`s sent as `Failed` events.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func attemptMap<U>(operation: Value -> Result<U, Error>) -> SignalProducer<U, Error> {\n\t\treturn lift { $0.attemptMap(operation) }\n\t}\n\n\t/// Throttle values sent by the receiver, so that at least `interval`\n\t/// seconds pass between each, then forwards them on the given scheduler.\n\t///\n\t/// If multiple values are received before the interval has elapsed, the\n\t/// latest value is the one that will be passed on.\n\t///\n\t/// If `self` terminates while a value is being throttled, that value\n\t/// will be discarded and the returned producer will terminate immediately.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func throttle(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.throttle(interval, onScheduler: scheduler) }\n\t}\n\n\t/// Forwards events from `self` until `interval`. Then if producer isn't completed yet,\n\t/// fails with `error` on `scheduler`.\n\t///\n\t/// If the interval is 0, the timeout will be scheduled immediately. The producer\n\t/// must complete synchronously (or on a faster scheduler) to avoid the timeout.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func timeoutWithError(error: Error, afterInterval interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.timeoutWithError(error, afterInterval: interval, onScheduler: scheduler) }\n\t}\n}\n\nextension SignalProducerType where Value: OptionalType {\n\t/// Unwraps non-`nil` values and forwards them on the returned signal, `nil`\n\t/// values are dropped.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func ignoreNil() -> SignalProducer<Value.Wrapped, Error> {\n\t\treturn lift { $0.ignoreNil() }\n\t}\n}\n\nextension SignalProducerType where Value: EventType, Error == NoError {\n\t/// The inverse of materialize(), this will translate a signal of `Event`\n\t/// _values_ into a signal of those events themselves.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func dematerialize() -> SignalProducer<Value.Value, Value.Error> {\n\t\treturn lift { $0.dematerialize() }\n\t}\n}\n\nextension SignalProducerType where Error == NoError {\n\t/// Promotes a producer that does not generate failures into one that can.\n\t///\n\t/// This does not actually cause failers to be generated for the given producer,\n\t/// but makes it easier to combine with other producers that may fail; for\n\t/// example, with operators like `combineLatestWith`, `zipWith`, `flatten`, etc.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func promoteErrors<F: ErrorType>(_: F.Type) -> SignalProducer<Value, F> {\n\t\treturn lift { $0.promoteErrors(F) }\n\t}\n}\n\nextension SignalProducerType where Value: Equatable {\n\t/// Forwards only those values from `self` which are not duplicates of the\n\t/// immedately preceding value. The first value is always forwarded.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func skipRepeats() -> SignalProducer<Value, Error> {\n\t\treturn lift { $0.skipRepeats() }\n\t}\n}\n\n\n/// Creates a repeating timer of the given interval, with a reasonable\n/// default leeway, sending updates on the given scheduler.\n///\n/// This timer will never complete naturally, so all invocations of start() must\n/// be disposed to avoid leaks.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func timer(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType) -> SignalProducer<NSDate, NoError> {\n\t// Apple's \"Power Efficiency Guide for Mac Apps\" recommends a leeway of\n\t// at least 10% of the timer interval.\n\treturn timer(interval, onScheduler: scheduler, withLeeway: interval * 0.1)\n}\n\n/// Creates a repeating timer of the given interval, sending updates on the\n/// given scheduler.\n///\n/// This timer will never complete naturally, so all invocations of start() must\n/// be disposed to avoid leaks.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func timer(interval: NSTimeInterval, onScheduler scheduler: DateSchedulerType, withLeeway leeway: NSTimeInterval) -> SignalProducer<NSDate, NoError> {\n\tprecondition(interval >= 0)\n\tprecondition(leeway >= 0)\n\n\treturn SignalProducer { observer, compositeDisposable in\n\t\tcompositeDisposable += scheduler.scheduleAfter(scheduler.currentDate.dateByAddingTimeInterval(interval), repeatingEvery: interval, withLeeway: leeway) {\n\t\t\tobserver.sendNext(scheduler.currentDate)\n\t\t}\n\t}\n}\n\nextension SignalProducerType {\n\t/// Injects side effects to be performed upon the specified signal events.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func on(started started: (() -> ())? = nil, event: (Event<Value, Error> -> ())? = nil, failed: (Error -> ())? = nil, completed: (() -> ())? = nil, interrupted: (() -> ())? = nil, terminated: (() -> ())? = nil, disposed: (() -> ())? = nil, next: (Value -> ())? = nil) -> SignalProducer<Value, Error> {\n\t\treturn SignalProducer { observer, compositeDisposable in\n\t\t\tstarted?()\n\t\t\tself.startWithSignal { signal, disposable in\n\t\t\t\tcompositeDisposable += disposable\n\t\t\t\tcompositeDisposable += signal\n\t\t\t\t\t.on(\n\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\tfailed: failed,\n\t\t\t\t\t\tcompleted: completed,\n\t\t\t\t\t\tinterrupted: interrupted,\n\t\t\t\t\t\tterminated: terminated,\n\t\t\t\t\t\tdisposed: disposed,\n\t\t\t\t\t\tnext: next\n\t\t\t\t\t)\n\t\t\t\t\t.observe(observer)\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Starts the returned signal on the given Scheduler.\n\t///\n\t/// This implies that any side effects embedded in the producer will be\n\t/// performed on the given scheduler as well.\n\t///\n\t/// Events may still be sent upon other schedulers—this merely affects where\n\t/// the `start()` method is run.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func startOn(scheduler: SchedulerType) -> SignalProducer<Value, Error> {\n\t\treturn SignalProducer { observer, compositeDisposable in\n\t\t\tcompositeDisposable += scheduler.schedule {\n\t\t\t\tself.startWithSignal { signal, signalDisposable in\n\t\t\t\t\tcompositeDisposable.addDisposable(signalDisposable)\n\t\t\t\t\tsignal.observe(observer)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/// Combines the values of all the given producers, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func combineLatest<A, B, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>) -> SignalProducer<(A, B), Error> {\n\treturn a.combineLatestWith(b)\n}\n\n/// Combines the values of all the given producers, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func combineLatest<A, B, C, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>) -> SignalProducer<(A, B, C), Error> {\n\treturn combineLatest(a, b)\n\t\t.combineLatestWith(c)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given producers, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func combineLatest<A, B, C, D, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>) -> SignalProducer<(A, B, C, D), Error> {\n\treturn combineLatest(a, b, c)\n\t\t.combineLatestWith(d)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given producers, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func combineLatest<A, B, C, D, E, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>) -> SignalProducer<(A, B, C, D, E), Error> {\n\treturn combineLatest(a, b, c, d)\n\t\t.combineLatestWith(e)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given producers, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func combineLatest<A, B, C, D, E, F, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>, _ f: SignalProducer<F, Error>) -> SignalProducer<(A, B, C, D, E, F), Error> {\n\treturn combineLatest(a, b, c, d, e)\n\t\t.combineLatestWith(f)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given producers, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func combineLatest<A, B, C, D, E, F, G, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>, _ f: SignalProducer<F, Error>, _ g: SignalProducer<G, Error>) -> SignalProducer<(A, B, C, D, E, F, G), Error> {\n\treturn combineLatest(a, b, c, d, e, f)\n\t\t.combineLatestWith(g)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given producers, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func combineLatest<A, B, C, D, E, F, G, H, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>, _ f: SignalProducer<F, Error>, _ g: SignalProducer<G, Error>, _ h: SignalProducer<H, Error>) -> SignalProducer<(A, B, C, D, E, F, G, H), Error> {\n\treturn combineLatest(a, b, c, d, e, f, g)\n\t\t.combineLatestWith(h)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given producers, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func combineLatest<A, B, C, D, E, F, G, H, I, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>, _ f: SignalProducer<F, Error>, _ g: SignalProducer<G, Error>, _ h: SignalProducer<H, Error>, _ i: SignalProducer<I, Error>) -> SignalProducer<(A, B, C, D, E, F, G, H, I), Error> {\n\treturn combineLatest(a, b, c, d, e, f, g, h)\n\t\t.combineLatestWith(i)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given producers, in the manner described by\n/// `combineLatestWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func combineLatest<A, B, C, D, E, F, G, H, I, J, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>, _ f: SignalProducer<F, Error>, _ g: SignalProducer<G, Error>, _ h: SignalProducer<H, Error>, _ i: SignalProducer<I, Error>, _ j: SignalProducer<J, Error>) -> SignalProducer<(A, B, C, D, E, F, G, H, I, J), Error> {\n\treturn combineLatest(a, b, c, d, e, f, g, h, i)\n\t\t.combineLatestWith(j)\n\t\t.map(repack)\n}\n\n/// Combines the values of all the given producers, in the manner described by\n/// `combineLatestWith`. Will return an empty `SignalProducer` if the sequence is empty.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func combineLatest<S: SequenceType, Value, Error where S.Generator.Element == SignalProducer<Value, Error>>(producers: S) -> SignalProducer<[Value], Error> {\n\tvar generator = producers.generate()\n\tif let first = generator.next() {\n\t\tlet initial = first.map { [$0] }\n\t\treturn GeneratorSequence(generator).reduce(initial) { producer, next in\n\t\t\tproducer.combineLatestWith(next).map { $0.0 + [$0.1] }\n\t\t}\n\t}\n\t\n\treturn .empty\n}\n\n/// Zips the values of all the given producers, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func zip<A, B, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>) -> SignalProducer<(A, B), Error> {\n\treturn a.zipWith(b)\n}\n\n/// Zips the values of all the given producers, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func zip<A, B, C, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>) -> SignalProducer<(A, B, C), Error> {\n\treturn zip(a, b)\n\t\t.zipWith(c)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given producers, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func zip<A, B, C, D, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>) -> SignalProducer<(A, B, C, D), Error> {\n\treturn zip(a, b, c)\n\t\t.zipWith(d)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given producers, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func zip<A, B, C, D, E, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>) -> SignalProducer<(A, B, C, D, E), Error> {\n\treturn zip(a, b, c, d)\n\t\t.zipWith(e)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given producers, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func zip<A, B, C, D, E, F, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>, _ f: SignalProducer<F, Error>) -> SignalProducer<(A, B, C, D, E, F), Error> {\n\treturn zip(a, b, c, d, e)\n\t\t.zipWith(f)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given producers, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func zip<A, B, C, D, E, F, G, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>, _ f: SignalProducer<F, Error>, _ g: SignalProducer<G, Error>) -> SignalProducer<(A, B, C, D, E, F, G), Error> {\n\treturn zip(a, b, c, d, e, f)\n\t\t.zipWith(g)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given producers, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func zip<A, B, C, D, E, F, G, H, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>, _ f: SignalProducer<F, Error>, _ g: SignalProducer<G, Error>, _ h: SignalProducer<H, Error>) -> SignalProducer<(A, B, C, D, E, F, G, H), Error> {\n\treturn zip(a, b, c, d, e, f, g)\n\t\t.zipWith(h)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given producers, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func zip<A, B, C, D, E, F, G, H, I, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>, _ f: SignalProducer<F, Error>, _ g: SignalProducer<G, Error>, _ h: SignalProducer<H, Error>, _ i: SignalProducer<I, Error>) -> SignalProducer<(A, B, C, D, E, F, G, H, I), Error> {\n\treturn zip(a, b, c, d, e, f, g, h)\n\t\t.zipWith(i)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given producers, in the manner described by\n/// `zipWith`.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func zip<A, B, C, D, E, F, G, H, I, J, Error>(a: SignalProducer<A, Error>, _ b: SignalProducer<B, Error>, _ c: SignalProducer<C, Error>, _ d: SignalProducer<D, Error>, _ e: SignalProducer<E, Error>, _ f: SignalProducer<F, Error>, _ g: SignalProducer<G, Error>, _ h: SignalProducer<H, Error>, _ i: SignalProducer<I, Error>, _ j: SignalProducer<J, Error>) -> SignalProducer<(A, B, C, D, E, F, G, H, I, J), Error> {\n\treturn zip(a, b, c, d, e, f, g, h, i)\n\t\t.zipWith(j)\n\t\t.map(repack)\n}\n\n/// Zips the values of all the given producers, in the manner described by\n/// `zipWith`. Will return an empty `SignalProducer` if the sequence is empty.\n@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\npublic func zip<S: SequenceType, Value, Error where S.Generator.Element == SignalProducer<Value, Error>>(producers: S) -> SignalProducer<[Value], Error> {\n\tvar generator = producers.generate()\n\tif let first = generator.next() {\n\t\tlet initial = first.map { [$0] }\n\t\treturn GeneratorSequence(generator).reduce(initial) { producer, next in\n\t\t\tproducer.zipWith(next).map { $0.0 + [$0.1] }\n\t\t}\n\t}\n\n\treturn .empty\n}\n\nextension SignalProducerType {\n\t/// Repeats `self` a total of `count` times. Repeating `1` times results in\n\t/// an equivalent signal producer.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func times(count: Int) -> SignalProducer<Value, Error> {\n\t\tprecondition(count >= 0)\n\n\t\tif count == 0 {\n\t\t\treturn .empty\n\t\t} else if count == 1 {\n\t\t\treturn producer\n\t\t}\n\n\t\treturn SignalProducer { observer, disposable in\n\t\t\tlet serialDisposable = SerialDisposable()\n\t\t\tdisposable.addDisposable(serialDisposable)\n\n\t\t\tfunc iterate(current: Int) {\n\t\t\t\tself.startWithSignal { signal, signalDisposable in\n\t\t\t\t\tserialDisposable.innerDisposable = signalDisposable\n\n\t\t\t\t\tsignal.observe { event in\n\t\t\t\t\t\tif case .Completed = event {\n\t\t\t\t\t\t\tlet remainingTimes = current - 1\n\t\t\t\t\t\t\tif remainingTimes > 0 {\n\t\t\t\t\t\t\t\titerate(remainingTimes)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tobserver.action(event)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titerate(count)\n\t\t}\n\t}\n\n\t/// Ignores failures up to `count` times.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func retry(count: Int) -> SignalProducer<Value, Error> {\n\t\tprecondition(count >= 0)\n\n\t\tif count == 0 {\n\t\t\treturn producer\n\t\t} else {\n\t\t\treturn flatMapError { _ in\n\t\t\t\tself.retry(count - 1)\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Waits for completion of `producer`, *then* forwards all events from\n\t/// `replacement`. Any failure sent from `producer` is forwarded immediately, in\n\t/// which case `replacement` will not be started, and none of its events will be\n\t/// be forwarded. All values sent from `producer` are ignored.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func then<U>(replacement: SignalProducer<U, Error>) -> SignalProducer<U, Error> {\n\t\tlet relay = SignalProducer<U, Error> { observer, observerDisposable in\n\t\t\tself.startWithSignal { signal, signalDisposable in\n\t\t\t\tobserverDisposable.addDisposable(signalDisposable)\n\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Failed(error):\n\t\t\t\t\t\tobserver.sendFailed(error)\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\tcase .Interrupted:\n\t\t\t\t\t\tobserver.sendInterrupted()\n\t\t\t\t\tcase .Next:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn relay.concat(replacement)\n\t}\n\n\t/// Starts the producer, then blocks, waiting for the first value.\n\t@warn_unused_result(message=\"Did you forget to check the result?\")\n\tpublic func first() -> Result<Value, Error>? {\n\t\treturn take(1).single()\n\t}\n\n\t/// Starts the producer, then blocks, waiting for events: Next and Completed.\n\t/// When a single value or error is sent, the returned `Result` will represent\n\t/// those cases. However, when no values are sent, or when more than one value\n\t/// is sent, `nil` will be returned.\n\t@warn_unused_result(message=\"Did you forget to check the result?\")\n\tpublic func single() -> Result<Value, Error>? {\n\t\tlet semaphore = dispatch_semaphore_create(0)\n\t\tvar result: Result<Value, Error>?\n\n\t\ttake(2).start { event in\n\t\t\tswitch event {\n\t\t\tcase let .Next(value):\n\t\t\t\tif result != nil {\n\t\t\t\t\t// Move into failure state after recieving another value.\n\t\t\t\t\tresult = nil\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresult = .Success(value)\n\t\t\tcase let .Failed(error):\n\t\t\t\tresult = .Failure(error)\n\t\t\t\tdispatch_semaphore_signal(semaphore)\n\t\t\tcase .Completed, .Interrupted:\n\t\t\t\tdispatch_semaphore_signal(semaphore)\n\t\t\t}\n\t\t}\n\t\t\n\t\tdispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)\n\t\treturn result\n\t}\n\n\t/// Starts the producer, then blocks, waiting for the last value.\n\t@warn_unused_result(message=\"Did you forget to check the result?\")\n\tpublic func last() -> Result<Value, Error>? {\n\t\treturn takeLast(1).single()\n\t}\n\n\t/// Starts the producer, then blocks, waiting for completion.\n\t@warn_unused_result(message=\"Did you forget to check the result?\")\n\tpublic func wait() -> Result<(), Error> {\n\t\treturn then(SignalProducer<(), Error>(value: ())).last() ?? .Success(())\n\t}\n\n\t/// Creates a new `SignalProducer` that will multicast values emitted by\n\t/// the underlying producer, up to `capacity`.\n\t/// This means that all clients of this `SignalProducer` will see the same version\n\t/// of the emitted values/errors.\n\t///\n\t/// The underlying `SignalProducer` will not be started until `self` is started\n\t/// for the first time. When subscribing to this producer, all previous values\n\t/// (up to `capacity`) will be emitted, followed by any new values.\n\t///\n\t/// If you find yourself needing *the current value* (the last buffered value)\n\t/// you should consider using `PropertyType` instead, which, unlike this operator,\n\t/// will guarantee at compile time that there's always a buffered value.\n\t/// This operator is not recommended in most cases, as it will introduce an implicit\n\t/// relationship between the original client and the rest, so consider alternatives\n\t/// like `PropertyType`, `SignalProducer.buffer`, or representing your stream using \n\t/// a `Signal` instead.\n\t///\n\t/// This operator is only recommended when you absolutely need to introduce\n\t/// a layer of caching in front of another `SignalProducer`.\n\t///\n\t/// This operator has the same semantics as `SignalProducer.buffer`.\n\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n\tpublic func replayLazily(capacity: Int) -> SignalProducer<Value, Error> {\n\t\tprecondition(capacity >= 0, \"Invalid capacity: \\(capacity)\")\n\n\t\tvar producer: SignalProducer<Value, Error>?\n\t\tvar producerObserver: SignalProducer<Value, Error>.ProducedSignal.Observer?\n\n\t\tlet lock = NSLock()\n\t\tlock.name = \"org.reactivecocoa.ReactiveCocoa.SignalProducer.replayLazily\"\n\n\t\t// This will go \"out of scope\" when the returned `SignalProducer` goes out of scope.\n\t\t// This lets us know when we're supposed to dispose the underlying producer.\n\t\t// This is necessary because `struct`s don't have `deinit`.\n\t\tlet token = NSObject()\n\n\t\treturn SignalProducer { observer, disposable in\n\t\t\tlet initializedProducer: SignalProducer<Value, Error>\n\t\t\tlet initializedObserver: SignalProducer<Value, Error>.ProducedSignal.Observer\n\t\t\tlet shouldStartUnderlyingProducer: Bool\n\n\t\t\tlock.lock()\n\t\t\tif let producer = producer, producerObserver = producerObserver {\n\t\t\t\t(initializedProducer, initializedObserver) = (producer, producerObserver)\n\t\t\t\tshouldStartUnderlyingProducer = false\n\t\t\t} else {\n\t\t\t\tlet (producerTemp, observerTemp) = SignalProducer<Value, Error>.buffer(capacity)\n\n\t\t\t\t(producer, producerObserver) = (producerTemp, observerTemp)\n\t\t\t\t(initializedProducer, initializedObserver) = (producerTemp, observerTemp)\n\t\t\t\tshouldStartUnderlyingProducer = true\n\t\t\t}\n\t\t\tlock.unlock()\n\n\t\t\t// subscribe `observer` before starting the underlying producer.\n\t\t\tdisposable += initializedProducer.start(observer)\n\n\t\t\tif shouldStartUnderlyingProducer {\n\t\t\t\tself.producer\n\t\t\t\t\t.takeUntil(token.willDeallocSignal)\n\t\t\t\t\t.start(initializedObserver)\n\t\t\t}\n\t\t}\n\t}\n}\n\nprivate extension NSObject {\n\tvar willDeallocSignal: SignalProducer<(), NoError> {\n\t\treturn self\n\t\t\t.rac_willDeallocSignal()\n\t\t\t.toSignalProducer()\n\t\t\t.map { _ in () }\n\t\t\t.mapError { error in\n\t\t\t\tfatalError(\"Unexpected error: \\(error)\")\n\t\t\t\t()\n\t\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa/Swift/TupleExtensions.swift",
    "content": "//\n//  TupleExtensions.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-12-20.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\n/// Adds a value into an N-tuple, returning an (N+1)-tuple.\n///\n/// Supports creating tuples up to 10 elements long.\ninternal func repack<A, B, C>(t: (A, B), value: C) -> (A, B, C) {\n\treturn (t.0, t.1, value)\n}\n\ninternal func repack<A, B, C, D>(t: (A, B, C), value: D) -> (A, B, C, D) {\n\treturn (t.0, t.1, t.2, value)\n}\n\ninternal func repack<A, B, C, D, E>(t: (A, B, C, D), value: E) -> (A, B, C, D, E) {\n\treturn (t.0, t.1, t.2, t.3, value)\n}\n\ninternal func repack<A, B, C, D, E, F>(t: (A, B, C, D, E), value: F) -> (A, B, C, D, E, F) {\n\treturn (t.0, t.1, t.2, t.3, t.4, value)\n}\n\ninternal func repack<A, B, C, D, E, F, G>(t: (A, B, C, D, E, F), value: G) -> (A, B, C, D, E, F, G) {\n\treturn (t.0, t.1, t.2, t.3, t.4, t.5, value)\n}\n\ninternal func repack<A, B, C, D, E, F, G, H>(t: (A, B, C, D, E, F, G), value: H) -> (A, B, C, D, E, F, G, H) {\n\treturn (t.0, t.1, t.2, t.3, t.4, t.5, t.6, value)\n}\n\ninternal func repack<A, B, C, D, E, F, G, H, I>(t: (A, B, C, D, E, F, G, H), value: I) -> (A, B, C, D, E, F, G, H, I) {\n\treturn (t.0, t.1, t.2, t.3, t.4, t.5, t.6, t.7, value)\n}\n\ninternal func repack<A, B, C, D, E, F, G, H, I, J>(t: (A, B, C, D, E, F, G, H, I), value: J) -> (A, B, C, D, E, F, G, H, I, J) {\n\treturn (t.0, t.1, t.2, t.3, t.4, t.5, t.6, t.7, t.8, value)\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.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\t02D2602A1C1D6DAF003ACC61 /* SignalLifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */; };\n\t\t02D2602B1C1D6DB8003ACC61 /* SignalLifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */; };\n\t\t314304171ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 314304151ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t314304181ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 314304161ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m */; };\n\t\t579504331BB8A34200A5E482 /* BagSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EF19EF2A7700984962 /* BagSpec.swift */; };\n\t\t579504341BB8A34300A5E482 /* BagSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EF19EF2A7700984962 /* BagSpec.swift */; };\n\t\t57A4D1B11BA13D7A00F7D4B1 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; };\n\t\t57A4D1B21BA13D7A00F7D4B1 /* RACCompoundDisposableProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */; };\n\t\t57A4D1B31BA13D7A00F7D4B1 /* RACSignalProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D03764A319EDA41200A782A9 /* RACSignalProvider.d */; };\n\t\t57A4D1B41BA13D7A00F7D4B1 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; };\n\t\t57A4D1B61BA13D7A00F7D4B1 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; };\n\t\t57A4D1B71BA13D7A00F7D4B1 /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; };\n\t\t57A4D1B81BA13D7A00F7D4B1 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; };\n\t\t57A4D1B91BA13D7A00F7D4B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; };\n\t\t57A4D1BA1BA13D7A00F7D4B1 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; };\n\t\t57A4D1BB1BA13D7A00F7D4B1 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; };\n\t\t57A4D1BC1BA13D7A00F7D4B1 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; };\n\t\t57A4D1BD1BA13D7A00F7D4B1 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; };\n\t\t57A4D1BE1BA13D7A00F7D4B1 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; };\n\t\t57A4D1BF1BA13D7A00F7D4B1 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; };\n\t\t57A4D1C01BA13D7A00F7D4B1 /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; };\n\t\t57A4D1C11BA13D7A00F7D4B1 /* EXTRuntimeExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */; };\n\t\t57A4D1C21BA13D7A00F7D4B1 /* NSArray+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */; };\n\t\t57A4D1C31BA13D7A00F7D4B1 /* NSData+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643119EDA41200A782A9 /* NSData+RACSupport.m */; };\n\t\t57A4D1C41BA13D7A00F7D4B1 /* NSDictionary+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */; };\n\t\t57A4D1C51BA13D7A00F7D4B1 /* NSEnumerator+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */; };\n\t\t57A4D1C61BA13D7A00F7D4B1 /* NSFileHandle+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */; };\n\t\t57A4D1C71BA13D7A00F7D4B1 /* NSIndexSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */; };\n\t\t57A4D1C81BA13D7A00F7D4B1 /* NSInvocation+RACTypeParsing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */; };\n\t\t57A4D1C91BA13D7A00F7D4B1 /* NSNotificationCenter+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */; };\n\t\t57A4D1CA1BA13D7A00F7D4B1 /* NSObject+RACDeallocating.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */; };\n\t\t57A4D1CB1BA13D7A00F7D4B1 /* NSObject+RACDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644319EDA41200A782A9 /* NSObject+RACDescription.m */; };\n\t\t57A4D1CC1BA13D7A00F7D4B1 /* NSObject+RACKVOWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */; };\n\t\t57A4D1CD1BA13D7A00F7D4B1 /* NSObject+RACLifting.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644719EDA41200A782A9 /* NSObject+RACLifting.m */; };\n\t\t57A4D1CE1BA13D7A00F7D4B1 /* NSObject+RACPropertySubscribing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */; };\n\t\t57A4D1CF1BA13D7A00F7D4B1 /* NSObject+RACSelectorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */; };\n\t\t57A4D1D01BA13D7A00F7D4B1 /* NSOrderedSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */; };\n\t\t57A4D1D11BA13D7A00F7D4B1 /* NSSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */; };\n\t\t57A4D1D21BA13D7A00F7D4B1 /* NSString+RACKeyPathUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */; };\n\t\t57A4D1D31BA13D7A00F7D4B1 /* NSString+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */; };\n\t\t57A4D1D41BA13D7A00F7D4B1 /* NSString+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645519EDA41200A782A9 /* NSString+RACSupport.m */; };\n\t\t57A4D1D61BA13D7A00F7D4B1 /* NSUserDefaults+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */; };\n\t\t57A4D1D71BA13D7A00F7D4B1 /* RACArraySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645D19EDA41200A782A9 /* RACArraySequence.m */; };\n\t\t57A4D1D81BA13D7A00F7D4B1 /* RACBehaviorSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646119EDA41200A782A9 /* RACBehaviorSubject.m */; };\n\t\t57A4D1D91BA13D7A00F7D4B1 /* RACBlockTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646319EDA41200A782A9 /* RACBlockTrampoline.m */; };\n\t\t57A4D1DA1BA13D7A00F7D4B1 /* RACChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646519EDA41200A782A9 /* RACChannel.m */; };\n\t\t57A4D1DB1BA13D7A00F7D4B1 /* RACCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646719EDA41200A782A9 /* RACCommand.m */; };\n\t\t57A4D1DC1BA13D7A00F7D4B1 /* RACCompoundDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646919EDA41200A782A9 /* RACCompoundDisposable.m */; };\n\t\t57A4D1DD1BA13D7A00F7D4B1 /* RACDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646C19EDA41200A782A9 /* RACDelegateProxy.m */; };\n\t\t57A4D1DE1BA13D7A00F7D4B1 /* RACDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646E19EDA41200A782A9 /* RACDisposable.m */; };\n\t\t57A4D1DF1BA13D7A00F7D4B1 /* RACDynamicSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647019EDA41200A782A9 /* RACDynamicSequence.m */; };\n\t\t57A4D1E01BA13D7A00F7D4B1 /* RACDynamicSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647219EDA41200A782A9 /* RACDynamicSignal.m */; };\n\t\t57A4D1E11BA13D7A00F7D4B1 /* RACEagerSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647419EDA41200A782A9 /* RACEagerSequence.m */; };\n\t\t57A4D1E21BA13D7A00F7D4B1 /* RACEmptySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647619EDA41200A782A9 /* RACEmptySequence.m */; };\n\t\t57A4D1E31BA13D7A00F7D4B1 /* RACEmptySignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647819EDA41200A782A9 /* RACEmptySignal.m */; };\n\t\t57A4D1E41BA13D7A00F7D4B1 /* RACErrorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647A19EDA41200A782A9 /* RACErrorSignal.m */; };\n\t\t57A4D1E51BA13D7A00F7D4B1 /* RACEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647C19EDA41200A782A9 /* RACEvent.m */; };\n\t\t57A4D1E61BA13D7A00F7D4B1 /* RACGroupedSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647E19EDA41200A782A9 /* RACGroupedSignal.m */; };\n\t\t57A4D1E71BA13D7A00F7D4B1 /* RACImmediateScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648019EDA41200A782A9 /* RACImmediateScheduler.m */; };\n\t\t57A4D1E81BA13D7A00F7D4B1 /* RACIndexSetSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648219EDA41200A782A9 /* RACIndexSetSequence.m */; };\n\t\t57A4D1E91BA13D7A00F7D4B1 /* RACKVOChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648419EDA41200A782A9 /* RACKVOChannel.m */; };\n\t\t57A4D1EA1BA13D7A00F7D4B1 /* RACKVOProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */; };\n\t\t57A4D1EB1BA13D7A00F7D4B1 /* RACKVOTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648619EDA41200A782A9 /* RACKVOTrampoline.m */; };\n\t\t57A4D1EC1BA13D7A00F7D4B1 /* RACMulticastConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648819EDA41200A782A9 /* RACMulticastConnection.m */; };\n\t\t57A4D1ED1BA13D7A00F7D4B1 /* RACObjCRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648B19EDA41200A782A9 /* RACObjCRuntime.m */; settings = {COMPILER_FLAGS = \"-fno-objc-arc\"; }; };\n\t\t57A4D1EE1BA13D7A00F7D4B1 /* RACPassthroughSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */; };\n\t\t57A4D1EF1BA13D7A00F7D4B1 /* RACQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648F19EDA41200A782A9 /* RACQueueScheduler.m */; };\n\t\t57A4D1F01BA13D7A00F7D4B1 /* RACReplaySubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649219EDA41200A782A9 /* RACReplaySubject.m */; };\n\t\t57A4D1F11BA13D7A00F7D4B1 /* RACReturnSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649419EDA41200A782A9 /* RACReturnSignal.m */; };\n\t\t57A4D1F21BA13D7A00F7D4B1 /* RACScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649619EDA41200A782A9 /* RACScheduler.m */; };\n\t\t57A4D1F31BA13D7A00F7D4B1 /* RACScopedDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649A19EDA41200A782A9 /* RACScopedDisposable.m */; };\n\t\t57A4D1F41BA13D7A00F7D4B1 /* RACSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649C19EDA41200A782A9 /* RACSequence.m */; };\n\t\t57A4D1F51BA13D7A00F7D4B1 /* RACSerialDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649E19EDA41200A782A9 /* RACSerialDisposable.m */; };\n\t\t57A4D1F61BA13D7A00F7D4B1 /* RACSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A019EDA41200A782A9 /* RACSignal.m */; };\n\t\t57A4D1F71BA13D7A00F7D4B1 /* RACSignal+Operations.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A219EDA41200A782A9 /* RACSignal+Operations.m */; };\n\t\t57A4D1F81BA13D7A00F7D4B1 /* RACSignalSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A519EDA41200A782A9 /* RACSignalSequence.m */; };\n\t\t57A4D1F91BA13D7A00F7D4B1 /* RACStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A719EDA41200A782A9 /* RACStream.m */; };\n\t\t57A4D1FA1BA13D7A00F7D4B1 /* RACStringSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AA19EDA41200A782A9 /* RACStringSequence.m */; };\n\t\t57A4D1FB1BA13D7A00F7D4B1 /* RACSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AC19EDA41200A782A9 /* RACSubject.m */; };\n\t\t57A4D1FC1BA13D7A00F7D4B1 /* RACSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AE19EDA41200A782A9 /* RACSubscriber.m */; };\n\t\t57A4D1FD1BA13D7A00F7D4B1 /* RACSubscriptingAssignmentTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */; };\n\t\t57A4D1FE1BA13D7A00F7D4B1 /* RACSubscriptionScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */; };\n\t\t57A4D1FF1BA13D7A00F7D4B1 /* RACTargetQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */; };\n\t\t57A4D2001BA13D7A00F7D4B1 /* RACTestScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B719EDA41200A782A9 /* RACTestScheduler.m */; };\n\t\t57A4D2011BA13D7A00F7D4B1 /* RACTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B919EDA41200A782A9 /* RACTuple.m */; };\n\t\t57A4D2021BA13D7A00F7D4B1 /* RACTupleSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BB19EDA41200A782A9 /* RACTupleSequence.m */; };\n\t\t57A4D2031BA13D7A00F7D4B1 /* RACUnarySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BD19EDA41200A782A9 /* RACUnarySequence.m */; };\n\t\t57A4D2041BA13D7A00F7D4B1 /* RACUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BF19EDA41200A782A9 /* RACUnit.m */; };\n\t\t57A4D2051BA13D7A00F7D4B1 /* RACValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C119EDA41200A782A9 /* RACValueTransformer.m */; };\n\t\t57A4D2061BA13D7A00F7D4B1 /* RACDynamicPropertySuperclass.m in Sources */ = {isa = PBXBuildFile; fileRef = D43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */; };\n\t\t57A4D2081BA13D7A00F7D4B1 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; };\n\t\t57A4D20A1BA13D7A00F7D4B1 /* ReactiveCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D20B1BA13D7A00F7D4B1 /* EXTKeyPathCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666619EDA57100A782A9 /* EXTKeyPathCoding.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D20C1BA13D7A00F7D4B1 /* EXTScope.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666919EDA57100A782A9 /* EXTScope.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D20D1BA13D7A00F7D4B1 /* metamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666A19EDA57100A782A9 /* metamacros.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D20E1BA13D7A00F7D4B1 /* NSArray+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D20F1BA13D7A00F7D4B1 /* NSData+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643019EDA41200A782A9 /* NSData+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2101BA13D7A00F7D4B1 /* NSDictionary+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2111BA13D7A00F7D4B1 /* NSEnumerator+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2121BA13D7A00F7D4B1 /* NSFileHandle+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2131BA13D7A00F7D4B1 /* NSIndexSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2141BA13D7A00F7D4B1 /* NSNotificationCenter+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2151BA13D7A00F7D4B1 /* NSObject+RACDeallocating.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2161BA13D7A00F7D4B1 /* NSObject+RACLifting.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644619EDA41200A782A9 /* NSObject+RACLifting.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2171BA13D7A00F7D4B1 /* NSObject+RACPropertySubscribing.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2181BA13D7A00F7D4B1 /* NSObject+RACSelectorSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2191BA13D7A00F7D4B1 /* NSOrderedSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D21A1BA13D7A00F7D4B1 /* NSSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D21B1BA13D7A00F7D4B1 /* NSString+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D21C1BA13D7A00F7D4B1 /* NSString+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645419EDA41200A782A9 /* NSString+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D21E1BA13D7A00F7D4B1 /* NSUserDefaults+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D21F1BA13D7A00F7D4B1 /* RACBehaviorSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646019EDA41200A782A9 /* RACBehaviorSubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2201BA13D7A00F7D4B1 /* RACChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646419EDA41200A782A9 /* RACChannel.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2211BA13D7A00F7D4B1 /* RACCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646619EDA41200A782A9 /* RACCommand.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2221BA13D7A00F7D4B1 /* RACCompoundDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646819EDA41200A782A9 /* RACCompoundDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2231BA13D7A00F7D4B1 /* RACDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646D19EDA41200A782A9 /* RACDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2241BA13D7A00F7D4B1 /* RACEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647B19EDA41200A782A9 /* RACEvent.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2251BA13D7A00F7D4B1 /* RACGroupedSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647D19EDA41200A782A9 /* RACGroupedSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2261BA13D7A00F7D4B1 /* RACKVOChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648319EDA41200A782A9 /* RACKVOChannel.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2271BA13D7A00F7D4B1 /* RACMulticastConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648719EDA41200A782A9 /* RACMulticastConnection.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2281BA13D7A00F7D4B1 /* RACQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648E19EDA41200A782A9 /* RACQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2291BA13D7A00F7D4B1 /* RACQueueScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D22A1BA13D7A00F7D4B1 /* RACReplaySubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649119EDA41200A782A9 /* RACReplaySubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D22B1BA13D7A00F7D4B1 /* RACScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649519EDA41200A782A9 /* RACScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D22C1BA13D7A00F7D4B1 /* RACScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649819EDA41200A782A9 /* RACScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D22D1BA13D7A00F7D4B1 /* RACScopedDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649919EDA41200A782A9 /* RACScopedDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D22E1BA13D7A00F7D4B1 /* RACSequence.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649B19EDA41200A782A9 /* RACSequence.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D22F1BA13D7A00F7D4B1 /* RACSerialDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649D19EDA41200A782A9 /* RACSerialDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2301BA13D7A00F7D4B1 /* RACSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649F19EDA41200A782A9 /* RACSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2311BA13D7A00F7D4B1 /* RACSignal+Operations.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A119EDA41200A782A9 /* RACSignal+Operations.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2321BA13D7A00F7D4B1 /* RACStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A619EDA41200A782A9 /* RACStream.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2331BA13D7A00F7D4B1 /* RACSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AB19EDA41200A782A9 /* RACSubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2341BA13D7A00F7D4B1 /* RACSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AD19EDA41200A782A9 /* RACSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2351BA13D7A00F7D4B1 /* RACSubscriptingAssignmentTrampoline.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2361BA13D7A00F7D4B1 /* RACTargetQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2371BA13D7A00F7D4B1 /* RACTestScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B619EDA41200A782A9 /* RACTestScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2381BA13D7A00F7D4B1 /* RACTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B819EDA41200A782A9 /* RACTuple.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D2391BA13D7A00F7D4B1 /* RACUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764BE19EDA41200A782A9 /* RACUnit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57A4D23A1BA13D7A00F7D4B1 /* RACDynamicPropertySuperclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57D4768D1C42063C00EFE697 /* UIControl+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CD19EDA41200A782A9 /* UIControl+RACSignalSupport.m */; };\n\t\t57D476901C4206D400EFE697 /* UIControl+RACSignalSupportPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CF19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m */; };\n\t\t57D476911C4206DA00EFE697 /* UIGestureRecognizer+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D319EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m */; };\n\t\t57D476921C4206DF00EFE697 /* UISegmentedControl+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D919EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m */; };\n\t\t57D476951C4206EC00EFE697 /* UITableViewCell+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E119EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m */; };\n\t\t57D476961C4206EC00EFE697 /* UITableViewHeaderFooterView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E319EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m */; };\n\t\t57D476971C4206EC00EFE697 /* UITextField+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E519EDA41200A782A9 /* UITextField+RACSignalSupport.m */; };\n\t\t57D476981C4206EC00EFE697 /* UITextView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E719EDA41200A782A9 /* UITextView+RACSignalSupport.m */; };\n\t\t57D4769A1C4206F200EFE697 /* UIButton+RACCommandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C919EDA41200A782A9 /* UIButton+RACCommandSupport.m */; };\n\t\t57D4769B1C4206F200EFE697 /* UICollectionReusableView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CB19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m */; };\n\t\t57DC89A01C5066D400E367B7 /* UIGestureRecognizer+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D219EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57DC89A11C50672B00E367B7 /* UIControl+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764CC19EDA41200A782A9 /* UIControl+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57DC89A21C50673C00E367B7 /* UISegmentedControl+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D819EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57DC89A31C50674300E367B7 /* UITableViewCell+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E019EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57DC89A41C50674D00E367B7 /* UITableViewHeaderFooterView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E219EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57DC89A51C50675700E367B7 /* UITextField+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E419EDA41200A782A9 /* UITextField+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57DC89A61C50675F00E367B7 /* UITextView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E619EDA41200A782A9 /* UITextView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57DC89A71C50679700E367B7 /* UIButton+RACCommandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764C819EDA41200A782A9 /* UIButton+RACCommandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57DC89A81C50679E00E367B7 /* UICollectionReusableView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764CA19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t7A7065811A3F88B8001E8354 /* RACKVOProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */; };\n\t\t7A7065821A3F88B8001E8354 /* RACKVOProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */; };\n\t\t7A7065841A3F8967001E8354 /* RACKVOProxySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A7065831A3F8967001E8354 /* RACKVOProxySpec.m */; };\n\t\t7A7065851A3F8967001E8354 /* RACKVOProxySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A7065831A3F8967001E8354 /* RACKVOProxySpec.m */; };\n\t\tA1046B7A1BFF5661004D8045 /* EXTRuntimeExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\tA1046B7B1BFF5662004D8045 /* EXTRuntimeExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\tA1046B7C1BFF5662004D8045 /* EXTRuntimeExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\tA1046B7D1BFF5664004D8045 /* EXTRuntimeExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\tA9B3155E1B3940750001CB9C /* EXTRuntimeExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */; };\n\t\tA9B315601B3940750001CB9C /* NSArray+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */; };\n\t\tA9B315631B3940750001CB9C /* NSData+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643119EDA41200A782A9 /* NSData+RACSupport.m */; };\n\t\tA9B315641B3940750001CB9C /* NSDictionary+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */; };\n\t\tA9B315651B3940750001CB9C /* NSEnumerator+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */; };\n\t\tA9B315661B3940750001CB9C /* NSFileHandle+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */; };\n\t\tA9B315671B3940750001CB9C /* NSIndexSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */; };\n\t\tA9B315681B3940750001CB9C /* NSInvocation+RACTypeParsing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */; };\n\t\tA9B315691B3940750001CB9C /* NSNotificationCenter+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */; };\n\t\tA9B3156B1B3940750001CB9C /* NSObject+RACDeallocating.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */; };\n\t\tA9B3156C1B3940750001CB9C /* NSObject+RACDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644319EDA41200A782A9 /* NSObject+RACDescription.m */; };\n\t\tA9B3156D1B3940750001CB9C /* NSObject+RACKVOWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */; };\n\t\tA9B3156E1B3940750001CB9C /* NSObject+RACLifting.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644719EDA41200A782A9 /* NSObject+RACLifting.m */; };\n\t\tA9B3156F1B3940750001CB9C /* NSObject+RACPropertySubscribing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */; };\n\t\tA9B315701B3940750001CB9C /* NSObject+RACSelectorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */; };\n\t\tA9B315711B3940750001CB9C /* NSOrderedSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */; };\n\t\tA9B315721B3940750001CB9C /* NSSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */; };\n\t\tA9B315731B3940750001CB9C /* NSString+RACKeyPathUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */; };\n\t\tA9B315741B3940750001CB9C /* NSString+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */; };\n\t\tA9B315751B3940750001CB9C /* NSString+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645519EDA41200A782A9 /* NSString+RACSupport.m */; };\n\t\tA9B315781B3940750001CB9C /* NSUserDefaults+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */; };\n\t\tA9B315791B3940750001CB9C /* RACArraySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645D19EDA41200A782A9 /* RACArraySequence.m */; };\n\t\tA9B3157A1B3940750001CB9C /* RACBehaviorSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646119EDA41200A782A9 /* RACBehaviorSubject.m */; };\n\t\tA9B3157B1B3940750001CB9C /* RACBlockTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646319EDA41200A782A9 /* RACBlockTrampoline.m */; };\n\t\tA9B3157C1B3940750001CB9C /* RACChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646519EDA41200A782A9 /* RACChannel.m */; };\n\t\tA9B3157D1B3940750001CB9C /* RACCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646719EDA41200A782A9 /* RACCommand.m */; };\n\t\tA9B3157E1B3940750001CB9C /* RACCompoundDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646919EDA41200A782A9 /* RACCompoundDisposable.m */; };\n\t\tA9B3157F1B3940750001CB9C /* RACDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646C19EDA41200A782A9 /* RACDelegateProxy.m */; };\n\t\tA9B315801B3940750001CB9C /* RACDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646E19EDA41200A782A9 /* RACDisposable.m */; };\n\t\tA9B315811B3940750001CB9C /* RACDynamicSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647019EDA41200A782A9 /* RACDynamicSequence.m */; };\n\t\tA9B315821B3940750001CB9C /* RACDynamicSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647219EDA41200A782A9 /* RACDynamicSignal.m */; };\n\t\tA9B315831B3940750001CB9C /* RACEagerSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647419EDA41200A782A9 /* RACEagerSequence.m */; };\n\t\tA9B315841B3940750001CB9C /* RACEmptySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647619EDA41200A782A9 /* RACEmptySequence.m */; };\n\t\tA9B315851B3940750001CB9C /* RACEmptySignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647819EDA41200A782A9 /* RACEmptySignal.m */; };\n\t\tA9B315861B3940750001CB9C /* RACErrorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647A19EDA41200A782A9 /* RACErrorSignal.m */; };\n\t\tA9B315871B3940750001CB9C /* RACEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647C19EDA41200A782A9 /* RACEvent.m */; };\n\t\tA9B315881B3940750001CB9C /* RACGroupedSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647E19EDA41200A782A9 /* RACGroupedSignal.m */; };\n\t\tA9B315891B3940750001CB9C /* RACImmediateScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648019EDA41200A782A9 /* RACImmediateScheduler.m */; };\n\t\tA9B3158A1B3940750001CB9C /* RACIndexSetSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648219EDA41200A782A9 /* RACIndexSetSequence.m */; };\n\t\tA9B3158B1B3940750001CB9C /* RACKVOChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648419EDA41200A782A9 /* RACKVOChannel.m */; };\n\t\tA9B3158C1B3940750001CB9C /* RACKVOProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */; };\n\t\tA9B3158D1B3940750001CB9C /* RACKVOTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648619EDA41200A782A9 /* RACKVOTrampoline.m */; };\n\t\tA9B3158E1B3940750001CB9C /* RACMulticastConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648819EDA41200A782A9 /* RACMulticastConnection.m */; };\n\t\tA9B3158F1B3940750001CB9C /* RACObjCRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648B19EDA41200A782A9 /* RACObjCRuntime.m */; settings = {COMPILER_FLAGS = \"-fno-objc-arc\"; }; };\n\t\tA9B315901B3940750001CB9C /* RACPassthroughSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */; };\n\t\tA9B315911B3940750001CB9C /* RACQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648F19EDA41200A782A9 /* RACQueueScheduler.m */; };\n\t\tA9B315921B3940750001CB9C /* RACReplaySubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649219EDA41200A782A9 /* RACReplaySubject.m */; };\n\t\tA9B315931B3940750001CB9C /* RACReturnSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649419EDA41200A782A9 /* RACReturnSignal.m */; };\n\t\tA9B315941B3940750001CB9C /* RACScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649619EDA41200A782A9 /* RACScheduler.m */; };\n\t\tA9B315951B3940750001CB9C /* RACScopedDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649A19EDA41200A782A9 /* RACScopedDisposable.m */; };\n\t\tA9B315961B3940750001CB9C /* RACSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649C19EDA41200A782A9 /* RACSequence.m */; };\n\t\tA9B315971B3940750001CB9C /* RACSerialDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649E19EDA41200A782A9 /* RACSerialDisposable.m */; };\n\t\tA9B315981B3940750001CB9C /* RACSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A019EDA41200A782A9 /* RACSignal.m */; };\n\t\tA9B315991B3940750001CB9C /* RACSignal+Operations.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A219EDA41200A782A9 /* RACSignal+Operations.m */; };\n\t\tA9B3159A1B3940750001CB9C /* RACSignalSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A519EDA41200A782A9 /* RACSignalSequence.m */; };\n\t\tA9B3159B1B3940750001CB9C /* RACStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A719EDA41200A782A9 /* RACStream.m */; };\n\t\tA9B3159C1B3940750001CB9C /* RACStringSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AA19EDA41200A782A9 /* RACStringSequence.m */; };\n\t\tA9B3159D1B3940750001CB9C /* RACSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AC19EDA41200A782A9 /* RACSubject.m */; };\n\t\tA9B3159E1B3940750001CB9C /* RACSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AE19EDA41200A782A9 /* RACSubscriber.m */; };\n\t\tA9B3159F1B3940750001CB9C /* RACSubscriptingAssignmentTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */; };\n\t\tA9B315A01B3940750001CB9C /* RACSubscriptionScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */; };\n\t\tA9B315A11B3940750001CB9C /* RACTargetQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */; };\n\t\tA9B315A21B3940750001CB9C /* RACTestScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B719EDA41200A782A9 /* RACTestScheduler.m */; };\n\t\tA9B315A31B3940750001CB9C /* RACTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B919EDA41200A782A9 /* RACTuple.m */; };\n\t\tA9B315A41B3940750001CB9C /* RACTupleSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BB19EDA41200A782A9 /* RACTupleSequence.m */; };\n\t\tA9B315A51B3940750001CB9C /* RACUnarySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BD19EDA41200A782A9 /* RACUnarySequence.m */; };\n\t\tA9B315A61B3940750001CB9C /* RACUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BF19EDA41200A782A9 /* RACUnit.m */; };\n\t\tA9B315A71B3940750001CB9C /* RACValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C119EDA41200A782A9 /* RACValueTransformer.m */; };\n\t\tA9B315BB1B3940750001CB9C /* RACDynamicPropertySuperclass.m in Sources */ = {isa = PBXBuildFile; fileRef = D43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */; };\n\t\tA9B315BC1B3940810001CB9C /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; };\n\t\tA9B315BE1B3940810001CB9C /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; };\n\t\tA9B315BF1B3940810001CB9C /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; };\n\t\tA9B315C01B3940810001CB9C /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; };\n\t\tA9B315C11B3940810001CB9C /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; };\n\t\tA9B315C21B3940810001CB9C /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; };\n\t\tA9B315C31B3940810001CB9C /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; };\n\t\tA9B315C41B3940810001CB9C /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; };\n\t\tA9B315C51B3940810001CB9C /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; };\n\t\tA9B315C61B3940810001CB9C /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; };\n\t\tA9B315C71B3940810001CB9C /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; };\n\t\tA9B315C81B3940810001CB9C /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; };\n\t\tA9B315C91B3940980001CB9C /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; };\n\t\tA9B315CA1B3940AB0001CB9C /* ReactiveCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315CB1B3940AB0001CB9C /* EXTKeyPathCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666619EDA57100A782A9 /* EXTKeyPathCoding.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315CD1B3940AB0001CB9C /* EXTScope.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666919EDA57100A782A9 /* EXTScope.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315CE1B3940AB0001CB9C /* metamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666A19EDA57100A782A9 /* metamacros.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315D01B3940AB0001CB9C /* NSArray+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315D31B3940AB0001CB9C /* NSData+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643019EDA41200A782A9 /* NSData+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315D41B3940AB0001CB9C /* NSDictionary+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315D51B3940AB0001CB9C /* NSEnumerator+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315D61B3940AB0001CB9C /* NSFileHandle+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315D71B3940AB0001CB9C /* NSIndexSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315D91B3940AB0001CB9C /* NSNotificationCenter+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315DB1B3940AB0001CB9C /* NSObject+RACDeallocating.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315DE1B3940AB0001CB9C /* NSObject+RACLifting.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644619EDA41200A782A9 /* NSObject+RACLifting.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315DF1B3940AB0001CB9C /* NSObject+RACPropertySubscribing.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315E01B3940AB0001CB9C /* NSObject+RACSelectorSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315E11B3940AB0001CB9C /* NSOrderedSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315E21B3940AB0001CB9C /* NSSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315E41B3940AB0001CB9C /* NSString+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315E51B3940AB0001CB9C /* NSString+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645419EDA41200A782A9 /* NSString+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315E81B3940AB0001CB9C /* NSUserDefaults+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315EA1B3940AB0001CB9C /* RACBehaviorSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646019EDA41200A782A9 /* RACBehaviorSubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315EC1B3940AB0001CB9C /* RACChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646419EDA41200A782A9 /* RACChannel.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315ED1B3940AC0001CB9C /* RACCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646619EDA41200A782A9 /* RACCommand.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315EE1B3940AC0001CB9C /* RACCompoundDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646819EDA41200A782A9 /* RACCompoundDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315F01B3940AC0001CB9C /* RACDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646D19EDA41200A782A9 /* RACDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315F71B3940AC0001CB9C /* RACEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647B19EDA41200A782A9 /* RACEvent.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315F81B3940AC0001CB9C /* RACGroupedSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647D19EDA41200A782A9 /* RACGroupedSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315FB1B3940AC0001CB9C /* RACKVOChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648319EDA41200A782A9 /* RACKVOChannel.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B315FE1B3940AC0001CB9C /* RACMulticastConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648719EDA41200A782A9 /* RACMulticastConnection.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316021B3940AD0001CB9C /* RACQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648E19EDA41200A782A9 /* RACQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316031B3940AD0001CB9C /* RACQueueScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316041B3940AD0001CB9C /* RACReplaySubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649119EDA41200A782A9 /* RACReplaySubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316061B3940AD0001CB9C /* RACScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649519EDA41200A782A9 /* RACScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316081B3940AD0001CB9C /* RACScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649819EDA41200A782A9 /* RACScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316091B3940AD0001CB9C /* RACScopedDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649919EDA41200A782A9 /* RACScopedDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B3160A1B3940AD0001CB9C /* RACSequence.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649B19EDA41200A782A9 /* RACSequence.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B3160B1B3940AD0001CB9C /* RACSerialDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649D19EDA41200A782A9 /* RACSerialDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B3160C1B3940AE0001CB9C /* RACSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649F19EDA41200A782A9 /* RACSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B3160D1B3940AE0001CB9C /* RACSignal+Operations.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A119EDA41200A782A9 /* RACSignal+Operations.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B3160F1B3940AE0001CB9C /* RACStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A619EDA41200A782A9 /* RACStream.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316121B3940AE0001CB9C /* RACSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AB19EDA41200A782A9 /* RACSubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316131B3940AE0001CB9C /* RACSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AD19EDA41200A782A9 /* RACSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316151B3940AE0001CB9C /* RACSubscriptingAssignmentTrampoline.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316171B3940AF0001CB9C /* RACTargetQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316181B3940AF0001CB9C /* RACTestScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B619EDA41200A782A9 /* RACTestScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316191B3940AF0001CB9C /* RACTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B819EDA41200A782A9 /* RACTuple.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B3161C1B3940AF0001CB9C /* RACUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764BE19EDA41200A782A9 /* RACUnit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316311B3940B20001CB9C /* RACDynamicPropertySuperclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA9B316341B394C7F0001CB9C /* RACCompoundDisposableProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */; };\n\t\tA9B316351B394C7F0001CB9C /* RACSignalProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D03764A319EDA41200A782A9 /* RACSignalProvider.d */; };\n\t\tA9F793341B60D0140026BCBA /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; };\n\t\tB696FB811A7640C00075236D /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; };\n\t\tB696FB821A7640C00075236D /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; };\n\t\tBFA6B94D1A7604D400C846D1 /* SignalProducerNimbleMatchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */; };\n\t\tBFA6B94E1A7604D500C846D1 /* SignalProducerNimbleMatchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */; };\n\t\tCA6F28501C52626B001879D2 /* FlattenSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6F284F1C52626B001879D2 /* FlattenSpec.swift */; };\n\t\tCA6F28511C52626B001879D2 /* FlattenSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6F284F1C52626B001879D2 /* FlattenSpec.swift */; };\n\t\tCDC42E2F1AE7AB8B00965373 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; };\n\t\tCDC42E301AE7AB8B00965373 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; };\n\t\tCDC42E311AE7AB8B00965373 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; };\n\t\tCDC42E331AE7AC6D00965373 /* Result.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\tCDCD247A1C277EEC00710AEE /* AtomicSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EE19EF2A7700984962 /* AtomicSpec.swift */; };\n\t\tCDCD247B1C277EED00710AEE /* AtomicSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EE19EF2A7700984962 /* AtomicSpec.swift */; };\n\t\tD00004091A46864E000E7D41 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; };\n\t\tD000040A1A46864E000E7D41 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; };\n\t\tD01B7B6219EDD8FE00D26E01 /* Nimble.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\tD01B7B6319EDD8FE00D26E01 /* Quick.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\tD01B7B6419EDD94B00D26E01 /* ReactiveCocoa.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D047260C19E49F82006002AA /* ReactiveCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\tD021671D1A6CD50500987861 /* ActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021671C1A6CD50500987861 /* ActionSpec.swift */; };\n\t\tD021671E1A6CD50500987861 /* ActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021671C1A6CD50500987861 /* ActionSpec.swift */; };\n\t\tD03764E819EDA41200A782A9 /* NSArray+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03764E919EDA41200A782A9 /* NSArray+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03764EA19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */; };\n\t\tD03764EB19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */; };\n\t\tD03764EC19EDA41200A782A9 /* NSControl+RACCommandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642C19EDA41200A782A9 /* NSControl+RACCommandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03764EE19EDA41200A782A9 /* NSControl+RACCommandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642D19EDA41200A782A9 /* NSControl+RACCommandSupport.m */; };\n\t\tD03764F019EDA41200A782A9 /* NSControl+RACTextSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642E19EDA41200A782A9 /* NSControl+RACTextSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03764F219EDA41200A782A9 /* NSControl+RACTextSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642F19EDA41200A782A9 /* NSControl+RACTextSignalSupport.m */; };\n\t\tD03764F419EDA41200A782A9 /* NSData+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643019EDA41200A782A9 /* NSData+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03764F519EDA41200A782A9 /* NSData+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643019EDA41200A782A9 /* NSData+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03764F619EDA41200A782A9 /* NSData+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643119EDA41200A782A9 /* NSData+RACSupport.m */; };\n\t\tD03764F719EDA41200A782A9 /* NSData+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643119EDA41200A782A9 /* NSData+RACSupport.m */; };\n\t\tD03764F819EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03764F919EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03764FA19EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */; };\n\t\tD03764FB19EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */; };\n\t\tD03764FC19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03764FD19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03764FE19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */; };\n\t\tD03764FF19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */; };\n\t\tD037650019EDA41200A782A9 /* NSFileHandle+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037650119EDA41200A782A9 /* NSFileHandle+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037650219EDA41200A782A9 /* NSFileHandle+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */; };\n\t\tD037650319EDA41200A782A9 /* NSFileHandle+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */; };\n\t\tD037650419EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037650519EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037650619EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */; };\n\t\tD037650719EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */; };\n\t\tD037650A19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */; };\n\t\tD037650B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */; };\n\t\tD037650C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037650D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037650E19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */; };\n\t\tD037650F19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */; };\n\t\tD037651019EDA41200A782A9 /* NSObject+RACAppKitBindings.h in Headers */ = {isa = PBXBuildFile; fileRef = D037643E19EDA41200A782A9 /* NSObject+RACAppKitBindings.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037651219EDA41200A782A9 /* NSObject+RACAppKitBindings.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643F19EDA41200A782A9 /* NSObject+RACAppKitBindings.m */; };\n\t\tD037651419EDA41200A782A9 /* NSObject+RACDeallocating.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037651519EDA41200A782A9 /* NSObject+RACDeallocating.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037651619EDA41200A782A9 /* NSObject+RACDeallocating.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */; };\n\t\tD037651719EDA41200A782A9 /* NSObject+RACDeallocating.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */; };\n\t\tD037651A19EDA41200A782A9 /* NSObject+RACDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644319EDA41200A782A9 /* NSObject+RACDescription.m */; };\n\t\tD037651B19EDA41200A782A9 /* NSObject+RACDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644319EDA41200A782A9 /* NSObject+RACDescription.m */; };\n\t\tD037651E19EDA41200A782A9 /* NSObject+RACKVOWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */; };\n\t\tD037651F19EDA41200A782A9 /* NSObject+RACKVOWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */; };\n\t\tD037652019EDA41200A782A9 /* NSObject+RACLifting.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644619EDA41200A782A9 /* NSObject+RACLifting.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037652119EDA41200A782A9 /* NSObject+RACLifting.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644619EDA41200A782A9 /* NSObject+RACLifting.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037652219EDA41200A782A9 /* NSObject+RACLifting.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644719EDA41200A782A9 /* NSObject+RACLifting.m */; };\n\t\tD037652319EDA41200A782A9 /* NSObject+RACLifting.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644719EDA41200A782A9 /* NSObject+RACLifting.m */; };\n\t\tD037652419EDA41200A782A9 /* NSObject+RACPropertySubscribing.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037652519EDA41200A782A9 /* NSObject+RACPropertySubscribing.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037652619EDA41200A782A9 /* NSObject+RACPropertySubscribing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */; };\n\t\tD037652719EDA41200A782A9 /* NSObject+RACPropertySubscribing.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */; };\n\t\tD037652819EDA41200A782A9 /* NSObject+RACSelectorSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037652919EDA41200A782A9 /* NSObject+RACSelectorSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037652A19EDA41200A782A9 /* NSObject+RACSelectorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */; };\n\t\tD037652B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */; };\n\t\tD037652C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037652D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037652E19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */; };\n\t\tD037652F19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */; };\n\t\tD037653019EDA41200A782A9 /* NSSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037653119EDA41200A782A9 /* NSSet+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037653219EDA41200A782A9 /* NSSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */; };\n\t\tD037653319EDA41200A782A9 /* NSSet+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */; };\n\t\tD037653619EDA41200A782A9 /* NSString+RACKeyPathUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */; };\n\t\tD037653719EDA41200A782A9 /* NSString+RACKeyPathUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */; };\n\t\tD037653819EDA41200A782A9 /* NSString+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037653919EDA41200A782A9 /* NSString+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037653A19EDA41200A782A9 /* NSString+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */; };\n\t\tD037653B19EDA41200A782A9 /* NSString+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */; };\n\t\tD037653C19EDA41200A782A9 /* NSString+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645419EDA41200A782A9 /* NSString+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037653D19EDA41200A782A9 /* NSString+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645419EDA41200A782A9 /* NSString+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037653E19EDA41200A782A9 /* NSString+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645519EDA41200A782A9 /* NSString+RACSupport.m */; };\n\t\tD037653F19EDA41200A782A9 /* NSString+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645519EDA41200A782A9 /* NSString+RACSupport.m */; };\n\t\tD037654019EDA41200A782A9 /* NSText+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645619EDA41200A782A9 /* NSText+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037654219EDA41200A782A9 /* NSText+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645719EDA41200A782A9 /* NSText+RACSignalSupport.m */; };\n\t\tD037654419EDA41200A782A9 /* NSURLConnection+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645819EDA41200A782A9 /* NSURLConnection+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037654519EDA41200A782A9 /* NSURLConnection+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645819EDA41200A782A9 /* NSURLConnection+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037654619EDA41200A782A9 /* NSURLConnection+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645919EDA41200A782A9 /* NSURLConnection+RACSupport.m */; };\n\t\tD037654719EDA41200A782A9 /* NSURLConnection+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645919EDA41200A782A9 /* NSURLConnection+RACSupport.m */; };\n\t\tD037654819EDA41200A782A9 /* NSUserDefaults+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037654919EDA41200A782A9 /* NSUserDefaults+RACSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037654A19EDA41200A782A9 /* NSUserDefaults+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */; };\n\t\tD037654B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */; };\n\t\tD037654E19EDA41200A782A9 /* RACArraySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645D19EDA41200A782A9 /* RACArraySequence.m */; };\n\t\tD037654F19EDA41200A782A9 /* RACArraySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037645D19EDA41200A782A9 /* RACArraySequence.m */; };\n\t\tD037655619EDA41200A782A9 /* RACBehaviorSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646119EDA41200A782A9 /* RACBehaviorSubject.m */; };\n\t\tD037655719EDA41200A782A9 /* RACBehaviorSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646119EDA41200A782A9 /* RACBehaviorSubject.m */; };\n\t\tD037655A19EDA41200A782A9 /* RACBlockTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646319EDA41200A782A9 /* RACBlockTrampoline.m */; };\n\t\tD037655B19EDA41200A782A9 /* RACBlockTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646319EDA41200A782A9 /* RACBlockTrampoline.m */; };\n\t\tD037655C19EDA41200A782A9 /* RACChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646419EDA41200A782A9 /* RACChannel.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037655D19EDA41200A782A9 /* RACChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646419EDA41200A782A9 /* RACChannel.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037655E19EDA41200A782A9 /* RACChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646519EDA41200A782A9 /* RACChannel.m */; };\n\t\tD037655F19EDA41200A782A9 /* RACChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646519EDA41200A782A9 /* RACChannel.m */; };\n\t\tD037656019EDA41200A782A9 /* RACCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646619EDA41200A782A9 /* RACCommand.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037656119EDA41200A782A9 /* RACCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646619EDA41200A782A9 /* RACCommand.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037656219EDA41200A782A9 /* RACCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646719EDA41200A782A9 /* RACCommand.m */; };\n\t\tD037656319EDA41200A782A9 /* RACCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646719EDA41200A782A9 /* RACCommand.m */; };\n\t\tD037656419EDA41200A782A9 /* RACCompoundDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646819EDA41200A782A9 /* RACCompoundDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037656519EDA41200A782A9 /* RACCompoundDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646819EDA41200A782A9 /* RACCompoundDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037656619EDA41200A782A9 /* RACCompoundDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646919EDA41200A782A9 /* RACCompoundDisposable.m */; };\n\t\tD037656719EDA41200A782A9 /* RACCompoundDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646919EDA41200A782A9 /* RACCompoundDisposable.m */; };\n\t\tD037656819EDA41200A782A9 /* RACCompoundDisposableProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */; };\n\t\tD037656919EDA41200A782A9 /* RACCompoundDisposableProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */; };\n\t\tD037656C19EDA41200A782A9 /* RACDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646C19EDA41200A782A9 /* RACDelegateProxy.m */; };\n\t\tD037656D19EDA41200A782A9 /* RACDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646C19EDA41200A782A9 /* RACDelegateProxy.m */; };\n\t\tD037656E19EDA41200A782A9 /* RACDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646D19EDA41200A782A9 /* RACDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037656F19EDA41200A782A9 /* RACDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646D19EDA41200A782A9 /* RACDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037657019EDA41200A782A9 /* RACDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646E19EDA41200A782A9 /* RACDisposable.m */; };\n\t\tD037657119EDA41200A782A9 /* RACDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037646E19EDA41200A782A9 /* RACDisposable.m */; };\n\t\tD037657419EDA41200A782A9 /* RACDynamicSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647019EDA41200A782A9 /* RACDynamicSequence.m */; };\n\t\tD037657519EDA41200A782A9 /* RACDynamicSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647019EDA41200A782A9 /* RACDynamicSequence.m */; };\n\t\tD037657819EDA41200A782A9 /* RACDynamicSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647219EDA41200A782A9 /* RACDynamicSignal.m */; };\n\t\tD037657919EDA41200A782A9 /* RACDynamicSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647219EDA41200A782A9 /* RACDynamicSignal.m */; };\n\t\tD037657C19EDA41200A782A9 /* RACEagerSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647419EDA41200A782A9 /* RACEagerSequence.m */; };\n\t\tD037657D19EDA41200A782A9 /* RACEagerSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647419EDA41200A782A9 /* RACEagerSequence.m */; };\n\t\tD037658019EDA41200A782A9 /* RACEmptySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647619EDA41200A782A9 /* RACEmptySequence.m */; };\n\t\tD037658119EDA41200A782A9 /* RACEmptySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647619EDA41200A782A9 /* RACEmptySequence.m */; };\n\t\tD037658419EDA41200A782A9 /* RACEmptySignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647819EDA41200A782A9 /* RACEmptySignal.m */; };\n\t\tD037658519EDA41200A782A9 /* RACEmptySignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647819EDA41200A782A9 /* RACEmptySignal.m */; };\n\t\tD037658819EDA41200A782A9 /* RACErrorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647A19EDA41200A782A9 /* RACErrorSignal.m */; };\n\t\tD037658919EDA41200A782A9 /* RACErrorSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647A19EDA41200A782A9 /* RACErrorSignal.m */; };\n\t\tD037658A19EDA41200A782A9 /* RACEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647B19EDA41200A782A9 /* RACEvent.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037658B19EDA41200A782A9 /* RACEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647B19EDA41200A782A9 /* RACEvent.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037658C19EDA41200A782A9 /* RACEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647C19EDA41200A782A9 /* RACEvent.m */; };\n\t\tD037658D19EDA41200A782A9 /* RACEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647C19EDA41200A782A9 /* RACEvent.m */; };\n\t\tD037658E19EDA41200A782A9 /* RACGroupedSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647D19EDA41200A782A9 /* RACGroupedSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037658F19EDA41200A782A9 /* RACGroupedSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037647D19EDA41200A782A9 /* RACGroupedSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037659019EDA41200A782A9 /* RACGroupedSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647E19EDA41200A782A9 /* RACGroupedSignal.m */; };\n\t\tD037659119EDA41200A782A9 /* RACGroupedSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037647E19EDA41200A782A9 /* RACGroupedSignal.m */; };\n\t\tD037659419EDA41200A782A9 /* RACImmediateScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648019EDA41200A782A9 /* RACImmediateScheduler.m */; };\n\t\tD037659519EDA41200A782A9 /* RACImmediateScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648019EDA41200A782A9 /* RACImmediateScheduler.m */; };\n\t\tD037659819EDA41200A782A9 /* RACIndexSetSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648219EDA41200A782A9 /* RACIndexSetSequence.m */; };\n\t\tD037659919EDA41200A782A9 /* RACIndexSetSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648219EDA41200A782A9 /* RACIndexSetSequence.m */; };\n\t\tD037659A19EDA41200A782A9 /* RACKVOChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648319EDA41200A782A9 /* RACKVOChannel.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037659B19EDA41200A782A9 /* RACKVOChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648319EDA41200A782A9 /* RACKVOChannel.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037659C19EDA41200A782A9 /* RACKVOChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648419EDA41200A782A9 /* RACKVOChannel.m */; };\n\t\tD037659D19EDA41200A782A9 /* RACKVOChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648419EDA41200A782A9 /* RACKVOChannel.m */; };\n\t\tD03765A019EDA41200A782A9 /* RACKVOTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648619EDA41200A782A9 /* RACKVOTrampoline.m */; };\n\t\tD03765A119EDA41200A782A9 /* RACKVOTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648619EDA41200A782A9 /* RACKVOTrampoline.m */; };\n\t\tD03765A219EDA41200A782A9 /* RACMulticastConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648719EDA41200A782A9 /* RACMulticastConnection.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765A319EDA41200A782A9 /* RACMulticastConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648719EDA41200A782A9 /* RACMulticastConnection.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765A419EDA41200A782A9 /* RACMulticastConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648819EDA41200A782A9 /* RACMulticastConnection.m */; };\n\t\tD03765A519EDA41200A782A9 /* RACMulticastConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648819EDA41200A782A9 /* RACMulticastConnection.m */; };\n\t\tD03765AA19EDA41200A782A9 /* RACObjCRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648B19EDA41200A782A9 /* RACObjCRuntime.m */; settings = {COMPILER_FLAGS = \"-fno-objc-arc\"; }; };\n\t\tD03765AB19EDA41200A782A9 /* RACObjCRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648B19EDA41200A782A9 /* RACObjCRuntime.m */; settings = {COMPILER_FLAGS = \"-fno-objc-arc\"; }; };\n\t\tD03765AE19EDA41200A782A9 /* RACPassthroughSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */; };\n\t\tD03765AF19EDA41200A782A9 /* RACPassthroughSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */; };\n\t\tD03765B019EDA41200A782A9 /* RACQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648E19EDA41200A782A9 /* RACQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765B119EDA41200A782A9 /* RACQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037648E19EDA41200A782A9 /* RACQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765B219EDA41200A782A9 /* RACQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648F19EDA41200A782A9 /* RACQueueScheduler.m */; };\n\t\tD03765B319EDA41200A782A9 /* RACQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037648F19EDA41200A782A9 /* RACQueueScheduler.m */; };\n\t\tD03765B419EDA41200A782A9 /* RACQueueScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765B519EDA41200A782A9 /* RACQueueScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765B619EDA41200A782A9 /* RACReplaySubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649119EDA41200A782A9 /* RACReplaySubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765B719EDA41200A782A9 /* RACReplaySubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649119EDA41200A782A9 /* RACReplaySubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765B819EDA41200A782A9 /* RACReplaySubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649219EDA41200A782A9 /* RACReplaySubject.m */; };\n\t\tD03765B919EDA41200A782A9 /* RACReplaySubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649219EDA41200A782A9 /* RACReplaySubject.m */; };\n\t\tD03765BC19EDA41200A782A9 /* RACReturnSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649419EDA41200A782A9 /* RACReturnSignal.m */; };\n\t\tD03765BD19EDA41200A782A9 /* RACReturnSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649419EDA41200A782A9 /* RACReturnSignal.m */; };\n\t\tD03765BE19EDA41200A782A9 /* RACScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649519EDA41200A782A9 /* RACScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765BF19EDA41200A782A9 /* RACScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649519EDA41200A782A9 /* RACScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765C019EDA41200A782A9 /* RACScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649619EDA41200A782A9 /* RACScheduler.m */; };\n\t\tD03765C119EDA41200A782A9 /* RACScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649619EDA41200A782A9 /* RACScheduler.m */; };\n\t\tD03765C419EDA41200A782A9 /* RACScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649819EDA41200A782A9 /* RACScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765C519EDA41200A782A9 /* RACScheduler+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649819EDA41200A782A9 /* RACScheduler+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765C619EDA41200A782A9 /* RACScopedDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649919EDA41200A782A9 /* RACScopedDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765C719EDA41200A782A9 /* RACScopedDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649919EDA41200A782A9 /* RACScopedDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765C819EDA41200A782A9 /* RACScopedDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649A19EDA41200A782A9 /* RACScopedDisposable.m */; };\n\t\tD03765C919EDA41200A782A9 /* RACScopedDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649A19EDA41200A782A9 /* RACScopedDisposable.m */; };\n\t\tD03765CA19EDA41200A782A9 /* RACSequence.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649B19EDA41200A782A9 /* RACSequence.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765CB19EDA41200A782A9 /* RACSequence.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649B19EDA41200A782A9 /* RACSequence.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765CC19EDA41200A782A9 /* RACSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649C19EDA41200A782A9 /* RACSequence.m */; };\n\t\tD03765CD19EDA41200A782A9 /* RACSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649C19EDA41200A782A9 /* RACSequence.m */; };\n\t\tD03765CE19EDA41200A782A9 /* RACSerialDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649D19EDA41200A782A9 /* RACSerialDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765CF19EDA41200A782A9 /* RACSerialDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649D19EDA41200A782A9 /* RACSerialDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765D019EDA41200A782A9 /* RACSerialDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649E19EDA41200A782A9 /* RACSerialDisposable.m */; };\n\t\tD03765D119EDA41200A782A9 /* RACSerialDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D037649E19EDA41200A782A9 /* RACSerialDisposable.m */; };\n\t\tD03765D219EDA41200A782A9 /* RACSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649F19EDA41200A782A9 /* RACSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765D319EDA41200A782A9 /* RACSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D037649F19EDA41200A782A9 /* RACSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765D419EDA41200A782A9 /* RACSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A019EDA41200A782A9 /* RACSignal.m */; };\n\t\tD03765D519EDA41200A782A9 /* RACSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A019EDA41200A782A9 /* RACSignal.m */; };\n\t\tD03765D619EDA41200A782A9 /* RACSignal+Operations.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A119EDA41200A782A9 /* RACSignal+Operations.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765D719EDA41200A782A9 /* RACSignal+Operations.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A119EDA41200A782A9 /* RACSignal+Operations.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765D819EDA41200A782A9 /* RACSignal+Operations.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A219EDA41200A782A9 /* RACSignal+Operations.m */; };\n\t\tD03765D919EDA41200A782A9 /* RACSignal+Operations.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A219EDA41200A782A9 /* RACSignal+Operations.m */; };\n\t\tD03765DA19EDA41200A782A9 /* RACSignalProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D03764A319EDA41200A782A9 /* RACSignalProvider.d */; };\n\t\tD03765DB19EDA41200A782A9 /* RACSignalProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D03764A319EDA41200A782A9 /* RACSignalProvider.d */; };\n\t\tD03765DE19EDA41200A782A9 /* RACSignalSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A519EDA41200A782A9 /* RACSignalSequence.m */; };\n\t\tD03765DF19EDA41200A782A9 /* RACSignalSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A519EDA41200A782A9 /* RACSignalSequence.m */; };\n\t\tD03765E019EDA41200A782A9 /* RACStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A619EDA41200A782A9 /* RACStream.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765E119EDA41200A782A9 /* RACStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764A619EDA41200A782A9 /* RACStream.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765E219EDA41200A782A9 /* RACStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A719EDA41200A782A9 /* RACStream.m */; };\n\t\tD03765E319EDA41200A782A9 /* RACStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764A719EDA41200A782A9 /* RACStream.m */; };\n\t\tD03765E819EDA41200A782A9 /* RACStringSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AA19EDA41200A782A9 /* RACStringSequence.m */; };\n\t\tD03765E919EDA41200A782A9 /* RACStringSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AA19EDA41200A782A9 /* RACStringSequence.m */; };\n\t\tD03765EA19EDA41200A782A9 /* RACSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AB19EDA41200A782A9 /* RACSubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765EB19EDA41200A782A9 /* RACSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AB19EDA41200A782A9 /* RACSubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765EC19EDA41200A782A9 /* RACSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AC19EDA41200A782A9 /* RACSubject.m */; };\n\t\tD03765ED19EDA41200A782A9 /* RACSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AC19EDA41200A782A9 /* RACSubject.m */; };\n\t\tD03765EE19EDA41200A782A9 /* RACSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AD19EDA41200A782A9 /* RACSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765EF19EDA41200A782A9 /* RACSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764AD19EDA41200A782A9 /* RACSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765F019EDA41200A782A9 /* RACSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AE19EDA41200A782A9 /* RACSubscriber.m */; };\n\t\tD03765F119EDA41200A782A9 /* RACSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764AE19EDA41200A782A9 /* RACSubscriber.m */; };\n\t\tD03765F419EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765F519EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765F619EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */; };\n\t\tD03765F719EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */; };\n\t\tD03765FA19EDA41200A782A9 /* RACSubscriptionScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */; };\n\t\tD03765FB19EDA41200A782A9 /* RACSubscriptionScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */; };\n\t\tD03765FC19EDA41200A782A9 /* RACTargetQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765FD19EDA41200A782A9 /* RACTargetQueueScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03765FE19EDA41200A782A9 /* RACTargetQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */; };\n\t\tD03765FF19EDA41200A782A9 /* RACTargetQueueScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */; };\n\t\tD037660019EDA41200A782A9 /* RACTestScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B619EDA41200A782A9 /* RACTestScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037660119EDA41200A782A9 /* RACTestScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B619EDA41200A782A9 /* RACTestScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037660219EDA41200A782A9 /* RACTestScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B719EDA41200A782A9 /* RACTestScheduler.m */; };\n\t\tD037660319EDA41200A782A9 /* RACTestScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B719EDA41200A782A9 /* RACTestScheduler.m */; };\n\t\tD037660419EDA41200A782A9 /* RACTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B819EDA41200A782A9 /* RACTuple.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037660519EDA41200A782A9 /* RACTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764B819EDA41200A782A9 /* RACTuple.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037660619EDA41200A782A9 /* RACTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B919EDA41200A782A9 /* RACTuple.m */; };\n\t\tD037660719EDA41200A782A9 /* RACTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764B919EDA41200A782A9 /* RACTuple.m */; };\n\t\tD037660A19EDA41200A782A9 /* RACTupleSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BB19EDA41200A782A9 /* RACTupleSequence.m */; };\n\t\tD037660B19EDA41200A782A9 /* RACTupleSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BB19EDA41200A782A9 /* RACTupleSequence.m */; };\n\t\tD037660E19EDA41200A782A9 /* RACUnarySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BD19EDA41200A782A9 /* RACUnarySequence.m */; };\n\t\tD037660F19EDA41200A782A9 /* RACUnarySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BD19EDA41200A782A9 /* RACUnarySequence.m */; };\n\t\tD037661019EDA41200A782A9 /* RACUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764BE19EDA41200A782A9 /* RACUnit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037661119EDA41200A782A9 /* RACUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764BE19EDA41200A782A9 /* RACUnit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037661219EDA41200A782A9 /* RACUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BF19EDA41200A782A9 /* RACUnit.m */; };\n\t\tD037661319EDA41200A782A9 /* RACUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BF19EDA41200A782A9 /* RACUnit.m */; };\n\t\tD037661619EDA41200A782A9 /* RACValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C119EDA41200A782A9 /* RACValueTransformer.m */; };\n\t\tD037661719EDA41200A782A9 /* RACValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C119EDA41200A782A9 /* RACValueTransformer.m */; };\n\t\tD037661919EDA41200A782A9 /* UIActionSheet+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764C219EDA41200A782A9 /* UIActionSheet+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037661B19EDA41200A782A9 /* UIActionSheet+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C319EDA41200A782A9 /* UIActionSheet+RACSignalSupport.m */; };\n\t\tD037661D19EDA41200A782A9 /* UIAlertView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764C419EDA41200A782A9 /* UIAlertView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037661F19EDA41200A782A9 /* UIAlertView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C519EDA41200A782A9 /* UIAlertView+RACSignalSupport.m */; };\n\t\tD037662119EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764C619EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037662319EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C719EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m */; };\n\t\tD037662519EDA41200A782A9 /* UIButton+RACCommandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764C819EDA41200A782A9 /* UIButton+RACCommandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037662719EDA41200A782A9 /* UIButton+RACCommandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C919EDA41200A782A9 /* UIButton+RACCommandSupport.m */; };\n\t\tD037662919EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764CA19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037662B19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CB19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m */; };\n\t\tD037662D19EDA41200A782A9 /* UIControl+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764CC19EDA41200A782A9 /* UIControl+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037662F19EDA41200A782A9 /* UIControl+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CD19EDA41200A782A9 /* UIControl+RACSignalSupport.m */; };\n\t\tD037663319EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764CF19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m */; };\n\t\tD037663519EDA41200A782A9 /* UIDatePicker+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D019EDA41200A782A9 /* UIDatePicker+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037663719EDA41200A782A9 /* UIDatePicker+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D119EDA41200A782A9 /* UIDatePicker+RACSignalSupport.m */; };\n\t\tD037663919EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D219EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037663B19EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D319EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m */; };\n\t\tD037663D19EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D419EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037663F19EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D519EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.m */; };\n\t\tD037664119EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D619EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037664319EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D719EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.m */; };\n\t\tD037664519EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764D819EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037664719EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764D919EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m */; };\n\t\tD037664919EDA41200A782A9 /* UISlider+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764DA19EDA41200A782A9 /* UISlider+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037664B19EDA41200A782A9 /* UISlider+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764DB19EDA41200A782A9 /* UISlider+RACSignalSupport.m */; };\n\t\tD037664D19EDA41200A782A9 /* UIStepper+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764DC19EDA41200A782A9 /* UIStepper+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037664F19EDA41200A782A9 /* UIStepper+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764DD19EDA41200A782A9 /* UIStepper+RACSignalSupport.m */; };\n\t\tD037665119EDA41200A782A9 /* UISwitch+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764DE19EDA41200A782A9 /* UISwitch+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037665319EDA41200A782A9 /* UISwitch+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764DF19EDA41200A782A9 /* UISwitch+RACSignalSupport.m */; };\n\t\tD037665519EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E019EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037665719EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E119EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m */; };\n\t\tD037665919EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E219EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037665B19EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E319EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m */; };\n\t\tD037665D19EDA41200A782A9 /* UITextField+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E419EDA41200A782A9 /* UITextField+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037665F19EDA41200A782A9 /* UITextField+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E519EDA41200A782A9 /* UITextField+RACSignalSupport.m */; };\n\t\tD037666119EDA41200A782A9 /* UITextView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764E619EDA41200A782A9 /* UITextView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037666319EDA41200A782A9 /* UITextView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764E719EDA41200A782A9 /* UITextView+RACSignalSupport.m */; };\n\t\tD037666419EDA43C00A782A9 /* ReactiveCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037666B19EDA57100A782A9 /* EXTKeyPathCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666619EDA57100A782A9 /* EXTKeyPathCoding.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037666C19EDA57100A782A9 /* EXTKeyPathCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666619EDA57100A782A9 /* EXTKeyPathCoding.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037666F19EDA57100A782A9 /* EXTRuntimeExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */; };\n\t\tD037667019EDA57100A782A9 /* EXTRuntimeExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */; };\n\t\tD037667119EDA57100A782A9 /* EXTScope.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666919EDA57100A782A9 /* EXTScope.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037667219EDA57100A782A9 /* EXTScope.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666919EDA57100A782A9 /* EXTScope.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037667319EDA57100A782A9 /* metamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666A19EDA57100A782A9 /* metamacros.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037667419EDA57100A782A9 /* metamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666A19EDA57100A782A9 /* metamacros.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03766B919EDA60000A782A9 /* NSControllerRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667619EDA60000A782A9 /* NSControllerRACSupportSpec.m */; };\n\t\tD03766BD19EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667819EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m */; };\n\t\tD03766BE19EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667819EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m */; };\n\t\tD03766BF19EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667919EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m */; };\n\t\tD03766C019EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667919EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m */; };\n\t\tD03766C119EDA60000A782A9 /* NSObjectRACAppKitBindingsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667A19EDA60000A782A9 /* NSObjectRACAppKitBindingsSpec.m */; };\n\t\tD03766C319EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667B19EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m */; };\n\t\tD03766C419EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667B19EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m */; };\n\t\tD03766C519EDA60000A782A9 /* NSObjectRACLiftingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667C19EDA60000A782A9 /* NSObjectRACLiftingSpec.m */; };\n\t\tD03766C619EDA60000A782A9 /* NSObjectRACLiftingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667C19EDA60000A782A9 /* NSObjectRACLiftingSpec.m */; };\n\t\tD03766C719EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667E19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m */; };\n\t\tD03766C819EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667E19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m */; };\n\t\tD03766C919EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667F19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m */; };\n\t\tD03766CA19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667F19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m */; };\n\t\tD03766CB19EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668019EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m */; };\n\t\tD03766CC19EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668019EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m */; };\n\t\tD03766CD19EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668119EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m */; };\n\t\tD03766CE19EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668119EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m */; };\n\t\tD03766D119EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668319EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m */; };\n\t\tD03766D219EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668319EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m */; };\n\t\tD03766D319EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m */; };\n\t\tD03766D419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m */; };\n\t\tD03766D719EDA60000A782A9 /* RACBlockTrampolineSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668619EDA60000A782A9 /* RACBlockTrampolineSpec.m */; };\n\t\tD03766D819EDA60000A782A9 /* RACBlockTrampolineSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668619EDA60000A782A9 /* RACBlockTrampolineSpec.m */; };\n\t\tD03766D919EDA60000A782A9 /* RACChannelExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668819EDA60000A782A9 /* RACChannelExamples.m */; };\n\t\tD03766DA19EDA60000A782A9 /* RACChannelExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668819EDA60000A782A9 /* RACChannelExamples.m */; };\n\t\tD03766DB19EDA60000A782A9 /* RACChannelSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668919EDA60000A782A9 /* RACChannelSpec.m */; };\n\t\tD03766DC19EDA60000A782A9 /* RACChannelSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668919EDA60000A782A9 /* RACChannelSpec.m */; };\n\t\tD03766DD19EDA60000A782A9 /* RACCommandSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668A19EDA60000A782A9 /* RACCommandSpec.m */; };\n\t\tD03766DE19EDA60000A782A9 /* RACCommandSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668A19EDA60000A782A9 /* RACCommandSpec.m */; };\n\t\tD03766DF19EDA60000A782A9 /* RACCompoundDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668B19EDA60000A782A9 /* RACCompoundDisposableSpec.m */; };\n\t\tD03766E019EDA60000A782A9 /* RACCompoundDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668B19EDA60000A782A9 /* RACCompoundDisposableSpec.m */; };\n\t\tD03766E119EDA60000A782A9 /* RACControlCommandExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668D19EDA60000A782A9 /* RACControlCommandExamples.m */; };\n\t\tD03766E219EDA60000A782A9 /* RACControlCommandExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668D19EDA60000A782A9 /* RACControlCommandExamples.m */; };\n\t\tD03766E319EDA60000A782A9 /* RACDelegateProxySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668E19EDA60000A782A9 /* RACDelegateProxySpec.m */; };\n\t\tD03766E419EDA60000A782A9 /* RACDelegateProxySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668E19EDA60000A782A9 /* RACDelegateProxySpec.m */; };\n\t\tD03766E519EDA60000A782A9 /* RACDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668F19EDA60000A782A9 /* RACDisposableSpec.m */; };\n\t\tD03766E619EDA60000A782A9 /* RACDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037668F19EDA60000A782A9 /* RACDisposableSpec.m */; };\n\t\tD03766E719EDA60000A782A9 /* RACEventSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669019EDA60000A782A9 /* RACEventSpec.m */; };\n\t\tD03766E819EDA60000A782A9 /* RACEventSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669019EDA60000A782A9 /* RACEventSpec.m */; };\n\t\tD03766E919EDA60000A782A9 /* RACKVOChannelSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669119EDA60000A782A9 /* RACKVOChannelSpec.m */; };\n\t\tD03766EA19EDA60000A782A9 /* RACKVOChannelSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669119EDA60000A782A9 /* RACKVOChannelSpec.m */; };\n\t\tD03766EB19EDA60000A782A9 /* RACKVOWrapperSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669219EDA60000A782A9 /* RACKVOWrapperSpec.m */; };\n\t\tD03766EC19EDA60000A782A9 /* RACKVOWrapperSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669219EDA60000A782A9 /* RACKVOWrapperSpec.m */; };\n\t\tD03766ED19EDA60000A782A9 /* RACMulticastConnectionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669319EDA60000A782A9 /* RACMulticastConnectionSpec.m */; };\n\t\tD03766EE19EDA60000A782A9 /* RACMulticastConnectionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669319EDA60000A782A9 /* RACMulticastConnectionSpec.m */; };\n\t\tD03766EF19EDA60000A782A9 /* RACPropertySignalExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669519EDA60000A782A9 /* RACPropertySignalExamples.m */; };\n\t\tD03766F019EDA60000A782A9 /* RACPropertySignalExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669519EDA60000A782A9 /* RACPropertySignalExamples.m */; };\n\t\tD03766F119EDA60000A782A9 /* RACSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669619EDA60000A782A9 /* RACSchedulerSpec.m */; };\n\t\tD03766F219EDA60000A782A9 /* RACSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669619EDA60000A782A9 /* RACSchedulerSpec.m */; };\n\t\tD03766F319EDA60000A782A9 /* RACSequenceAdditionsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669719EDA60000A782A9 /* RACSequenceAdditionsSpec.m */; };\n\t\tD03766F419EDA60000A782A9 /* RACSequenceAdditionsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669719EDA60000A782A9 /* RACSequenceAdditionsSpec.m */; };\n\t\tD03766F519EDA60000A782A9 /* RACSequenceExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669919EDA60000A782A9 /* RACSequenceExamples.m */; };\n\t\tD03766F619EDA60000A782A9 /* RACSequenceExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669919EDA60000A782A9 /* RACSequenceExamples.m */; };\n\t\tD03766F719EDA60000A782A9 /* RACSequenceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669A19EDA60000A782A9 /* RACSequenceSpec.m */; };\n\t\tD03766F819EDA60000A782A9 /* RACSequenceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669A19EDA60000A782A9 /* RACSequenceSpec.m */; };\n\t\tD03766F919EDA60000A782A9 /* RACSerialDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669B19EDA60000A782A9 /* RACSerialDisposableSpec.m */; };\n\t\tD03766FA19EDA60000A782A9 /* RACSerialDisposableSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669B19EDA60000A782A9 /* RACSerialDisposableSpec.m */; };\n\t\tD03766FB19EDA60000A782A9 /* RACSignalSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669C19EDA60000A782A9 /* RACSignalSpec.m */; };\n\t\tD03766FC19EDA60000A782A9 /* RACSignalSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037669C19EDA60000A782A9 /* RACSignalSpec.m */; };\n\t\tD03766FF19EDA60000A782A9 /* RACStreamExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A019EDA60000A782A9 /* RACStreamExamples.m */; };\n\t\tD037670019EDA60000A782A9 /* RACStreamExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A019EDA60000A782A9 /* RACStreamExamples.m */; };\n\t\tD037670119EDA60000A782A9 /* RACSubclassObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A219EDA60000A782A9 /* RACSubclassObject.m */; };\n\t\tD037670219EDA60000A782A9 /* RACSubclassObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A219EDA60000A782A9 /* RACSubclassObject.m */; };\n\t\tD037670319EDA60000A782A9 /* RACSubjectSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A319EDA60000A782A9 /* RACSubjectSpec.m */; };\n\t\tD037670419EDA60000A782A9 /* RACSubjectSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A319EDA60000A782A9 /* RACSubjectSpec.m */; };\n\t\tD037670519EDA60000A782A9 /* RACSubscriberExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A519EDA60000A782A9 /* RACSubscriberExamples.m */; };\n\t\tD037670619EDA60000A782A9 /* RACSubscriberExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A519EDA60000A782A9 /* RACSubscriberExamples.m */; };\n\t\tD037670719EDA60000A782A9 /* RACSubscriberSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A619EDA60000A782A9 /* RACSubscriberSpec.m */; };\n\t\tD037670819EDA60000A782A9 /* RACSubscriberSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A619EDA60000A782A9 /* RACSubscriberSpec.m */; };\n\t\tD037670919EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A719EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m */; };\n\t\tD037670A19EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A719EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m */; };\n\t\tD037670B19EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A819EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m */; };\n\t\tD037670C19EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766A819EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m */; };\n\t\tD037671519EDA60000A782A9 /* RACTupleSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B019EDA60000A782A9 /* RACTupleSpec.m */; };\n\t\tD037671619EDA60000A782A9 /* RACTupleSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B019EDA60000A782A9 /* RACTupleSpec.m */; };\n\t\tD037671719EDA60000A782A9 /* test-data.json in Resources */ = {isa = PBXBuildFile; fileRef = D03766B119EDA60000A782A9 /* test-data.json */; };\n\t\tD037671819EDA60000A782A9 /* test-data.json in Resources */ = {isa = PBXBuildFile; fileRef = D03766B119EDA60000A782A9 /* test-data.json */; };\n\t\tD037671A19EDA60000A782A9 /* UIActionSheetRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B219EDA60000A782A9 /* UIActionSheetRACSupportSpec.m */; };\n\t\tD037671C19EDA60000A782A9 /* UIAlertViewRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B319EDA60000A782A9 /* UIAlertViewRACSupportSpec.m */; };\n\t\tD037671E19EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B419EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m */; };\n\t\tD037672019EDA60000A782A9 /* UIButtonRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B519EDA60000A782A9 /* UIButtonRACSupportSpec.m */; };\n\t\tD037672419EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D03766B719EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m */; };\n\t\tD037672719EDA63400A782A9 /* RACBehaviorSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646019EDA41200A782A9 /* RACBehaviorSubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037672819EDA63500A782A9 /* RACBehaviorSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646019EDA41200A782A9 /* RACBehaviorSubject.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD037672D19EDA75D00A782A9 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; };\n\t\tD037672F19EDA78B00A782A9 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; };\n\t\tD03B4A3D19F4C39A009E02AC /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; };\n\t\tD03B4A3E19F4C39A009E02AC /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; };\n\t\tD04725F019E49ED7006002AA /* ReactiveCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD04725F619E49ED7006002AA /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04725EA19E49ED7006002AA /* ReactiveCocoa.framework */; };\n\t\tD047261719E49F82006002AA /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D047260C19E49F82006002AA /* ReactiveCocoa.framework */; };\n\t\tD05E662519EDD82000904ACA /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; };\n\t\tD05E662619EDD83000904ACA /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; };\n\t\tD08C54B31A69A2AE00AD8286 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; };\n\t\tD08C54B41A69A2AF00AD8286 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; };\n\t\tD08C54B61A69A3DB00AD8286 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; };\n\t\tD08C54B71A69A3DB00AD8286 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; };\n\t\tD08C54B81A69A9D000AD8286 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; };\n\t\tD08C54B91A69A9D100AD8286 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; };\n\t\tD08C54BA1A69C54300AD8286 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; };\n\t\tD08C54BB1A69C54400AD8286 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; };\n\t\tD0A226081A72E0E900D33B74 /* SignalSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226071A72E0E900D33B74 /* SignalSpec.swift */; };\n\t\tD0A226091A72E0E900D33B74 /* SignalSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226071A72E0E900D33B74 /* SignalSpec.swift */; };\n\t\tD0A2260B1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */; };\n\t\tD0A2260C1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */; };\n\t\tD0A2260E1A72F16D00D33B74 /* PropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */; };\n\t\tD0A2260F1A72F16D00D33B74 /* PropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */; };\n\t\tD0A226111A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */; };\n\t\tD0A226121A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */; };\n\t\tD0C312CD19EF2A5800984962 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; };\n\t\tD0C312CE19EF2A5800984962 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; };\n\t\tD0C312CF19EF2A5800984962 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; };\n\t\tD0C312D019EF2A5800984962 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; };\n\t\tD0C312D319EF2A5800984962 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; };\n\t\tD0C312D419EF2A5800984962 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; };\n\t\tD0C312DF19EF2A5800984962 /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; };\n\t\tD0C312E019EF2A5800984962 /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; };\n\t\tD0C312E719EF2A5800984962 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; };\n\t\tD0C312E819EF2A5800984962 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; };\n\t\tD0C3130C19EF2B1F00984962 /* DisposableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F019EF2A7700984962 /* DisposableSpec.swift */; };\n\t\tD0C3130E19EF2B1F00984962 /* SchedulerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F219EF2A7700984962 /* SchedulerSpec.swift */; };\n\t\tD0C3131219EF2B2000984962 /* DisposableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F019EF2A7700984962 /* DisposableSpec.swift */; };\n\t\tD0C3131419EF2B2000984962 /* SchedulerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F219EF2A7700984962 /* SchedulerSpec.swift */; };\n\t\tD0C3131E19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */; };\n\t\tD0C3131F19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */; };\n\t\tD0C3132019EF2D9700984962 /* RACTestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131A19EF2D9700984962 /* RACTestObject.m */; };\n\t\tD0C3132119EF2D9700984962 /* RACTestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131A19EF2D9700984962 /* RACTestObject.m */; };\n\t\tD0C3132219EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */; };\n\t\tD0C3132319EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */; };\n\t\tD0C3132519EF2D9700984962 /* RACTestUIButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131D19EF2D9700984962 /* RACTestUIButton.m */; };\n\t\tD0D11AB91A6AE87700C1F8B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; };\n\t\tD0D11ABA1A6AE87700C1F8B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; };\n\t\tD43F27A01A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD43F27A11A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD43F27A21A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m in Sources */ = {isa = PBXBuildFile; fileRef = D43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */; };\n\t\tD43F27A31A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m in Sources */ = {isa = PBXBuildFile; fileRef = D43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */; };\n\t\tD8024DB21B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */; };\n\t\tD8024DB31B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */; };\n\t\tD8170FC11B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */; };\n\t\tD8170FC21B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */; };\n\t\tD85C652A1C0D84C7005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; };\n\t\tD85C652B1C0E70E3005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; };\n\t\tD85C652C1C0E70E4005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; };\n\t\tD85C652D1C0E70E5005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; };\n\t\tD871D69F1B3B29A40070F16C /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; };\n\t\tD8E84A671B3B32FB00C3E831 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; };\n\t\tEBCC7DBC1BBF010C00A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; };\n\t\tEBCC7DBD1BBF01E100A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; };\n\t\tEBCC7DBE1BBF01E200A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; };\n\t\tEBCC7DBF1BBF01E200A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tD04725F719E49ED7006002AA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D04725E119E49ED7006002AA /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D04725E919E49ED7006002AA;\n\t\t\tremoteInfo = ReactiveCocoa;\n\t\t};\n\t\tD047261819E49F82006002AA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D04725E119E49ED7006002AA /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D047260B19E49F82006002AA;\n\t\t\tremoteInfo = ReactiveCocoa;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tD01B7B6119EDD8F600D26E01 /* Copy Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\tCDC42E331AE7AC6D00965373 /* Result.framework in Copy Frameworks */,\n\t\t\t\tD01B7B6219EDD8FE00D26E01 /* Nimble.framework in Copy Frameworks */,\n\t\t\t\tD01B7B6319EDD8FE00D26E01 /* Quick.framework in Copy Frameworks */,\n\t\t\t\tD01B7B6419EDD94B00D26E01 /* ReactiveCocoa.framework in Copy Frameworks */,\n\t\t\t);\n\t\t\tname = \"Copy Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignalLifetimeSpec.swift; sourceTree = \"<group>\"; };\n\t\t314304151ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"MKAnnotationView+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\t314304161ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"MKAnnotationView+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\t57A4D2411BA13D7A00F7D4B1 /* ReactiveCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"tvOS-Application.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t57A4D2451BA13F9700F7D4B1 /* tvOS-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"tvOS-Base.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"tvOS-Framework.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t57A4D2471BA13F9700F7D4B1 /* tvOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"tvOS-StaticLibrary.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t7A70657D1A3F88B8001E8354 /* RACKVOProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACKVOProxy.h; sourceTree = \"<group>\"; };\n\t\t7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOProxy.m; sourceTree = \"<group>\"; };\n\t\t7A7065831A3F8967001E8354 /* RACKVOProxySpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOProxySpec.m; sourceTree = \"<group>\"; };\n\t\tA97451331B3A935E00F48E55 /* watchOS-Application.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = \"watchOS-Application.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA97451341B3A935E00F48E55 /* watchOS-Base.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = \"watchOS-Base.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = \"watchOS-Framework.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA97451361B3A935E00F48E55 /* watchOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = \"watchOS-StaticLibrary.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA9B315541B3940610001CB9C /* ReactiveCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB696FB801A7640C00075236D /* TestError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestError.swift; sourceTree = \"<group>\"; };\n\t\tBFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SignalProducerNimbleMatchers.swift; path = Swift/SignalProducerNimbleMatchers.swift; sourceTree = \"<group>\"; };\n\t\tCA6F284F1C52626B001879D2 /* FlattenSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlattenSpec.swift; sourceTree = \"<group>\"; };\n\t\tCD183E811AED1E0E00848F5D /* Box.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Box.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tCDC42E2E1AE7AB8B00965373 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD00004081A46864E000E7D41 /* TupleExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TupleExtensions.swift; sourceTree = \"<group>\"; };\n\t\tD021671C1A6CD50500987861 /* ActionSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ActionSpec.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\tD037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSArray+RACSequenceAdditions.h\"; sourceTree = \"<group>\"; };\n\t\tD037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSArray+RACSequenceAdditions.m\"; sourceTree = \"<group>\"; };\n\t\tD037642C19EDA41200A782A9 /* NSControl+RACCommandSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSControl+RACCommandSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD037642D19EDA41200A782A9 /* NSControl+RACCommandSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSControl+RACCommandSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD037642E19EDA41200A782A9 /* NSControl+RACTextSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSControl+RACTextSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD037642F19EDA41200A782A9 /* NSControl+RACTextSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSControl+RACTextSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD037643019EDA41200A782A9 /* NSData+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSData+RACSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD037643119EDA41200A782A9 /* NSData+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSData+RACSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSDictionary+RACSequenceAdditions.h\"; sourceTree = \"<group>\"; };\n\t\tD037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSDictionary+RACSequenceAdditions.m\"; sourceTree = \"<group>\"; };\n\t\tD037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSEnumerator+RACSequenceAdditions.h\"; sourceTree = \"<group>\"; };\n\t\tD037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSEnumerator+RACSequenceAdditions.m\"; sourceTree = \"<group>\"; };\n\t\tD037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSFileHandle+RACSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSFileHandle+RACSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSIndexSet+RACSequenceAdditions.h\"; sourceTree = \"<group>\"; };\n\t\tD037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSIndexSet+RACSequenceAdditions.m\"; sourceTree = \"<group>\"; };\n\t\tD037643A19EDA41200A782A9 /* NSInvocation+RACTypeParsing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSInvocation+RACTypeParsing.h\"; sourceTree = \"<group>\"; };\n\t\tD037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSInvocation+RACTypeParsing.m\"; sourceTree = \"<group>\"; };\n\t\tD037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSNotificationCenter+RACSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSNotificationCenter+RACSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD037643E19EDA41200A782A9 /* NSObject+RACAppKitBindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSObject+RACAppKitBindings.h\"; sourceTree = \"<group>\"; };\n\t\tD037643F19EDA41200A782A9 /* NSObject+RACAppKitBindings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSObject+RACAppKitBindings.m\"; sourceTree = \"<group>\"; };\n\t\tD037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSObject+RACDeallocating.h\"; sourceTree = \"<group>\"; };\n\t\tD037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSObject+RACDeallocating.m\"; sourceTree = \"<group>\"; };\n\t\tD037644219EDA41200A782A9 /* NSObject+RACDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSObject+RACDescription.h\"; sourceTree = \"<group>\"; };\n\t\tD037644319EDA41200A782A9 /* NSObject+RACDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSObject+RACDescription.m\"; sourceTree = \"<group>\"; };\n\t\tD037644419EDA41200A782A9 /* NSObject+RACKVOWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSObject+RACKVOWrapper.h\"; sourceTree = \"<group>\"; };\n\t\tD037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSObject+RACKVOWrapper.m\"; sourceTree = \"<group>\"; };\n\t\tD037644619EDA41200A782A9 /* NSObject+RACLifting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSObject+RACLifting.h\"; sourceTree = \"<group>\"; };\n\t\tD037644719EDA41200A782A9 /* NSObject+RACLifting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSObject+RACLifting.m\"; sourceTree = \"<group>\"; };\n\t\tD037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSObject+RACPropertySubscribing.h\"; sourceTree = \"<group>\"; };\n\t\tD037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSObject+RACPropertySubscribing.m\"; sourceTree = \"<group>\"; };\n\t\tD037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSObject+RACSelectorSignal.h\"; sourceTree = \"<group>\"; };\n\t\tD037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSObject+RACSelectorSignal.m\"; sourceTree = \"<group>\"; };\n\t\tD037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSOrderedSet+RACSequenceAdditions.h\"; sourceTree = \"<group>\"; };\n\t\tD037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSOrderedSet+RACSequenceAdditions.m\"; sourceTree = \"<group>\"; };\n\t\tD037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSSet+RACSequenceAdditions.h\"; sourceTree = \"<group>\"; };\n\t\tD037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSSet+RACSequenceAdditions.m\"; sourceTree = \"<group>\"; };\n\t\tD037645019EDA41200A782A9 /* NSString+RACKeyPathUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSString+RACKeyPathUtilities.h\"; sourceTree = \"<group>\"; };\n\t\tD037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSString+RACKeyPathUtilities.m\"; sourceTree = \"<group>\"; };\n\t\tD037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSString+RACSequenceAdditions.h\"; sourceTree = \"<group>\"; };\n\t\tD037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSString+RACSequenceAdditions.m\"; sourceTree = \"<group>\"; };\n\t\tD037645419EDA41200A782A9 /* NSString+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSString+RACSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD037645519EDA41200A782A9 /* NSString+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSString+RACSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD037645619EDA41200A782A9 /* NSText+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSText+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD037645719EDA41200A782A9 /* NSText+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSText+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD037645819EDA41200A782A9 /* NSURLConnection+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSURLConnection+RACSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD037645919EDA41200A782A9 /* NSURLConnection+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSURLConnection+RACSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSUserDefaults+RACSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSUserDefaults+RACSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD037645C19EDA41200A782A9 /* RACArraySequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACArraySequence.h; sourceTree = \"<group>\"; };\n\t\tD037645D19EDA41200A782A9 /* RACArraySequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACArraySequence.m; sourceTree = \"<group>\"; };\n\t\tD037646019EDA41200A782A9 /* RACBehaviorSubject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACBehaviorSubject.h; sourceTree = \"<group>\"; };\n\t\tD037646119EDA41200A782A9 /* RACBehaviorSubject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACBehaviorSubject.m; sourceTree = \"<group>\"; };\n\t\tD037646219EDA41200A782A9 /* RACBlockTrampoline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACBlockTrampoline.h; sourceTree = \"<group>\"; };\n\t\tD037646319EDA41200A782A9 /* RACBlockTrampoline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACBlockTrampoline.m; sourceTree = \"<group>\"; };\n\t\tD037646419EDA41200A782A9 /* RACChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACChannel.h; sourceTree = \"<group>\"; };\n\t\tD037646519EDA41200A782A9 /* RACChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACChannel.m; sourceTree = \"<group>\"; };\n\t\tD037646619EDA41200A782A9 /* RACCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACCommand.h; sourceTree = \"<group>\"; };\n\t\tD037646719EDA41200A782A9 /* RACCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACCommand.m; sourceTree = \"<group>\"; };\n\t\tD037646819EDA41200A782A9 /* RACCompoundDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACCompoundDisposable.h; sourceTree = \"<group>\"; };\n\t\tD037646919EDA41200A782A9 /* RACCompoundDisposable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACCompoundDisposable.m; sourceTree = \"<group>\"; };\n\t\tD037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = RACCompoundDisposableProvider.d; sourceTree = \"<group>\"; };\n\t\tD037646B19EDA41200A782A9 /* RACDelegateProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACDelegateProxy.h; sourceTree = \"<group>\"; };\n\t\tD037646C19EDA41200A782A9 /* RACDelegateProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDelegateProxy.m; sourceTree = \"<group>\"; };\n\t\tD037646D19EDA41200A782A9 /* RACDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACDisposable.h; sourceTree = \"<group>\"; };\n\t\tD037646E19EDA41200A782A9 /* RACDisposable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDisposable.m; sourceTree = \"<group>\"; };\n\t\tD037646F19EDA41200A782A9 /* RACDynamicSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACDynamicSequence.h; sourceTree = \"<group>\"; };\n\t\tD037647019EDA41200A782A9 /* RACDynamicSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDynamicSequence.m; sourceTree = \"<group>\"; };\n\t\tD037647119EDA41200A782A9 /* RACDynamicSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACDynamicSignal.h; sourceTree = \"<group>\"; };\n\t\tD037647219EDA41200A782A9 /* RACDynamicSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDynamicSignal.m; sourceTree = \"<group>\"; };\n\t\tD037647319EDA41200A782A9 /* RACEagerSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACEagerSequence.h; sourceTree = \"<group>\"; };\n\t\tD037647419EDA41200A782A9 /* RACEagerSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACEagerSequence.m; sourceTree = \"<group>\"; };\n\t\tD037647519EDA41200A782A9 /* RACEmptySequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACEmptySequence.h; sourceTree = \"<group>\"; };\n\t\tD037647619EDA41200A782A9 /* RACEmptySequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACEmptySequence.m; sourceTree = \"<group>\"; };\n\t\tD037647719EDA41200A782A9 /* RACEmptySignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACEmptySignal.h; sourceTree = \"<group>\"; };\n\t\tD037647819EDA41200A782A9 /* RACEmptySignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACEmptySignal.m; sourceTree = \"<group>\"; };\n\t\tD037647919EDA41200A782A9 /* RACErrorSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACErrorSignal.h; sourceTree = \"<group>\"; };\n\t\tD037647A19EDA41200A782A9 /* RACErrorSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACErrorSignal.m; sourceTree = \"<group>\"; };\n\t\tD037647B19EDA41200A782A9 /* RACEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACEvent.h; sourceTree = \"<group>\"; };\n\t\tD037647C19EDA41200A782A9 /* RACEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACEvent.m; sourceTree = \"<group>\"; };\n\t\tD037647D19EDA41200A782A9 /* RACGroupedSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACGroupedSignal.h; sourceTree = \"<group>\"; };\n\t\tD037647E19EDA41200A782A9 /* RACGroupedSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACGroupedSignal.m; sourceTree = \"<group>\"; };\n\t\tD037647F19EDA41200A782A9 /* RACImmediateScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACImmediateScheduler.h; sourceTree = \"<group>\"; };\n\t\tD037648019EDA41200A782A9 /* RACImmediateScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACImmediateScheduler.m; sourceTree = \"<group>\"; };\n\t\tD037648119EDA41200A782A9 /* RACIndexSetSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACIndexSetSequence.h; sourceTree = \"<group>\"; };\n\t\tD037648219EDA41200A782A9 /* RACIndexSetSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACIndexSetSequence.m; sourceTree = \"<group>\"; };\n\t\tD037648319EDA41200A782A9 /* RACKVOChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACKVOChannel.h; sourceTree = \"<group>\"; };\n\t\tD037648419EDA41200A782A9 /* RACKVOChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOChannel.m; sourceTree = \"<group>\"; };\n\t\tD037648519EDA41200A782A9 /* RACKVOTrampoline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACKVOTrampoline.h; sourceTree = \"<group>\"; };\n\t\tD037648619EDA41200A782A9 /* RACKVOTrampoline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOTrampoline.m; sourceTree = \"<group>\"; };\n\t\tD037648719EDA41200A782A9 /* RACMulticastConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACMulticastConnection.h; sourceTree = \"<group>\"; };\n\t\tD037648819EDA41200A782A9 /* RACMulticastConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACMulticastConnection.m; sourceTree = \"<group>\"; };\n\t\tD037648919EDA41200A782A9 /* RACMulticastConnection+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"RACMulticastConnection+Private.h\"; sourceTree = \"<group>\"; };\n\t\tD037648A19EDA41200A782A9 /* RACObjCRuntime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACObjCRuntime.h; sourceTree = \"<group>\"; };\n\t\tD037648B19EDA41200A782A9 /* RACObjCRuntime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACObjCRuntime.m; sourceTree = \"<group>\"; };\n\t\tD037648C19EDA41200A782A9 /* RACPassthroughSubscriber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACPassthroughSubscriber.h; sourceTree = \"<group>\"; };\n\t\tD037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACPassthroughSubscriber.m; sourceTree = \"<group>\"; };\n\t\tD037648E19EDA41200A782A9 /* RACQueueScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACQueueScheduler.h; sourceTree = \"<group>\"; };\n\t\tD037648F19EDA41200A782A9 /* RACQueueScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACQueueScheduler.m; sourceTree = \"<group>\"; };\n\t\tD037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"RACQueueScheduler+Subclass.h\"; sourceTree = \"<group>\"; };\n\t\tD037649119EDA41200A782A9 /* RACReplaySubject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACReplaySubject.h; sourceTree = \"<group>\"; };\n\t\tD037649219EDA41200A782A9 /* RACReplaySubject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACReplaySubject.m; sourceTree = \"<group>\"; };\n\t\tD037649319EDA41200A782A9 /* RACReturnSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACReturnSignal.h; sourceTree = \"<group>\"; };\n\t\tD037649419EDA41200A782A9 /* RACReturnSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACReturnSignal.m; sourceTree = \"<group>\"; };\n\t\tD037649519EDA41200A782A9 /* RACScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACScheduler.h; sourceTree = \"<group>\"; };\n\t\tD037649619EDA41200A782A9 /* RACScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACScheduler.m; sourceTree = \"<group>\"; };\n\t\tD037649719EDA41200A782A9 /* RACScheduler+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"RACScheduler+Private.h\"; sourceTree = \"<group>\"; };\n\t\tD037649819EDA41200A782A9 /* RACScheduler+Subclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"RACScheduler+Subclass.h\"; sourceTree = \"<group>\"; };\n\t\tD037649919EDA41200A782A9 /* RACScopedDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACScopedDisposable.h; sourceTree = \"<group>\"; };\n\t\tD037649A19EDA41200A782A9 /* RACScopedDisposable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACScopedDisposable.m; sourceTree = \"<group>\"; };\n\t\tD037649B19EDA41200A782A9 /* RACSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSequence.h; sourceTree = \"<group>\"; };\n\t\tD037649C19EDA41200A782A9 /* RACSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSequence.m; sourceTree = \"<group>\"; };\n\t\tD037649D19EDA41200A782A9 /* RACSerialDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSerialDisposable.h; sourceTree = \"<group>\"; };\n\t\tD037649E19EDA41200A782A9 /* RACSerialDisposable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSerialDisposable.m; sourceTree = \"<group>\"; };\n\t\tD037649F19EDA41200A782A9 /* RACSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSignal.h; sourceTree = \"<group>\"; };\n\t\tD03764A019EDA41200A782A9 /* RACSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSignal.m; sourceTree = \"<group>\"; };\n\t\tD03764A119EDA41200A782A9 /* RACSignal+Operations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"RACSignal+Operations.h\"; sourceTree = \"<group>\"; };\n\t\tD03764A219EDA41200A782A9 /* RACSignal+Operations.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"RACSignal+Operations.m\"; sourceTree = \"<group>\"; };\n\t\tD03764A319EDA41200A782A9 /* RACSignalProvider.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = RACSignalProvider.d; sourceTree = \"<group>\"; };\n\t\tD03764A419EDA41200A782A9 /* RACSignalSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSignalSequence.h; sourceTree = \"<group>\"; };\n\t\tD03764A519EDA41200A782A9 /* RACSignalSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSignalSequence.m; sourceTree = \"<group>\"; };\n\t\tD03764A619EDA41200A782A9 /* RACStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACStream.h; sourceTree = \"<group>\"; };\n\t\tD03764A719EDA41200A782A9 /* RACStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACStream.m; sourceTree = \"<group>\"; };\n\t\tD03764A819EDA41200A782A9 /* RACStream+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"RACStream+Private.h\"; sourceTree = \"<group>\"; };\n\t\tD03764A919EDA41200A782A9 /* RACStringSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACStringSequence.h; sourceTree = \"<group>\"; };\n\t\tD03764AA19EDA41200A782A9 /* RACStringSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACStringSequence.m; sourceTree = \"<group>\"; };\n\t\tD03764AB19EDA41200A782A9 /* RACSubject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubject.h; sourceTree = \"<group>\"; };\n\t\tD03764AC19EDA41200A782A9 /* RACSubject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubject.m; sourceTree = \"<group>\"; };\n\t\tD03764AD19EDA41200A782A9 /* RACSubscriber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubscriber.h; sourceTree = \"<group>\"; };\n\t\tD03764AE19EDA41200A782A9 /* RACSubscriber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriber.m; sourceTree = \"<group>\"; };\n\t\tD03764AF19EDA41200A782A9 /* RACSubscriber+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"RACSubscriber+Private.h\"; sourceTree = \"<group>\"; };\n\t\tD03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubscriptingAssignmentTrampoline.h; sourceTree = \"<group>\"; };\n\t\tD03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriptingAssignmentTrampoline.m; sourceTree = \"<group>\"; };\n\t\tD03764B219EDA41200A782A9 /* RACSubscriptionScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubscriptionScheduler.h; sourceTree = \"<group>\"; };\n\t\tD03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriptionScheduler.m; sourceTree = \"<group>\"; };\n\t\tD03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTargetQueueScheduler.h; sourceTree = \"<group>\"; };\n\t\tD03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTargetQueueScheduler.m; sourceTree = \"<group>\"; };\n\t\tD03764B619EDA41200A782A9 /* RACTestScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTestScheduler.h; sourceTree = \"<group>\"; };\n\t\tD03764B719EDA41200A782A9 /* RACTestScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestScheduler.m; sourceTree = \"<group>\"; };\n\t\tD03764B819EDA41200A782A9 /* RACTuple.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTuple.h; sourceTree = \"<group>\"; };\n\t\tD03764B919EDA41200A782A9 /* RACTuple.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTuple.m; sourceTree = \"<group>\"; };\n\t\tD03764BA19EDA41200A782A9 /* RACTupleSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTupleSequence.h; sourceTree = \"<group>\"; };\n\t\tD03764BB19EDA41200A782A9 /* RACTupleSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTupleSequence.m; sourceTree = \"<group>\"; };\n\t\tD03764BC19EDA41200A782A9 /* RACUnarySequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACUnarySequence.h; sourceTree = \"<group>\"; };\n\t\tD03764BD19EDA41200A782A9 /* RACUnarySequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACUnarySequence.m; sourceTree = \"<group>\"; };\n\t\tD03764BE19EDA41200A782A9 /* RACUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACUnit.h; sourceTree = \"<group>\"; };\n\t\tD03764BF19EDA41200A782A9 /* RACUnit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACUnit.m; sourceTree = \"<group>\"; };\n\t\tD03764C019EDA41200A782A9 /* RACValueTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACValueTransformer.h; sourceTree = \"<group>\"; };\n\t\tD03764C119EDA41200A782A9 /* RACValueTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACValueTransformer.m; sourceTree = \"<group>\"; };\n\t\tD03764C219EDA41200A782A9 /* UIActionSheet+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIActionSheet+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764C319EDA41200A782A9 /* UIActionSheet+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIActionSheet+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764C419EDA41200A782A9 /* UIAlertView+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIAlertView+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764C519EDA41200A782A9 /* UIAlertView+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIAlertView+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764C619EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIBarButtonItem+RACCommandSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764C719EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIBarButtonItem+RACCommandSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764C819EDA41200A782A9 /* UIButton+RACCommandSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIButton+RACCommandSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764C919EDA41200A782A9 /* UIButton+RACCommandSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIButton+RACCommandSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764CA19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UICollectionReusableView+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764CB19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UICollectionReusableView+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764CC19EDA41200A782A9 /* UIControl+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIControl+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764CD19EDA41200A782A9 /* UIControl+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIControl+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764CE19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIControl+RACSignalSupportPrivate.h\"; sourceTree = \"<group>\"; };\n\t\tD03764CF19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIControl+RACSignalSupportPrivate.m\"; sourceTree = \"<group>\"; };\n\t\tD03764D019EDA41200A782A9 /* UIDatePicker+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIDatePicker+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764D119EDA41200A782A9 /* UIDatePicker+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIDatePicker+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764D219EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIGestureRecognizer+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764D319EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIGestureRecognizer+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764D419EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIImagePickerController+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764D519EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIImagePickerController+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764D619EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIRefreshControl+RACCommandSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764D719EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIRefreshControl+RACCommandSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764D819EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UISegmentedControl+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764D919EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UISegmentedControl+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764DA19EDA41200A782A9 /* UISlider+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UISlider+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764DB19EDA41200A782A9 /* UISlider+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UISlider+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764DC19EDA41200A782A9 /* UIStepper+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIStepper+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764DD19EDA41200A782A9 /* UIStepper+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIStepper+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764DE19EDA41200A782A9 /* UISwitch+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UISwitch+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764DF19EDA41200A782A9 /* UISwitch+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UISwitch+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764E019EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UITableViewCell+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764E119EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UITableViewCell+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764E219EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UITableViewHeaderFooterView+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764E319EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UITableViewHeaderFooterView+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764E419EDA41200A782A9 /* UITextField+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UITextField+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764E519EDA41200A782A9 /* UITextField+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UITextField+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD03764E619EDA41200A782A9 /* UITextView+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UITextView+RACSignalSupport.h\"; sourceTree = \"<group>\"; };\n\t\tD03764E719EDA41200A782A9 /* UITextView+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UITextView+RACSignalSupport.m\"; sourceTree = \"<group>\"; };\n\t\tD037666619EDA57100A782A9 /* EXTKeyPathCoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EXTKeyPathCoding.h; sourceTree = \"<group>\"; };\n\t\tD037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EXTRuntimeExtensions.h; sourceTree = \"<group>\"; };\n\t\tD037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EXTRuntimeExtensions.m; sourceTree = \"<group>\"; };\n\t\tD037666919EDA57100A782A9 /* EXTScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EXTScope.h; sourceTree = \"<group>\"; };\n\t\tD037666A19EDA57100A782A9 /* metamacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = metamacros.h; sourceTree = \"<group>\"; };\n\t\tD037667619EDA60000A782A9 /* NSControllerRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSControllerRACSupportSpec.m; sourceTree = \"<group>\"; };\n\t\tD037667819EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSEnumeratorRACSequenceAdditionsSpec.m; sourceTree = \"<group>\"; };\n\t\tD037667919EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSNotificationCenterRACSupportSpec.m; sourceTree = \"<group>\"; };\n\t\tD037667A19EDA60000A782A9 /* NSObjectRACAppKitBindingsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACAppKitBindingsSpec.m; sourceTree = \"<group>\"; };\n\t\tD037667B19EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACDeallocatingSpec.m; sourceTree = \"<group>\"; };\n\t\tD037667C19EDA60000A782A9 /* NSObjectRACLiftingSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACLiftingSpec.m; sourceTree = \"<group>\"; };\n\t\tD037667D19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSObjectRACPropertySubscribingExamples.h; sourceTree = \"<group>\"; };\n\t\tD037667E19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACPropertySubscribingExamples.m; sourceTree = \"<group>\"; };\n\t\tD037667F19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACPropertySubscribingSpec.m; sourceTree = \"<group>\"; };\n\t\tD037668019EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectRACSelectorSignalSpec.m; sourceTree = \"<group>\"; };\n\t\tD037668119EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSStringRACKeyPathUtilitiesSpec.m; sourceTree = \"<group>\"; };\n\t\tD037668319EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSURLConnectionRACSupportSpec.m; sourceTree = \"<group>\"; };\n\t\tD037668419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSUserDefaultsRACSupportSpec.m; sourceTree = \"<group>\"; };\n\t\tD037668619EDA60000A782A9 /* RACBlockTrampolineSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACBlockTrampolineSpec.m; sourceTree = \"<group>\"; };\n\t\tD037668719EDA60000A782A9 /* RACChannelExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACChannelExamples.h; sourceTree = \"<group>\"; };\n\t\tD037668819EDA60000A782A9 /* RACChannelExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACChannelExamples.m; sourceTree = \"<group>\"; };\n\t\tD037668919EDA60000A782A9 /* RACChannelSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACChannelSpec.m; sourceTree = \"<group>\"; };\n\t\tD037668A19EDA60000A782A9 /* RACCommandSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACCommandSpec.m; sourceTree = \"<group>\"; };\n\t\tD037668B19EDA60000A782A9 /* RACCompoundDisposableSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACCompoundDisposableSpec.m; sourceTree = \"<group>\"; };\n\t\tD037668C19EDA60000A782A9 /* RACControlCommandExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACControlCommandExamples.h; sourceTree = \"<group>\"; };\n\t\tD037668D19EDA60000A782A9 /* RACControlCommandExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACControlCommandExamples.m; sourceTree = \"<group>\"; };\n\t\tD037668E19EDA60000A782A9 /* RACDelegateProxySpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDelegateProxySpec.m; sourceTree = \"<group>\"; };\n\t\tD037668F19EDA60000A782A9 /* RACDisposableSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDisposableSpec.m; sourceTree = \"<group>\"; };\n\t\tD037669019EDA60000A782A9 /* RACEventSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACEventSpec.m; sourceTree = \"<group>\"; };\n\t\tD037669119EDA60000A782A9 /* RACKVOChannelSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOChannelSpec.m; sourceTree = \"<group>\"; };\n\t\tD037669219EDA60000A782A9 /* RACKVOWrapperSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOWrapperSpec.m; sourceTree = \"<group>\"; };\n\t\tD037669319EDA60000A782A9 /* RACMulticastConnectionSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACMulticastConnectionSpec.m; sourceTree = \"<group>\"; };\n\t\tD037669419EDA60000A782A9 /* RACPropertySignalExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACPropertySignalExamples.h; sourceTree = \"<group>\"; };\n\t\tD037669519EDA60000A782A9 /* RACPropertySignalExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACPropertySignalExamples.m; sourceTree = \"<group>\"; };\n\t\tD037669619EDA60000A782A9 /* RACSchedulerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSchedulerSpec.m; sourceTree = \"<group>\"; };\n\t\tD037669719EDA60000A782A9 /* RACSequenceAdditionsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSequenceAdditionsSpec.m; sourceTree = \"<group>\"; };\n\t\tD037669819EDA60000A782A9 /* RACSequenceExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSequenceExamples.h; sourceTree = \"<group>\"; };\n\t\tD037669919EDA60000A782A9 /* RACSequenceExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSequenceExamples.m; sourceTree = \"<group>\"; };\n\t\tD037669A19EDA60000A782A9 /* RACSequenceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSequenceSpec.m; sourceTree = \"<group>\"; };\n\t\tD037669B19EDA60000A782A9 /* RACSerialDisposableSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSerialDisposableSpec.m; sourceTree = \"<group>\"; };\n\t\tD037669C19EDA60000A782A9 /* RACSignalSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSignalSpec.m; sourceTree = \"<group>\"; };\n\t\tD037669F19EDA60000A782A9 /* RACStreamExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACStreamExamples.h; sourceTree = \"<group>\"; };\n\t\tD03766A019EDA60000A782A9 /* RACStreamExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACStreamExamples.m; sourceTree = \"<group>\"; };\n\t\tD03766A119EDA60000A782A9 /* RACSubclassObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubclassObject.h; sourceTree = \"<group>\"; };\n\t\tD03766A219EDA60000A782A9 /* RACSubclassObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubclassObject.m; sourceTree = \"<group>\"; };\n\t\tD03766A319EDA60000A782A9 /* RACSubjectSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubjectSpec.m; sourceTree = \"<group>\"; };\n\t\tD03766A419EDA60000A782A9 /* RACSubscriberExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACSubscriberExamples.h; sourceTree = \"<group>\"; };\n\t\tD03766A519EDA60000A782A9 /* RACSubscriberExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriberExamples.m; sourceTree = \"<group>\"; };\n\t\tD03766A619EDA60000A782A9 /* RACSubscriberSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriberSpec.m; sourceTree = \"<group>\"; };\n\t\tD03766A719EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACSubscriptingAssignmentTrampolineSpec.m; sourceTree = \"<group>\"; };\n\t\tD03766A819EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTargetQueueSchedulerSpec.m; sourceTree = \"<group>\"; };\n\t\tD03766B019EDA60000A782A9 /* RACTupleSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTupleSpec.m; sourceTree = \"<group>\"; };\n\t\tD03766B119EDA60000A782A9 /* test-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = \"test-data.json\"; sourceTree = \"<group>\"; };\n\t\tD03766B219EDA60000A782A9 /* UIActionSheetRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIActionSheetRACSupportSpec.m; sourceTree = \"<group>\"; };\n\t\tD03766B319EDA60000A782A9 /* UIAlertViewRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIAlertViewRACSupportSpec.m; sourceTree = \"<group>\"; };\n\t\tD03766B419EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIBarButtonItemRACSupportSpec.m; sourceTree = \"<group>\"; };\n\t\tD03766B519EDA60000A782A9 /* UIButtonRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIButtonRACSupportSpec.m; sourceTree = \"<group>\"; };\n\t\tD03766B719EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIImagePickerControllerRACSupportSpec.m; sourceTree = \"<group>\"; };\n\t\tD037672B19EDA75D00A782A9 /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationExtensions.swift; sourceTree = \"<group>\"; };\n\t\tD04725EA19E49ED7006002AA /* ReactiveCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD04725EE19E49ED7006002AA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD04725EF19E49ED7006002AA /* ReactiveCocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReactiveCocoa.h; sourceTree = \"<group>\"; };\n\t\tD04725F519E49ED7006002AA /* ReactiveCocoaTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactiveCocoaTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD04725FB19E49ED7006002AA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD047260C19E49F82006002AA /* ReactiveCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD047261619E49F82006002AA /* ReactiveCocoaTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactiveCocoaTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD047262719E49FE8006002AA /* Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = \"<group>\"; };\n\t\tD047262919E49FE8006002AA /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = \"<group>\"; };\n\t\tD047262A19E49FE8006002AA /* Profile.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Profile.xcconfig; sourceTree = \"<group>\"; };\n\t\tD047262B19E49FE8006002AA /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = \"<group>\"; };\n\t\tD047262C19E49FE8006002AA /* Test.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Test.xcconfig; sourceTree = \"<group>\"; };\n\t\tD047262E19E49FE8006002AA /* Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Application.xcconfig; sourceTree = \"<group>\"; };\n\t\tD047262F19E49FE8006002AA /* Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Framework.xcconfig; sourceTree = \"<group>\"; };\n\t\tD047263019E49FE8006002AA /* StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = StaticLibrary.xcconfig; sourceTree = \"<group>\"; };\n\t\tD047263219E49FE8006002AA /* iOS-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"iOS-Application.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD047263319E49FE8006002AA /* iOS-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"iOS-Base.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD047263419E49FE8006002AA /* iOS-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"iOS-Framework.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD047263519E49FE8006002AA /* iOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"iOS-StaticLibrary.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD047263719E49FE8006002AA /* Mac-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"Mac-Application.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD047263819E49FE8006002AA /* Mac-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"Mac-Base.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD047263919E49FE8006002AA /* Mac-DynamicLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"Mac-DynamicLibrary.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD047263A19E49FE8006002AA /* Mac-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"Mac-Framework.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD047263B19E49FE8006002AA /* Mac-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"Mac-StaticLibrary.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD047263C19E49FE8006002AA /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = \"<group>\"; };\n\t\tD05E662419EDD82000904ACA /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD08C54AF1A69A2AC00AD8286 /* Action.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Action.swift; sourceTree = \"<group>\"; };\n\t\tD08C54B01A69A2AC00AD8286 /* Property.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Property.swift; sourceTree = \"<group>\"; };\n\t\tD08C54B11A69A2AC00AD8286 /* Signal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Signal.swift; sourceTree = \"<group>\"; };\n\t\tD08C54B21A69A2AC00AD8286 /* SignalProducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalProducer.swift; sourceTree = \"<group>\"; };\n\t\tD08C54B51A69A3DB00AD8286 /* Event.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = \"<group>\"; };\n\t\tD0A226071A72E0E900D33B74 /* SignalSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalSpec.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\tD0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalProducerSpec.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\tD0A2260D1A72F16D00D33B74 /* PropertySpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = PropertySpec.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\tD0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ObjectiveCBridgingSpec.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\tD0C312BB19EF2A5800984962 /* Atomic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = \"<group>\"; };\n\t\tD0C312BC19EF2A5800984962 /* Bag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bag.swift; sourceTree = \"<group>\"; };\n\t\tD0C312BE19EF2A5800984962 /* Disposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Disposable.swift; sourceTree = \"<group>\"; };\n\t\tD0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectiveCBridging.swift; sourceTree = \"<group>\"; };\n\t\tD0C312C819EF2A5800984962 /* Scheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scheduler.swift; sourceTree = \"<group>\"; };\n\t\tD0C312EE19EF2A7700984962 /* AtomicSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AtomicSpec.swift; sourceTree = \"<group>\"; };\n\t\tD0C312EF19EF2A7700984962 /* BagSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BagSpec.swift; sourceTree = \"<group>\"; };\n\t\tD0C312F019EF2A7700984962 /* DisposableSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisposableSpec.swift; sourceTree = \"<group>\"; };\n\t\tD0C312F219EF2A7700984962 /* SchedulerSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SchedulerSpec.swift; sourceTree = \"<group>\"; };\n\t\tD0C3131719EF2D9700984962 /* RACTestExampleScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTestExampleScheduler.h; sourceTree = \"<group>\"; };\n\t\tD0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestExampleScheduler.m; sourceTree = \"<group>\"; };\n\t\tD0C3131919EF2D9700984962 /* RACTestObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTestObject.h; sourceTree = \"<group>\"; };\n\t\tD0C3131A19EF2D9700984962 /* RACTestObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestObject.m; sourceTree = \"<group>\"; };\n\t\tD0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestSchedulerSpec.m; sourceTree = \"<group>\"; };\n\t\tD0C3131C19EF2D9700984962 /* RACTestUIButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTestUIButton.h; sourceTree = \"<group>\"; };\n\t\tD0C3131D19EF2D9700984962 /* RACTestUIButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestUIButton.m; sourceTree = \"<group>\"; };\n\t\tD43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACDynamicPropertySuperclass.h; sourceTree = \"<group>\"; };\n\t\tD43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACDynamicPropertySuperclass.m; sourceTree = \"<group>\"; };\n\t\tD8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalProducerLiftingSpec.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n\t\tD8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationExtensionsSpec.swift; sourceTree = \"<group>\"; };\n\t\tD85C65291C0D84C7005A77AD /* Flatten.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Flatten.swift; sourceTree = \"<group>\"; };\n\t\tD871D69E1B3B29A40070F16C /* Optional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Optional.swift; sourceTree = \"<group>\"; };\n\t\tEBCC7DBB1BBF010C00A2AE92 /* Observer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Observer.swift; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t57A4D2071BA13D7A00F7D4B1 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57A4D2081BA13D7A00F7D4B1 /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA9B315501B3940610001CB9C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA9B315C91B3940980001CB9C /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD04725E619E49ED7006002AA /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCDC42E2F1AE7AB8B00965373 /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD04725F219E49ED7006002AA /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCDC42E301AE7AB8B00965373 /* Result.framework in Frameworks */,\n\t\t\t\tD05E662519EDD82000904ACA /* Nimble.framework in Frameworks */,\n\t\t\t\tD037672D19EDA75D00A782A9 /* Quick.framework in Frameworks */,\n\t\t\t\tD04725F619E49ED7006002AA /* ReactiveCocoa.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD047260819E49F82006002AA /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCDC42E311AE7AB8B00965373 /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD047261319E49F82006002AA /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD05E662619EDD83000904ACA /* Nimble.framework in Frameworks */,\n\t\t\t\tD037672F19EDA78B00A782A9 /* Quick.framework in Frameworks */,\n\t\t\t\tD047261719E49F82006002AA /* ReactiveCocoa.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t57A4D2431BA13F9700F7D4B1 /* tvOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */,\n\t\t\t\t57A4D2451BA13F9700F7D4B1 /* tvOS-Base.xcconfig */,\n\t\t\t\t57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */,\n\t\t\t\t57A4D2471BA13F9700F7D4B1 /* tvOS-StaticLibrary.xcconfig */,\n\t\t\t);\n\t\t\tpath = tvOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA97451321B3A935E00F48E55 /* watchOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA97451331B3A935E00F48E55 /* watchOS-Application.xcconfig */,\n\t\t\t\tA97451341B3A935E00F48E55 /* watchOS-Base.xcconfig */,\n\t\t\t\tA97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */,\n\t\t\t\tA97451361B3A935E00F48E55 /* watchOS-StaticLibrary.xcconfig */,\n\t\t\t);\n\t\t\tpath = watchOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD037642919EDA3B600A782A9 /* Objective-C */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD037666519EDA57100A782A9 /* extobjc */,\n\t\t\t\t314304151ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h */,\n\t\t\t\t314304161ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m */,\n\t\t\t\tD037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */,\n\t\t\t\tD037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */,\n\t\t\t\tD037642C19EDA41200A782A9 /* NSControl+RACCommandSupport.h */,\n\t\t\t\tD037642D19EDA41200A782A9 /* NSControl+RACCommandSupport.m */,\n\t\t\t\tD037642E19EDA41200A782A9 /* NSControl+RACTextSignalSupport.h */,\n\t\t\t\tD037642F19EDA41200A782A9 /* NSControl+RACTextSignalSupport.m */,\n\t\t\t\tD037643019EDA41200A782A9 /* NSData+RACSupport.h */,\n\t\t\t\tD037643119EDA41200A782A9 /* NSData+RACSupport.m */,\n\t\t\t\tD037643219EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h */,\n\t\t\t\tD037643319EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m */,\n\t\t\t\tD037643419EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h */,\n\t\t\t\tD037643519EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m */,\n\t\t\t\tD037643619EDA41200A782A9 /* NSFileHandle+RACSupport.h */,\n\t\t\t\tD037643719EDA41200A782A9 /* NSFileHandle+RACSupport.m */,\n\t\t\t\tD037643819EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h */,\n\t\t\t\tD037643919EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m */,\n\t\t\t\tD037643A19EDA41200A782A9 /* NSInvocation+RACTypeParsing.h */,\n\t\t\t\tD037643B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m */,\n\t\t\t\tD037643C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h */,\n\t\t\t\tD037643D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m */,\n\t\t\t\tD037643E19EDA41200A782A9 /* NSObject+RACAppKitBindings.h */,\n\t\t\t\tD037643F19EDA41200A782A9 /* NSObject+RACAppKitBindings.m */,\n\t\t\t\tD037644019EDA41200A782A9 /* NSObject+RACDeallocating.h */,\n\t\t\t\tD037644119EDA41200A782A9 /* NSObject+RACDeallocating.m */,\n\t\t\t\tD037644219EDA41200A782A9 /* NSObject+RACDescription.h */,\n\t\t\t\tD037644319EDA41200A782A9 /* NSObject+RACDescription.m */,\n\t\t\t\tD037644419EDA41200A782A9 /* NSObject+RACKVOWrapper.h */,\n\t\t\t\tD037644519EDA41200A782A9 /* NSObject+RACKVOWrapper.m */,\n\t\t\t\tD037644619EDA41200A782A9 /* NSObject+RACLifting.h */,\n\t\t\t\tD037644719EDA41200A782A9 /* NSObject+RACLifting.m */,\n\t\t\t\tD037644819EDA41200A782A9 /* NSObject+RACPropertySubscribing.h */,\n\t\t\t\tD037644919EDA41200A782A9 /* NSObject+RACPropertySubscribing.m */,\n\t\t\t\tD037644A19EDA41200A782A9 /* NSObject+RACSelectorSignal.h */,\n\t\t\t\tD037644B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m */,\n\t\t\t\tD037644C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h */,\n\t\t\t\tD037644D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m */,\n\t\t\t\tD037644E19EDA41200A782A9 /* NSSet+RACSequenceAdditions.h */,\n\t\t\t\tD037644F19EDA41200A782A9 /* NSSet+RACSequenceAdditions.m */,\n\t\t\t\tD037645019EDA41200A782A9 /* NSString+RACKeyPathUtilities.h */,\n\t\t\t\tD037645119EDA41200A782A9 /* NSString+RACKeyPathUtilities.m */,\n\t\t\t\tD037645219EDA41200A782A9 /* NSString+RACSequenceAdditions.h */,\n\t\t\t\tD037645319EDA41200A782A9 /* NSString+RACSequenceAdditions.m */,\n\t\t\t\tD037645419EDA41200A782A9 /* NSString+RACSupport.h */,\n\t\t\t\tD037645519EDA41200A782A9 /* NSString+RACSupport.m */,\n\t\t\t\tD037645619EDA41200A782A9 /* NSText+RACSignalSupport.h */,\n\t\t\t\tD037645719EDA41200A782A9 /* NSText+RACSignalSupport.m */,\n\t\t\t\tD037645819EDA41200A782A9 /* NSURLConnection+RACSupport.h */,\n\t\t\t\tD037645919EDA41200A782A9 /* NSURLConnection+RACSupport.m */,\n\t\t\t\tD037645A19EDA41200A782A9 /* NSUserDefaults+RACSupport.h */,\n\t\t\t\tD037645B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m */,\n\t\t\t\tD037645C19EDA41200A782A9 /* RACArraySequence.h */,\n\t\t\t\tD037645D19EDA41200A782A9 /* RACArraySequence.m */,\n\t\t\t\tD037646019EDA41200A782A9 /* RACBehaviorSubject.h */,\n\t\t\t\tD037646119EDA41200A782A9 /* RACBehaviorSubject.m */,\n\t\t\t\tD037646219EDA41200A782A9 /* RACBlockTrampoline.h */,\n\t\t\t\tD037646319EDA41200A782A9 /* RACBlockTrampoline.m */,\n\t\t\t\tD037646419EDA41200A782A9 /* RACChannel.h */,\n\t\t\t\tD037646519EDA41200A782A9 /* RACChannel.m */,\n\t\t\t\tD037646619EDA41200A782A9 /* RACCommand.h */,\n\t\t\t\tD037646719EDA41200A782A9 /* RACCommand.m */,\n\t\t\t\tD037646819EDA41200A782A9 /* RACCompoundDisposable.h */,\n\t\t\t\tD037646919EDA41200A782A9 /* RACCompoundDisposable.m */,\n\t\t\t\tD037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */,\n\t\t\t\tD037646B19EDA41200A782A9 /* RACDelegateProxy.h */,\n\t\t\t\tD037646C19EDA41200A782A9 /* RACDelegateProxy.m */,\n\t\t\t\tD037646D19EDA41200A782A9 /* RACDisposable.h */,\n\t\t\t\tD037646E19EDA41200A782A9 /* RACDisposable.m */,\n\t\t\t\tD037646F19EDA41200A782A9 /* RACDynamicSequence.h */,\n\t\t\t\tD037647019EDA41200A782A9 /* RACDynamicSequence.m */,\n\t\t\t\tD037647119EDA41200A782A9 /* RACDynamicSignal.h */,\n\t\t\t\tD037647219EDA41200A782A9 /* RACDynamicSignal.m */,\n\t\t\t\tD037647319EDA41200A782A9 /* RACEagerSequence.h */,\n\t\t\t\tD037647419EDA41200A782A9 /* RACEagerSequence.m */,\n\t\t\t\tD037647519EDA41200A782A9 /* RACEmptySequence.h */,\n\t\t\t\tD037647619EDA41200A782A9 /* RACEmptySequence.m */,\n\t\t\t\tD037647719EDA41200A782A9 /* RACEmptySignal.h */,\n\t\t\t\tD037647819EDA41200A782A9 /* RACEmptySignal.m */,\n\t\t\t\tD037647919EDA41200A782A9 /* RACErrorSignal.h */,\n\t\t\t\tD037647A19EDA41200A782A9 /* RACErrorSignal.m */,\n\t\t\t\tD037647B19EDA41200A782A9 /* RACEvent.h */,\n\t\t\t\tD037647C19EDA41200A782A9 /* RACEvent.m */,\n\t\t\t\tD037647D19EDA41200A782A9 /* RACGroupedSignal.h */,\n\t\t\t\tD037647E19EDA41200A782A9 /* RACGroupedSignal.m */,\n\t\t\t\tD037647F19EDA41200A782A9 /* RACImmediateScheduler.h */,\n\t\t\t\tD037648019EDA41200A782A9 /* RACImmediateScheduler.m */,\n\t\t\t\tD037648119EDA41200A782A9 /* RACIndexSetSequence.h */,\n\t\t\t\tD037648219EDA41200A782A9 /* RACIndexSetSequence.m */,\n\t\t\t\tD037648319EDA41200A782A9 /* RACKVOChannel.h */,\n\t\t\t\tD037648419EDA41200A782A9 /* RACKVOChannel.m */,\n\t\t\t\t7A70657D1A3F88B8001E8354 /* RACKVOProxy.h */,\n\t\t\t\t7A70657E1A3F88B8001E8354 /* RACKVOProxy.m */,\n\t\t\t\tD037648519EDA41200A782A9 /* RACKVOTrampoline.h */,\n\t\t\t\tD037648619EDA41200A782A9 /* RACKVOTrampoline.m */,\n\t\t\t\tD037648719EDA41200A782A9 /* RACMulticastConnection.h */,\n\t\t\t\tD037648819EDA41200A782A9 /* RACMulticastConnection.m */,\n\t\t\t\tD037648919EDA41200A782A9 /* RACMulticastConnection+Private.h */,\n\t\t\t\tD037648A19EDA41200A782A9 /* RACObjCRuntime.h */,\n\t\t\t\tD037648B19EDA41200A782A9 /* RACObjCRuntime.m */,\n\t\t\t\tD037648C19EDA41200A782A9 /* RACPassthroughSubscriber.h */,\n\t\t\t\tD037648D19EDA41200A782A9 /* RACPassthroughSubscriber.m */,\n\t\t\t\tD037648E19EDA41200A782A9 /* RACQueueScheduler.h */,\n\t\t\t\tD037648F19EDA41200A782A9 /* RACQueueScheduler.m */,\n\t\t\t\tD037649019EDA41200A782A9 /* RACQueueScheduler+Subclass.h */,\n\t\t\t\tD037649119EDA41200A782A9 /* RACReplaySubject.h */,\n\t\t\t\tD037649219EDA41200A782A9 /* RACReplaySubject.m */,\n\t\t\t\tD037649319EDA41200A782A9 /* RACReturnSignal.h */,\n\t\t\t\tD037649419EDA41200A782A9 /* RACReturnSignal.m */,\n\t\t\t\tD037649519EDA41200A782A9 /* RACScheduler.h */,\n\t\t\t\tD037649619EDA41200A782A9 /* RACScheduler.m */,\n\t\t\t\tD037649719EDA41200A782A9 /* RACScheduler+Private.h */,\n\t\t\t\tD037649819EDA41200A782A9 /* RACScheduler+Subclass.h */,\n\t\t\t\tD037649919EDA41200A782A9 /* RACScopedDisposable.h */,\n\t\t\t\tD037649A19EDA41200A782A9 /* RACScopedDisposable.m */,\n\t\t\t\tD037649B19EDA41200A782A9 /* RACSequence.h */,\n\t\t\t\tD037649C19EDA41200A782A9 /* RACSequence.m */,\n\t\t\t\tD037649D19EDA41200A782A9 /* RACSerialDisposable.h */,\n\t\t\t\tD037649E19EDA41200A782A9 /* RACSerialDisposable.m */,\n\t\t\t\tD037649F19EDA41200A782A9 /* RACSignal.h */,\n\t\t\t\tD03764A019EDA41200A782A9 /* RACSignal.m */,\n\t\t\t\tD03764A119EDA41200A782A9 /* RACSignal+Operations.h */,\n\t\t\t\tD03764A219EDA41200A782A9 /* RACSignal+Operations.m */,\n\t\t\t\tD03764A319EDA41200A782A9 /* RACSignalProvider.d */,\n\t\t\t\tD03764A419EDA41200A782A9 /* RACSignalSequence.h */,\n\t\t\t\tD03764A519EDA41200A782A9 /* RACSignalSequence.m */,\n\t\t\t\tD03764A619EDA41200A782A9 /* RACStream.h */,\n\t\t\t\tD03764A719EDA41200A782A9 /* RACStream.m */,\n\t\t\t\tD03764A819EDA41200A782A9 /* RACStream+Private.h */,\n\t\t\t\tD03764A919EDA41200A782A9 /* RACStringSequence.h */,\n\t\t\t\tD03764AA19EDA41200A782A9 /* RACStringSequence.m */,\n\t\t\t\tD03764AB19EDA41200A782A9 /* RACSubject.h */,\n\t\t\t\tD03764AC19EDA41200A782A9 /* RACSubject.m */,\n\t\t\t\tD03764AD19EDA41200A782A9 /* RACSubscriber.h */,\n\t\t\t\tD03764AE19EDA41200A782A9 /* RACSubscriber.m */,\n\t\t\t\tD03764AF19EDA41200A782A9 /* RACSubscriber+Private.h */,\n\t\t\t\tD03764B019EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h */,\n\t\t\t\tD03764B119EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m */,\n\t\t\t\tD03764B219EDA41200A782A9 /* RACSubscriptionScheduler.h */,\n\t\t\t\tD03764B319EDA41200A782A9 /* RACSubscriptionScheduler.m */,\n\t\t\t\tD03764B419EDA41200A782A9 /* RACTargetQueueScheduler.h */,\n\t\t\t\tD03764B519EDA41200A782A9 /* RACTargetQueueScheduler.m */,\n\t\t\t\tD03764B619EDA41200A782A9 /* RACTestScheduler.h */,\n\t\t\t\tD03764B719EDA41200A782A9 /* RACTestScheduler.m */,\n\t\t\t\tD03764B819EDA41200A782A9 /* RACTuple.h */,\n\t\t\t\tD03764B919EDA41200A782A9 /* RACTuple.m */,\n\t\t\t\tD03764BA19EDA41200A782A9 /* RACTupleSequence.h */,\n\t\t\t\tD03764BB19EDA41200A782A9 /* RACTupleSequence.m */,\n\t\t\t\tD03764BC19EDA41200A782A9 /* RACUnarySequence.h */,\n\t\t\t\tD03764BD19EDA41200A782A9 /* RACUnarySequence.m */,\n\t\t\t\tD03764BE19EDA41200A782A9 /* RACUnit.h */,\n\t\t\t\tD03764BF19EDA41200A782A9 /* RACUnit.m */,\n\t\t\t\tD03764C019EDA41200A782A9 /* RACValueTransformer.h */,\n\t\t\t\tD03764C119EDA41200A782A9 /* RACValueTransformer.m */,\n\t\t\t\tD03764C219EDA41200A782A9 /* UIActionSheet+RACSignalSupport.h */,\n\t\t\t\tD03764C319EDA41200A782A9 /* UIActionSheet+RACSignalSupport.m */,\n\t\t\t\tD03764C419EDA41200A782A9 /* UIAlertView+RACSignalSupport.h */,\n\t\t\t\tD03764C519EDA41200A782A9 /* UIAlertView+RACSignalSupport.m */,\n\t\t\t\tD03764C619EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.h */,\n\t\t\t\tD03764C719EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m */,\n\t\t\t\tD03764C819EDA41200A782A9 /* UIButton+RACCommandSupport.h */,\n\t\t\t\tD03764C919EDA41200A782A9 /* UIButton+RACCommandSupport.m */,\n\t\t\t\tD03764CA19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h */,\n\t\t\t\tD03764CB19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m */,\n\t\t\t\tD03764CC19EDA41200A782A9 /* UIControl+RACSignalSupport.h */,\n\t\t\t\tD03764CD19EDA41200A782A9 /* UIControl+RACSignalSupport.m */,\n\t\t\t\tD03764CE19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.h */,\n\t\t\t\tD03764CF19EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m */,\n\t\t\t\tD03764D019EDA41200A782A9 /* UIDatePicker+RACSignalSupport.h */,\n\t\t\t\tD03764D119EDA41200A782A9 /* UIDatePicker+RACSignalSupport.m */,\n\t\t\t\tD03764D219EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h */,\n\t\t\t\tD03764D319EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m */,\n\t\t\t\tD03764D419EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.h */,\n\t\t\t\tD03764D519EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.m */,\n\t\t\t\tD03764D619EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.h */,\n\t\t\t\tD03764D719EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.m */,\n\t\t\t\tD03764D819EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h */,\n\t\t\t\tD03764D919EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m */,\n\t\t\t\tD03764DA19EDA41200A782A9 /* UISlider+RACSignalSupport.h */,\n\t\t\t\tD03764DB19EDA41200A782A9 /* UISlider+RACSignalSupport.m */,\n\t\t\t\tD03764DC19EDA41200A782A9 /* UIStepper+RACSignalSupport.h */,\n\t\t\t\tD03764DD19EDA41200A782A9 /* UIStepper+RACSignalSupport.m */,\n\t\t\t\tD03764DE19EDA41200A782A9 /* UISwitch+RACSignalSupport.h */,\n\t\t\t\tD03764DF19EDA41200A782A9 /* UISwitch+RACSignalSupport.m */,\n\t\t\t\tD03764E019EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h */,\n\t\t\t\tD03764E119EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m */,\n\t\t\t\tD03764E219EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h */,\n\t\t\t\tD03764E319EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m */,\n\t\t\t\tD03764E419EDA41200A782A9 /* UITextField+RACSignalSupport.h */,\n\t\t\t\tD03764E519EDA41200A782A9 /* UITextField+RACSignalSupport.m */,\n\t\t\t\tD03764E619EDA41200A782A9 /* UITextView+RACSignalSupport.h */,\n\t\t\t\tD03764E719EDA41200A782A9 /* UITextView+RACSignalSupport.m */,\n\t\t\t\tD43F279E1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h */,\n\t\t\t\tD43F279F1A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m */,\n\t\t\t);\n\t\t\tpath = \"Objective-C\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD037666519EDA57100A782A9 /* extobjc */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD037666619EDA57100A782A9 /* EXTKeyPathCoding.h */,\n\t\t\t\tD037666719EDA57100A782A9 /* EXTRuntimeExtensions.h */,\n\t\t\t\tD037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */,\n\t\t\t\tD037666919EDA57100A782A9 /* EXTScope.h */,\n\t\t\t\tD037666A19EDA57100A782A9 /* metamacros.h */,\n\t\t\t);\n\t\t\tpath = extobjc;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD037667519EDA5D900A782A9 /* Objective-C */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD037667619EDA60000A782A9 /* NSControllerRACSupportSpec.m */,\n\t\t\t\tD037667819EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m */,\n\t\t\t\tD037667919EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m */,\n\t\t\t\tD037667A19EDA60000A782A9 /* NSObjectRACAppKitBindingsSpec.m */,\n\t\t\t\tD037667B19EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m */,\n\t\t\t\tD037667C19EDA60000A782A9 /* NSObjectRACLiftingSpec.m */,\n\t\t\t\tD037667D19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.h */,\n\t\t\t\tD037667E19EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m */,\n\t\t\t\tD037667F19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m */,\n\t\t\t\tD037668019EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m */,\n\t\t\t\tD037668119EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m */,\n\t\t\t\tD037668319EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m */,\n\t\t\t\tD037668419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m */,\n\t\t\t\tD037668619EDA60000A782A9 /* RACBlockTrampolineSpec.m */,\n\t\t\t\tD037668719EDA60000A782A9 /* RACChannelExamples.h */,\n\t\t\t\tD037668819EDA60000A782A9 /* RACChannelExamples.m */,\n\t\t\t\tD037668919EDA60000A782A9 /* RACChannelSpec.m */,\n\t\t\t\tD037668A19EDA60000A782A9 /* RACCommandSpec.m */,\n\t\t\t\tD037668B19EDA60000A782A9 /* RACCompoundDisposableSpec.m */,\n\t\t\t\tD037668C19EDA60000A782A9 /* RACControlCommandExamples.h */,\n\t\t\t\tD037668D19EDA60000A782A9 /* RACControlCommandExamples.m */,\n\t\t\t\tD037668E19EDA60000A782A9 /* RACDelegateProxySpec.m */,\n\t\t\t\tD037668F19EDA60000A782A9 /* RACDisposableSpec.m */,\n\t\t\t\tD037669019EDA60000A782A9 /* RACEventSpec.m */,\n\t\t\t\tD037669119EDA60000A782A9 /* RACKVOChannelSpec.m */,\n\t\t\t\t7A7065831A3F8967001E8354 /* RACKVOProxySpec.m */,\n\t\t\t\tD037669219EDA60000A782A9 /* RACKVOWrapperSpec.m */,\n\t\t\t\tD037669319EDA60000A782A9 /* RACMulticastConnectionSpec.m */,\n\t\t\t\tD037669419EDA60000A782A9 /* RACPropertySignalExamples.h */,\n\t\t\t\tD037669519EDA60000A782A9 /* RACPropertySignalExamples.m */,\n\t\t\t\tD037669619EDA60000A782A9 /* RACSchedulerSpec.m */,\n\t\t\t\tD037669719EDA60000A782A9 /* RACSequenceAdditionsSpec.m */,\n\t\t\t\tD037669819EDA60000A782A9 /* RACSequenceExamples.h */,\n\t\t\t\tD037669919EDA60000A782A9 /* RACSequenceExamples.m */,\n\t\t\t\tD037669A19EDA60000A782A9 /* RACSequenceSpec.m */,\n\t\t\t\tD037669B19EDA60000A782A9 /* RACSerialDisposableSpec.m */,\n\t\t\t\tD037669C19EDA60000A782A9 /* RACSignalSpec.m */,\n\t\t\t\tD037669F19EDA60000A782A9 /* RACStreamExamples.h */,\n\t\t\t\tD03766A019EDA60000A782A9 /* RACStreamExamples.m */,\n\t\t\t\tD03766A119EDA60000A782A9 /* RACSubclassObject.h */,\n\t\t\t\tD03766A219EDA60000A782A9 /* RACSubclassObject.m */,\n\t\t\t\tD03766A319EDA60000A782A9 /* RACSubjectSpec.m */,\n\t\t\t\tD03766A419EDA60000A782A9 /* RACSubscriberExamples.h */,\n\t\t\t\tD03766A519EDA60000A782A9 /* RACSubscriberExamples.m */,\n\t\t\t\tD03766A619EDA60000A782A9 /* RACSubscriberSpec.m */,\n\t\t\t\tD03766A719EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m */,\n\t\t\t\tD03766A819EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m */,\n\t\t\t\tD03766B019EDA60000A782A9 /* RACTupleSpec.m */,\n\t\t\t\tD03766B219EDA60000A782A9 /* UIActionSheetRACSupportSpec.m */,\n\t\t\t\tD03766B319EDA60000A782A9 /* UIAlertViewRACSupportSpec.m */,\n\t\t\t\tD03766B419EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m */,\n\t\t\t\tD03766B519EDA60000A782A9 /* UIButtonRACSupportSpec.m */,\n\t\t\t\tD03766B719EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m */,\n\t\t\t\tD0C3131719EF2D9700984962 /* RACTestExampleScheduler.h */,\n\t\t\t\tD0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */,\n\t\t\t\tD0C3131919EF2D9700984962 /* RACTestObject.h */,\n\t\t\t\tD0C3131A19EF2D9700984962 /* RACTestObject.m */,\n\t\t\t\tD0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */,\n\t\t\t\tD0C3131C19EF2D9700984962 /* RACTestUIButton.h */,\n\t\t\t\tD0C3131D19EF2D9700984962 /* RACTestUIButton.m */,\n\t\t\t);\n\t\t\tpath = \"Objective-C\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD03B4A3919F4C25F009E02AC /* Signals */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD08C54AF1A69A2AC00AD8286 /* Action.swift */,\n\t\t\t\tD85C65291C0D84C7005A77AD /* Flatten.swift */,\n\t\t\t\tD08C54B01A69A2AC00AD8286 /* Property.swift */,\n\t\t\t\tD08C54B11A69A2AC00AD8286 /* Signal.swift */,\n\t\t\t\tD08C54B21A69A2AC00AD8286 /* SignalProducer.swift */,\n\t\t\t);\n\t\t\tname = Signals;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD03B4A3A19F4C26D009E02AC /* Internal Utilities */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD00004081A46864E000E7D41 /* TupleExtensions.swift */,\n\t\t\t);\n\t\t\tname = \"Internal Utilities\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD03B4A3B19F4C281009E02AC /* Extensions */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */,\n\t\t\t);\n\t\t\tname = Extensions;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD04725E019E49ED7006002AA = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD04725EC19E49ED7006002AA /* ReactiveCocoa */,\n\t\t\t\tD04725F919E49ED7006002AA /* ReactiveCocoaTests */,\n\t\t\t\tD047262519E49FE8006002AA /* Configuration */,\n\t\t\t\tD04725EB19E49ED7006002AA /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t\tusesTabs = 1;\n\t\t};\n\t\tD04725EB19E49ED7006002AA /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD04725EA19E49ED7006002AA /* ReactiveCocoa.framework */,\n\t\t\t\tD04725F519E49ED7006002AA /* ReactiveCocoaTests.xctest */,\n\t\t\t\tD047260C19E49F82006002AA /* ReactiveCocoa.framework */,\n\t\t\t\tD047261619E49F82006002AA /* ReactiveCocoaTests.xctest */,\n\t\t\t\tA9B315541B3940610001CB9C /* ReactiveCocoa.framework */,\n\t\t\t\t57A4D2411BA13D7A00F7D4B1 /* ReactiveCocoa.framework */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD04725EC19E49ED7006002AA /* ReactiveCocoa */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD04725EF19E49ED7006002AA /* ReactiveCocoa.h */,\n\t\t\t\tD0C312B919EF2A3000984962 /* Swift */,\n\t\t\t\tD037642919EDA3B600A782A9 /* Objective-C */,\n\t\t\t\tD04725ED19E49ED7006002AA /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = ReactiveCocoa;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD04725ED19E49ED7006002AA /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCD183E811AED1E0E00848F5D /* Box.framework */,\n\t\t\t\tCDC42E2E1AE7AB8B00965373 /* Result.framework */,\n\t\t\t\tD04725EE19E49ED7006002AA /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD04725F919E49ED7006002AA /* ReactiveCocoaTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD0C312ED19EF2A6F00984962 /* Swift */,\n\t\t\t\tD037667519EDA5D900A782A9 /* Objective-C */,\n\t\t\t\tD04725FA19E49ED7006002AA /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = ReactiveCocoaTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD04725FA19E49ED7006002AA /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD05E662419EDD82000904ACA /* Nimble.framework */,\n\t\t\t\tD037672B19EDA75D00A782A9 /* Quick.framework */,\n\t\t\t\tD03766B119EDA60000A782A9 /* test-data.json */,\n\t\t\t\tBFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */,\n\t\t\t\tD04725FB19E49ED7006002AA /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD047262519E49FE8006002AA /* Configuration */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD047262619E49FE8006002AA /* Base */,\n\t\t\t\tD047263119E49FE8006002AA /* iOS */,\n\t\t\t\tD047263619E49FE8006002AA /* Mac OS X */,\n\t\t\t\tA97451321B3A935E00F48E55 /* watchOS */,\n\t\t\t\t57A4D2431BA13F9700F7D4B1 /* tvOS */,\n\t\t\t\tD047263C19E49FE8006002AA /* README.md */,\n\t\t\t);\n\t\t\tname = Configuration;\n\t\t\tpath = Carthage/Checkouts/xcconfigs;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD047262619E49FE8006002AA /* Base */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD047262719E49FE8006002AA /* Common.xcconfig */,\n\t\t\t\tD047262819E49FE8006002AA /* Configurations */,\n\t\t\t\tD047262D19E49FE8006002AA /* Targets */,\n\t\t\t);\n\t\t\tpath = Base;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD047262819E49FE8006002AA /* Configurations */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD047262919E49FE8006002AA /* Debug.xcconfig */,\n\t\t\t\tD047262A19E49FE8006002AA /* Profile.xcconfig */,\n\t\t\t\tD047262B19E49FE8006002AA /* Release.xcconfig */,\n\t\t\t\tD047262C19E49FE8006002AA /* Test.xcconfig */,\n\t\t\t);\n\t\t\tpath = Configurations;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD047262D19E49FE8006002AA /* Targets */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD047262E19E49FE8006002AA /* Application.xcconfig */,\n\t\t\t\tD047262F19E49FE8006002AA /* Framework.xcconfig */,\n\t\t\t\tD047263019E49FE8006002AA /* StaticLibrary.xcconfig */,\n\t\t\t);\n\t\t\tpath = Targets;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD047263119E49FE8006002AA /* iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD047263219E49FE8006002AA /* iOS-Application.xcconfig */,\n\t\t\t\tD047263319E49FE8006002AA /* iOS-Base.xcconfig */,\n\t\t\t\tD047263419E49FE8006002AA /* iOS-Framework.xcconfig */,\n\t\t\t\tD047263519E49FE8006002AA /* iOS-StaticLibrary.xcconfig */,\n\t\t\t);\n\t\t\tpath = iOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD047263619E49FE8006002AA /* Mac OS X */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD047263719E49FE8006002AA /* Mac-Application.xcconfig */,\n\t\t\t\tD047263819E49FE8006002AA /* Mac-Base.xcconfig */,\n\t\t\t\tD047263919E49FE8006002AA /* Mac-DynamicLibrary.xcconfig */,\n\t\t\t\tD047263A19E49FE8006002AA /* Mac-Framework.xcconfig */,\n\t\t\t\tD047263B19E49FE8006002AA /* Mac-StaticLibrary.xcconfig */,\n\t\t\t);\n\t\t\tpath = \"Mac OS X\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD0C312B919EF2A3000984962 /* Swift */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD0C312BB19EF2A5800984962 /* Atomic.swift */,\n\t\t\t\tD0C312BC19EF2A5800984962 /* Bag.swift */,\n\t\t\t\tD0C312BE19EF2A5800984962 /* Disposable.swift */,\n\t\t\t\tD08C54B51A69A3DB00AD8286 /* Event.swift */,\n\t\t\t\tD0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */,\n\t\t\t\tEBCC7DBB1BBF010C00A2AE92 /* Observer.swift */,\n\t\t\t\tD871D69E1B3B29A40070F16C /* Optional.swift */,\n\t\t\t\tD0C312C819EF2A5800984962 /* Scheduler.swift */,\n\t\t\t\tD03B4A3919F4C25F009E02AC /* Signals */,\n\t\t\t\tD03B4A3A19F4C26D009E02AC /* Internal Utilities */,\n\t\t\t\tD03B4A3B19F4C281009E02AC /* Extensions */,\n\t\t\t);\n\t\t\tpath = Swift;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD0C312ED19EF2A6F00984962 /* Swift */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD021671C1A6CD50500987861 /* ActionSpec.swift */,\n\t\t\t\tD0C312EE19EF2A7700984962 /* AtomicSpec.swift */,\n\t\t\t\tD0C312EF19EF2A7700984962 /* BagSpec.swift */,\n\t\t\t\tD0C312F019EF2A7700984962 /* DisposableSpec.swift */,\n\t\t\t\tD8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */,\n\t\t\t\tD0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */,\n\t\t\t\tD0A2260D1A72F16D00D33B74 /* PropertySpec.swift */,\n\t\t\t\tD0C312F219EF2A7700984962 /* SchedulerSpec.swift */,\n\t\t\t\t02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */,\n\t\t\t\tD0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */,\n\t\t\t\tD8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */,\n\t\t\t\tD0A226071A72E0E900D33B74 /* SignalSpec.swift */,\n\t\t\t\tCA6F284F1C52626B001879D2 /* FlattenSpec.swift */,\n\t\t\t\tB696FB801A7640C00075236D /* TestError.swift */,\n\t\t\t);\n\t\t\tpath = Swift;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t57A4D2091BA13D7A00F7D4B1 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57A4D20A1BA13D7A00F7D4B1 /* ReactiveCocoa.h in Headers */,\n\t\t\t\t57A4D20B1BA13D7A00F7D4B1 /* EXTKeyPathCoding.h in Headers */,\n\t\t\t\tA1046B7D1BFF5664004D8045 /* EXTRuntimeExtensions.h in Headers */,\n\t\t\t\t57A4D20C1BA13D7A00F7D4B1 /* EXTScope.h in Headers */,\n\t\t\t\t57A4D20D1BA13D7A00F7D4B1 /* metamacros.h in Headers */,\n\t\t\t\t57A4D20E1BA13D7A00F7D4B1 /* NSArray+RACSequenceAdditions.h in Headers */,\n\t\t\t\t57A4D20F1BA13D7A00F7D4B1 /* NSData+RACSupport.h in Headers */,\n\t\t\t\t57A4D2101BA13D7A00F7D4B1 /* NSDictionary+RACSequenceAdditions.h in Headers */,\n\t\t\t\t57A4D2111BA13D7A00F7D4B1 /* NSEnumerator+RACSequenceAdditions.h in Headers */,\n\t\t\t\t57A4D2121BA13D7A00F7D4B1 /* NSFileHandle+RACSupport.h in Headers */,\n\t\t\t\t57A4D2131BA13D7A00F7D4B1 /* NSIndexSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\t57A4D2141BA13D7A00F7D4B1 /* NSNotificationCenter+RACSupport.h in Headers */,\n\t\t\t\t57A4D2151BA13D7A00F7D4B1 /* NSObject+RACDeallocating.h in Headers */,\n\t\t\t\t57A4D2161BA13D7A00F7D4B1 /* NSObject+RACLifting.h in Headers */,\n\t\t\t\t57A4D2171BA13D7A00F7D4B1 /* NSObject+RACPropertySubscribing.h in Headers */,\n\t\t\t\t57DC89A01C5066D400E367B7 /* UIGestureRecognizer+RACSignalSupport.h in Headers */,\n\t\t\t\t57A4D2181BA13D7A00F7D4B1 /* NSObject+RACSelectorSignal.h in Headers */,\n\t\t\t\t57A4D2191BA13D7A00F7D4B1 /* NSOrderedSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\t57A4D21A1BA13D7A00F7D4B1 /* NSSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\t57A4D21B1BA13D7A00F7D4B1 /* NSString+RACSequenceAdditions.h in Headers */,\n\t\t\t\t57A4D21C1BA13D7A00F7D4B1 /* NSString+RACSupport.h in Headers */,\n\t\t\t\t57A4D21E1BA13D7A00F7D4B1 /* NSUserDefaults+RACSupport.h in Headers */,\n\t\t\t\t57A4D21F1BA13D7A00F7D4B1 /* RACBehaviorSubject.h in Headers */,\n\t\t\t\t57A4D2201BA13D7A00F7D4B1 /* RACChannel.h in Headers */,\n\t\t\t\t57A4D2211BA13D7A00F7D4B1 /* RACCommand.h in Headers */,\n\t\t\t\t57A4D2221BA13D7A00F7D4B1 /* RACCompoundDisposable.h in Headers */,\n\t\t\t\t57A4D2231BA13D7A00F7D4B1 /* RACDisposable.h in Headers */,\n\t\t\t\t57A4D2241BA13D7A00F7D4B1 /* RACEvent.h in Headers */,\n\t\t\t\t57A4D2251BA13D7A00F7D4B1 /* RACGroupedSignal.h in Headers */,\n\t\t\t\t57A4D2261BA13D7A00F7D4B1 /* RACKVOChannel.h in Headers */,\n\t\t\t\t57A4D2271BA13D7A00F7D4B1 /* RACMulticastConnection.h in Headers */,\n\t\t\t\t57A4D2281BA13D7A00F7D4B1 /* RACQueueScheduler.h in Headers */,\n\t\t\t\t57DC89A51C50675700E367B7 /* UITextField+RACSignalSupport.h in Headers */,\n\t\t\t\t57A4D2291BA13D7A00F7D4B1 /* RACQueueScheduler+Subclass.h in Headers */,\n\t\t\t\t57A4D22A1BA13D7A00F7D4B1 /* RACReplaySubject.h in Headers */,\n\t\t\t\t57DC89A21C50673C00E367B7 /* UISegmentedControl+RACSignalSupport.h in Headers */,\n\t\t\t\t57A4D22B1BA13D7A00F7D4B1 /* RACScheduler.h in Headers */,\n\t\t\t\t57DC89A41C50674D00E367B7 /* UITableViewHeaderFooterView+RACSignalSupport.h in Headers */,\n\t\t\t\t57A4D22C1BA13D7A00F7D4B1 /* RACScheduler+Subclass.h in Headers */,\n\t\t\t\t57DC89A11C50672B00E367B7 /* UIControl+RACSignalSupport.h in Headers */,\n\t\t\t\t57A4D22D1BA13D7A00F7D4B1 /* RACScopedDisposable.h in Headers */,\n\t\t\t\t57DC89A31C50674300E367B7 /* UITableViewCell+RACSignalSupport.h in Headers */,\n\t\t\t\t57A4D22E1BA13D7A00F7D4B1 /* RACSequence.h in Headers */,\n\t\t\t\t57A4D22F1BA13D7A00F7D4B1 /* RACSerialDisposable.h in Headers */,\n\t\t\t\t57A4D2301BA13D7A00F7D4B1 /* RACSignal.h in Headers */,\n\t\t\t\t57DC89A81C50679E00E367B7 /* UICollectionReusableView+RACSignalSupport.h in Headers */,\n\t\t\t\t57DC89A71C50679700E367B7 /* UIButton+RACCommandSupport.h in Headers */,\n\t\t\t\t57A4D2311BA13D7A00F7D4B1 /* RACSignal+Operations.h in Headers */,\n\t\t\t\t57A4D2321BA13D7A00F7D4B1 /* RACStream.h in Headers */,\n\t\t\t\t57A4D2331BA13D7A00F7D4B1 /* RACSubject.h in Headers */,\n\t\t\t\t57A4D2341BA13D7A00F7D4B1 /* RACSubscriber.h in Headers */,\n\t\t\t\t57A4D2351BA13D7A00F7D4B1 /* RACSubscriptingAssignmentTrampoline.h in Headers */,\n\t\t\t\t57A4D2361BA13D7A00F7D4B1 /* RACTargetQueueScheduler.h in Headers */,\n\t\t\t\t57A4D2371BA13D7A00F7D4B1 /* RACTestScheduler.h in Headers */,\n\t\t\t\t57A4D2381BA13D7A00F7D4B1 /* RACTuple.h in Headers */,\n\t\t\t\t57DC89A61C50675F00E367B7 /* UITextView+RACSignalSupport.h in Headers */,\n\t\t\t\t57A4D2391BA13D7A00F7D4B1 /* RACUnit.h in Headers */,\n\t\t\t\t57A4D23A1BA13D7A00F7D4B1 /* RACDynamicPropertySuperclass.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA9B315511B3940610001CB9C /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA9B315CA1B3940AB0001CB9C /* ReactiveCocoa.h in Headers */,\n\t\t\t\tA9B315CB1B3940AB0001CB9C /* EXTKeyPathCoding.h in Headers */,\n\t\t\t\tA1046B7C1BFF5662004D8045 /* EXTRuntimeExtensions.h in Headers */,\n\t\t\t\tA9B315CD1B3940AB0001CB9C /* EXTScope.h in Headers */,\n\t\t\t\tA9B315CE1B3940AB0001CB9C /* metamacros.h in Headers */,\n\t\t\t\tA9B315D01B3940AB0001CB9C /* NSArray+RACSequenceAdditions.h in Headers */,\n\t\t\t\tA9B315D31B3940AB0001CB9C /* NSData+RACSupport.h in Headers */,\n\t\t\t\tA9B315D41B3940AB0001CB9C /* NSDictionary+RACSequenceAdditions.h in Headers */,\n\t\t\t\tA9B315D51B3940AB0001CB9C /* NSEnumerator+RACSequenceAdditions.h in Headers */,\n\t\t\t\tA9B315D61B3940AB0001CB9C /* NSFileHandle+RACSupport.h in Headers */,\n\t\t\t\tA9B315D71B3940AB0001CB9C /* NSIndexSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\tA9B315D91B3940AB0001CB9C /* NSNotificationCenter+RACSupport.h in Headers */,\n\t\t\t\tA9B315DB1B3940AB0001CB9C /* NSObject+RACDeallocating.h in Headers */,\n\t\t\t\tA9B315DE1B3940AB0001CB9C /* NSObject+RACLifting.h in Headers */,\n\t\t\t\tA9B315DF1B3940AB0001CB9C /* NSObject+RACPropertySubscribing.h in Headers */,\n\t\t\t\tA9B315E01B3940AB0001CB9C /* NSObject+RACSelectorSignal.h in Headers */,\n\t\t\t\tA9B315E11B3940AB0001CB9C /* NSOrderedSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\tA9B315E21B3940AB0001CB9C /* NSSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\tA9B315E41B3940AB0001CB9C /* NSString+RACSequenceAdditions.h in Headers */,\n\t\t\t\tA9B315E51B3940AB0001CB9C /* NSString+RACSupport.h in Headers */,\n\t\t\t\tA9B315E81B3940AB0001CB9C /* NSUserDefaults+RACSupport.h in Headers */,\n\t\t\t\tA9B315EA1B3940AB0001CB9C /* RACBehaviorSubject.h in Headers */,\n\t\t\t\tA9B315EC1B3940AB0001CB9C /* RACChannel.h in Headers */,\n\t\t\t\tA9B315ED1B3940AC0001CB9C /* RACCommand.h in Headers */,\n\t\t\t\tA9B315EE1B3940AC0001CB9C /* RACCompoundDisposable.h in Headers */,\n\t\t\t\tA9B315F01B3940AC0001CB9C /* RACDisposable.h in Headers */,\n\t\t\t\tA9B315F71B3940AC0001CB9C /* RACEvent.h in Headers */,\n\t\t\t\tA9B315F81B3940AC0001CB9C /* RACGroupedSignal.h in Headers */,\n\t\t\t\tA9B315FB1B3940AC0001CB9C /* RACKVOChannel.h in Headers */,\n\t\t\t\tA9B315FE1B3940AC0001CB9C /* RACMulticastConnection.h in Headers */,\n\t\t\t\tA9B316021B3940AD0001CB9C /* RACQueueScheduler.h in Headers */,\n\t\t\t\tA9B316031B3940AD0001CB9C /* RACQueueScheduler+Subclass.h in Headers */,\n\t\t\t\tA9B316041B3940AD0001CB9C /* RACReplaySubject.h in Headers */,\n\t\t\t\tA9B316061B3940AD0001CB9C /* RACScheduler.h in Headers */,\n\t\t\t\tA9B316081B3940AD0001CB9C /* RACScheduler+Subclass.h in Headers */,\n\t\t\t\tA9B316091B3940AD0001CB9C /* RACScopedDisposable.h in Headers */,\n\t\t\t\tA9B3160A1B3940AD0001CB9C /* RACSequence.h in Headers */,\n\t\t\t\tA9B3160B1B3940AD0001CB9C /* RACSerialDisposable.h in Headers */,\n\t\t\t\tA9B3160C1B3940AE0001CB9C /* RACSignal.h in Headers */,\n\t\t\t\tA9B3160D1B3940AE0001CB9C /* RACSignal+Operations.h in Headers */,\n\t\t\t\tA9B3160F1B3940AE0001CB9C /* RACStream.h in Headers */,\n\t\t\t\tA9B316121B3940AE0001CB9C /* RACSubject.h in Headers */,\n\t\t\t\tA9B316131B3940AE0001CB9C /* RACSubscriber.h in Headers */,\n\t\t\t\tA9B316151B3940AE0001CB9C /* RACSubscriptingAssignmentTrampoline.h in Headers */,\n\t\t\t\tA9B316171B3940AF0001CB9C /* RACTargetQueueScheduler.h in Headers */,\n\t\t\t\tA9B316181B3940AF0001CB9C /* RACTestScheduler.h in Headers */,\n\t\t\t\tA9B316191B3940AF0001CB9C /* RACTuple.h in Headers */,\n\t\t\t\tA9B3161C1B3940AF0001CB9C /* RACUnit.h in Headers */,\n\t\t\t\tA9B316311B3940B20001CB9C /* RACDynamicPropertySuperclass.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD04725E719E49ED7006002AA /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD04725F019E49ED7006002AA /* ReactiveCocoa.h in Headers */,\n\t\t\t\tD037652019EDA41200A782A9 /* NSObject+RACLifting.h in Headers */,\n\t\t\t\tD03764EC19EDA41200A782A9 /* NSControl+RACCommandSupport.h in Headers */,\n\t\t\t\tD037655C19EDA41200A782A9 /* RACChannel.h in Headers */,\n\t\t\t\tD03765EE19EDA41200A782A9 /* RACSubscriber.h in Headers */,\n\t\t\t\tD03765D219EDA41200A782A9 /* RACSignal.h in Headers */,\n\t\t\t\tD037650419EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD43F27A01A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h in Headers */,\n\t\t\t\tD037659A19EDA41200A782A9 /* RACKVOChannel.h in Headers */,\n\t\t\t\tD037651419EDA41200A782A9 /* NSObject+RACDeallocating.h in Headers */,\n\t\t\t\tD037650C19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h in Headers */,\n\t\t\t\tD037667319EDA57100A782A9 /* metamacros.h in Headers */,\n\t\t\t\tD037666B19EDA57100A782A9 /* EXTKeyPathCoding.h in Headers */,\n\t\t\t\tD03765F419EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h in Headers */,\n\t\t\t\tD03765C419EDA41200A782A9 /* RACScheduler+Subclass.h in Headers */,\n\t\t\t\tD037656E19EDA41200A782A9 /* RACDisposable.h in Headers */,\n\t\t\t\tD03765B019EDA41200A782A9 /* RACQueueScheduler.h in Headers */,\n\t\t\t\tD037652419EDA41200A782A9 /* NSObject+RACPropertySubscribing.h in Headers */,\n\t\t\t\tD037650019EDA41200A782A9 /* NSFileHandle+RACSupport.h in Headers */,\n\t\t\t\tD037653019EDA41200A782A9 /* NSSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD037654019EDA41200A782A9 /* NSText+RACSignalSupport.h in Headers */,\n\t\t\t\tD03765E019EDA41200A782A9 /* RACStream.h in Headers */,\n\t\t\t\tD03765FC19EDA41200A782A9 /* RACTargetQueueScheduler.h in Headers */,\n\t\t\t\tD03765B419EDA41200A782A9 /* RACQueueScheduler+Subclass.h in Headers */,\n\t\t\t\tD037661019EDA41200A782A9 /* RACUnit.h in Headers */,\n\t\t\t\tD037656419EDA41200A782A9 /* RACCompoundDisposable.h in Headers */,\n\t\t\t\tD03764F419EDA41200A782A9 /* NSData+RACSupport.h in Headers */,\n\t\t\t\tD03764FC19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD03765CA19EDA41200A782A9 /* RACSequence.h in Headers */,\n\t\t\t\tD037672719EDA63400A782A9 /* RACBehaviorSubject.h in Headers */,\n\t\t\t\tD037653C19EDA41200A782A9 /* NSString+RACSupport.h in Headers */,\n\t\t\t\tD03765CE19EDA41200A782A9 /* RACSerialDisposable.h in Headers */,\n\t\t\t\tD03765D619EDA41200A782A9 /* RACSignal+Operations.h in Headers */,\n\t\t\t\tD03765B619EDA41200A782A9 /* RACReplaySubject.h in Headers */,\n\t\t\t\tD03765A219EDA41200A782A9 /* RACMulticastConnection.h in Headers */,\n\t\t\t\tD037658E19EDA41200A782A9 /* RACGroupedSignal.h in Headers */,\n\t\t\t\tD037654819EDA41200A782A9 /* NSUserDefaults+RACSupport.h in Headers */,\n\t\t\t\tD03765BE19EDA41200A782A9 /* RACScheduler.h in Headers */,\n\t\t\t\tD037656019EDA41200A782A9 /* RACCommand.h in Headers */,\n\t\t\t\tD037660419EDA41200A782A9 /* RACTuple.h in Headers */,\n\t\t\t\tD03765C619EDA41200A782A9 /* RACScopedDisposable.h in Headers */,\n\t\t\t\tD037660019EDA41200A782A9 /* RACTestScheduler.h in Headers */,\n\t\t\t\tD037652C19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD03764F019EDA41200A782A9 /* NSControl+RACTextSignalSupport.h in Headers */,\n\t\t\t\tD03765EA19EDA41200A782A9 /* RACSubject.h in Headers */,\n\t\t\t\tA1046B7A1BFF5661004D8045 /* EXTRuntimeExtensions.h in Headers */,\n\t\t\t\tD037652819EDA41200A782A9 /* NSObject+RACSelectorSignal.h in Headers */,\n\t\t\t\tD037654419EDA41200A782A9 /* NSURLConnection+RACSupport.h in Headers */,\n\t\t\t\tD03764E819EDA41200A782A9 /* NSArray+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD037651019EDA41200A782A9 /* NSObject+RACAppKitBindings.h in Headers */,\n\t\t\t\tD037658A19EDA41200A782A9 /* RACEvent.h in Headers */,\n\t\t\t\tD037667119EDA57100A782A9 /* EXTScope.h in Headers */,\n\t\t\t\tD037653819EDA41200A782A9 /* NSString+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD03764F819EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD047260919E49F82006002AA /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD037664519EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.h in Headers */,\n\t\t\t\tD037666419EDA43C00A782A9 /* ReactiveCocoa.h in Headers */,\n\t\t\t\tD037652519EDA41200A782A9 /* NSObject+RACPropertySubscribing.h in Headers */,\n\t\t\t\tD03765B119EDA41200A782A9 /* RACQueueScheduler.h in Headers */,\n\t\t\t\tD037662519EDA41200A782A9 /* UIButton+RACCommandSupport.h in Headers */,\n\t\t\t\tD037672819EDA63500A782A9 /* RACBehaviorSubject.h in Headers */,\n\t\t\t\tD037660119EDA41200A782A9 /* RACTestScheduler.h in Headers */,\n\t\t\t\tD03765A319EDA41200A782A9 /* RACMulticastConnection.h in Headers */,\n\t\t\t\tD03765B719EDA41200A782A9 /* RACReplaySubject.h in Headers */,\n\t\t\t\tD037663D19EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.h in Headers */,\n\t\t\t\tD037656F19EDA41200A782A9 /* RACDisposable.h in Headers */,\n\t\t\t\t314304171ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h in Headers */,\n\t\t\t\tD037654519EDA41200A782A9 /* NSURLConnection+RACSupport.h in Headers */,\n\t\t\t\tD037661D19EDA41200A782A9 /* UIAlertView+RACSignalSupport.h in Headers */,\n\t\t\t\tD037650D19EDA41200A782A9 /* NSNotificationCenter+RACSupport.h in Headers */,\n\t\t\t\tD037650119EDA41200A782A9 /* NSFileHandle+RACSupport.h in Headers */,\n\t\t\t\tD037666119EDA41200A782A9 /* UITextView+RACSignalSupport.h in Headers */,\n\t\t\t\tD037659B19EDA41200A782A9 /* RACKVOChannel.h in Headers */,\n\t\t\t\tD037652D19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD03764F919EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD037667219EDA57100A782A9 /* EXTScope.h in Headers */,\n\t\t\t\tD037663519EDA41200A782A9 /* UIDatePicker+RACSignalSupport.h in Headers */,\n\t\t\t\tD037667419EDA57100A782A9 /* metamacros.h in Headers */,\n\t\t\t\tD03764FD19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD037652119EDA41200A782A9 /* NSObject+RACLifting.h in Headers */,\n\t\t\t\tD037665919EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.h in Headers */,\n\t\t\t\tD037656519EDA41200A782A9 /* RACCompoundDisposable.h in Headers */,\n\t\t\t\tD037653D19EDA41200A782A9 /* NSString+RACSupport.h in Headers */,\n\t\t\t\tD037662919EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.h in Headers */,\n\t\t\t\tD037660519EDA41200A782A9 /* RACTuple.h in Headers */,\n\t\t\t\tD037665519EDA41200A782A9 /* UITableViewCell+RACSignalSupport.h in Headers */,\n\t\t\t\tD03764F519EDA41200A782A9 /* NSData+RACSupport.h in Headers */,\n\t\t\t\tD037653919EDA41200A782A9 /* NSString+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD037651519EDA41200A782A9 /* NSObject+RACDeallocating.h in Headers */,\n\t\t\t\tD037658F19EDA41200A782A9 /* RACGroupedSignal.h in Headers */,\n\t\t\t\tD03765C519EDA41200A782A9 /* RACScheduler+Subclass.h in Headers */,\n\t\t\t\tD03765E119EDA41200A782A9 /* RACStream.h in Headers */,\n\t\t\t\tD03765D719EDA41200A782A9 /* RACSignal+Operations.h in Headers */,\n\t\t\t\tD037665D19EDA41200A782A9 /* UITextField+RACSignalSupport.h in Headers */,\n\t\t\t\tD037664919EDA41200A782A9 /* UISlider+RACSignalSupport.h in Headers */,\n\t\t\t\tD03765BF19EDA41200A782A9 /* RACScheduler.h in Headers */,\n\t\t\t\tD43F27A11A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.h in Headers */,\n\t\t\t\tD03764E919EDA41200A782A9 /* NSArray+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD037654919EDA41200A782A9 /* NSUserDefaults+RACSupport.h in Headers */,\n\t\t\t\tD037663919EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.h in Headers */,\n\t\t\t\tD037653119EDA41200A782A9 /* NSSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD03765CB19EDA41200A782A9 /* RACSequence.h in Headers */,\n\t\t\t\tD037662D19EDA41200A782A9 /* UIControl+RACSignalSupport.h in Headers */,\n\t\t\t\tD037666C19EDA57100A782A9 /* EXTKeyPathCoding.h in Headers */,\n\t\t\t\tD037658B19EDA41200A782A9 /* RACEvent.h in Headers */,\n\t\t\t\tD03765CF19EDA41200A782A9 /* RACSerialDisposable.h in Headers */,\n\t\t\t\tD037650519EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.h in Headers */,\n\t\t\t\tD037655D19EDA41200A782A9 /* RACChannel.h in Headers */,\n\t\t\t\tD03765B519EDA41200A782A9 /* RACQueueScheduler+Subclass.h in Headers */,\n\t\t\t\tD037665119EDA41200A782A9 /* UISwitch+RACSignalSupport.h in Headers */,\n\t\t\t\tD037664119EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.h in Headers */,\n\t\t\t\tD037652919EDA41200A782A9 /* NSObject+RACSelectorSignal.h in Headers */,\n\t\t\t\tD03765D319EDA41200A782A9 /* RACSignal.h in Headers */,\n\t\t\t\tD03765F519EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.h in Headers */,\n\t\t\t\tD03765C719EDA41200A782A9 /* RACScopedDisposable.h in Headers */,\n\t\t\t\tA1046B7B1BFF5662004D8045 /* EXTRuntimeExtensions.h in Headers */,\n\t\t\t\tD037661119EDA41200A782A9 /* RACUnit.h in Headers */,\n\t\t\t\tD03765FD19EDA41200A782A9 /* RACTargetQueueScheduler.h in Headers */,\n\t\t\t\tD037661919EDA41200A782A9 /* UIActionSheet+RACSignalSupport.h in Headers */,\n\t\t\t\tD037664D19EDA41200A782A9 /* UIStepper+RACSignalSupport.h in Headers */,\n\t\t\t\tD037662119EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.h in Headers */,\n\t\t\t\tD03765EB19EDA41200A782A9 /* RACSubject.h in Headers */,\n\t\t\t\tD037656119EDA41200A782A9 /* RACCommand.h in Headers */,\n\t\t\t\tD03765EF19EDA41200A782A9 /* RACSubscriber.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t57A4D1AF1BA13D7A00F7D4B1 /* ReactiveCocoa-tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 57A4D23C1BA13D7A00F7D4B1 /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t57A4D1B01BA13D7A00F7D4B1 /* Sources */,\n\t\t\t\t57A4D2071BA13D7A00F7D4B1 /* Frameworks */,\n\t\t\t\t57A4D2091BA13D7A00F7D4B1 /* Headers */,\n\t\t\t\t57A4D23B1BA13D7A00F7D4B1 /* 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 = \"ReactiveCocoa-tvOS\";\n\t\t\tproductName = ReactiveCocoa;\n\t\t\tproductReference = 57A4D2411BA13D7A00F7D4B1 /* ReactiveCocoa.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tA9B315531B3940610001CB9C /* ReactiveCocoa-watchOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = A9B3155D1B3940610001CB9C /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-watchOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA9B3154F1B3940610001CB9C /* Sources */,\n\t\t\t\tA9B315501B3940610001CB9C /* Frameworks */,\n\t\t\t\tA9B315511B3940610001CB9C /* Headers */,\n\t\t\t\tA9B315521B3940610001CB9C /* 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 = \"ReactiveCocoa-watchOS\";\n\t\t\tproductName = ReactiveCocoa;\n\t\t\tproductReference = A9B315541B3940610001CB9C /* ReactiveCocoa.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tD04725E919E49ED7006002AA /* ReactiveCocoa-Mac */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D047260019E49ED7006002AA /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-Mac\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD04725E519E49ED7006002AA /* Sources */,\n\t\t\t\tD04725E619E49ED7006002AA /* Frameworks */,\n\t\t\t\tD04725E719E49ED7006002AA /* Headers */,\n\t\t\t\tD04725E819E49ED7006002AA /* 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 = \"ReactiveCocoa-Mac\";\n\t\t\tproductName = ReactiveCocoa;\n\t\t\tproductReference = D04725EA19E49ED7006002AA /* ReactiveCocoa.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tD04725F419E49ED7006002AA /* ReactiveCocoa-MacTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D047260319E49ED7006002AA /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-MacTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD04725F119E49ED7006002AA /* Sources */,\n\t\t\t\tD04725F219E49ED7006002AA /* Frameworks */,\n\t\t\t\tD04725F319E49ED7006002AA /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD04725F819E49ED7006002AA /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"ReactiveCocoa-MacTests\";\n\t\t\tproductName = ReactiveCocoaTests;\n\t\t\tproductReference = D04725F519E49ED7006002AA /* ReactiveCocoaTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tD047260B19E49F82006002AA /* ReactiveCocoa-iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D047261F19E49F82006002AA /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD047260719E49F82006002AA /* Sources */,\n\t\t\t\tD047260819E49F82006002AA /* Frameworks */,\n\t\t\t\tD047260919E49F82006002AA /* Headers */,\n\t\t\t\tD047260A19E49F82006002AA /* 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 = \"ReactiveCocoa-iOS\";\n\t\t\tproductName = ReactiveCocoa;\n\t\t\tproductReference = D047260C19E49F82006002AA /* ReactiveCocoa.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tD047261519E49F82006002AA /* ReactiveCocoa-iOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D047262219E49F82006002AA /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-iOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD047261219E49F82006002AA /* Sources */,\n\t\t\t\tD047261319E49F82006002AA /* Frameworks */,\n\t\t\t\tD047261419E49F82006002AA /* Resources */,\n\t\t\t\tD01B7B6119EDD8F600D26E01 /* Copy Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD047261919E49F82006002AA /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"ReactiveCocoa-iOSTests\";\n\t\t\tproductName = ReactiveCocoaTests;\n\t\t\tproductReference = D047261619E49F82006002AA /* ReactiveCocoaTests.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\tD04725E119E49ED7006002AA /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0700;\n\t\t\t\tLastUpgradeCheck = 0710;\n\t\t\t\tORGANIZATIONNAME = GitHub;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tA9B315531B3940610001CB9C = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.0;\n\t\t\t\t\t};\n\t\t\t\t\tD04725E919E49ED7006002AA = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1;\n\t\t\t\t\t};\n\t\t\t\t\tD04725F419E49ED7006002AA = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1;\n\t\t\t\t\t};\n\t\t\t\t\tD047260B19E49F82006002AA = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1;\n\t\t\t\t\t};\n\t\t\t\t\tD047261519E49F82006002AA = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = D04725E419E49ED7006002AA /* Build configuration list for PBXProject \"ReactiveCocoa\" */;\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 = D04725E019E49ED7006002AA;\n\t\t\tproductRefGroup = D04725EB19E49ED7006002AA /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tD04725E919E49ED7006002AA /* ReactiveCocoa-Mac */,\n\t\t\t\tD04725F419E49ED7006002AA /* ReactiveCocoa-MacTests */,\n\t\t\t\tD047260B19E49F82006002AA /* ReactiveCocoa-iOS */,\n\t\t\t\tD047261519E49F82006002AA /* ReactiveCocoa-iOSTests */,\n\t\t\t\tA9B315531B3940610001CB9C /* ReactiveCocoa-watchOS */,\n\t\t\t\t57A4D1AF1BA13D7A00F7D4B1 /* ReactiveCocoa-tvOS */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t57A4D23B1BA13D7A00F7D4B1 /* 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\t\tA9B315521B3940610001CB9C /* 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\t\tD04725E819E49ED7006002AA /* 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\t\tD04725F319E49ED7006002AA /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD037671719EDA60000A782A9 /* test-data.json in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD047260A19E49F82006002AA /* 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\t\tD047261419E49F82006002AA /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD037671819EDA60000A782A9 /* test-data.json in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t57A4D1B01BA13D7A00F7D4B1 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57A4D1B11BA13D7A00F7D4B1 /* Optional.swift in Sources */,\n\t\t\t\t57D476951C4206EC00EFE697 /* UITableViewCell+RACSignalSupport.m in Sources */,\n\t\t\t\t57A4D1B21BA13D7A00F7D4B1 /* RACCompoundDisposableProvider.d in Sources */,\n\t\t\t\t57D476901C4206D400EFE697 /* UIControl+RACSignalSupportPrivate.m in Sources */,\n\t\t\t\t57A4D1B31BA13D7A00F7D4B1 /* RACSignalProvider.d in Sources */,\n\t\t\t\t57A4D1B41BA13D7A00F7D4B1 /* Disposable.swift in Sources */,\n\t\t\t\t57A4D1B61BA13D7A00F7D4B1 /* Event.swift in Sources */,\n\t\t\t\t57A4D1B71BA13D7A00F7D4B1 /* ObjectiveCBridging.swift in Sources */,\n\t\t\t\t57A4D1B81BA13D7A00F7D4B1 /* Scheduler.swift in Sources */,\n\t\t\t\t57A4D1B91BA13D7A00F7D4B1 /* Action.swift in Sources */,\n\t\t\t\t57A4D1BA1BA13D7A00F7D4B1 /* Property.swift in Sources */,\n\t\t\t\t57A4D1BB1BA13D7A00F7D4B1 /* Signal.swift in Sources */,\n\t\t\t\t57A4D1BC1BA13D7A00F7D4B1 /* SignalProducer.swift in Sources */,\n\t\t\t\t57A4D1BD1BA13D7A00F7D4B1 /* Atomic.swift in Sources */,\n\t\t\t\t57A4D1BE1BA13D7A00F7D4B1 /* Bag.swift in Sources */,\n\t\t\t\t57A4D1BF1BA13D7A00F7D4B1 /* TupleExtensions.swift in Sources */,\n\t\t\t\t57A4D1C01BA13D7A00F7D4B1 /* FoundationExtensions.swift in Sources */,\n\t\t\t\t57A4D1C11BA13D7A00F7D4B1 /* EXTRuntimeExtensions.m in Sources */,\n\t\t\t\t57A4D1C21BA13D7A00F7D4B1 /* NSArray+RACSequenceAdditions.m in Sources */,\n\t\t\t\t57A4D1C31BA13D7A00F7D4B1 /* NSData+RACSupport.m in Sources */,\n\t\t\t\t57A4D1C41BA13D7A00F7D4B1 /* NSDictionary+RACSequenceAdditions.m in Sources */,\n\t\t\t\t57A4D1C51BA13D7A00F7D4B1 /* NSEnumerator+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD85C652D1C0E70E5005A77AD /* Flatten.swift in Sources */,\n\t\t\t\t57D476961C4206EC00EFE697 /* UITableViewHeaderFooterView+RACSignalSupport.m in Sources */,\n\t\t\t\t57A4D1C61BA13D7A00F7D4B1 /* NSFileHandle+RACSupport.m in Sources */,\n\t\t\t\t57A4D1C71BA13D7A00F7D4B1 /* NSIndexSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\t57A4D1C81BA13D7A00F7D4B1 /* NSInvocation+RACTypeParsing.m in Sources */,\n\t\t\t\t57D4769B1C4206F200EFE697 /* UICollectionReusableView+RACSignalSupport.m in Sources */,\n\t\t\t\t57A4D1C91BA13D7A00F7D4B1 /* NSNotificationCenter+RACSupport.m in Sources */,\n\t\t\t\t57A4D1CA1BA13D7A00F7D4B1 /* NSObject+RACDeallocating.m in Sources */,\n\t\t\t\t57A4D1CB1BA13D7A00F7D4B1 /* NSObject+RACDescription.m in Sources */,\n\t\t\t\t57A4D1CC1BA13D7A00F7D4B1 /* NSObject+RACKVOWrapper.m in Sources */,\n\t\t\t\t57A4D1CD1BA13D7A00F7D4B1 /* NSObject+RACLifting.m in Sources */,\n\t\t\t\t57A4D1CE1BA13D7A00F7D4B1 /* NSObject+RACPropertySubscribing.m in Sources */,\n\t\t\t\t57A4D1CF1BA13D7A00F7D4B1 /* NSObject+RACSelectorSignal.m in Sources */,\n\t\t\t\t57D476981C4206EC00EFE697 /* UITextView+RACSignalSupport.m in Sources */,\n\t\t\t\t57A4D1D01BA13D7A00F7D4B1 /* NSOrderedSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\t57A4D1D11BA13D7A00F7D4B1 /* NSSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\t57D476911C4206DA00EFE697 /* UIGestureRecognizer+RACSignalSupport.m in Sources */,\n\t\t\t\t57A4D1D21BA13D7A00F7D4B1 /* NSString+RACKeyPathUtilities.m in Sources */,\n\t\t\t\t57D4769A1C4206F200EFE697 /* UIButton+RACCommandSupport.m in Sources */,\n\t\t\t\t57A4D1D31BA13D7A00F7D4B1 /* NSString+RACSequenceAdditions.m in Sources */,\n\t\t\t\t57A4D1D41BA13D7A00F7D4B1 /* NSString+RACSupport.m in Sources */,\n\t\t\t\t57A4D1D61BA13D7A00F7D4B1 /* NSUserDefaults+RACSupport.m in Sources */,\n\t\t\t\t57A4D1D71BA13D7A00F7D4B1 /* RACArraySequence.m in Sources */,\n\t\t\t\t57A4D1D81BA13D7A00F7D4B1 /* RACBehaviorSubject.m in Sources */,\n\t\t\t\t57A4D1D91BA13D7A00F7D4B1 /* RACBlockTrampoline.m in Sources */,\n\t\t\t\t57A4D1DA1BA13D7A00F7D4B1 /* RACChannel.m in Sources */,\n\t\t\t\t57A4D1DB1BA13D7A00F7D4B1 /* RACCommand.m in Sources */,\n\t\t\t\t57A4D1DC1BA13D7A00F7D4B1 /* RACCompoundDisposable.m in Sources */,\n\t\t\t\t57A4D1DD1BA13D7A00F7D4B1 /* RACDelegateProxy.m in Sources */,\n\t\t\t\t57A4D1DE1BA13D7A00F7D4B1 /* RACDisposable.m in Sources */,\n\t\t\t\tEBCC7DBF1BBF01E200A2AE92 /* Observer.swift in Sources */,\n\t\t\t\t57A4D1DF1BA13D7A00F7D4B1 /* RACDynamicSequence.m in Sources */,\n\t\t\t\t57A4D1E01BA13D7A00F7D4B1 /* RACDynamicSignal.m in Sources */,\n\t\t\t\t57A4D1E11BA13D7A00F7D4B1 /* RACEagerSequence.m in Sources */,\n\t\t\t\t57D4768D1C42063C00EFE697 /* UIControl+RACSignalSupport.m in Sources */,\n\t\t\t\t57A4D1E21BA13D7A00F7D4B1 /* RACEmptySequence.m in Sources */,\n\t\t\t\t57A4D1E31BA13D7A00F7D4B1 /* RACEmptySignal.m in Sources */,\n\t\t\t\t57A4D1E41BA13D7A00F7D4B1 /* RACErrorSignal.m in Sources */,\n\t\t\t\t57A4D1E51BA13D7A00F7D4B1 /* RACEvent.m in Sources */,\n\t\t\t\t57A4D1E61BA13D7A00F7D4B1 /* RACGroupedSignal.m in Sources */,\n\t\t\t\t57A4D1E71BA13D7A00F7D4B1 /* RACImmediateScheduler.m in Sources */,\n\t\t\t\t57D476971C4206EC00EFE697 /* UITextField+RACSignalSupport.m in Sources */,\n\t\t\t\t57A4D1E81BA13D7A00F7D4B1 /* RACIndexSetSequence.m in Sources */,\n\t\t\t\t57A4D1E91BA13D7A00F7D4B1 /* RACKVOChannel.m in Sources */,\n\t\t\t\t57A4D1EA1BA13D7A00F7D4B1 /* RACKVOProxy.m in Sources */,\n\t\t\t\t57A4D1EB1BA13D7A00F7D4B1 /* RACKVOTrampoline.m in Sources */,\n\t\t\t\t57A4D1EC1BA13D7A00F7D4B1 /* RACMulticastConnection.m in Sources */,\n\t\t\t\t57A4D1ED1BA13D7A00F7D4B1 /* RACObjCRuntime.m in Sources */,\n\t\t\t\t57A4D1EE1BA13D7A00F7D4B1 /* RACPassthroughSubscriber.m in Sources */,\n\t\t\t\t57A4D1EF1BA13D7A00F7D4B1 /* RACQueueScheduler.m in Sources */,\n\t\t\t\t57A4D1F01BA13D7A00F7D4B1 /* RACReplaySubject.m in Sources */,\n\t\t\t\t57A4D1F11BA13D7A00F7D4B1 /* RACReturnSignal.m in Sources */,\n\t\t\t\t57A4D1F21BA13D7A00F7D4B1 /* RACScheduler.m in Sources */,\n\t\t\t\t57A4D1F31BA13D7A00F7D4B1 /* RACScopedDisposable.m in Sources */,\n\t\t\t\t57A4D1F41BA13D7A00F7D4B1 /* RACSequence.m in Sources */,\n\t\t\t\t57A4D1F51BA13D7A00F7D4B1 /* RACSerialDisposable.m in Sources */,\n\t\t\t\t57A4D1F61BA13D7A00F7D4B1 /* RACSignal.m in Sources */,\n\t\t\t\t57D476921C4206DF00EFE697 /* UISegmentedControl+RACSignalSupport.m in Sources */,\n\t\t\t\t57A4D1F71BA13D7A00F7D4B1 /* RACSignal+Operations.m in Sources */,\n\t\t\t\t57A4D1F81BA13D7A00F7D4B1 /* RACSignalSequence.m in Sources */,\n\t\t\t\t57A4D1F91BA13D7A00F7D4B1 /* RACStream.m in Sources */,\n\t\t\t\t57A4D1FA1BA13D7A00F7D4B1 /* RACStringSequence.m in Sources */,\n\t\t\t\t57A4D1FB1BA13D7A00F7D4B1 /* RACSubject.m in Sources */,\n\t\t\t\t57A4D1FC1BA13D7A00F7D4B1 /* RACSubscriber.m in Sources */,\n\t\t\t\t57A4D1FD1BA13D7A00F7D4B1 /* RACSubscriptingAssignmentTrampoline.m in Sources */,\n\t\t\t\t57A4D1FE1BA13D7A00F7D4B1 /* RACSubscriptionScheduler.m in Sources */,\n\t\t\t\t57A4D1FF1BA13D7A00F7D4B1 /* RACTargetQueueScheduler.m in Sources */,\n\t\t\t\t57A4D2001BA13D7A00F7D4B1 /* RACTestScheduler.m in Sources */,\n\t\t\t\t57A4D2011BA13D7A00F7D4B1 /* RACTuple.m in Sources */,\n\t\t\t\t57A4D2021BA13D7A00F7D4B1 /* RACTupleSequence.m in Sources */,\n\t\t\t\t57A4D2031BA13D7A00F7D4B1 /* RACUnarySequence.m in Sources */,\n\t\t\t\t57A4D2041BA13D7A00F7D4B1 /* RACUnit.m in Sources */,\n\t\t\t\t57A4D2051BA13D7A00F7D4B1 /* RACValueTransformer.m in Sources */,\n\t\t\t\t57A4D2061BA13D7A00F7D4B1 /* RACDynamicPropertySuperclass.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA9B3154F1B3940610001CB9C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA9F793341B60D0140026BCBA /* Optional.swift in Sources */,\n\t\t\t\tA9B316341B394C7F0001CB9C /* RACCompoundDisposableProvider.d in Sources */,\n\t\t\t\tA9B316351B394C7F0001CB9C /* RACSignalProvider.d in Sources */,\n\t\t\t\tA9B315BC1B3940810001CB9C /* Disposable.swift in Sources */,\n\t\t\t\tA9B315BE1B3940810001CB9C /* Event.swift in Sources */,\n\t\t\t\tA9B315BF1B3940810001CB9C /* ObjectiveCBridging.swift in Sources */,\n\t\t\t\tA9B315C01B3940810001CB9C /* Scheduler.swift in Sources */,\n\t\t\t\tA9B315C11B3940810001CB9C /* Action.swift in Sources */,\n\t\t\t\tA9B315C21B3940810001CB9C /* Property.swift in Sources */,\n\t\t\t\tA9B315C31B3940810001CB9C /* Signal.swift in Sources */,\n\t\t\t\tA9B315C41B3940810001CB9C /* SignalProducer.swift in Sources */,\n\t\t\t\tA9B315C51B3940810001CB9C /* Atomic.swift in Sources */,\n\t\t\t\tA9B315C61B3940810001CB9C /* Bag.swift in Sources */,\n\t\t\t\tA9B315C71B3940810001CB9C /* TupleExtensions.swift in Sources */,\n\t\t\t\tA9B315C81B3940810001CB9C /* FoundationExtensions.swift in Sources */,\n\t\t\t\tA9B3155E1B3940750001CB9C /* EXTRuntimeExtensions.m in Sources */,\n\t\t\t\tA9B315601B3940750001CB9C /* NSArray+RACSequenceAdditions.m in Sources */,\n\t\t\t\tA9B315631B3940750001CB9C /* NSData+RACSupport.m in Sources */,\n\t\t\t\tA9B315641B3940750001CB9C /* NSDictionary+RACSequenceAdditions.m in Sources */,\n\t\t\t\tA9B315651B3940750001CB9C /* NSEnumerator+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD85C652C1C0E70E4005A77AD /* Flatten.swift in Sources */,\n\t\t\t\tA9B315661B3940750001CB9C /* NSFileHandle+RACSupport.m in Sources */,\n\t\t\t\tA9B315671B3940750001CB9C /* NSIndexSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\tA9B315681B3940750001CB9C /* NSInvocation+RACTypeParsing.m in Sources */,\n\t\t\t\tA9B315691B3940750001CB9C /* NSNotificationCenter+RACSupport.m in Sources */,\n\t\t\t\tA9B3156B1B3940750001CB9C /* NSObject+RACDeallocating.m in Sources */,\n\t\t\t\tA9B3156C1B3940750001CB9C /* NSObject+RACDescription.m in Sources */,\n\t\t\t\tA9B3156D1B3940750001CB9C /* NSObject+RACKVOWrapper.m in Sources */,\n\t\t\t\tA9B3156E1B3940750001CB9C /* NSObject+RACLifting.m in Sources */,\n\t\t\t\tA9B3156F1B3940750001CB9C /* NSObject+RACPropertySubscribing.m in Sources */,\n\t\t\t\tA9B315701B3940750001CB9C /* NSObject+RACSelectorSignal.m in Sources */,\n\t\t\t\tA9B315711B3940750001CB9C /* NSOrderedSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\tA9B315721B3940750001CB9C /* NSSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\tA9B315731B3940750001CB9C /* NSString+RACKeyPathUtilities.m in Sources */,\n\t\t\t\tA9B315741B3940750001CB9C /* NSString+RACSequenceAdditions.m in Sources */,\n\t\t\t\tA9B315751B3940750001CB9C /* NSString+RACSupport.m in Sources */,\n\t\t\t\tA9B315781B3940750001CB9C /* NSUserDefaults+RACSupport.m in Sources */,\n\t\t\t\tA9B315791B3940750001CB9C /* RACArraySequence.m in Sources */,\n\t\t\t\tA9B3157A1B3940750001CB9C /* RACBehaviorSubject.m in Sources */,\n\t\t\t\tA9B3157B1B3940750001CB9C /* RACBlockTrampoline.m in Sources */,\n\t\t\t\tA9B3157C1B3940750001CB9C /* RACChannel.m in Sources */,\n\t\t\t\tA9B3157D1B3940750001CB9C /* RACCommand.m in Sources */,\n\t\t\t\tA9B3157E1B3940750001CB9C /* RACCompoundDisposable.m in Sources */,\n\t\t\t\tA9B3157F1B3940750001CB9C /* RACDelegateProxy.m in Sources */,\n\t\t\t\tA9B315801B3940750001CB9C /* RACDisposable.m in Sources */,\n\t\t\t\tEBCC7DBE1BBF01E200A2AE92 /* Observer.swift in Sources */,\n\t\t\t\tA9B315811B3940750001CB9C /* RACDynamicSequence.m in Sources */,\n\t\t\t\tA9B315821B3940750001CB9C /* RACDynamicSignal.m in Sources */,\n\t\t\t\tA9B315831B3940750001CB9C /* RACEagerSequence.m in Sources */,\n\t\t\t\tA9B315841B3940750001CB9C /* RACEmptySequence.m in Sources */,\n\t\t\t\tA9B315851B3940750001CB9C /* RACEmptySignal.m in Sources */,\n\t\t\t\tA9B315861B3940750001CB9C /* RACErrorSignal.m in Sources */,\n\t\t\t\tA9B315871B3940750001CB9C /* RACEvent.m in Sources */,\n\t\t\t\tA9B315881B3940750001CB9C /* RACGroupedSignal.m in Sources */,\n\t\t\t\tA9B315891B3940750001CB9C /* RACImmediateScheduler.m in Sources */,\n\t\t\t\tA9B3158A1B3940750001CB9C /* RACIndexSetSequence.m in Sources */,\n\t\t\t\tA9B3158B1B3940750001CB9C /* RACKVOChannel.m in Sources */,\n\t\t\t\tA9B3158C1B3940750001CB9C /* RACKVOProxy.m in Sources */,\n\t\t\t\tA9B3158D1B3940750001CB9C /* RACKVOTrampoline.m in Sources */,\n\t\t\t\tA9B3158E1B3940750001CB9C /* RACMulticastConnection.m in Sources */,\n\t\t\t\tA9B3158F1B3940750001CB9C /* RACObjCRuntime.m in Sources */,\n\t\t\t\tA9B315901B3940750001CB9C /* RACPassthroughSubscriber.m in Sources */,\n\t\t\t\tA9B315911B3940750001CB9C /* RACQueueScheduler.m in Sources */,\n\t\t\t\tA9B315921B3940750001CB9C /* RACReplaySubject.m in Sources */,\n\t\t\t\tA9B315931B3940750001CB9C /* RACReturnSignal.m in Sources */,\n\t\t\t\tA9B315941B3940750001CB9C /* RACScheduler.m in Sources */,\n\t\t\t\tA9B315951B3940750001CB9C /* RACScopedDisposable.m in Sources */,\n\t\t\t\tA9B315961B3940750001CB9C /* RACSequence.m in Sources */,\n\t\t\t\tA9B315971B3940750001CB9C /* RACSerialDisposable.m in Sources */,\n\t\t\t\tA9B315981B3940750001CB9C /* RACSignal.m in Sources */,\n\t\t\t\tA9B315991B3940750001CB9C /* RACSignal+Operations.m in Sources */,\n\t\t\t\tA9B3159A1B3940750001CB9C /* RACSignalSequence.m in Sources */,\n\t\t\t\tA9B3159B1B3940750001CB9C /* RACStream.m in Sources */,\n\t\t\t\tA9B3159C1B3940750001CB9C /* RACStringSequence.m in Sources */,\n\t\t\t\tA9B3159D1B3940750001CB9C /* RACSubject.m in Sources */,\n\t\t\t\tA9B3159E1B3940750001CB9C /* RACSubscriber.m in Sources */,\n\t\t\t\tA9B3159F1B3940750001CB9C /* RACSubscriptingAssignmentTrampoline.m in Sources */,\n\t\t\t\tA9B315A01B3940750001CB9C /* RACSubscriptionScheduler.m in Sources */,\n\t\t\t\tA9B315A11B3940750001CB9C /* RACTargetQueueScheduler.m in Sources */,\n\t\t\t\tA9B315A21B3940750001CB9C /* RACTestScheduler.m in Sources */,\n\t\t\t\tA9B315A31B3940750001CB9C /* RACTuple.m in Sources */,\n\t\t\t\tA9B315A41B3940750001CB9C /* RACTupleSequence.m in Sources */,\n\t\t\t\tA9B315A51B3940750001CB9C /* RACUnarySequence.m in Sources */,\n\t\t\t\tA9B315A61B3940750001CB9C /* RACUnit.m in Sources */,\n\t\t\t\tA9B315A71B3940750001CB9C /* RACValueTransformer.m in Sources */,\n\t\t\t\tA9B315BB1B3940750001CB9C /* RACDynamicPropertySuperclass.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD04725E519E49ED7006002AA /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD037654219EDA41200A782A9 /* NSText+RACSignalSupport.m in Sources */,\n\t\t\t\tD037659C19EDA41200A782A9 /* RACKVOChannel.m in Sources */,\n\t\t\t\tD03765C819EDA41200A782A9 /* RACScopedDisposable.m in Sources */,\n\t\t\t\tD03764FE19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD03764EA19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD00004091A46864E000E7D41 /* TupleExtensions.swift in Sources */,\n\t\t\t\tD03765C019EDA41200A782A9 /* RACScheduler.m in Sources */,\n\t\t\t\tD43F27A21A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m in Sources */,\n\t\t\t\tD037659819EDA41200A782A9 /* RACIndexSetSequence.m in Sources */,\n\t\t\t\tD03765D819EDA41200A782A9 /* RACSignal+Operations.m in Sources */,\n\t\t\t\tD871D69F1B3B29A40070F16C /* Optional.swift in Sources */,\n\t\t\t\tD08C54B61A69A3DB00AD8286 /* Event.swift in Sources */,\n\t\t\t\tD03764F219EDA41200A782A9 /* NSControl+RACTextSignalSupport.m in Sources */,\n\t\t\t\tD037650219EDA41200A782A9 /* NSFileHandle+RACSupport.m in Sources */,\n\t\t\t\tD03765E219EDA41200A782A9 /* RACStream.m in Sources */,\n\t\t\t\tD037655619EDA41200A782A9 /* RACBehaviorSubject.m in Sources */,\n\t\t\t\tD037660219EDA41200A782A9 /* RACTestScheduler.m in Sources */,\n\t\t\t\tD03765B819EDA41200A782A9 /* RACReplaySubject.m in Sources */,\n\t\t\t\tD03765EC19EDA41200A782A9 /* RACSubject.m in Sources */,\n\t\t\t\tD03765D019EDA41200A782A9 /* RACSerialDisposable.m in Sources */,\n\t\t\t\tD0C312D319EF2A5800984962 /* Disposable.swift in Sources */,\n\t\t\t\tD037666F19EDA57100A782A9 /* EXTRuntimeExtensions.m in Sources */,\n\t\t\t\tD037653E19EDA41200A782A9 /* NSString+RACSupport.m in Sources */,\n\t\t\t\tD037653619EDA41200A782A9 /* NSString+RACKeyPathUtilities.m in Sources */,\n\t\t\t\tD03764FA19EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m in Sources */,\n\t\t\t\tEBCC7DBC1BBF010C00A2AE92 /* Observer.swift in Sources */,\n\t\t\t\tD037656819EDA41200A782A9 /* RACCompoundDisposableProvider.d in Sources */,\n\t\t\t\tD03B4A3D19F4C39A009E02AC /* FoundationExtensions.swift in Sources */,\n\t\t\t\tD037653A19EDA41200A782A9 /* NSString+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD03765E819EDA41200A782A9 /* RACStringSequence.m in Sources */,\n\t\t\t\tD03764EE19EDA41200A782A9 /* NSControl+RACCommandSupport.m in Sources */,\n\t\t\t\tD08C54B31A69A2AE00AD8286 /* Signal.swift in Sources */,\n\t\t\t\tD037660A19EDA41200A782A9 /* RACTupleSequence.m in Sources */,\n\t\t\t\tD03765D419EDA41200A782A9 /* RACSignal.m in Sources */,\n\t\t\t\tD037651A19EDA41200A782A9 /* NSObject+RACDescription.m in Sources */,\n\t\t\t\tD03765A419EDA41200A782A9 /* RACMulticastConnection.m in Sources */,\n\t\t\t\tD037654E19EDA41200A782A9 /* RACArraySequence.m in Sources */,\n\t\t\t\tD037652219EDA41200A782A9 /* NSObject+RACLifting.m in Sources */,\n\t\t\t\tD037650619EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD037650E19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m in Sources */,\n\t\t\t\tD03765FA19EDA41200A782A9 /* RACSubscriptionScheduler.m in Sources */,\n\t\t\t\tD85C652A1C0D84C7005A77AD /* Flatten.swift in Sources */,\n\t\t\t\tD0C312CF19EF2A5800984962 /* Bag.swift in Sources */,\n\t\t\t\tD037658019EDA41200A782A9 /* RACEmptySequence.m in Sources */,\n\t\t\t\tD03765AA19EDA41200A782A9 /* RACObjCRuntime.m in Sources */,\n\t\t\t\tD037654A19EDA41200A782A9 /* NSUserDefaults+RACSupport.m in Sources */,\n\t\t\t\tD037660E19EDA41200A782A9 /* RACUnarySequence.m in Sources */,\n\t\t\t\tD03765FE19EDA41200A782A9 /* RACTargetQueueScheduler.m in Sources */,\n\t\t\t\tD03765DE19EDA41200A782A9 /* RACSignalSequence.m in Sources */,\n\t\t\t\tD037656C19EDA41200A782A9 /* RACDelegateProxy.m in Sources */,\n\t\t\t\tD037657419EDA41200A782A9 /* RACDynamicSequence.m in Sources */,\n\t\t\t\tD037657019EDA41200A782A9 /* RACDisposable.m in Sources */,\n\t\t\t\tD03765DA19EDA41200A782A9 /* RACSignalProvider.d in Sources */,\n\t\t\t\tD037653219EDA41200A782A9 /* NSSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD037651219EDA41200A782A9 /* NSObject+RACAppKitBindings.m in Sources */,\n\t\t\t\tD037656619EDA41200A782A9 /* RACCompoundDisposable.m in Sources */,\n\t\t\t\tD037655A19EDA41200A782A9 /* RACBlockTrampoline.m in Sources */,\n\t\t\t\tD0C312DF19EF2A5800984962 /* ObjectiveCBridging.swift in Sources */,\n\t\t\t\tD037659019EDA41200A782A9 /* RACGroupedSignal.m in Sources */,\n\t\t\t\tD037655E19EDA41200A782A9 /* RACChannel.m in Sources */,\n\t\t\t\tD037657C19EDA41200A782A9 /* RACEagerSequence.m in Sources */,\n\t\t\t\tD037657819EDA41200A782A9 /* RACDynamicSignal.m in Sources */,\n\t\t\t\tD037659419EDA41200A782A9 /* RACImmediateScheduler.m in Sources */,\n\t\t\t\t7A7065811A3F88B8001E8354 /* RACKVOProxy.m in Sources */,\n\t\t\t\tD037651619EDA41200A782A9 /* NSObject+RACDeallocating.m in Sources */,\n\t\t\t\tD0C312E719EF2A5800984962 /* Scheduler.swift in Sources */,\n\t\t\t\tD0C312CD19EF2A5800984962 /* Atomic.swift in Sources */,\n\t\t\t\tD037658419EDA41200A782A9 /* RACEmptySignal.m in Sources */,\n\t\t\t\tD037654619EDA41200A782A9 /* NSURLConnection+RACSupport.m in Sources */,\n\t\t\t\tD03765F019EDA41200A782A9 /* RACSubscriber.m in Sources */,\n\t\t\t\tD03764F619EDA41200A782A9 /* NSData+RACSupport.m in Sources */,\n\t\t\t\tD037656219EDA41200A782A9 /* RACCommand.m in Sources */,\n\t\t\t\tD037658819EDA41200A782A9 /* RACErrorSignal.m in Sources */,\n\t\t\t\tD03765F619EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m in Sources */,\n\t\t\t\tD08C54BA1A69C54300AD8286 /* Property.swift in Sources */,\n\t\t\t\tD0D11AB91A6AE87700C1F8B1 /* Action.swift in Sources */,\n\t\t\t\tD037661219EDA41200A782A9 /* RACUnit.m in Sources */,\n\t\t\t\tD03765A019EDA41200A782A9 /* RACKVOTrampoline.m in Sources */,\n\t\t\t\tD037650A19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m in Sources */,\n\t\t\t\tD037660619EDA41200A782A9 /* RACTuple.m in Sources */,\n\t\t\t\tD037651E19EDA41200A782A9 /* NSObject+RACKVOWrapper.m in Sources */,\n\t\t\t\tD037661619EDA41200A782A9 /* RACValueTransformer.m in Sources */,\n\t\t\t\tD03765CC19EDA41200A782A9 /* RACSequence.m in Sources */,\n\t\t\t\tD037652E19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD037652619EDA41200A782A9 /* NSObject+RACPropertySubscribing.m in Sources */,\n\t\t\t\tD037658C19EDA41200A782A9 /* RACEvent.m in Sources */,\n\t\t\t\tD08C54B81A69A9D000AD8286 /* SignalProducer.swift in Sources */,\n\t\t\t\tD03765B219EDA41200A782A9 /* RACQueueScheduler.m in Sources */,\n\t\t\t\tD037652A19EDA41200A782A9 /* NSObject+RACSelectorSignal.m in Sources */,\n\t\t\t\tD03765AE19EDA41200A782A9 /* RACPassthroughSubscriber.m in Sources */,\n\t\t\t\tD03765BC19EDA41200A782A9 /* RACReturnSignal.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD04725F119E49ED7006002AA /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD0A2260E1A72F16D00D33B74 /* PropertySpec.swift in Sources */,\n\t\t\t\tD03766C719EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m in Sources */,\n\t\t\t\tD03766E319EDA60000A782A9 /* RACDelegateProxySpec.m in Sources */,\n\t\t\t\tB696FB811A7640C00075236D /* TestError.swift in Sources */,\n\t\t\t\tD021671D1A6CD50500987861 /* ActionSpec.swift in Sources */,\n\t\t\t\tD03766F919EDA60000A782A9 /* RACSerialDisposableSpec.m in Sources */,\n\t\t\t\tD0C3131E19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */,\n\t\t\t\tD037670B19EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m in Sources */,\n\t\t\t\tD03766DD19EDA60000A782A9 /* RACCommandSpec.m in Sources */,\n\t\t\t\tD0C3130E19EF2B1F00984962 /* SchedulerSpec.swift in Sources */,\n\t\t\t\tD037670919EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */,\n\t\t\t\tBFA6B94D1A7604D400C846D1 /* SignalProducerNimbleMatchers.swift in Sources */,\n\t\t\t\tD03766EB19EDA60000A782A9 /* RACKVOWrapperSpec.m in Sources */,\n\t\t\t\tD03766E719EDA60000A782A9 /* RACEventSpec.m in Sources */,\n\t\t\t\tD03766F719EDA60000A782A9 /* RACSequenceSpec.m in Sources */,\n\t\t\t\tD8170FC11B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */,\n\t\t\t\tD03766C919EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m in Sources */,\n\t\t\t\tD03766C319EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m in Sources */,\n\t\t\t\tD03766BD19EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */,\n\t\t\t\tCA6F28501C52626B001879D2 /* FlattenSpec.swift in Sources */,\n\t\t\t\tD037670119EDA60000A782A9 /* RACSubclassObject.m in Sources */,\n\t\t\t\tD03766CD19EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m in Sources */,\n\t\t\t\tD037671519EDA60000A782A9 /* RACTupleSpec.m in Sources */,\n\t\t\t\tD03766C519EDA60000A782A9 /* NSObjectRACLiftingSpec.m in Sources */,\n\t\t\t\tD03766D119EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m in Sources */,\n\t\t\t\tD03766F319EDA60000A782A9 /* RACSequenceAdditionsSpec.m in Sources */,\n\t\t\t\tD03766ED19EDA60000A782A9 /* RACMulticastConnectionSpec.m in Sources */,\n\t\t\t\tCDCD247A1C277EEC00710AEE /* AtomicSpec.swift in Sources */,\n\t\t\t\tD03766E919EDA60000A782A9 /* RACKVOChannelSpec.m in Sources */,\n\t\t\t\tD03766FB19EDA60000A782A9 /* RACSignalSpec.m in Sources */,\n\t\t\t\t7A7065841A3F8967001E8354 /* RACKVOProxySpec.m in Sources */,\n\t\t\t\t579504331BB8A34200A5E482 /* BagSpec.swift in Sources */,\n\t\t\t\tD037670719EDA60000A782A9 /* RACSubscriberSpec.m in Sources */,\n\t\t\t\tD03766EF19EDA60000A782A9 /* RACPropertySignalExamples.m in Sources */,\n\t\t\t\tD037670519EDA60000A782A9 /* RACSubscriberExamples.m in Sources */,\n\t\t\t\tD0A226081A72E0E900D33B74 /* SignalSpec.swift in Sources */,\n\t\t\t\tD0C3132219EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */,\n\t\t\t\t02D2602B1C1D6DB8003ACC61 /* SignalLifetimeSpec.swift in Sources */,\n\t\t\t\tD0C3130C19EF2B1F00984962 /* DisposableSpec.swift in Sources */,\n\t\t\t\tD03766D719EDA60000A782A9 /* RACBlockTrampolineSpec.m in Sources */,\n\t\t\t\tD0A2260B1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */,\n\t\t\t\tD03766FF19EDA60000A782A9 /* RACStreamExamples.m in Sources */,\n\t\t\t\tD03766CB19EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m in Sources */,\n\t\t\t\tD03766E119EDA60000A782A9 /* RACControlCommandExamples.m in Sources */,\n\t\t\t\tD03766BF19EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m in Sources */,\n\t\t\t\tD037670319EDA60000A782A9 /* RACSubjectSpec.m in Sources */,\n\t\t\t\tD03766F119EDA60000A782A9 /* RACSchedulerSpec.m in Sources */,\n\t\t\t\tD03766DF19EDA60000A782A9 /* RACCompoundDisposableSpec.m in Sources */,\n\t\t\t\tD03766E519EDA60000A782A9 /* RACDisposableSpec.m in Sources */,\n\t\t\t\tD0C3132019EF2D9700984962 /* RACTestObject.m in Sources */,\n\t\t\t\tD03766D319EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m in Sources */,\n\t\t\t\tD03766C119EDA60000A782A9 /* NSObjectRACAppKitBindingsSpec.m in Sources */,\n\t\t\t\tD03766DB19EDA60000A782A9 /* RACChannelSpec.m in Sources */,\n\t\t\t\tD0A226111A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */,\n\t\t\t\tD03766D919EDA60000A782A9 /* RACChannelExamples.m in Sources */,\n\t\t\t\tD03766F519EDA60000A782A9 /* RACSequenceExamples.m in Sources */,\n\t\t\t\tD8024DB21B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */,\n\t\t\t\tD03766B919EDA60000A782A9 /* NSControllerRACSupportSpec.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD047260719E49F82006002AA /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD037659D19EDA41200A782A9 /* RACKVOChannel.m in Sources */,\n\t\t\t\tD08C54B41A69A2AF00AD8286 /* Signal.swift in Sources */,\n\t\t\t\tD037666319EDA41200A782A9 /* UITextView+RACSignalSupport.m in Sources */,\n\t\t\t\tD037662F19EDA41200A782A9 /* UIControl+RACSignalSupport.m in Sources */,\n\t\t\t\tD03765C919EDA41200A782A9 /* RACScopedDisposable.m in Sources */,\n\t\t\t\tD03764FF19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD037664719EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m in Sources */,\n\t\t\t\tD43F27A31A9F7E8A00C1AD76 /* RACDynamicPropertySuperclass.m in Sources */,\n\t\t\t\tD8E84A671B3B32FB00C3E831 /* Optional.swift in Sources */,\n\t\t\t\tD03764EB19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD0C312D419EF2A5800984962 /* Disposable.swift in Sources */,\n\t\t\t\tD03765C119EDA41200A782A9 /* RACScheduler.m in Sources */,\n\t\t\t\tD037662B19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m in Sources */,\n\t\t\t\tD037659919EDA41200A782A9 /* RACIndexSetSequence.m in Sources */,\n\t\t\t\tD03765D919EDA41200A782A9 /* RACSignal+Operations.m in Sources */,\n\t\t\t\tD037661B19EDA41200A782A9 /* UIActionSheet+RACSignalSupport.m in Sources */,\n\t\t\t\tD037650319EDA41200A782A9 /* NSFileHandle+RACSupport.m in Sources */,\n\t\t\t\tD08C54B91A69A9D100AD8286 /* SignalProducer.swift in Sources */,\n\t\t\t\tD03765E319EDA41200A782A9 /* RACStream.m in Sources */,\n\t\t\t\tD037655719EDA41200A782A9 /* RACBehaviorSubject.m in Sources */,\n\t\t\t\tD037663B19EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m in Sources */,\n\t\t\t\tD037660319EDA41200A782A9 /* RACTestScheduler.m in Sources */,\n\t\t\t\tD03765B919EDA41200A782A9 /* RACReplaySubject.m in Sources */,\n\t\t\t\tD03765ED19EDA41200A782A9 /* RACSubject.m in Sources */,\n\t\t\t\tD037664F19EDA41200A782A9 /* UIStepper+RACSignalSupport.m in Sources */,\n\t\t\t\tD03765D119EDA41200A782A9 /* RACSerialDisposable.m in Sources */,\n\t\t\t\tEBCC7DBD1BBF01E100A2AE92 /* Observer.swift in Sources */,\n\t\t\t\tD037663F19EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.m in Sources */,\n\t\t\t\tD037653F19EDA41200A782A9 /* NSString+RACSupport.m in Sources */,\n\t\t\t\tD037653719EDA41200A782A9 /* NSString+RACKeyPathUtilities.m in Sources */,\n\t\t\t\tD03764FB19EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD037656919EDA41200A782A9 /* RACCompoundDisposableProvider.d in Sources */,\n\t\t\t\tD037653B19EDA41200A782A9 /* NSString+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD037661F19EDA41200A782A9 /* UIAlertView+RACSignalSupport.m in Sources */,\n\t\t\t\tD03765E919EDA41200A782A9 /* RACStringSequence.m in Sources */,\n\t\t\t\tD037660B19EDA41200A782A9 /* RACTupleSequence.m in Sources */,\n\t\t\t\tD03765D519EDA41200A782A9 /* RACSignal.m in Sources */,\n\t\t\t\tD037663319EDA41200A782A9 /* UIControl+RACSignalSupportPrivate.m in Sources */,\n\t\t\t\tD037664319EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.m in Sources */,\n\t\t\t\tD037651B19EDA41200A782A9 /* NSObject+RACDescription.m in Sources */,\n\t\t\t\tD03765A519EDA41200A782A9 /* RACMulticastConnection.m in Sources */,\n\t\t\t\tD85C652B1C0E70E3005A77AD /* Flatten.swift in Sources */,\n\t\t\t\tD037654F19EDA41200A782A9 /* RACArraySequence.m in Sources */,\n\t\t\t\tD037652319EDA41200A782A9 /* NSObject+RACLifting.m in Sources */,\n\t\t\t\tD037650719EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD037665F19EDA41200A782A9 /* UITextField+RACSignalSupport.m in Sources */,\n\t\t\t\tD037650F19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m in Sources */,\n\t\t\t\tD03765FB19EDA41200A782A9 /* RACSubscriptionScheduler.m in Sources */,\n\t\t\t\tD037658119EDA41200A782A9 /* RACEmptySequence.m in Sources */,\n\t\t\t\tD03765AB19EDA41200A782A9 /* RACObjCRuntime.m in Sources */,\n\t\t\t\tD0C312E019EF2A5800984962 /* ObjectiveCBridging.swift in Sources */,\n\t\t\t\tD037654B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m in Sources */,\n\t\t\t\tD037660F19EDA41200A782A9 /* RACUnarySequence.m in Sources */,\n\t\t\t\tD08C54BB1A69C54400AD8286 /* Property.swift in Sources */,\n\t\t\t\tD03765FF19EDA41200A782A9 /* RACTargetQueueScheduler.m in Sources */,\n\t\t\t\tD03765DF19EDA41200A782A9 /* RACSignalSequence.m in Sources */,\n\t\t\t\tD037656D19EDA41200A782A9 /* RACDelegateProxy.m in Sources */,\n\t\t\t\tD03B4A3E19F4C39A009E02AC /* FoundationExtensions.swift in Sources */,\n\t\t\t\tD037657519EDA41200A782A9 /* RACDynamicSequence.m in Sources */,\n\t\t\t\tD037657119EDA41200A782A9 /* RACDisposable.m in Sources */,\n\t\t\t\tD000040A1A46864E000E7D41 /* TupleExtensions.swift in Sources */,\n\t\t\t\tD03765DB19EDA41200A782A9 /* RACSignalProvider.d in Sources */,\n\t\t\t\tD037653319EDA41200A782A9 /* NSSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD037665319EDA41200A782A9 /* UISwitch+RACSignalSupport.m in Sources */,\n\t\t\t\tD037664B19EDA41200A782A9 /* UISlider+RACSignalSupport.m in Sources */,\n\t\t\t\tD037656719EDA41200A782A9 /* RACCompoundDisposable.m in Sources */,\n\t\t\t\tD037655B19EDA41200A782A9 /* RACBlockTrampoline.m in Sources */,\n\t\t\t\tD037659119EDA41200A782A9 /* RACGroupedSignal.m in Sources */,\n\t\t\t\tD037655F19EDA41200A782A9 /* RACChannel.m in Sources */,\n\t\t\t\tD037657D19EDA41200A782A9 /* RACEagerSequence.m in Sources */,\n\t\t\t\tD037657919EDA41200A782A9 /* RACDynamicSignal.m in Sources */,\n\t\t\t\tD037659519EDA41200A782A9 /* RACImmediateScheduler.m in Sources */,\n\t\t\t\tD037651719EDA41200A782A9 /* NSObject+RACDeallocating.m in Sources */,\n\t\t\t\tD037658519EDA41200A782A9 /* RACEmptySignal.m in Sources */,\n\t\t\t\tD037663719EDA41200A782A9 /* UIDatePicker+RACSignalSupport.m in Sources */,\n\t\t\t\tD08C54B71A69A3DB00AD8286 /* Event.swift in Sources */,\n\t\t\t\tD037654719EDA41200A782A9 /* NSURLConnection+RACSupport.m in Sources */,\n\t\t\t\tD03765F119EDA41200A782A9 /* RACSubscriber.m in Sources */,\n\t\t\t\tD03764F719EDA41200A782A9 /* NSData+RACSupport.m in Sources */,\n\t\t\t\tD0C312CE19EF2A5800984962 /* Atomic.swift in Sources */,\n\t\t\t\tD0C312E819EF2A5800984962 /* Scheduler.swift in Sources */,\n\t\t\t\tD037656319EDA41200A782A9 /* RACCommand.m in Sources */,\n\t\t\t\tD037658919EDA41200A782A9 /* RACErrorSignal.m in Sources */,\n\t\t\t\tD03765F719EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m in Sources */,\n\t\t\t\tD037661319EDA41200A782A9 /* RACUnit.m in Sources */,\n\t\t\t\tD037662319EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m in Sources */,\n\t\t\t\tD03765A119EDA41200A782A9 /* RACKVOTrampoline.m in Sources */,\n\t\t\t\tD037665B19EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m in Sources */,\n\t\t\t\tD0C312D019EF2A5800984962 /* Bag.swift in Sources */,\n\t\t\t\tD0D11ABA1A6AE87700C1F8B1 /* Action.swift in Sources */,\n\t\t\t\tD037650B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m in Sources */,\n\t\t\t\tD037660719EDA41200A782A9 /* RACTuple.m in Sources */,\n\t\t\t\tD037667019EDA57100A782A9 /* EXTRuntimeExtensions.m in Sources */,\n\t\t\t\tD037651F19EDA41200A782A9 /* NSObject+RACKVOWrapper.m in Sources */,\n\t\t\t\tD037661719EDA41200A782A9 /* RACValueTransformer.m in Sources */,\n\t\t\t\tD03765CD19EDA41200A782A9 /* RACSequence.m in Sources */,\n\t\t\t\t314304181ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m in Sources */,\n\t\t\t\tD037652F19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m in Sources */,\n\t\t\t\tD037662719EDA41200A782A9 /* UIButton+RACCommandSupport.m in Sources */,\n\t\t\t\tD037652719EDA41200A782A9 /* NSObject+RACPropertySubscribing.m in Sources */,\n\t\t\t\t7A7065821A3F88B8001E8354 /* RACKVOProxy.m in Sources */,\n\t\t\t\tD037658D19EDA41200A782A9 /* RACEvent.m in Sources */,\n\t\t\t\tD03765B319EDA41200A782A9 /* RACQueueScheduler.m in Sources */,\n\t\t\t\tD037665719EDA41200A782A9 /* UITableViewCell+RACSignalSupport.m in Sources */,\n\t\t\t\tD037652B19EDA41200A782A9 /* NSObject+RACSelectorSignal.m in Sources */,\n\t\t\t\tD03765AF19EDA41200A782A9 /* RACPassthroughSubscriber.m in Sources */,\n\t\t\t\tD03765BD19EDA41200A782A9 /* RACReturnSignal.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD047261219E49F82006002AA /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD0A2260C1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */,\n\t\t\t\tD03766C819EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m in Sources */,\n\t\t\t\tD037672419EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m in Sources */,\n\t\t\t\tD03766E419EDA60000A782A9 /* RACDelegateProxySpec.m in Sources */,\n\t\t\t\tD0A2260F1A72F16D00D33B74 /* PropertySpec.swift in Sources */,\n\t\t\t\tD03766FA19EDA60000A782A9 /* RACSerialDisposableSpec.m in Sources */,\n\t\t\t\tD0A226091A72E0E900D33B74 /* SignalSpec.swift in Sources */,\n\t\t\t\tCDCD247B1C277EED00710AEE /* AtomicSpec.swift in Sources */,\n\t\t\t\tD037670C19EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m in Sources */,\n\t\t\t\tD03766DE19EDA60000A782A9 /* RACCommandSpec.m in Sources */,\n\t\t\t\tD037670A19EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */,\n\t\t\t\tD03766EC19EDA60000A782A9 /* RACKVOWrapperSpec.m in Sources */,\n\t\t\t\tD021671E1A6CD50500987861 /* ActionSpec.swift in Sources */,\n\t\t\t\tD03766E819EDA60000A782A9 /* RACEventSpec.m in Sources */,\n\t\t\t\tD03766F819EDA60000A782A9 /* RACSequenceSpec.m in Sources */,\n\t\t\t\tD0A226121A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */,\n\t\t\t\tD037671E19EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m in Sources */,\n\t\t\t\tD8024DB31B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */,\n\t\t\t\tBFA6B94E1A7604D500C846D1 /* SignalProducerNimbleMatchers.swift in Sources */,\n\t\t\t\tD03766CA19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m in Sources */,\n\t\t\t\tD0C3132319EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */,\n\t\t\t\tD03766C419EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m in Sources */,\n\t\t\t\tD03766BE19EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */,\n\t\t\t\tD037672019EDA60000A782A9 /* UIButtonRACSupportSpec.m in Sources */,\n\t\t\t\tD0C3132519EF2D9700984962 /* RACTestUIButton.m in Sources */,\n\t\t\t\tD037670219EDA60000A782A9 /* RACSubclassObject.m in Sources */,\n\t\t\t\tD03766CE19EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m in Sources */,\n\t\t\t\tD037671619EDA60000A782A9 /* RACTupleSpec.m in Sources */,\n\t\t\t\t7A7065851A3F8967001E8354 /* RACKVOProxySpec.m in Sources */,\n\t\t\t\tD03766C619EDA60000A782A9 /* NSObjectRACLiftingSpec.m in Sources */,\n\t\t\t\tB696FB821A7640C00075236D /* TestError.swift in Sources */,\n\t\t\t\tD0C3131F19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */,\n\t\t\t\tD8170FC21B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */,\n\t\t\t\tD03766D219EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m in Sources */,\n\t\t\t\tD03766F419EDA60000A782A9 /* RACSequenceAdditionsSpec.m in Sources */,\n\t\t\t\tD0C3131419EF2B2000984962 /* SchedulerSpec.swift in Sources */,\n\t\t\t\tD0C3131219EF2B2000984962 /* DisposableSpec.swift in Sources */,\n\t\t\t\tD03766EE19EDA60000A782A9 /* RACMulticastConnectionSpec.m in Sources */,\n\t\t\t\tD03766EA19EDA60000A782A9 /* RACKVOChannelSpec.m in Sources */,\n\t\t\t\tCA6F28511C52626B001879D2 /* FlattenSpec.swift in Sources */,\n\t\t\t\tD0C3132119EF2D9700984962 /* RACTestObject.m in Sources */,\n\t\t\t\tD03766FC19EDA60000A782A9 /* RACSignalSpec.m in Sources */,\n\t\t\t\tD037670819EDA60000A782A9 /* RACSubscriberSpec.m in Sources */,\n\t\t\t\tD037671C19EDA60000A782A9 /* UIAlertViewRACSupportSpec.m in Sources */,\n\t\t\t\tD03766F019EDA60000A782A9 /* RACPropertySignalExamples.m in Sources */,\n\t\t\t\tD037670619EDA60000A782A9 /* RACSubscriberExamples.m in Sources */,\n\t\t\t\tD03766D819EDA60000A782A9 /* RACBlockTrampolineSpec.m in Sources */,\n\t\t\t\tD037670019EDA60000A782A9 /* RACStreamExamples.m in Sources */,\n\t\t\t\tD03766CC19EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m in Sources */,\n\t\t\t\tD03766E219EDA60000A782A9 /* RACControlCommandExamples.m in Sources */,\n\t\t\t\tD03766C019EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m in Sources */,\n\t\t\t\tD037670419EDA60000A782A9 /* RACSubjectSpec.m in Sources */,\n\t\t\t\tD03766F219EDA60000A782A9 /* RACSchedulerSpec.m in Sources */,\n\t\t\t\tD03766E019EDA60000A782A9 /* RACCompoundDisposableSpec.m in Sources */,\n\t\t\t\tD03766E619EDA60000A782A9 /* RACDisposableSpec.m in Sources */,\n\t\t\t\tD03766D419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m in Sources */,\n\t\t\t\tD03766DC19EDA60000A782A9 /* RACChannelSpec.m in Sources */,\n\t\t\t\t579504341BB8A34300A5E482 /* BagSpec.swift in Sources */,\n\t\t\t\tD037671A19EDA60000A782A9 /* UIActionSheetRACSupportSpec.m in Sources */,\n\t\t\t\tD03766DA19EDA60000A782A9 /* RACChannelExamples.m in Sources */,\n\t\t\t\tD03766F619EDA60000A782A9 /* RACSequenceExamples.m in Sources */,\n\t\t\t\t02D2602A1C1D6DAF003ACC61 /* SignalLifetimeSpec.swift 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\tD04725F819E49ED7006002AA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D04725E919E49ED7006002AA /* ReactiveCocoa-Mac */;\n\t\t\ttargetProxy = D04725F719E49ED7006002AA /* PBXContainerItemProxy */;\n\t\t};\n\t\tD047261919E49F82006002AA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D047260B19E49F82006002AA /* ReactiveCocoa-iOS */;\n\t\t\ttargetProxy = D047261819E49F82006002AA /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t57A4D23D1BA13D7A00F7D4B1 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvsimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DTRACE_PROBES_DISABLED=1\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t57A4D23E1BA13D7A00F7D4B1 /* Test */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvsimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DTRACE_PROBES_DISABLED=1\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = Test;\n\t\t};\n\t\t57A4D23F1BA13D7A00F7D4B1 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvsimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DTRACE_PROBES_DISABLED=1\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t57A4D2401BA13D7A00F7D4B1 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvsimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DTRACE_PROBES_DISABLED=1\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\tA9B315591B3940610001CB9C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchsimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DTRACE_PROBES_DISABLED=1\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA9B3155A1B3940610001CB9C /* Test */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchsimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DTRACE_PROBES_DISABLED=1\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = Test;\n\t\t};\n\t\tA9B3155B1B3940610001CB9C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchsimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DTRACE_PROBES_DISABLED=1\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA9B3155C1B3940610001CB9C /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchsimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DTRACE_PROBES_DISABLED=1\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\tD04725FE19E49ED7006002AA /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047262919E49FE8006002AA /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tENABLE_BITCODE = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 2.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD04725FF19E49ED7006002AA /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047262B19E49FE8006002AA /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tENABLE_BITCODE = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 2.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD047260119E49ED7006002AA /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD047260219E49ED7006002AA /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD047260419E49ED7006002AA /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoaTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)Tests\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD047260519E49ED7006002AA /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoaTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)Tests\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD047262019E49F82006002AA /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphonesimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD047262119E49F82006002AA /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphonesimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD047262319E49F82006002AA /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */;\n\t\t\tbuildSettings = {\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 = ReactiveCocoaTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)Tests\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD047262419E49F82006002AA /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */;\n\t\t\tbuildSettings = {\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 = ReactiveCocoaTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)Tests\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD047263D19E4A008006002AA /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047262A19E49FE8006002AA /* Profile.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tENABLE_BITCODE = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 2.0;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\tD047263E19E4A008006002AA /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\tD047263F19E4A008006002AA /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoaTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)Tests\";\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\tD047264019E4A008006002AA /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphonesimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\tD047264119E4A008006002AA /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */;\n\t\t\tbuildSettings = {\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 = ReactiveCocoaTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)Tests\";\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\tD047264219E4A00B006002AA /* Test */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047262C19E49FE8006002AA /* Test.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tENABLE_BITCODE = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)-Tests\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 2.0;\n\t\t\t};\n\t\t\tname = Test;\n\t\t};\n\t\tD047264319E4A00B006002AA /* Test */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc;\n\t\t\t};\n\t\t\tname = Test;\n\t\t};\n\t\tD047264419E4A00B006002AA /* Test */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoaTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)Tests\";\n\t\t\t};\n\t\t\tname = Test;\n\t\t};\n\t\tD047264519E4A00B006002AA /* Test */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphonesimulator*]\" = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tINFOPLIST_FILE = ReactiveCocoa/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = ReactiveCocoa/extobjc;\n\t\t\t};\n\t\t\tname = Test;\n\t\t};\n\t\tD047264619E4A00B006002AA /* Test */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */;\n\t\t\tbuildSettings = {\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 = ReactiveCocoaTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)Tests\";\n\t\t\t};\n\t\t\tname = Test;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t57A4D23C1BA13D7A00F7D4B1 /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t57A4D23D1BA13D7A00F7D4B1 /* Debug */,\n\t\t\t\t57A4D23E1BA13D7A00F7D4B1 /* Test */,\n\t\t\t\t57A4D23F1BA13D7A00F7D4B1 /* Release */,\n\t\t\t\t57A4D2401BA13D7A00F7D4B1 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tA9B3155D1B3940610001CB9C /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-watchOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA9B315591B3940610001CB9C /* Debug */,\n\t\t\t\tA9B3155A1B3940610001CB9C /* Test */,\n\t\t\t\tA9B3155B1B3940610001CB9C /* Release */,\n\t\t\t\tA9B3155C1B3940610001CB9C /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD04725E419E49ED7006002AA /* Build configuration list for PBXProject \"ReactiveCocoa\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD04725FE19E49ED7006002AA /* Debug */,\n\t\t\t\tD047264219E4A00B006002AA /* Test */,\n\t\t\t\tD04725FF19E49ED7006002AA /* Release */,\n\t\t\t\tD047263D19E4A008006002AA /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD047260019E49ED7006002AA /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-Mac\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD047260119E49ED7006002AA /* Debug */,\n\t\t\t\tD047264319E4A00B006002AA /* Test */,\n\t\t\t\tD047260219E49ED7006002AA /* Release */,\n\t\t\t\tD047263E19E4A008006002AA /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD047260319E49ED7006002AA /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-MacTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD047260419E49ED7006002AA /* Debug */,\n\t\t\t\tD047264419E4A00B006002AA /* Test */,\n\t\t\t\tD047260519E49ED7006002AA /* Release */,\n\t\t\t\tD047263F19E4A008006002AA /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD047261F19E49F82006002AA /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD047262019E49F82006002AA /* Debug */,\n\t\t\t\tD047264519E4A00B006002AA /* Test */,\n\t\t\t\tD047262119E49F82006002AA /* Release */,\n\t\t\t\tD047264019E4A008006002AA /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD047262219E49F82006002AA /* Build configuration list for PBXNativeTarget \"ReactiveCocoa-iOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD047262319E49F82006002AA /* Debug */,\n\t\t\t\tD047264619E4A00B006002AA /* Test */,\n\t\t\t\tD047262419E49F82006002AA /* Release */,\n\t\t\t\tD047264119E4A008006002AA /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = D04725E119E49ED7006002AA /* Project object */;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-Mac.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"NO\"\n      buildImplicitDependencies = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D45480561A9572F5009D7229\"\n               BuildableName = \"Result.framework\"\n               BlueprintName = \"Result-Mac\"\n               ReferencedContainer = \"container:Carthage/Checkouts/Result/Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D04725E919E49ED7006002AA\"\n               BuildableName = \"ReactiveCocoa.framework\"\n               BlueprintName = \"ReactiveCocoa-Mac\"\n               ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F925EAC195C0D6300ED456B\"\n               BuildableName = \"Nimble.framework\"\n               BlueprintName = \"Nimble-OSX\"\n               ReferencedContainer = \"container:Carthage/Checkouts/Nimble/Nimble.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"DAEB6B8D1943873100289F44\"\n               BuildableName = \"Quick.framework\"\n               BlueprintName = \"Quick-OSX\"\n               ReferencedContainer = \"container:Carthage/Checkouts/Quick/Quick.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D04725F419E49ED7006002AA\"\n               BuildableName = \"ReactiveCocoaTests.xctest\"\n               BlueprintName = \"ReactiveCocoa-MacTests\"\n               ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      codeCoverageEnabled = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D04725F419E49ED7006002AA\"\n               BuildableName = \"ReactiveCocoaTests.xctest\"\n               BlueprintName = \"ReactiveCocoa-MacTests\"\n               ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D04725E919E49ED7006002AA\"\n            BuildableName = \"ReactiveCocoa.framework\"\n            BlueprintName = \"ReactiveCocoa-Mac\"\n            ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D04725E919E49ED7006002AA\"\n            BuildableName = \"ReactiveCocoa.framework\"\n            BlueprintName = \"ReactiveCocoa-Mac\"\n            ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Profile\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D04725E919E49ED7006002AA\"\n            BuildableName = \"ReactiveCocoa.framework\"\n            BlueprintName = \"ReactiveCocoa-Mac\"\n            ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-iOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"NO\"\n      buildImplicitDependencies = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D454807C1A957361009D7229\"\n               BuildableName = \"Result.framework\"\n               BlueprintName = \"Result-iOS\"\n               ReferencedContainer = \"container:Carthage/Checkouts/Result/Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D047260B19E49F82006002AA\"\n               BuildableName = \"ReactiveCocoa.framework\"\n               BlueprintName = \"ReactiveCocoa-iOS\"\n               ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1F1A74281940169200FFFC47\"\n               BuildableName = \"Nimble.framework\"\n               BlueprintName = \"Nimble-iOS\"\n               ReferencedContainer = \"container:Carthage/Checkouts/Nimble/Nimble.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"5A5D117B19473F2100F6D13D\"\n               BuildableName = \"Quick.framework\"\n               BlueprintName = \"Quick-iOS\"\n               ReferencedContainer = \"container:Carthage/Checkouts/Quick/Quick.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D047261519E49F82006002AA\"\n               BuildableName = \"ReactiveCocoaTests.xctest\"\n               BlueprintName = \"ReactiveCocoa-iOSTests\"\n               ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      codeCoverageEnabled = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D047261519E49F82006002AA\"\n               BuildableName = \"ReactiveCocoaTests.xctest\"\n               BlueprintName = \"ReactiveCocoa-iOSTests\"\n               ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D047260B19E49F82006002AA\"\n            BuildableName = \"ReactiveCocoa.framework\"\n            BlueprintName = \"ReactiveCocoa-iOS\"\n            ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D047260B19E49F82006002AA\"\n            BuildableName = \"ReactiveCocoa.framework\"\n            BlueprintName = \"ReactiveCocoa-iOS\"\n            ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Profile\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D047260B19E49F82006002AA\"\n            BuildableName = \"ReactiveCocoa.framework\"\n            BlueprintName = \"ReactiveCocoa-iOS\"\n            ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-tvOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"57A4D1AF1BA13D7A00F7D4B1\"\n               BuildableName = \"ReactiveCocoa.framework\"\n               BlueprintName = \"ReactiveCocoa-tvOS\"\n               ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"57A4D1AF1BA13D7A00F7D4B1\"\n            BuildableName = \"ReactiveCocoa.framework\"\n            BlueprintName = \"ReactiveCocoa-tvOS\"\n            ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"57A4D1AF1BA13D7A00F7D4B1\"\n            BuildableName = \"ReactiveCocoa.framework\"\n            BlueprintName = \"ReactiveCocoa-tvOS\"\n            ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-watchOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"A9B315531B3940610001CB9C\"\n               BuildableName = \"ReactiveCocoa.framework\"\n               BlueprintName = \"ReactiveCocoa-watchOS\"\n               ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"A9B315531B3940610001CB9C\"\n            BuildableName = \"ReactiveCocoa.framework\"\n            BlueprintName = \"ReactiveCocoa-watchOS\"\n            ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Profile\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"A9B315531B3940610001CB9C\"\n            BuildableName = \"ReactiveCocoa.framework\"\n            BlueprintName = \"ReactiveCocoa-watchOS\"\n            ReferencedContainer = \"container:ReactiveCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSControllerRACSupportSpec.m",
    "content": "//\n//  NSControllerRACSupportSpec.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 26/10/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import <AppKit/AppKit.h>\n#import \"RACKVOChannel.h\"\n\n@interface RACTestController : NSController\n\n@property (nonatomic, strong) id object;\n\n@end\n\n@implementation RACTestController\n\n@end\n\nQuickSpecBegin(NSControllerRACSupportSpec)\n\nqck_it(@\"RACKVOChannel should support NSController\", ^{\n\tRACTestController *a = [[RACTestController alloc] init];\n\tRACTestController *b = [[RACTestController alloc] init];\n\tRACChannelTo(a, object) = RACChannelTo(b, object);\n\texpect(a.object).to(beNil());\n\texpect(b.object).to(beNil());\n\n\ta.object = a;\n\texpect(a.object).to(equal(a));\n\texpect(b.object).to(equal(a));\n\n\tb.object = b;\n\texpect(a.object).to(equal(b));\n\texpect(b.object).to(equal(b));\n\n\ta.object = nil;\n\texpect(a.object).to(beNil());\n\texpect(b.object).to(beNil());\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSEnumeratorRACSequenceAdditionsSpec.m",
    "content": "//\n//  NSEnumeratorRACSequenceAdditionsSpec.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 07/01/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACSequenceExamples.h\"\n\n#import \"NSEnumerator+RACSequenceAdditions.h\"\n\nQuickSpecBegin(NSEnumeratorRACSequenceAdditionsSpec)\n\nqck_describe(@\"-rac_sequence\", ^{\n\tNSArray *values = @[ @0, @1, @2, @3, @4 ];\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: values.objectEnumerator.rac_sequence,\n\t\t\tRACSequenceExampleExpectedValues: values\n\t\t};\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSNotificationCenterRACSupportSpec.m",
    "content": "//\n//  NSNotificationCenterRACSupportSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-12-07.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"NSNotificationCenter+RACSupport.h\"\n#import \"RACSignal.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"NSObject+RACDeallocating.h\"\n\nstatic NSString * const TestNotification = @\"TestNotification\";\n\nQuickSpecBegin(NSNotificationCenterRACSupportSpec)\n\n__block NSNotificationCenter *notificationCenter;\n\nqck_beforeEach(^{\n\t// The compiler gets confused and thinks you might be messaging\n\t// NSDistributedNotificationCenter otherwise. Wtf?\n\tnotificationCenter = NSNotificationCenter.defaultCenter;\n});\n\nqck_it(@\"should send the notification when posted by any object\", ^{\n\tRACSignal *signal = [notificationCenter rac_addObserverForName:TestNotification object:nil];\n\n\t__block NSUInteger count = 0;\n\t[signal subscribeNext:^(NSNotification *notification) {\n\t\t++count;\n\n\t\texpect(notification).to(beAKindOf(NSNotification.class));\n\t\texpect(notification.name).to(equal(TestNotification));\n\t}];\n\n\texpect(@(count)).to(equal(@0));\n\n\t[notificationCenter postNotificationName:TestNotification object:nil];\n\texpect(@(count)).to(equal(@1));\n\n\t[notificationCenter postNotificationName:TestNotification object:self];\n\texpect(@(count)).to(equal(@2));\n});\n\nqck_it(@\"should send the notification when posted by a specific object\", ^{\n\tRACSignal *signal = [notificationCenter rac_addObserverForName:TestNotification object:self];\n\n\t__block NSUInteger count = 0;\n\t[signal subscribeNext:^(NSNotification *notification) {\n\t\t++count;\n\n\t\texpect(notification).to(beAKindOf(NSNotification.class));\n\t\texpect(notification.name).to(equal(TestNotification));\n\t\texpect(notification.object).to(beIdenticalTo(self));\n\t}];\n\n\texpect(@(count)).to(equal(@0));\n\n\t[notificationCenter postNotificationName:TestNotification object:nil];\n\texpect(@(count)).to(equal(@0));\n\n\t[notificationCenter postNotificationName:TestNotification object:self];\n\texpect(@(count)).to(equal(@1));\n});\n\nqck_it(@\"shouldn't strongly capture the notification object\", ^{\n\tRACSignal *signal __attribute__((objc_precise_lifetime, unused));\n\n\t__block BOOL dealloced = NO;\n\t@autoreleasepool {\n\t\tNSObject *notificationObject = [[NSObject alloc] init];\n\t\t[notificationObject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\tdealloced = YES;\n\t\t}]];\n\n\t\tsignal = [notificationCenter rac_addObserverForName:TestNotification object:notificationObject];\n\t}\n\n\texpect(@(dealloced)).to(beTruthy());\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACAppKitBindingsSpec.m",
    "content": "//\n//  NSObjectRACAppKitBindingsSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-07-01.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACChannelExamples.h\"\n\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"NSObject+RACAppKitBindings.h\"\n\nQuickSpecBegin(NSObjectRACAppKitBindingsSpec)\n\nqck_itBehavesLike(RACViewChannelExamples, ^{\n\treturn @{\n\t\tRACViewChannelExampleCreateViewBlock: ^{\n\t\t\treturn [[NSSlider alloc] initWithFrame:NSZeroRect];\n\t\t},\n\t\tRACViewChannelExampleCreateTerminalBlock: ^(NSSlider *view) {\n\t\t\treturn [view rac_channelToBinding:NSValueBinding];\n\t\t},\n\t\tRACViewChannelExampleKeyPath: @keypath(NSSlider.new, objectValue),\n\t\tRACViewChannelExampleSetViewValueBlock: ^(NSSlider *view, NSNumber *value) {\n\t\t\tview.objectValue = value;\n\n\t\t\t// Bindings don't actually trigger from programmatic modification. Do it\n\t\t\t// manually.\n\t\t\tNSDictionary *bindingInfo = [view infoForBinding:NSValueBinding];\n\t\t\t[bindingInfo[NSObservedObjectKey] setValue:value forKeyPath:bindingInfo[NSObservedKeyPathKey]];\n\t\t}\n\t};\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACDeallocatingSpec.m",
    "content": "//\n//  NSObject+RACDeallocating.m\n//  ReactiveCocoa\n//\n//  Created by Kazuo Koga on 2013/03/15.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACTestObject.h\"\n\n#import \"NSObject+RACDeallocating.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal+Operations.h\"\n#import <objc/runtime.h>\n\n@interface RACDeallocSwizzlingTestClass : NSObject\n@end\n\n@implementation RACDeallocSwizzlingTestClass\n\n- (void)dealloc {\n\t// Provide an empty implementation just so we can swizzle it.\n}\n\n@end\n\n@interface RACDeallocSwizzlingTestSubclass : RACDeallocSwizzlingTestClass\n@end\n\n@implementation RACDeallocSwizzlingTestSubclass\n@end\n\nQuickSpecBegin(NSObjectRACDeallocatingSpec)\n\nqck_describe(@\"-dealloc swizzling\", ^{\n\tSEL selector = NSSelectorFromString(@\"dealloc\");\n\n\tqck_it(@\"should not invoke superclass -dealloc method twice\", ^{\n\t\t__block NSUInteger superclassDeallocatedCount = 0;\n\t\t__block BOOL subclassDeallocated = NO;\n\n\t\t@autoreleasepool {\n\t\t\tRACDeallocSwizzlingTestSubclass *object __attribute__((objc_precise_lifetime)) = [[RACDeallocSwizzlingTestSubclass alloc] init];\n\n\t\t\tMethod oldDeallocMethod = class_getInstanceMethod(RACDeallocSwizzlingTestClass.class, selector);\n\t\t\tvoid (*oldDealloc)(id, SEL) = (__typeof__(oldDealloc))method_getImplementation(oldDeallocMethod);\n\n\t\t\tid newDealloc = ^(__unsafe_unretained id self) {\n\t\t\t\tsuperclassDeallocatedCount++;\n\t\t\t\toldDealloc(self, selector);\n\t\t\t};\n\n\t\t\tclass_replaceMethod(RACDeallocSwizzlingTestClass.class, selector, imp_implementationWithBlock(newDealloc), method_getTypeEncoding(oldDeallocMethod));\n\n\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tsubclassDeallocated = YES;\n\t\t\t}]];\n\n\t\t\texpect(@(subclassDeallocated)).to(beFalsy());\n\t\t\texpect(@(superclassDeallocatedCount)).to(equal(@0));\n\t\t}\n\n\t\texpect(@(subclassDeallocated)).to(beTruthy());\n\t\texpect(@(superclassDeallocatedCount)).to(equal(@1));\n\t});\n\n\tqck_it(@\"should invoke superclass -dealloc method swizzled in after the subclass\", ^{\n\t\t__block BOOL superclassDeallocated = NO;\n\t\t__block BOOL subclassDeallocated = NO;\n\n\t\t@autoreleasepool {\n\t\t\tRACDeallocSwizzlingTestSubclass *object __attribute__((objc_precise_lifetime)) = [[RACDeallocSwizzlingTestSubclass alloc] init];\n\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tsubclassDeallocated = YES;\n\t\t\t}]];\n\n\t\t\tMethod oldDeallocMethod = class_getInstanceMethod(RACDeallocSwizzlingTestClass.class, selector);\n\t\t\tvoid (*oldDealloc)(id, SEL) = (__typeof__(oldDealloc))method_getImplementation(oldDeallocMethod);\n\n\t\t\tid newDealloc = ^(__unsafe_unretained id self) {\n\t\t\t\tsuperclassDeallocated = YES;\n\t\t\t\toldDealloc(self, selector);\n\t\t\t};\n\n\t\t\tclass_replaceMethod(RACDeallocSwizzlingTestClass.class, selector, imp_implementationWithBlock(newDealloc), method_getTypeEncoding(oldDeallocMethod));\n\n\t\t\texpect(@(subclassDeallocated)).to(beFalsy());\n\t\t\texpect(@(superclassDeallocated)).to(beFalsy());\n\t\t}\n\n\t\texpect(@(subclassDeallocated)).to(beTruthy());\n\t\texpect(@(superclassDeallocated)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"-rac_deallocDisposable\", ^{\n\tqck_it(@\"should dispose of the disposable when it is dealloc'd\", ^{\n\t\t__block BOOL wasDisposed = NO;\n\t\t@autoreleasepool {\n\t\t\tNSObject *object __attribute__((objc_precise_lifetime)) = [[NSObject alloc] init];\n\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\twasDisposed = YES;\n\t\t\t}]];\n\n\t\t\texpect(@(wasDisposed)).to(beFalsy());\n\t\t}\n\n\t\texpect(@(wasDisposed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should be able to use the object during disposal\", ^{\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\n\t\t\t@autoreleasepool {\n\t\t\t\tobject.objectValue = [@\"foo\" mutableCopy];\n\t\t\t}\n\n\t\t\t__unsafe_unretained RACTestObject *weakObject = object;\n\n\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\texpect(weakObject.objectValue).to(equal(@\"foo\"));\n\t\t\t}]];\n\t\t}\n\t});\n});\n\nqck_describe(@\"-rac_willDeallocSignal\", ^{\n\tqck_it(@\"should complete on dealloc\", ^{\n\t\t__block BOOL completed = NO;\n\t\t@autoreleasepool {\n\t\t\t[[[[RACTestObject alloc] init] rac_willDeallocSignal] subscribeCompleted:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\t\t}\n\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should not send anything\", ^{\n\t\t__block BOOL valueReceived = NO;\n\t\t__block BOOL completed = NO;\n\t\t@autoreleasepool {\n\t\t\t[[[[RACTestObject alloc] init] rac_willDeallocSignal] subscribeNext:^(id x) {\n\t\t\t\tvalueReceived = YES;\n\t\t\t} completed:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\t\t}\n\n\t\texpect(@(valueReceived)).to(beFalsy());\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should complete upon subscription if already deallocated\", ^{\n\t\t__block BOOL deallocated = NO;\n\n\t\tRACSignal *signal;\n\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\t\tsignal = [object rac_willDeallocSignal];\n\t\t\t[signal subscribeCompleted:^{\n\t\t\t\tdeallocated = YES;\n\t\t\t}];\n\t\t}\n\n\t\texpect(@(deallocated)).to(beTruthy());\n\t\texpect(@([signal waitUntilCompleted:NULL])).to(beTruthy());\n\t});\n\n\tqck_it(@\"should complete before the object is invalid\", ^{\n\t\t__block NSString *objectValue;\n\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\n\t\t\t@autoreleasepool {\n\t\t\t\tobject.objectValue = [@\"foo\" mutableCopy];\n\t\t\t}\n\n\t\t\t__unsafe_unretained RACTestObject *weakObject = object;\n\n\t\t\t[[object rac_willDeallocSignal] subscribeCompleted:^{\n\t\t\t\tobjectValue = [weakObject.objectValue copy];\n\t\t\t}];\n\t\t}\n\n\t\texpect(objectValue).to(equal(@\"foo\"));\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACLiftingSpec.m",
    "content": "//\n//  NSObjectRACLifting.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 10/2/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACTestObject.h\"\n\n#import \"NSObject+RACLifting.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACPropertySubscribing.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSubject.h\"\n#import \"RACTuple.h\"\n#import \"RACUnit.h\"\n\nQuickSpecBegin(NSObjectRACLiftingSpec)\n\nqck_describe(@\"-rac_liftSelector:withSignals:\", ^{\n\t__block RACTestObject *object;\n\n\tqck_beforeEach(^{\n\t\tobject = [[RACTestObject alloc] init];\n\t});\n\n\tqck_it(@\"should call the selector with the value of the signal\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setObjectValue:) withSignals:subject, nil];\n\n\t\texpect(object.objectValue).to(beNil());\n\n\t\t[subject sendNext:@1];\n\t\texpect(object.objectValue).to(equal(@1));\n\n\t\t[subject sendNext:@42];\n\t\texpect(object.objectValue).to(equal(@42));\n\t});\n});\n\nqck_describe(@\"-rac_liftSelector:withSignalsFromArray:\", ^{\n\t__block RACTestObject *object;\n\n\tqck_beforeEach(^{\n\t\tobject = [[RACTestObject alloc] init];\n\t});\n\n\tqck_it(@\"should call the selector with the value of the signal\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(object.objectValue).to(beNil());\n\n\t\t[subject sendNext:@1];\n\t\texpect(object.objectValue).to(equal(@1));\n\n\t\t[subject sendNext:@42];\n\t\texpect(object.objectValue).to(equal(@42));\n\t});\n\n\tqck_it(@\"should call the selector with the value of the signal unboxed\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setIntegerValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(@(object.integerValue)).to(equal(@0));\n\n\t\t[subject sendNext:@1];\n\t\texpect(@(object.integerValue)).to(equal(@1));\n\n\t\t[subject sendNext:@42];\n\t\texpect(@(object.integerValue)).to(equal(@42));\n\t});\n\n\tqck_it(@\"should work with multiple arguments\", ^{\n\t\tRACSubject *objectValueSubject = [RACSubject subject];\n\t\tRACSubject *integerValueSubject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setObjectValue:andIntegerValue:) withSignalsFromArray:@[ objectValueSubject, integerValueSubject ]];\n\n\t\texpect(@(object.hasInvokedSetObjectValueAndIntegerValue)).to(beFalsy());\n\t\texpect(object.objectValue).to(beNil());\n\t\texpect(@(object.integerValue)).to(equal(@0));\n\n\t\t[objectValueSubject sendNext:@1];\n\t\texpect(@(object.hasInvokedSetObjectValueAndIntegerValue)).to(beFalsy());\n\t\texpect(object.objectValue).to(beNil());\n\t\texpect(@(object.integerValue)).to(equal(@0));\n\n\t\t[integerValueSubject sendNext:@42];\n\t\texpect(@(object.hasInvokedSetObjectValueAndIntegerValue)).to(beTruthy());\n\t\texpect(object.objectValue).to(equal(@1));\n\t\texpect(@(object.integerValue)).to(equal(@42));\n\t});\n\n\tqck_it(@\"should work with signals that immediately start with a value\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ [subject startWith:@42] ]];\n\n\t\texpect(object.objectValue).to(equal(@42));\n\n\t\t[subject sendNext:@1];\n\t\texpect(object.objectValue).to(equal(@1));\n\t});\n\n\tqck_it(@\"should work with signals that send nil\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ subject ]];\n\n\t\t[subject sendNext:nil];\n\t\texpect(object.objectValue).to(beNil());\n\n\t\t[subject sendNext:RACTupleNil.tupleNil];\n\t\texpect(object.objectValue).to(beNil());\n\t});\n\n\tqck_it(@\"should work with integers\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setIntegerValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(@(object.integerValue)).to(equal(@0));\n\n\t\t[subject sendNext:@1];\n\t\texpect(@(object.integerValue)).to(equal(@1));\n\t});\n\n\tqck_it(@\"should convert between numeric types\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setIntegerValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(@(object.integerValue)).to(equal(@0));\n\n\t\t[subject sendNext:@1.0];\n\t\texpect(@(object.integerValue)).to(equal(@1));\n\t});\n\n\tqck_it(@\"should work with class objects\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(object.objectValue).to(beNil());\n\n\t\t[subject sendNext:self.class];\n\t\texpect(object.objectValue).to(equal(self.class));\n\t});\n\n\tqck_it(@\"should work for char pointer\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setCharPointerValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(@((size_t)object.charPointerValue)).to(equal(@0));\n\n\t\tNSString *string = @\"blah blah blah\";\n\t\t[subject sendNext:string];\n\t\texpect(@(object.charPointerValue)).to(equal(string));\n\t});\n\n\tqck_it(@\"should work for const char pointer\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setConstCharPointerValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(@((size_t)object.constCharPointerValue)).to(equal(@0));\n\n\t\tNSString *string = @\"blah blah blah\";\n\t\t[subject sendNext:string];\n\t\texpect(@(object.constCharPointerValue)).to(equal(string));\n\t});\n\n\tqck_it(@\"should work for CGRect\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setRectValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(@(CGRectEqualToRect(object.rectValue, CGRectZero))).to(beTruthy());\n\n\t\tCGRect value = CGRectMake(10, 20, 30, 40);\n\t\t[subject sendNext:[NSValue valueWithBytes:&value objCType:@encode(CGRect)]];\n\t\texpect(@(CGRectEqualToRect(object.rectValue, value))).to(beTruthy());\n\t});\n\n\tqck_it(@\"should work for CGSize\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setSizeValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(@(CGSizeEqualToSize(object.sizeValue, CGSizeZero))).to(beTruthy());\n\n\t\tCGSize value = CGSizeMake(10, 20);\n\t\t[subject sendNext:[NSValue valueWithBytes:&value objCType:@encode(CGSize)]];\n\t\texpect(@(CGSizeEqualToSize(object.sizeValue, value))).to(beTruthy());\n\t});\n\n\tqck_it(@\"should work for CGPoint\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setPointValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(@(CGPointEqualToPoint(object.pointValue, CGPointZero))).to(beTruthy());\n\n\t\tCGPoint value = CGPointMake(10, 20);\n\t\t[subject sendNext:[NSValue valueWithBytes:&value objCType:@encode(CGPoint)]];\n\t\texpect(@(CGPointEqualToPoint(object.pointValue, value))).to(beTruthy());\n\t});\n\n\tqck_it(@\"should work for NSRange\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setRangeValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(@(NSEqualRanges(object.rangeValue, NSMakeRange(0, 0)))).to(beTruthy());\n\n\t\tNSRange value = NSMakeRange(10, 20);\n\t\t[subject sendNext:[NSValue valueWithRange:value]];\n\t\texpect(@(NSEqualRanges(object.rangeValue, value))).to(beTruthy());\n\t});\n\n\tqck_it(@\"should work for _Bool\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setC99BoolValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(@(object.c99BoolValue)).to(beFalsy());\n\n\t\t_Bool value = true;\n\t\t[subject sendNext:@(value)];\n\t\texpect(@(object.c99BoolValue)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should work for primitive pointers\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(write5ToIntPointer:) withSignalsFromArray:@[ subject ]];\n\n\t\tint value = 0;\n\t\tint *valuePointer = &value;\n\t\texpect(@(value)).to(equal(@0));\n\n\t\t[subject sendNext:[NSValue valueWithPointer:valuePointer]];\n\t\texpect(@(value)).to(equal(@5));\n\t});\n\n\tqck_it(@\"should work for custom structs\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setStructValue:) withSignalsFromArray:@[ subject ]];\n\n\t\texpect(@(object.structValue.integerField)).to(equal(@0));\n\t\texpect(@(object.structValue.doubleField)).to(equal(@0.0));\n\n\t\tRACTestStruct value = (RACTestStruct){7, 1.23};\n\t\t[subject sendNext:[NSValue valueWithBytes:&value objCType:@encode(typeof(value))]];\n\t\texpect(@(object.structValue.integerField)).to(equal(@(value.integerField)));\n\t\texpect(@(object.structValue.doubleField)).to(equal(@(value.doubleField)));\n\t});\n\n\tqck_it(@\"should send the latest value of the signal as the right argument\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t[object rac_liftSelector:@selector(setObjectValue:andIntegerValue:) withSignalsFromArray:@[ [RACSignal return:@\"object\"], subject ]];\n\t\t[subject sendNext:@1];\n\n\t\texpect(object.objectValue).to(equal(@\"object\"));\n\t\texpect(@(object.integerValue)).to(equal(@1));\n\t});\n\n\tqck_describe(@\"the returned signal\", ^{\n\t\tqck_it(@\"should send the return value of the method invocation\", ^{\n\t\t\tRACSubject *objectSubject = [RACSubject subject];\n\t\t\tRACSubject *integerSubject = [RACSubject subject];\n\t\t\tRACSignal *signal = [object rac_liftSelector:@selector(combineObjectValue:andIntegerValue:) withSignalsFromArray:@[ objectSubject, integerSubject ]];\n\n\t\t\t__block NSString *result;\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\tresult = x;\n\t\t\t}];\n\n\t\t\t[objectSubject sendNext:@\"Magic number\"];\n\t\t\texpect(result).to(beNil());\n\n\t\t\t[integerSubject sendNext:@42];\n\t\t\texpect(result).to(equal(@\"Magic number: 42\"));\n\t\t});\n\n\t\tqck_it(@\"should send RACUnit.defaultUnit for void-returning methods\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tRACSignal *signal = [object rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ subject ]];\n\n\t\t\t__block id result;\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\tresult = x;\n\t\t\t}];\n\n\t\t\t[subject sendNext:@1];\n\n\t\t\texpect(result).to(equal(RACUnit.defaultUnit));\n\t\t});\n\n\t\tqck_it(@\"should support integer returning methods\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tRACSignal *signal = [object rac_liftSelector:@selector(doubleInteger:) withSignalsFromArray:@[ subject ]];\n\n\t\t\t__block id result;\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\tresult = x;\n\t\t\t}];\n\n\t\t\t[subject sendNext:@1];\n\n\t\t\texpect(result).to(equal(@2));\n\t\t});\n\n\t\tqck_it(@\"should support char * returning methods\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tRACSignal *signal = [object rac_liftSelector:@selector(doubleString:) withSignalsFromArray:@[ subject ]];\n\n\t\t\t__block id result;\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\tresult = x;\n\t\t\t}];\n\n\t\t\t[subject sendNext:@\"test\"];\n\n\t\t\texpect(result).to(equal(@\"testtest\"));\n\t\t});\n\n\t\tqck_it(@\"should support const char * returning methods\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tRACSignal *signal = [object rac_liftSelector:@selector(doubleConstString:) withSignalsFromArray:@[ subject ]];\n\n\t\t\t__block id result;\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\tresult = x;\n\t\t\t}];\n\n\t\t\t[subject sendNext:@\"test\"];\n\n\t\t\texpect(result).to(equal(@\"testtest\"));\n\t\t});\n\n\t\tqck_it(@\"should support struct returning methods\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tRACSignal *signal = [object rac_liftSelector:@selector(doubleStruct:) withSignalsFromArray:@[ subject ]];\n\n\t\t\t__block NSValue *boxedResult;\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\tboxedResult = x;\n\t\t\t}];\n\n\t\t\tRACTestStruct value = {4, 12.3};\n\t\t\tNSValue *boxedValue = [NSValue valueWithBytes:&value objCType:@encode(typeof(value))];\n\t\t\t[subject sendNext:boxedValue];\n\n\t\t\tRACTestStruct result = {0, 0.0};\n\t\t\t[boxedResult getValue:&result];\n\t\t\texpect(@(result.integerField)).to(equal(@8));\n\t\t\texpect(@(result.doubleField)).to(equal(@24.6));\n\t\t});\n\n\t\tqck_it(@\"should support block arguments and returns\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tRACSignal *signal = [object rac_liftSelector:@selector(wrapBlock:) withSignalsFromArray:@[ subject ]];\n\n\t\t\t__block BOOL blockInvoked = NO;\n\t\t\tdispatch_block_t testBlock = ^{\n\t\t\t\tblockInvoked = YES;\n\t\t\t};\n\n\t\t\t__block dispatch_block_t result;\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\tresult = x;\n\t\t\t}];\n\n\t\t\t[subject sendNext:testBlock];\n\t\t\texpect(result).notTo(beNil());\n\n\t\t\tresult();\n\t\t\texpect(@(blockInvoked)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should replay the last value\", ^{\n\t\t\tRACSubject *objectSubject = [RACSubject subject];\n\t\t\tRACSubject *integerSubject = [RACSubject subject];\n\t\t\tRACSignal *signal = [object rac_liftSelector:@selector(combineObjectValue:andIntegerValue:) withSignalsFromArray:@[ objectSubject, integerSubject ]];\n\n\t\t\t[objectSubject sendNext:@\"Magic number\"];\n\t\t\t[integerSubject sendNext:@42];\n\t\t\t[integerSubject sendNext:@43];\n\n\t\t\t__block NSString *result;\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\tresult = x;\n\t\t\t}];\n\n\t\t\texpect(result).to(equal(@\"Magic number: 43\"));\n\t\t});\n\t});\n\n\tqck_it(@\"shouldn't strongly capture the receiver\", ^{\n\t\t__block BOOL dealloced = NO;\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *testObject __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\t\t\t[testObject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tdealloced = YES;\n\t\t\t}]];\n\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\t[testObject rac_liftSelector:@selector(setObjectValue:) withSignalsFromArray:@[ subject ]];\n\t\t\t[subject sendNext:@1];\n\t\t}\n\n\t\texpect(@(dealloced)).to(beTruthy());\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACPropertySubscribingExamples.h",
    "content": "//\n//  NSObjectRACPropertySubscribingExamples.h\n//  ReactiveCocoa\n//\n//  Created by Josh Vera on 4/10/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n// The name of the shared examples for a signal-driven observation.\nextern NSString * const RACPropertySubscribingExamples;\n\n// The block should have the signature:\n//   RACSignal * (^)(RACTestObject *testObject, NSString *keyPath, id observer)\n// and should observe the value of the key path on testObject with observer. The value\n// for this key should not be nil.\nextern NSString * const RACPropertySubscribingExamplesSetupBlock;\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACPropertySubscribingExamples.m",
    "content": "//\n//  NSObjectRACPropertySubscribingExamples.m\n//  ReactiveCocoa\n//\n//  Created by Josh Vera on 4/10/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACTestObject.h\"\n#import \"NSObjectRACPropertySubscribingExamples.h\"\n\n#import <ReactiveCocoa/EXTScope.h>\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACPropertySubscribing.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal.h\"\n\nNSString * const RACPropertySubscribingExamples = @\"RACPropertySubscribingExamples\";\nNSString * const RACPropertySubscribingExamplesSetupBlock = @\"RACPropertySubscribingExamplesSetupBlock\";\n\nQuickConfigurationBegin(NSObjectRACPropertySubscribingExamples)\n\n+ (void)configure:(Configuration *)configuration {\n\tsharedExamples(RACPropertySubscribingExamples, ^(QCKDSLSharedExampleContext exampleContext) {\n\t\t__block RACSignal *(^signalBlock)(RACTestObject *object, NSString *keyPath, id observer);\n\n\t\tqck_beforeEach(^{\n\t\t\tsignalBlock = exampleContext()[RACPropertySubscribingExamplesSetupBlock];\n\t\t});\n\n\t\tqck_it(@\"should send the current value once on subscription\", ^{\n\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\t\t\tRACSignal *signal = signalBlock(object, @keypath(object, objectValue), self);\n\t\t\tNSMutableArray *values = [NSMutableArray array];\n\n\t\t\tobject.objectValue = @0;\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\t[values addObject:x];\n\t\t\t}];\n\n\t\t\texpect(values).to(equal((@[ @0 ])));\n\t\t});\n\n\t\tqck_it(@\"should send the new value when it changes\", ^{\n\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\t\t\tRACSignal *signal = signalBlock(object, @keypath(object, objectValue), self);\n\t\t\tNSMutableArray *values = [NSMutableArray array];\n\n\t\t\tobject.objectValue = @0;\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\t[values addObject:x];\n\t\t\t}];\n\n\t\t\texpect(values).to(equal((@[ @0 ])));\n\n\t\t\tobject.objectValue = @1;\n\t\t\texpect(values).to(equal((@[ @0, @1 ])));\n\n\t\t});\n\n\t\tqck_it(@\"should stop observing when disposed\", ^{\n\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\t\t\tRACSignal *signal = signalBlock(object, @keypath(object, objectValue), self);\n\t\t\tNSMutableArray *values = [NSMutableArray array];\n\n\t\t\tobject.objectValue = @0;\n\t\t\tRACDisposable *disposable = [signal subscribeNext:^(id x) {\n\t\t\t\t[values addObject:x];\n\t\t\t}];\n\n\t\t\tobject.objectValue = @1;\n\t\t\tNSArray *expected = @[ @0, @1 ];\n\t\t\texpect(values).to(equal(expected));\n\n\t\t\t[disposable dispose];\n\t\t\tobject.objectValue = @2;\n\t\t\texpect(values).to(equal(expected));\n\t\t});\n\n\t\tqck_it(@\"shouldn't send any more values after the observer is gone\", ^{\n\t\t\t__block BOOL observerDealloced = NO;\n\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\t\t\tNSMutableArray *values = [NSMutableArray array];\n\t\t\t@autoreleasepool {\n\t\t\t\tRACTestObject *observer __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\t\t\t\t[observer.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tobserverDealloced = YES;\n\t\t\t\t}]];\n\n\t\t\t\tRACSignal *signal = signalBlock(object, @keypath(object, objectValue), observer);\n\t\t\t\tobject.objectValue = @1;\n\t\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\t\t[values addObject:x];\n\t\t\t\t}];\n\t\t\t}\n\n\t\t\texpect(@(observerDealloced)).to(beTruthy());\n\n\t\t\tNSArray *expected = @[ @1 ];\n\t\t\texpect(values).to(equal(expected));\n\n\t\t\tobject.objectValue = @2;\n\t\t\texpect(values).to(equal(expected));\n\t\t});\n\n\t\tqck_it(@\"shouldn't keep either object alive unnaturally long\", ^{\n\t\t\t__block BOOL objectDealloced = NO;\n\t\t\t__block BOOL scopeObjectDealloced = NO;\n\t\t\t@autoreleasepool {\n\t\t\t\tRACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\t\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tobjectDealloced = YES;\n\t\t\t\t}]];\n\t\t\t\tRACTestObject *scopeObject __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\t\t\t\t[scopeObject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tscopeObjectDealloced = YES;\n\t\t\t\t}]];\n\n\t\t\t\tRACSignal *signal = signalBlock(object, @keypath(object, objectValue), scopeObject);\n\n\t\t\t\t[signal subscribeNext:^(id _) {\n\n\t\t\t\t}];\n\t\t\t}\n\n\t\t\texpect(@(objectDealloced)).to(beTruthy());\n\t\t\texpect(@(scopeObjectDealloced)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"shouldn't keep the signal alive past the lifetime of the object\", ^{\n\t\t\t__block BOOL objectDealloced = NO;\n\t\t\t__block BOOL signalDealloced = NO;\n\t\t\t@autoreleasepool {\n\t\t\t\tRACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\t\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tobjectDealloced = YES;\n\t\t\t\t}]];\n\n\t\t\t\tRACSignal *signal = [signalBlock(object, @keypath(object, objectValue), self) map:^(id value) {\n\t\t\t\t\treturn value;\n\t\t\t\t}];\n\n\t\t\t\t[signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tsignalDealloced = YES;\n\t\t\t\t}]];\n\n\t\t\t\t[signal subscribeNext:^(id _) {\n\n\t\t\t\t}];\n\t\t\t}\n\n\t\t\texpect(@(signalDealloced)).toEventually(beTruthy());\n\t\t\texpect(@(objectDealloced)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"shouldn't crash when the value is changed on a different queue\", ^{\n\t\t\t__block id value;\n\t\t\t@autoreleasepool {\n\t\t\t\tRACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\n\t\t\t\tRACSignal *signal = signalBlock(object, @keypath(object, objectValue), self);\n\n\t\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\t\tvalue = x;\n\t\t\t\t}];\n\n\t\t\t\tNSOperationQueue *queue = [[NSOperationQueue alloc] init];\n\t\t\t\t[queue addOperationWithBlock:^{\n\t\t\t\t\tobject.objectValue = @1;\n\t\t\t\t}];\n\n\t\t\t\t[queue waitUntilAllOperationsAreFinished];\n\t\t\t}\n\n\t\t\texpect(value).toEventually(equal(@1));\n\t\t});\n\n\t\tqck_describe(@\"mutating collections\", ^{\n\t\t\t__block RACTestObject *object;\n\t\t\t__block NSMutableOrderedSet *lastValue;\n\t\t\t__block NSMutableOrderedSet *proxySet;\n\n\t\t\tqck_beforeEach(^{\n\t\t\t\tobject = [[RACTestObject alloc] init];\n\t\t\t\tobject.objectValue = [NSMutableOrderedSet orderedSetWithObject:@1];\n\n\t\t\t\tNSString *keyPath = @keypath(object, objectValue);\n\n\t\t\t\t[signalBlock(object, keyPath, self) subscribeNext:^(NSMutableOrderedSet *x) {\n\t\t\t\t\tlastValue = x;\n\t\t\t\t}];\n\n\t\t\t\tproxySet = [object mutableOrderedSetValueForKey:keyPath];\n\t\t\t});\n\n\t\t\tqck_it(@\"sends the newest object when inserting values into an observed object\", ^{\n\t\t\t\tNSMutableOrderedSet *expected = [NSMutableOrderedSet orderedSetWithObjects: @1, @2, nil];\n\n\t\t\t\t[proxySet addObject:@2];\n\t\t\t\texpect(lastValue).to(equal(expected));\n\t\t\t});\n\n\t\t\tqck_it(@\"sends the newest object when removing values in an observed object\", ^{\n\t\t\t\tNSMutableOrderedSet *expected = [NSMutableOrderedSet orderedSet];\n\n\t\t\t\t[proxySet removeAllObjects];\n\t\t\t\texpect(lastValue).to(equal(expected));\n\t\t\t});\n\n\t\t\tqck_it(@\"sends the newest object when replacing values in an observed object\", ^{\n\t\t\t\tNSMutableOrderedSet *expected = [NSMutableOrderedSet orderedSetWithObjects: @2, nil];\n\n\t\t\t\t[proxySet replaceObjectAtIndex:0 withObject:@2];\n\t\t\t\texpect(lastValue).to(equal(expected));\n\t\t\t});\n\t\t});\n\t});\n}\n\nQuickConfigurationEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACPropertySubscribingSpec.m",
    "content": "//\n//  NSObjectRACPropertySubscribingSpec.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 9/28/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"NSObjectRACPropertySubscribingExamples.h\"\n#import \"RACTestObject.h\"\n\n#import \"NSObject+RACPropertySubscribing.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal.h\"\n\nQuickSpecBegin(NSObjectRACPropertySubscribingSpec)\n\nqck_describe(@\"-rac_valuesForKeyPath:observer:\", ^{\n\tid (^setupBlock)(id, id, id) = ^(RACTestObject *object, NSString *keyPath, id observer) {\n\t\treturn [object rac_valuesForKeyPath:keyPath observer:observer];\n\t};\n\n\tqck_itBehavesLike(RACPropertySubscribingExamples, ^{\n\t\treturn @{ RACPropertySubscribingExamplesSetupBlock: setupBlock };\n\t});\n\n});\n\nqck_describe(@\"+rac_signalWithChangesFor:keyPath:options:observer:\", ^{\n\tqck_describe(@\"KVO options argument\", ^{\n\t\t__block RACTestObject *object;\n\t\t__block id actual;\n\t\t__block RACSignal *(^objectValueSignal)(NSKeyValueObservingOptions);\n\n\t\tqck_beforeEach(^{\n\t\t\tobject = [[RACTestObject alloc] init];\n\n\t\t\tobjectValueSignal = ^(NSKeyValueObservingOptions options) {\n\t\t\t\treturn [[object rac_valuesAndChangesForKeyPath:@keypath(object, objectValue) options:options observer:self] reduceEach:^(id value, NSDictionary *change) {\n\t\t\t\t\treturn change;\n\t\t\t\t}];\n\t\t\t};\n\t\t});\n\n\t\tqck_it(@\"sends a KVO dictionary\", ^{\n\t\t\t[objectValueSignal(0) subscribeNext:^(NSDictionary *x) {\n\t\t\t\tactual = x;\n\t\t\t}];\n\n\t\t\tobject.objectValue = @1;\n\n\t\t\texpect(actual).to(beAKindOf(NSDictionary.class));\n\t\t});\n\n\t\tqck_it(@\"sends a kind key by default\", ^{\n\t\t\t[objectValueSignal(0) subscribeNext:^(NSDictionary *x) {\n\t\t\t\tactual = x[NSKeyValueChangeKindKey];\n\t\t\t}];\n\n\t\t\tobject.objectValue = @1;\n\n\t\t\texpect(actual).notTo(beNil());\n\t\t});\n\n\t\tqck_it(@\"sends the newest changes with NSKeyValueObservingOptionNew\", ^{\n\t\t\t[objectValueSignal(NSKeyValueObservingOptionNew) subscribeNext:^(NSDictionary *x) {\n\t\t\t\tactual = x[NSKeyValueChangeNewKey];\n\t\t\t}];\n\n\t\t\tobject.objectValue = @1;\n\t\t\texpect(actual).to(equal(@1));\n\n\t\t\tobject.objectValue = @2;\n\t\t\texpect(actual).to(equal(@2));\n\t\t});\n\n\t\tqck_it(@\"sends an additional change value with NSKeyValueObservingOptionPrior\", ^{\n\t\t\tNSMutableArray *values = [NSMutableArray new];\n\t\t\tNSArray *expected = @[ @(YES), @(NO) ];\n\n\t\t\t[objectValueSignal(NSKeyValueObservingOptionPrior) subscribeNext:^(NSDictionary *x) {\n\t\t\t\tBOOL isPrior = [x[NSKeyValueChangeNotificationIsPriorKey] boolValue];\n\t\t\t\t[values addObject:@(isPrior)];\n\t\t\t}];\n\n\t\t\tobject.objectValue = @[ @1 ];\n\n\t\t\texpect(values).to(equal(expected));\n\t\t});\n\n\t\tqck_it(@\"sends index changes when adding, inserting or removing a value from an observed object\", ^{\n\t\t\t__block NSUInteger hasIndexesCount = 0;\n\n\t\t\t[objectValueSignal(0) subscribeNext:^(NSDictionary *x) {\n\t\t\t\tif (x[NSKeyValueChangeIndexesKey] != nil) {\n\t\t\t\t\thasIndexesCount += 1;\n\t\t\t\t}\n\t\t\t}];\n\n\t\t\tobject.objectValue = [NSMutableOrderedSet orderedSet];\n\t\t\texpect(@(hasIndexesCount)).to(equal(@0));\n\n\t\t\tNSMutableOrderedSet *objectValue = [object mutableOrderedSetValueForKey:@\"objectValue\"];\n\n\t\t\t[objectValue addObject:@1];\n\t\t\texpect(@(hasIndexesCount)).to(equal(@1));\n\n\t\t\t[objectValue replaceObjectAtIndex:0 withObject:@2];\n\t\t\texpect(@(hasIndexesCount)).to(equal(@2));\n\n\t\t\t[objectValue removeObject:@2];\n\t\t\texpect(@(hasIndexesCount)).to(equal(@3));\n\t\t});\n\n\t\tqck_it(@\"sends the previous value with NSKeyValueObservingOptionOld\", ^{\n\t\t\t[objectValueSignal(NSKeyValueObservingOptionOld) subscribeNext:^(NSDictionary *x) {\n\t\t\t\tactual = x[NSKeyValueChangeOldKey];\n\t\t\t}];\n\n\t\t\tobject.objectValue = @1;\n\t\t\texpect(actual).to(equal(NSNull.null));\n\n\t\t\tobject.objectValue = @2;\n\t\t\texpect(actual).to(equal(@1));\n\t\t});\n\n\t\tqck_it(@\"sends the initial value with NSKeyValueObservingOptionInitial\", ^{\n\t\t\t[objectValueSignal(NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew) subscribeNext:^(NSDictionary *x) {\n\t\t\t\tactual = x[NSKeyValueChangeNewKey];\n\t\t\t}];\n\t\t\t\n\t\t\texpect(actual).to(equal(NSNull.null));\n\t\t});\n\t});\n});\n\nqck_describe(@\"-rac_valuesAndChangesForKeyPath:options:observer:\", ^{\n\tqck_it(@\"should complete immediately if the receiver or observer have deallocated\", ^{\n\t\tRACSignal *signal;\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\t\t\tRACTestObject *observer __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\t\t\tsignal = [object rac_valuesAndChangesForKeyPath:@keypath(object, stringValue) options:0 observer:observer];\n\t\t}\n\n\t\t__block BOOL completed = NO;\n\t\t[signal subscribeCompleted:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSObjectRACSelectorSignalSpec.m",
    "content": "//\n//  NSObjectRACSelectorSignalSpec.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/18/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACTestObject.h\"\n#import \"RACSubclassObject.h\"\n\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACPropertySubscribing.h\"\n#import \"NSObject+RACSelectorSignal.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACMulticastConnection.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACSignal.h\"\n#import \"RACTuple.h\"\n\n@protocol TestProtocol\n\n@required\n- (BOOL)requiredMethod:(NSUInteger)number;\n- (void)lifeIsGood:(id)sender;\n\n@optional\n- (NSUInteger)optionalMethodWithObject:(id)object flag:(BOOL)flag;\n- (id)objectValue;\n\n@end\n\nQuickSpecBegin(NSObjectRACSelectorSignalSpec)\n\nqck_describe(@\"RACTestObject\", ^{\n\tqck_it(@\"should send the argument for each invocation\", ^{\n\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\t\t__block id value;\n\t\t[[object rac_signalForSelector:@selector(lifeIsGood:)] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x.first;\n\t\t}];\n\n\t\t[object lifeIsGood:@42];\n\n\t\texpect(value).to(equal(@42));\n\t});\n\n\tqck_it(@\"should send completed on deallocation\", ^{\n\t\t__block BOOL completed = NO;\n\t\t__block BOOL deallocated = NO;\n\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\n\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tdeallocated = YES;\n\t\t\t}]];\n\n\t\t\t[[object rac_signalForSelector:@selector(lifeIsGood:)] subscribeCompleted:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\n\t\t\texpect(@(deallocated)).to(beFalsy());\n\t\t\texpect(@(completed)).to(beFalsy());\n\t\t}\n\n\t\texpect(@(deallocated)).to(beTruthy());\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should send for a zero-argument method\", ^{\n\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\t__block RACTuple *value;\n\t\t[[object rac_signalForSelector:@selector(objectValue)] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x;\n\t\t}];\n\n\t\t(void)[object objectValue];\n\t\texpect(value).to(equal([RACTuple tupleWithObjectsFromArray:@[]]));\n\t});\n\n\tqck_it(@\"should send the argument for each invocation to the instance's own signal\", ^{\n\t\tRACTestObject *object1 = [[RACTestObject alloc] init];\n\t\t__block id value1;\n\t\t[[object1 rac_signalForSelector:@selector(lifeIsGood:)] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue1 = x.first;\n\t\t}];\n\n\t\tRACTestObject *object2 = [[RACTestObject alloc] init];\n\t\t__block id value2;\n\t\t[[object2 rac_signalForSelector:@selector(lifeIsGood:)] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue2 = x.first;\n\t\t}];\n\n\t\t[object1 lifeIsGood:@42];\n\t\t[object2 lifeIsGood:@\"Carpe diem\"];\n\n\t\texpect(value1).to(equal(@42));\n\t\texpect(value2).to(equal(@\"Carpe diem\"));\n\t});\n\n\tqck_it(@\"should send multiple arguments for each invocation\", ^{\n\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\t__block id value1;\n\t\t__block id value2;\n\t\t[[object rac_signalForSelector:@selector(combineObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue1 = x.first;\n\t\t\tvalue2 = x.second;\n\t\t}];\n\n\t\texpect([object combineObjectValue:@42 andSecondObjectValue:@\"foo\"]).to(equal(@\"42: foo\"));\n\t\texpect(value1).to(equal(@42));\n\t\texpect(value2).to(equal(@\"foo\"));\n\t});\n\n\tqck_it(@\"should send arguments for invocation of non-existant methods\", ^{\n\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\t\t__block id key;\n\t\t__block id value;\n\t\t[[object rac_signalForSelector:@selector(setObject:forKey:)] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x.first;\n\t\t\tkey = x.second;\n\t\t}];\n\n\t\t[object performSelector:@selector(setObject:forKey:) withObject:@YES withObject:@\"Winner\"];\n\n\t\texpect(value).to(equal(@YES));\n\t\texpect(key).to(equal(@\"Winner\"));\n\t});\n\n\tqck_it(@\"should send arguments for invocation and invoke the original method on previously KVO'd receiver\", ^{\n\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\t[[RACObserve(object, objectValue) publish] connect];\n\n\t\t__block id key;\n\t\t__block id value;\n\t\t[[object rac_signalForSelector:@selector(setObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x.first;\n\t\t\tkey = x.second;\n\t\t}];\n\n\t\t[object setObjectValue:@YES andSecondObjectValue:@\"Winner\"];\n\n\t\texpect(@(object.hasInvokedSetObjectValueAndSecondObjectValue)).to(beTruthy());\n\t\texpect(object.objectValue).to(equal(@YES));\n\t\texpect(object.secondObjectValue).to(equal(@\"Winner\"));\n\n\t\texpect(value).to(equal(@YES));\n\t\texpect(key).to(equal(@\"Winner\"));\n\t});\n\n\tqck_it(@\"should send arguments for invocation and invoke the original method when receiver is subsequently KVO'd\", ^{\n\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\t__block id key;\n\t\t__block id value;\n\t\t[[object rac_signalForSelector:@selector(setObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x.first;\n\t\t\tkey = x.second;\n\t\t}];\n\n\t\t[[RACObserve(object, objectValue) publish] connect];\n\n\t\t[object setObjectValue:@YES andSecondObjectValue:@\"Winner\"];\n\n\t\texpect(@(object.hasInvokedSetObjectValueAndSecondObjectValue)).to(beTruthy());\n\t\texpect(object.objectValue).to(equal(@YES));\n\t\texpect(object.secondObjectValue).to(equal(@\"Winner\"));\n\n\t\texpect(value).to(equal(@YES));\n\t\texpect(key).to(equal(@\"Winner\"));\n\t});\n\n\tqck_it(@\"should properly implement -respondsToSelector: when called on KVO'd receiver\", ^{\n\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\t// First, setup KVO on `object`, which gives us the desired side-effect\n\t\t// of `object` taking on a KVO-custom subclass.\n\t\t[[RACObserve(object, objectValue) publish] connect];\n\n\t\tSEL selector = NSSelectorFromString(@\"anyOldSelector:\");\n\n\t\t// With the KVO subclass in place, call -rac_signalForSelector: to\n\t\t// implement -anyOldSelector: directly on the KVO subclass.\n\t\t[object rac_signalForSelector:selector];\n\n\t\texpect(@([object respondsToSelector:selector])).to(beTruthy());\n\t});\n\n\tqck_it(@\"should properly implement -respondsToSelector: when called on signalForSelector'd receiver that has subsequently been KVO'd\", ^{\n\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\tSEL selector = NSSelectorFromString(@\"anyOldSelector:\");\n\n\t\t// Implement -anyOldSelector: on the object first\n\t\t[object rac_signalForSelector:selector];\n\n\t\texpect(@([object respondsToSelector:selector])).to(beTruthy());\n\n\t\t// Then KVO the object\n\t\t[[RACObserve(object, objectValue) publish] connect];\n\n\t\texpect(@([object respondsToSelector:selector])).to(beTruthy());\n\t});\n\n\tqck_it(@\"should properly implement -respondsToSelector: when called on signalForSelector'd receiver that has subsequently been KVO'd, then signalForSelector'd again\", ^{\n\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\tSEL selector = NSSelectorFromString(@\"anyOldSelector:\");\n\n\t\t// Implement -anyOldSelector: on the object first\n\t\t[object rac_signalForSelector:selector];\n\n\t\texpect(@([object respondsToSelector:selector])).to(beTruthy());\n\n\t\t// Then KVO the object\n\t\t[[RACObserve(object, objectValue) publish] connect];\n\n\t\texpect(@([object respondsToSelector:selector])).to(beTruthy());\n\t\t\n\t\tSEL selector2 = NSSelectorFromString(@\"anotherSelector:\");\n\n\t\t// Then implement -anotherSelector: on the object\n\t\t[object rac_signalForSelector:selector2];\n\n\t\texpect(@([object respondsToSelector:selector2])).to(beTruthy());\n\t});\n\t\n\tqck_it(@\"should call the right signal for two instances of the same class, adding signals for the same selector\", ^{\n\t\tRACTestObject *object1 = [[RACTestObject alloc] init];\n\t\tRACTestObject *object2 = [[RACTestObject alloc] init];\n\n\t\tSEL selector = NSSelectorFromString(@\"lifeIsGood:\");\n\n\t\t__block id value1 = nil;\n\t\t[[object1 rac_signalForSelector:selector] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue1 = x.first;\n\t\t}];\n\n\t\t__block id value2 = nil;\n\t\t[[object2 rac_signalForSelector:selector] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue2 = x.first;\n\t\t}];\n\n\t\t[object1 lifeIsGood:@42];\n\t\texpect(value1).to(equal(@42));\n\t\texpect(value2).to(beNil());\n\n\t\t[object2 lifeIsGood:@420];\n\t\texpect(value1).to(equal(@42));\n\t\texpect(value2).to(equal(@420));\n\t});\n\n\tqck_it(@\"should properly implement -respondsToSelector: for optional method from a protocol\", ^{\n\t\t// Selector for the targeted optional method from a protocol.\n\t\tSEL selector = @selector(optionalProtocolMethodWithObjectValue:);\n\n\t\tRACTestObject *object1 = [[RACTestObject alloc] init];\n\n\t\t// Method implementation of the selector is added to its swizzled class.\n\t\t[object1 rac_signalForSelector:selector fromProtocol:@protocol(RACTestProtocol)];\n\n\t\texpect(@([object1 respondsToSelector:selector])).to(beTruthy());\n\n\t\tRACTestObject *object2 = [[RACTestObject alloc] init];\n\n\t\t// Call -rac_signalForSelector: to swizzle this instance's class,\n\t\t// method implementations of -respondsToSelector: and\n\t\t// -forwardInvocation:.\n\t\t[object2 rac_signalForSelector:@selector(lifeIsGood:)];\n\n\t\t// This instance should not respond to the selector because of not\n\t\t// calling -rac_signalForSelector: with the selector.\n\t\texpect(@([object2 respondsToSelector:selector])).to(beFalsy());\n\t});\n\n\tqck_it(@\"should send non-object arguments\", ^{\n\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\t__block id value;\n\t\t[[object rac_signalForSelector:@selector(setIntegerValue:)] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x.first;\n\t\t}];\n\n\t\tobject.integerValue = 42;\n\t\texpect(value).to(equal(@42));\n\t});\n\n\tqck_it(@\"should send on signal after the original method is invoked\", ^{\n\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\t__block BOOL invokedMethodBefore = NO;\n\t\t[[object rac_signalForSelector:@selector(setObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *x) {\n\t\t\tinvokedMethodBefore = object.hasInvokedSetObjectValueAndSecondObjectValue;\n\t\t}];\n\t\t\n\t\t[object setObjectValue:@YES andSecondObjectValue:@\"Winner\"];\n\t\texpect(@(invokedMethodBefore)).to(beTruthy());\n\t});\n});\n\nqck_it(@\"should swizzle an NSObject method\", ^{\n\tNSObject *object = [[NSObject alloc] init];\n\n\t__block RACTuple *value;\n\t[[object rac_signalForSelector:@selector(description)] subscribeNext:^(RACTuple *x) {\n\t\tvalue = x;\n\t}];\n\n\texpect([object description]).notTo(beNil());\n\texpect(value).to(equal([RACTuple tupleWithObjectsFromArray:@[]]));\n});\n\nqck_describe(@\"a class that already overrides -forwardInvocation:\", ^{\n\tqck_it(@\"should invoke the superclass' implementation\", ^{\n\t\tRACSubclassObject *object = [[RACSubclassObject alloc] init];\n\n\t\t__block id value;\n\t\t[[object rac_signalForSelector:@selector(lifeIsGood:)] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x.first;\n\t\t}];\n\n\t\t[object lifeIsGood:@42];\n\t\texpect(value).to(equal(@42));\n\n\t\texpect(@((size_t)(void*)object.forwardedSelector)).to(equal(@0));\n\n\t\t[object performSelector:@selector(allObjects)];\n\n\t\texpect(value).to(equal(@42));\n\t\texpect(NSStringFromSelector(object.forwardedSelector)).to(equal(@\"allObjects\"));\n\t});\n\n\tqck_it(@\"should not infinite recurse when KVO'd after RAC swizzled\", ^{\n\t\tRACSubclassObject *object = [[RACSubclassObject alloc] init];\n\n\t\t__block id value;\n\t\t[[object rac_signalForSelector:@selector(lifeIsGood:)] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x.first;\n\t\t}];\n\n\t\t[[RACObserve(object, objectValue) publish] connect];\n\n\t\t[object lifeIsGood:@42];\n\t\texpect(value).to(equal(@42));\n\n\t\texpect(@((size_t)(void*)object.forwardedSelector)).to(equal(@0));\n\t\t[object performSelector:@selector(allObjects)];\n\t\texpect(NSStringFromSelector(object.forwardedSelector)).to(equal(@\"allObjects\"));\n\t});\n});\n\nqck_describe(@\"two classes in the same hierarchy\", ^{\n\t__block RACTestObject *superclassObj;\n\t__block RACTuple *superclassTuple;\n\n\t__block RACSubclassObject *subclassObj;\n\t__block RACTuple *subclassTuple;\n\n\tqck_beforeEach(^{\n\t\tsuperclassObj = [[RACTestObject alloc] init];\n\t\texpect(superclassObj).notTo(beNil());\n\n\t\tsubclassObj = [[RACSubclassObject alloc] init];\n\t\texpect(subclassObj).notTo(beNil());\n\t});\n\n\tqck_it(@\"should not collide\", ^{\n\t\t[[superclassObj rac_signalForSelector:@selector(combineObjectValue:andIntegerValue:)] subscribeNext:^(RACTuple *t) {\n\t\t\tsuperclassTuple = t;\n\t\t}];\n\n\t\t[[subclassObj rac_signalForSelector:@selector(combineObjectValue:andIntegerValue:)] subscribeNext:^(RACTuple *t) {\n\t\t\tsubclassTuple = t;\n\t\t}];\n\n\t\texpect([superclassObj combineObjectValue:@\"foo\" andIntegerValue:42]).to(equal(@\"foo: 42\"));\n\n\t\tNSArray *expectedValues = @[ @\"foo\", @42 ];\n\t\texpect(superclassTuple.allObjects).to(equal(expectedValues));\n\n\t\texpect([subclassObj combineObjectValue:@\"foo\" andIntegerValue:42]).to(equal(@\"fooSUBCLASS: 42\"));\n\n\t\texpectedValues = @[ @\"foo\", @42 ];\n\t\texpect(subclassTuple.allObjects).to(equal(expectedValues));\n\t});\n\n\tqck_it(@\"should not collide when the superclass is invoked asynchronously\", ^{\n\t\t[[superclassObj rac_signalForSelector:@selector(setObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *t) {\n\t\t\tsuperclassTuple = t;\n\t\t}];\n\n\t\t[[subclassObj rac_signalForSelector:@selector(setObjectValue:andSecondObjectValue:)] subscribeNext:^(RACTuple *t) {\n\t\t\tsubclassTuple = t;\n\t\t}];\n\n\t\t[superclassObj setObjectValue:@\"foo\" andSecondObjectValue:@\"42\"];\n\t\texpect(@(superclassObj.hasInvokedSetObjectValueAndSecondObjectValue)).to(beTruthy());\n\n\t\tNSArray *expectedValues = @[ @\"foo\", @\"42\" ];\n\t\texpect(superclassTuple.allObjects).to(equal(expectedValues));\n\n\t\t[subclassObj setObjectValue:@\"foo\" andSecondObjectValue:@\"42\"];\n\t\texpect(@(subclassObj.hasInvokedSetObjectValueAndSecondObjectValue)).to(beFalsy());\n\t\texpect(@(subclassObj.hasInvokedSetObjectValueAndSecondObjectValue)).toEventually(beTruthy());\n\n\t\texpectedValues = @[ @\"foo\", @\"42\" ];\n\t\texpect(subclassTuple.allObjects).to(equal(expectedValues));\n\t});\n});\n\nqck_describe(@\"-rac_signalForSelector:fromProtocol\", ^{\n\t__block RACTestObject<TestProtocol> *object;\n\t__block Protocol *protocol;\n\t\n\tqck_beforeEach(^{\n\t\tobject = (id)[[RACTestObject alloc] init];\n\t\texpect(object).notTo(beNil());\n\n\t\tprotocol = @protocol(TestProtocol);\n\t\texpect(protocol).notTo(beNil());\n\t});\n\n\tqck_it(@\"should not clobber a required method already implemented\", ^{\n\t\t__block id value;\n\t\t[[object rac_signalForSelector:@selector(lifeIsGood:) fromProtocol:protocol] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x.first;\n\t\t}];\n\n\t\t[object lifeIsGood:@42];\n\t\texpect(value).to(equal(@42));\n\t});\n\n\tqck_it(@\"should not clobber an optional method already implemented\", ^{\n\t\tobject.objectValue = @\"foo\";\n\n\t\t__block id value;\n\t\t[[object rac_signalForSelector:@selector(objectValue) fromProtocol:protocol] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x;\n\t\t}];\n\n\t\texpect([object objectValue]).to(equal(@\"foo\"));\n\t\texpect(value).to(equal([RACTuple tupleWithObjectsFromArray:@[]]));\n\t});\n\n\tqck_it(@\"should inject a required method\", ^{\n\t\t__block id value;\n\t\t[[object rac_signalForSelector:@selector(requiredMethod:) fromProtocol:protocol] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x.first;\n\t\t}];\n\n\t\texpect(@([object requiredMethod:42])).to(beFalsy());\n\t\texpect(value).to(equal(@42));\n\t});\n\n\tqck_it(@\"should inject an optional method\", ^{\n\t\t__block id value;\n\t\t[[object rac_signalForSelector:@selector(optionalMethodWithObject:flag:) fromProtocol:protocol] subscribeNext:^(RACTuple *x) {\n\t\t\tvalue = x;\n\t\t}];\n\n\t\texpect(@([object optionalMethodWithObject:@\"foo\" flag:YES])).to(equal(@0));\n\t\texpect(value).to(equal(RACTuplePack(@\"foo\", @YES)));\n\t});\n});\n\nqck_describe(@\"class reporting\", ^{\n\t__block RACTestObject *object;\n\t__block Class originalClass;\n\n\tqck_beforeEach(^{\n\t\tobject = [[RACTestObject alloc] init];\n\t\toriginalClass = object.class;\n\t});\n\n\tqck_it(@\"should report the original class\", ^{\n\t\t[object rac_signalForSelector:@selector(lifeIsGood:)];\n\t\texpect(object.class).to(beIdenticalTo(originalClass));\n\t});\n\n\tqck_it(@\"should report the original class when it's KVO'd after dynamically subclassing\", ^{\n\t\t[object rac_signalForSelector:@selector(lifeIsGood:)];\n\t\t[[RACObserve(object, objectValue) publish] connect];\n\t\texpect(object.class).to(beIdenticalTo(originalClass));\n\t});\n\n\tqck_it(@\"should report the original class when it's KVO'd before dynamically subclassing\", ^{\n\t\t[[RACObserve(object, objectValue) publish] connect];\n\t\t[object rac_signalForSelector:@selector(lifeIsGood:)];\n\t\texpect(object.class).to(beIdenticalTo(originalClass));\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSStringRACKeyPathUtilitiesSpec.m",
    "content": "//\n//  NSStringRACKeyPathUtilitiesSpec.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 05/05/2013.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"NSString+RACKeyPathUtilities.h\"\n\nQuickSpecBegin(NSStringRACKeyPathUtilitiesSpec)\n\nqck_describe(@\"-keyPathComponents\", ^{\n\tqck_it(@\"should return components in the key path\", ^{\n\t\texpect(@\"self.test.key.path\".rac_keyPathComponents).to(equal((@[@\"self\", @\"test\", @\"key\", @\"path\"])));\n\t});\n\t\n\tqck_it(@\"should return nil if given an empty string\", ^{\n\t\texpect(@\"\".rac_keyPathComponents).to(beNil());\n\t});\n});\n\nqck_describe(@\"-keyPathByDeletingLastKeyPathComponent\", ^{\n\tqck_it(@\"should return the parent key path\", ^{\n\t\texpect(@\"grandparent.parent.child\".rac_keyPathByDeletingLastKeyPathComponent).to(equal(@\"grandparent.parent\"));\n\t});\n\t\n\tqck_it(@\"should return nil if given an empty string\", ^{\n\t\texpect(@\"\".rac_keyPathByDeletingLastKeyPathComponent).to(beNil());\n\t});\n\t\n\tqck_it(@\"should return nil if given a key path with only one component\", ^{\n\t\texpect(@\"self\".rac_keyPathByDeletingLastKeyPathComponent).to(beNil());\n\t});\n});\n\nqck_describe(@\"-keyPathByDeletingFirstKeyPathComponent\", ^{\n\tqck_it(@\"should return the remaining key path\", ^{\n\t\texpect(@\"first.second.third\".rac_keyPathByDeletingFirstKeyPathComponent).to(equal(@\"second.third\"));\n\t});\n\t\n\tqck_it(@\"should return nil if given an empty string\", ^{\n\t\texpect(@\"\".rac_keyPathByDeletingFirstKeyPathComponent).to(beNil());\n\t});\n\t\n\tqck_it(@\"should return nil if given a key path with only one component\", ^{\n\t\texpect(@\"self\".rac_keyPathByDeletingFirstKeyPathComponent).to(beNil());\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSURLConnectionRACSupportSpec.m",
    "content": "//\n//  NSURLConnectionRACSupportSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-10-01.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"NSURLConnection+RACSupport.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACTuple.h\"\n\nQuickSpecBegin(NSURLConnectionRACSupportSpec)\n\nqck_it(@\"should fetch a JSON file\", ^{\n\tNSURL *fileURL = [[NSBundle bundleForClass:self.class] URLForResource:@\"test-data\" withExtension:@\"json\"];\n\texpect(fileURL).notTo(beNil());\n\n\tNSURLRequest *request = [NSURLRequest requestWithURL:fileURL];\n\n\tBOOL success = NO;\n\tNSError *error = nil;\n\tRACTuple *result = [[NSURLConnection rac_sendAsynchronousRequest:request] firstOrDefault:nil success:&success error:&error];\n\texpect(@(success)).to(beTruthy());\n\texpect(error).to(beNil());\n\texpect(result).to(beAKindOf(RACTuple.class));\n\n\tNSURLResponse *response = result.first;\n\texpect(response).to(beAKindOf(NSURLResponse.class));\n\n\tNSData *data = result.second;\n\texpect(data).to(beAKindOf(NSData.class));\n\texpect(data).to(equal([NSData dataWithContentsOfURL:fileURL]));\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/NSUserDefaultsRACSupportSpec.m",
    "content": "//\n//  NSUserDefaultsRACSupportSpec.m\n//  ReactiveCocoa\n//\n//  Created by Matt Diephouse on 12/19/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"NSUserDefaults+RACSupport.h\"\n\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACKVOChannel.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"RACSignal+Operations.h\"\n\nstatic NSString * const NSUserDefaultsRACSupportSpecStringDefault = @\"NSUserDefaultsRACSupportSpecStringDefault\";\nstatic NSString * const NSUserDefaultsRACSupportSpecBoolDefault = @\"NSUserDefaultsRACSupportSpecBoolDefault\";\n\n@interface TestObserver : NSObject\n\n@property (copy, atomic) NSString *string1;\n@property (copy, atomic) NSString *string2;\n\n@property (assign, atomic) BOOL bool1;\n\n@end\n\n@implementation TestObserver\n\n@end\n\nQuickSpecBegin(NSUserDefaultsRACSupportSpec)\n\n__block NSUserDefaults *defaults = nil;\n__block TestObserver *observer = nil;\n\nqck_beforeEach(^{\n\tdefaults = NSUserDefaults.standardUserDefaults;\n\n\tobserver = [TestObserver new];\n});\n\nqck_afterEach(^{\n\t[defaults removeObjectForKey:NSUserDefaultsRACSupportSpecStringDefault];\n\t[defaults removeObjectForKey:NSUserDefaultsRACSupportSpecBoolDefault];\n\n\tobserver = nil;\n});\n\nqck_it(@\"should set defaults\", ^{\n\tRACChannelTo(observer, string1) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault];\n\tRACChannelTo(observer, bool1, @NO) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecBoolDefault];\n\t\n\tobserver.string1 = @\"A string\";\n\tobserver.bool1 = YES;\n\t\n\texpect([defaults objectForKey:NSUserDefaultsRACSupportSpecStringDefault]).toEventually(equal(@\"A string\"));\n\texpect([defaults objectForKey:NSUserDefaultsRACSupportSpecBoolDefault]).toEventually(equal(@YES));\n});\n\nqck_it(@\"should read defaults\", ^{\n\tRACChannelTo(observer, string1) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault];\n\tRACChannelTo(observer, bool1, @NO) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecBoolDefault];\n\t\n\texpect(observer.string1).to(beNil());\n\texpect(@(observer.bool1)).to(equal(@NO));\n\t\n\t[defaults setObject:@\"Another string\" forKey:NSUserDefaultsRACSupportSpecStringDefault];\n\t[defaults setBool:YES forKey:NSUserDefaultsRACSupportSpecBoolDefault];\n\t\n\texpect(observer.string1).to(equal(@\"Another string\"));\n\texpect(@(observer.bool1)).to(equal(@YES));\n});\n\nqck_it(@\"should be okay to create 2 terminals\", ^{\n\tRACChannelTo(observer, string1) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault];\n\tRACChannelTo(observer, string2) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault];\n\t\n\t[defaults setObject:@\"String 3\" forKey:NSUserDefaultsRACSupportSpecStringDefault];\n\t\n\texpect(observer.string1).to(equal(@\"String 3\"));\n\texpect(observer.string2).to(equal(@\"String 3\"));\n});\n\nqck_it(@\"should handle removed defaults\", ^{\n\tobserver.string1 = @\"Some string\";\n\tobserver.bool1 = YES;\n\t\n\tRACChannelTo(observer, string1) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault];\n\tRACChannelTo(observer, bool1, @NO) = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecBoolDefault];\n\t\n\t[defaults removeObjectForKey:NSUserDefaultsRACSupportSpecStringDefault];\n\t[defaults removeObjectForKey:NSUserDefaultsRACSupportSpecBoolDefault];\n\t\n\texpect(observer.string1).to(beNil());\n\texpect(@(observer.bool1)).to(equal(@NO));\n});\n\nqck_it(@\"shouldn't resend values\", ^{\n\tRACChannelTerminal *terminal = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault];\n\t\n\tRACChannelTo(observer, string1) = terminal;\n\t\n\tRACSignal *sentValue = [terminal replayLast];\n\tobserver.string1 = @\"Test value\";\n\tid value = [sentValue asynchronousFirstOrDefault:nil success:NULL error:NULL];\n\texpect(value).to(beNil());\n});\n\nqck_it(@\"should complete when the NSUserDefaults deallocates\", ^{\n\t__block RACChannelTerminal *terminal;\n\t__block BOOL deallocated = NO;\n\t\n\t@autoreleasepool {\n\t\tNSUserDefaults *customDefaults __attribute__((objc_precise_lifetime)) = [NSUserDefaults new];\n\t\t[customDefaults.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\tdeallocated = YES;\n\t\t}]];\n\t\t\n\t\tterminal = [customDefaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault];\n\t}\n\t\n\texpect(@(deallocated)).to(beTruthy());\n\texpect(@([terminal asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy());\n});\n\nqck_it(@\"should send an initial value\", ^{\n\t[defaults setObject:@\"Initial\" forKey:NSUserDefaultsRACSupportSpecStringDefault];\n\tRACChannelTerminal *terminal = [defaults rac_channelTerminalForKey:NSUserDefaultsRACSupportSpecStringDefault];\n\texpect([terminal asynchronousFirstOrDefault:nil success:NULL error:NULL]).to(equal(@\"Initial\"));\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACBlockTrampolineSpec.m",
    "content": "//\n//  RACBlockTrampolineSpec.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 10/28/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACBlockTrampoline.h\"\n#import \"RACTuple.h\"\n\nQuickSpecBegin(RACBlockTrampolineSpec)\n\nqck_it(@\"should invoke the block with the given arguments\", ^{\n\t__block NSString *stringArg;\n\t__block NSNumber *numberArg;\n\tid (^block)(NSString *, NSNumber *) = ^ id (NSString *string, NSNumber *number) {\n\t\tstringArg = string;\n\t\tnumberArg = number;\n\t\treturn nil;\n\t};\n\n\t[RACBlockTrampoline invokeBlock:block withArguments:RACTuplePack(@\"hi\", @1)];\n\texpect(stringArg).to(equal(@\"hi\"));\n\texpect(numberArg).to(equal(@1));\n});\n\nqck_it(@\"should return the result of the block invocation\", ^{\n\tNSString * (^block)(NSString *) = ^(NSString *string) {\n\t\treturn string.uppercaseString;\n\t};\n\n\tNSString *result = [RACBlockTrampoline invokeBlock:block withArguments:RACTuplePack(@\"hi\")];\n\texpect(result).to(equal(@\"HI\"));\n});\n\nqck_it(@\"should pass RACTupleNils as nil\", ^{\n\t__block id arg;\n\tid (^block)(id) = ^ id (id obj) {\n\t\targ = obj;\n\t\treturn nil;\n\t};\n\n\t[RACBlockTrampoline invokeBlock:block withArguments:RACTuplePack(nil)];\n\texpect(arg).to(beNil());\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACChannelExamples.h",
    "content": "//\n//  RACChannelExamples.h\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 30/12/2012.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n// The name of the shared examples for RACChannel and its subclasses.\nextern NSString * const RACChannelExamples;\n\n// A block of type `RACChannel * (^)(void)`, which should return a new\n// RACChannel.\nextern NSString * const RACChannelExampleCreateBlock;\n\n// The name of the shared examples for any RACChannel class that gets and sets\n// a property.\nextern NSString * const RACViewChannelExamples;\n\n// A block of type `NSObject * (^)(void)`, which should create a new test view\n// and return it.\nextern NSString * const RACViewChannelExampleCreateViewBlock;\n\n// A block of type `RACChannelTerminal * (^)(NSObject *view)`, which should\n// create a new RACChannel to the given test view and return an terminal.\nextern NSString * const RACViewChannelExampleCreateTerminalBlock;\n\n// The key path that will be read/written in RACViewChannelExamples. This\n// must lead to an NSNumber or numeric primitive property.\nextern NSString * const RACViewChannelExampleKeyPath;\n\n// A block of type `void (^)(NSObject *view, NSNumber *value)`, which should\n// change the given test view's value to the given one.\nextern NSString * const RACViewChannelExampleSetViewValueBlock;\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACChannelExamples.m",
    "content": "//\n//  RACChannelExamples.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 30/12/2012.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACChannelExamples.h\"\n\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACPropertySubscribing.h\"\n#import \"RACChannel.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal+Operations.h\"\n\nNSString * const RACChannelExamples = @\"RACChannelExamples\";\nNSString * const RACChannelExampleCreateBlock = @\"RACChannelExampleCreateBlock\";\n\nNSString * const RACViewChannelExamples = @\"RACViewChannelExamples\";\nNSString * const RACViewChannelExampleCreateViewBlock = @\"RACViewChannelExampleCreateViewBlock\";\nNSString * const RACViewChannelExampleCreateTerminalBlock = @\"RACViewChannelExampleCreateTerminalBlock\";\nNSString * const RACViewChannelExampleKeyPath = @\"RACViewChannelExampleKeyPath\";\nNSString * const RACViewChannelExampleSetViewValueBlock = @\"RACViewChannelExampleSetViewValueBlock\";\n\nQuickConfigurationBegin(RACChannelExampleGroups)\n\n+ (void)configure:(Configuration *)configuration {\n\tsharedExamples(RACChannelExamples, ^(QCKDSLSharedExampleContext exampleContext) {\n\t\t__block RACChannel * (^getChannel)(void);\n\t\t__block RACChannel *channel;\n\n\t\tid value1 = @\"test value 1\";\n\t\tid value2 = @\"test value 2\";\n\t\tid value3 = @\"test value 3\";\n\t\tNSArray *values = @[ value1, value2, value3 ];\n\n\t\tqck_beforeEach(^{\n\t\t\tgetChannel = exampleContext()[RACChannelExampleCreateBlock];\n\t\t\tchannel = getChannel();\n\t\t});\n\n\t\tqck_it(@\"should not send any leadingTerminal value on subscription\", ^{\n\t\t\t__block id receivedValue = nil;\n\n\t\t\t[channel.followingTerminal sendNext:value1];\n\t\t\t[channel.leadingTerminal subscribeNext:^(id x) {\n\t\t\t\treceivedValue = x;\n\t\t\t}];\n\n\t\t\texpect(receivedValue).to(beNil());\n\n\t\t\t[channel.followingTerminal sendNext:value2];\n\t\t\texpect(receivedValue).to(equal(value2));\n\t\t});\n\n\t\tqck_it(@\"should send the latest followingTerminal value on subscription\", ^{\n\t\t\t__block id receivedValue = nil;\n\n\t\t\t[channel.leadingTerminal sendNext:value1];\n\t\t\t[[channel.followingTerminal take:1] subscribeNext:^(id x) {\n\t\t\t\treceivedValue = x;\n\t\t\t}];\n\n\t\t\texpect(receivedValue).to(equal(value1));\n\n\t\t\t[channel.leadingTerminal sendNext:value2];\n\t\t\t[[channel.followingTerminal take:1] subscribeNext:^(id x) {\n\t\t\t\treceivedValue = x;\n\t\t\t}];\n\n\t\t\texpect(receivedValue).to(equal(value2));\n\t\t});\n\n\t\tqck_it(@\"should send leadingTerminal values as they change\", ^{\n\t\t\tNSMutableArray *receivedValues = [NSMutableArray array];\n\t\t\t[channel.leadingTerminal subscribeNext:^(id x) {\n\t\t\t\t[receivedValues addObject:x];\n\t\t\t}];\n\n\t\t\t[channel.followingTerminal sendNext:value1];\n\t\t\t[channel.followingTerminal sendNext:value2];\n\t\t\t[channel.followingTerminal sendNext:value3];\n\t\t\texpect(receivedValues).to(equal(values));\n\t\t});\n\n\t\tqck_it(@\"should send followingTerminal values as they change\", ^{\n\t\t\t[channel.leadingTerminal sendNext:value1];\n\n\t\t\tNSMutableArray *receivedValues = [NSMutableArray array];\n\t\t\t[channel.followingTerminal subscribeNext:^(id x) {\n\t\t\t\t[receivedValues addObject:x];\n\t\t\t}];\n\n\t\t\t[channel.leadingTerminal sendNext:value2];\n\t\t\t[channel.leadingTerminal sendNext:value3];\n\t\t\texpect(receivedValues).to(equal(values));\n\t\t});\n\n\t\tqck_it(@\"should complete both signals when the leadingTerminal is completed\", ^{\n\t\t\t__block BOOL completedLeft = NO;\n\t\t\t[channel.leadingTerminal subscribeCompleted:^{\n\t\t\t\tcompletedLeft = YES;\n\t\t\t}];\n\n\t\t\t__block BOOL completedRight = NO;\n\t\t\t[channel.followingTerminal subscribeCompleted:^{\n\t\t\t\tcompletedRight = YES;\n\t\t\t}];\n\n\t\t\t[channel.leadingTerminal sendCompleted];\n\t\t\texpect(@(completedLeft)).to(beTruthy());\n\t\t\texpect(@(completedRight)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should complete both signals when the followingTerminal is completed\", ^{\n\t\t\t__block BOOL completedLeft = NO;\n\t\t\t[channel.leadingTerminal subscribeCompleted:^{\n\t\t\t\tcompletedLeft = YES;\n\t\t\t}];\n\n\t\t\t__block BOOL completedRight = NO;\n\t\t\t[channel.followingTerminal subscribeCompleted:^{\n\t\t\t\tcompletedRight = YES;\n\t\t\t}];\n\n\t\t\t[channel.followingTerminal sendCompleted];\n\t\t\texpect(@(completedLeft)).to(beTruthy());\n\t\t\texpect(@(completedRight)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should replay completion to new subscribers\", ^{\n\t\t\t[channel.leadingTerminal sendCompleted];\n\n\t\t\t__block BOOL completedLeft = NO;\n\t\t\t[channel.leadingTerminal subscribeCompleted:^{\n\t\t\t\tcompletedLeft = YES;\n\t\t\t}];\n\n\t\t\t__block BOOL completedRight = NO;\n\t\t\t[channel.followingTerminal subscribeCompleted:^{\n\t\t\t\tcompletedRight = YES;\n\t\t\t}];\n\n\t\t\texpect(@(completedLeft)).to(beTruthy());\n\t\t\texpect(@(completedRight)).to(beTruthy());\n\t\t});\n\t});\n\n\tsharedExamples(RACViewChannelExamples, ^(QCKDSLSharedExampleContext exampleContext) {\n\t\t__block NSString *keyPath;\n\t\t__block NSObject * (^getView)(void);\n\t\t__block RACChannelTerminal * (^getTerminal)(NSObject *);\n\t\t__block void (^setViewValue)(NSObject *view, NSNumber *value);\n\n\t\t__block NSObject *testView;\n\t\t__block RACChannelTerminal *endpoint;\n\n\t\tqck_beforeEach(^{\n\t\t\tkeyPath = exampleContext()[RACViewChannelExampleKeyPath];\n\t\t\tgetTerminal = exampleContext()[RACViewChannelExampleCreateTerminalBlock];\n\t\t\tgetView = exampleContext()[RACViewChannelExampleCreateViewBlock];\n\t\t\tsetViewValue = exampleContext()[RACViewChannelExampleSetViewValueBlock];\n\n\t\t\ttestView = getView();\n\t\t\tendpoint = getTerminal(testView);\n\t\t});\n\n\t\tqck_it(@\"should not send changes made by the channel itself\", ^{\n\t\t\t__block BOOL receivedNext = NO;\n\t\t\t[endpoint subscribeNext:^(id x) {\n\t\t\t\treceivedNext = YES;\n\t\t\t}];\n\n\t\t\texpect(@(receivedNext)).to(beFalsy());\n\n\t\t\t[endpoint sendNext:@0.1];\n\t\t\texpect(@(receivedNext)).to(beFalsy());\n\n\t\t\t[endpoint sendNext:@0.2];\n\t\t\texpect(@(receivedNext)).to(beFalsy());\n\n\t\t\t[endpoint sendCompleted];\n\t\t\texpect(@(receivedNext)).to(beFalsy());\n\t\t});\n\n\t\tqck_it(@\"should not send progammatic changes made to the view\", ^{\n\t\t\t__block BOOL receivedNext = NO;\n\t\t\t[endpoint subscribeNext:^(id x) {\n\t\t\t\treceivedNext = YES;\n\t\t\t}];\n\n\t\t\texpect(@(receivedNext)).to(beFalsy());\n\n\t\t\t[testView setValue:@0.1 forKeyPath:keyPath];\n\t\t\texpect(@(receivedNext)).to(beFalsy());\n\n\t\t\t[testView setValue:@0.2 forKeyPath:keyPath];\n\t\t\texpect(@(receivedNext)).to(beFalsy());\n\t\t});\n\n\t\tqck_it(@\"should not have a starting value\", ^{\n\t\t\t__block BOOL receivedNext = NO;\n\t\t\t[endpoint subscribeNext:^(id x) {\n\t\t\t\treceivedNext = YES;\n\t\t\t}];\n\n\t\t\texpect(@(receivedNext)).to(beFalsy());\n\t\t});\n\n\t\tqck_it(@\"should send view changes\", ^{\n\t\t\t__block NSString *received;\n\t\t\t[endpoint subscribeNext:^(id x) {\n\t\t\t\treceived = x;\n\t\t\t}];\n\n\t\t\tsetViewValue(testView, @0.1);\n\t\t\texpect(received).to(equal(@0.1));\n\n\t\t\tsetViewValue(testView, @0.2);\n\t\t\texpect(received).to(equal(@0.2));\n\t\t});\n\n\t\tqck_it(@\"should set values on the view\", ^{\n\t\t\t[endpoint sendNext:@0.1];\n\t\t\texpect([testView valueForKeyPath:keyPath]).to(equal(@0.1));\n\n\t\t\t[endpoint sendNext:@0.2];\n\t\t\texpect([testView valueForKeyPath:keyPath]).to(equal(@0.2));\n\t\t});\n\n\t\tqck_it(@\"should not echo changes back to the channel\", ^{\n\t\t\t__block NSUInteger receivedCount = 0;\n\t\t\t[endpoint subscribeNext:^(id _) {\n\t\t\t\treceivedCount++;\n\t\t\t}];\n\n\t\t\texpect(@(receivedCount)).to(equal(@0));\n\n\t\t\t[endpoint sendNext:@0.1];\n\t\t\texpect(@(receivedCount)).to(equal(@0));\n\n\t\t\tsetViewValue(testView, @0.2);\n\t\t\texpect(@(receivedCount)).to(equal(@1));\n\t\t});\n\n\t\tqck_it(@\"should complete when the view deallocates\", ^{\n\t\t\t__block BOOL deallocated = NO;\n\t\t\t__block BOOL completed = NO;\n\n\t\t\t@autoreleasepool {\n\t\t\t\tNSObject *view __attribute__((objc_precise_lifetime)) = getView();\n\t\t\t\t[view.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tdeallocated = YES;\n\t\t\t\t}]];\n\n\t\t\t\tRACChannelTerminal *terminal = getTerminal(view);\n\t\t\t\t[terminal subscribeCompleted:^{\n\t\t\t\t\tcompleted = YES;\n\t\t\t\t}];\n\n\t\t\t\texpect(@(deallocated)).to(beFalsy());\n\t\t\t\texpect(@(completed)).to(beFalsy());\n\t\t\t}\n\n\t\t\texpect(@(deallocated)).to(beTruthy());\n\t\t\texpect(@(completed)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should deallocate after the view deallocates\", ^{\n\t\t\t__block BOOL viewDeallocated = NO;\n\t\t\t__block BOOL terminalDeallocated = NO;\n\n\t\t\t@autoreleasepool {\n\t\t\t\tNSObject *view __attribute__((objc_precise_lifetime)) = getView();\n\t\t\t\t[view.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tviewDeallocated = YES;\n\t\t\t\t}]];\n\n\t\t\t\tRACChannelTerminal *terminal = getTerminal(view);\n\t\t\t\t[terminal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tterminalDeallocated = YES;\n\t\t\t\t}]];\n\n\t\t\t\texpect(@(viewDeallocated)).to(beFalsy());\n\t\t\t\texpect(@(terminalDeallocated)).to(beFalsy());\n\t\t\t}\n\n\t\t\texpect(@(viewDeallocated)).to(beTruthy());\n\t\t\texpect(@(terminalDeallocated)).toEventually(beTruthy());\n\t\t});\n\t});\n}\n\nQuickConfigurationEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACChannelSpec.m",
    "content": "//\n//  RACChannelSpec.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 30/12/2012.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACChannelExamples.h\"\n\n#import \"NSObject+RACDeallocating.h\"\n#import \"RACChannel.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal.h\"\n\nQuickSpecBegin(RACChannelSpec)\n\nqck_describe(@\"RACChannel\", ^{\n\tqck_itBehavesLike(RACChannelExamples, ^{\n\t\treturn @{\n\t\t\tRACChannelExampleCreateBlock: [^{\n\t\t\t\treturn [[RACChannel alloc] init];\n\t\t\t} copy]\n\t\t};\n\t});\n\t\n\tqck_describe(@\"memory management\", ^{\n\t\tqck_it(@\"should dealloc when its subscribers are disposed\", ^{\n\t\t\tRACDisposable *leadingDisposable = nil;\n\t\t\tRACDisposable *followingDisposable = nil;\n\n\t\t\t__block BOOL deallocated = NO;\n\n\t\t\t@autoreleasepool {\n\t\t\t\tRACChannel *channel __attribute__((objc_precise_lifetime)) = [[RACChannel alloc] init];\n\t\t\t\t[channel.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tdeallocated = YES;\n\t\t\t\t}]];\n\n\t\t\t\tleadingDisposable = [channel.leadingTerminal subscribeCompleted:^{}];\n\t\t\t\tfollowingDisposable = [channel.followingTerminal subscribeCompleted:^{}];\n\t\t\t}\n\n\t\t\t[leadingDisposable dispose];\n\t\t\t[followingDisposable dispose];\n\t\t\texpect(@(deallocated)).toEventually(beTruthy());\n\t\t});\n\t\t\n\t\tqck_it(@\"should dealloc when its subscriptions are disposed\", ^{\n\t\t\tRACDisposable *leadingDisposable = nil;\n\t\t\tRACDisposable *followingDisposable = nil;\n\n\t\t\t__block BOOL deallocated = NO;\n\n\t\t\t@autoreleasepool {\n\t\t\t\tRACChannel *channel __attribute__((objc_precise_lifetime)) = [[RACChannel alloc] init];\n\t\t\t\t[channel.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tdeallocated = YES;\n\t\t\t\t}]];\n\n\t\t\t\tleadingDisposable = [[RACSignal never] subscribe:channel.leadingTerminal];\n\t\t\t\tfollowingDisposable = [[RACSignal never] subscribe:channel.followingTerminal];\n\t\t\t}\n\n\t\t\t[leadingDisposable dispose];\n\t\t\t[followingDisposable dispose];\n\t\t\texpect(@(deallocated)).toEventually(beTruthy());\n\t\t});\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACCommandSpec.m",
    "content": "//\n//  RACCommandSpec.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 8/31/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"NSArray+RACSequenceAdditions.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACPropertySubscribing.h\"\n#import \"RACCommand.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACEvent.h\"\n#import \"RACScheduler.h\"\n#import \"RACSequence.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACSubject.h\"\n#import \"RACUnit.h\"\n\nQuickSpecBegin(RACCommandSpec)\n\nRACSignal * (^emptySignalBlock)(id) = ^(id _) {\n\treturn [RACSignal empty];\n};\n\nqck_describe(@\"with a simple signal block\", ^{\n\t__block RACCommand *command;\n\n\tqck_beforeEach(^{\n\t\tcommand = [[RACCommand alloc] initWithSignalBlock:^(id value) {\n\t\t\treturn [RACSignal return:value];\n\t\t}];\n\n\t\texpect(command).notTo(beNil());\n\t\texpect(@(command.allowsConcurrentExecution)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should be enabled by default\", ^{\n\t\texpect([command.enabled first]).to(equal(@YES));\n\t});\n\n\tqck_it(@\"should not be executing by default\", ^{\n\t\texpect([command.executing first]).to(equal(@NO));\n\t});\n\n\tqck_it(@\"should create an execution signal\", ^{\n\t\t__block NSUInteger signalsReceived = 0;\n\t\t__block BOOL completed = NO;\n\n\t\tid value = NSNull.null;\n\t\t[command.executionSignals subscribeNext:^(RACSignal *signal) {\n\t\t\tsignalsReceived++;\n\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\texpect(x).to(equal(value));\n\t\t\t} completed:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\t\t}];\n\n\t\texpect(@(signalsReceived)).to(equal(@0));\n\t\t\n\t\t[command execute:value];\n\t\texpect(@(signalsReceived)).toEventually(equal(@1));\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should return the execution signal from -execute:\", ^{\n\t\t__block BOOL completed = NO;\n\n\t\tid value = NSNull.null;\n\t\t[[command\n\t\t\texecute:value]\n\t\t\tsubscribeNext:^(id x) {\n\t\t\t\texpect(x).to(equal(value));\n\t\t\t} completed:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\n\t\texpect(@(completed)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should always send executionSignals on the main thread\", ^{\n\t\t__block RACScheduler *receivedScheduler = nil;\n\t\t[command.executionSignals subscribeNext:^(id _) {\n\t\t\treceivedScheduler = RACScheduler.currentScheduler;\n\t\t}];\n\n\t\t[[RACScheduler scheduler] schedule:^{\n\t\t\texpect(@([[command execute:nil] waitUntilCompleted:NULL])).to(beTruthy());\n\t\t}];\n\n\t\texpect(receivedScheduler).to(beNil());\n\t\texpect(receivedScheduler).toEventually(equal(RACScheduler.mainThreadScheduler));\n\t});\n\n\tqck_it(@\"should not send anything on 'errors' by default\", ^{\n\t\t__block BOOL receivedError = NO;\n\t\t[command.errors subscribeNext:^(id _) {\n\t\t\treceivedError = YES;\n\t\t}];\n\t\t\n\t\texpect(@([[command execute:nil] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy());\n\t\texpect(@(receivedError)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should be executing while an execution signal is running\", ^{\n\t\t[command.executionSignals subscribeNext:^(RACSignal *signal) {\n\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\texpect([command.executing first]).to(equal(@YES));\n\t\t\t}];\n\t\t}];\n\n\t\texpect(@([[command execute:nil] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy());\n\t\texpect([command.executing first]).to(equal(@NO));\n\t});\n\n\tqck_it(@\"should always update executing on the main thread\", ^{\n\t\t__block RACScheduler *updatedScheduler = nil;\n\t\t[[command.executing skip:1] subscribeNext:^(NSNumber *executing) {\n\t\t\tif (!executing.boolValue) return;\n\n\t\t\tupdatedScheduler = RACScheduler.currentScheduler;\n\t\t}];\n\n\t\t[[RACScheduler scheduler] schedule:^{\n\t\t\texpect(@([[command execute:nil] waitUntilCompleted:NULL])).to(beTruthy());\n\t\t}];\n\n\t\texpect([command.executing first]).to(equal(@NO));\n\t\texpect(updatedScheduler).toEventually(equal(RACScheduler.mainThreadScheduler));\n\t});\n\n\tqck_it(@\"should dealloc without subscribers\", ^{\n\t\t__block BOOL disposed = NO;\n\n\t\t@autoreleasepool {\n\t\t\tRACCommand *command __attribute__((objc_precise_lifetime)) = [[RACCommand alloc] initWithSignalBlock:emptySignalBlock];\n\t\t\t[command.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tdisposed = YES;\n\t\t\t}]];\n\t\t}\n\n\t\texpect(@(disposed)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should complete signals on the main thread when deallocated\", ^{\n\t\t__block RACScheduler *executionSignalsScheduler = nil;\n\t\t__block RACScheduler *executingScheduler = nil;\n\t\t__block RACScheduler *enabledScheduler = nil;\n\t\t__block RACScheduler *errorsScheduler = nil;\n\n\t\t[[RACScheduler scheduler] schedule:^{\n\t\t\t@autoreleasepool {\n\t\t\t\tRACCommand *command __attribute__((objc_precise_lifetime)) = [[RACCommand alloc] initWithSignalBlock:emptySignalBlock];\n\n\t\t\t\t[command.executionSignals subscribeCompleted:^{\n\t\t\t\t\texecutionSignalsScheduler = RACScheduler.currentScheduler;\n\t\t\t\t}];\n\n\t\t\t\t[command.executing subscribeCompleted:^{\n\t\t\t\t\texecutingScheduler = RACScheduler.currentScheduler;\n\t\t\t\t}];\n\n\t\t\t\t[command.enabled subscribeCompleted:^{\n\t\t\t\t\tenabledScheduler = RACScheduler.currentScheduler;\n\t\t\t\t}];\n\n\t\t\t\t[command.errors subscribeCompleted:^{\n\t\t\t\t\terrorsScheduler = RACScheduler.currentScheduler;\n\t\t\t\t}];\n\t\t\t}\n\t\t}];\n\n\t\texpect(executionSignalsScheduler).toEventually(equal(RACScheduler.mainThreadScheduler));\n\t\texpect(executingScheduler).toEventually(equal(RACScheduler.mainThreadScheduler));\n\t\texpect(enabledScheduler).toEventually(equal(RACScheduler.mainThreadScheduler));\n\t\texpect(errorsScheduler).toEventually(equal(RACScheduler.mainThreadScheduler));\n\t});\n});\n\nqck_it(@\"should invoke the signalBlock once per execution\", ^{\n\tNSMutableArray *valuesReceived = [NSMutableArray array];\n\tRACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(id x) {\n\t\t[valuesReceived addObject:x];\n\t\treturn [RACSignal empty];\n\t}];\n\n\texpect(@([[command execute:@\"foo\"] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy());\n\texpect(valuesReceived).to(equal((@[ @\"foo\" ])));\n\n\texpect(@([[command execute:@\"bar\"] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy());\n\texpect(valuesReceived).to(equal((@[ @\"foo\", @\"bar\" ])));\n});\n\nqck_it(@\"should send on executionSignals in order of execution\", ^{\n\tRACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(RACSequence *seq) {\n\t\treturn [seq signalWithScheduler:RACScheduler.immediateScheduler];\n\t}];\n\n\tNSMutableArray *valuesReceived = [NSMutableArray array];\n\t[[command.executionSignals\n\t\tconcat]\n\t\tsubscribeNext:^(id x) {\n\t\t\t[valuesReceived addObject:x];\n\t\t}];\n\n\tRACSequence *first = @[ @\"foo\", @\"bar\" ].rac_sequence;\n\texpect(@([[command execute:first] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy());\n\n\tRACSequence *second = @[ @\"buzz\", @\"baz\" ].rac_sequence;\n\texpect(@([[command execute:second] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy());\n\n\tNSArray *expectedValues = @[ @\"foo\", @\"bar\", @\"buzz\", @\"baz\" ];\n\texpect(valuesReceived).to(equal(expectedValues));\n});\n\nqck_it(@\"should wait for all signals to complete or error before executing sends NO\", ^{\n\tRACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(RACSignal *signal) {\n\t\treturn signal;\n\t}];\n\n\tcommand.allowsConcurrentExecution = YES;\n\t\n\tRACSubject *firstSubject = [RACSubject subject];\n\texpect([command execute:firstSubject]).notTo(beNil());\n\n\tRACSubject *secondSubject = [RACSubject subject];\n\texpect([command execute:secondSubject]).notTo(beNil());\n\n\texpect([command.executing first]).toEventually(equal(@YES));\n\n\t[firstSubject sendError:nil];\n\texpect([command.executing first]).to(equal(@YES));\n\n\t[secondSubject sendNext:nil];\n\texpect([command.executing first]).to(equal(@YES));\n\n\t[secondSubject sendCompleted];\n\texpect([command.executing first]).toEventually(equal(@NO));\n});\n\nqck_it(@\"should have allowsConcurrentExecution be observable\", ^{\n\tRACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(RACSignal *signal) {\n\t\treturn signal;\n\t}];\n\t\n\tRACSubject *completion = [RACSubject subject];\n\tRACSignal *allowsConcurrentExecution = [[RACObserve(command, allowsConcurrentExecution)\n\t\ttakeUntil:completion]\n\t\treplayLast];\n\t\n\tcommand.allowsConcurrentExecution = YES;\n\t\n\texpect([allowsConcurrentExecution first]).to(beTrue());\n\t[completion sendCompleted];\n});\n\nqck_it(@\"should not deliver errors from executionSignals\", ^{\n\tRACSubject *subject = [RACSubject subject];\n\tNSMutableArray *receivedEvents = [NSMutableArray array];\n\n\tRACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(id _) {\n\t\treturn subject;\n\t}];\n\n\t[[[command.executionSignals\n\t\tflatten]\n\t\tmaterialize]\n\t\tsubscribeNext:^(RACEvent *event) {\n\t\t\t[receivedEvents addObject:event];\n\t\t}];\n\n\texpect([command execute:nil]).notTo(beNil());\n\texpect([command.executing first]).toEventually(equal(@YES));\n\n\t[subject sendNext:RACUnit.defaultUnit];\n\n\tNSArray *expectedEvents = @[ [RACEvent eventWithValue:RACUnit.defaultUnit] ];\n\texpect(receivedEvents).toEventually(equal(expectedEvents));\n\texpect([command.executing first]).to(equal(@YES));\n\n\t[subject sendNext:@\"foo\"];\n\n\texpectedEvents = @[ [RACEvent eventWithValue:RACUnit.defaultUnit], [RACEvent eventWithValue:@\"foo\"] ];\n\texpect(receivedEvents).toEventually(equal(expectedEvents));\n\texpect([command.executing first]).to(equal(@YES));\n\n\tNSError *error = [NSError errorWithDomain:@\"\" code:1 userInfo:nil];\n\t[subject sendError:error];\n\n\texpect([command.executing first]).toEventually(equal(@NO));\n\texpect(receivedEvents).to(equal(expectedEvents));\n});\n\nqck_it(@\"should deliver errors from -execute:\", ^{\n\tRACSubject *subject = [RACSubject subject];\n\tNSMutableArray *receivedEvents = [NSMutableArray array];\n\n\tRACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(id _) {\n\t\treturn subject;\n\t}];\n\n\t[[[command\n\t\texecute:nil]\n\t\tmaterialize]\n\t\tsubscribeNext:^(RACEvent *event) {\n\t\t\t[receivedEvents addObject:event];\n\t\t}];\n\n\texpect([command.executing first]).toEventually(equal(@YES));\n\n\t[subject sendNext:RACUnit.defaultUnit];\n\n\tNSArray *expectedEvents = @[ [RACEvent eventWithValue:RACUnit.defaultUnit] ];\n\texpect(receivedEvents).toEventually(equal(expectedEvents));\n\texpect([command.executing first]).to(equal(@YES));\n\n\t[subject sendNext:@\"foo\"];\n\n\texpectedEvents = @[ [RACEvent eventWithValue:RACUnit.defaultUnit], [RACEvent eventWithValue:@\"foo\"] ];\n\texpect(receivedEvents).toEventually(equal(expectedEvents));\n\texpect([command.executing first]).to(equal(@YES));\n\n\tNSError *error = [NSError errorWithDomain:@\"\" code:1 userInfo:nil];\n\t[subject sendError:error];\n\n\texpectedEvents = @[ [RACEvent eventWithValue:RACUnit.defaultUnit], [RACEvent eventWithValue:@\"foo\"], [RACEvent eventWithError:error] ];\n\texpect(receivedEvents).toEventually(equal(expectedEvents));\n\texpect([command.executing first]).toEventually(equal(@NO));\n});\n\nqck_it(@\"should deliver errors onto 'errors'\", ^{\n\tRACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(RACSignal *signal) {\n\t\treturn signal;\n\t}];\n\n\tcommand.allowsConcurrentExecution = YES;\n\t\n\tRACSubject *firstSubject = [RACSubject subject];\n\texpect([command execute:firstSubject]).notTo(beNil());\n\n\tRACSubject *secondSubject = [RACSubject subject];\n\texpect([command execute:secondSubject]).notTo(beNil());\n\n\tNSError *firstError = [NSError errorWithDomain:@\"\" code:1 userInfo:nil];\n\tNSError *secondError = [NSError errorWithDomain:@\"\" code:2 userInfo:nil];\n\t\n\t// We should receive errors from our previously-started executions.\n\tNSMutableArray *receivedErrors = [NSMutableArray array];\n\t[command.errors subscribeNext:^(NSError *error) {\n\t\t[receivedErrors addObject:error];\n\t}];\n\n\texpect([command.executing first]).toEventually(equal(@YES));\n\n\t[firstSubject sendError:firstError];\n\texpect([command.executing first]).toEventually(equal(@YES));\n\n\tNSArray *expected = @[ firstError ];\n\texpect(receivedErrors).toEventually(equal(expected));\n\n\t[secondSubject sendError:secondError];\n\texpect([command.executing first]).toEventually(equal(@NO));\n\n\texpected = @[ firstError, secondError ];\n\texpect(receivedErrors).toEventually(equal(expected));\n});\n\nqck_it(@\"should not deliver non-error events onto 'errors'\", ^{\n\tRACSubject *subject = [RACSubject subject];\n\tRACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(id _) {\n\t\treturn subject;\n\t}];\n\n\t__block BOOL receivedEvent = NO;\n\t[command.errors subscribeNext:^(id _) {\n\t\treceivedEvent = YES;\n\t}];\n\n\texpect([command execute:nil]).notTo(beNil());\n\texpect([command.executing first]).toEventually(equal(@YES));\n\n\t[subject sendNext:RACUnit.defaultUnit];\n\t[subject sendCompleted];\n\n\texpect([command.executing first]).toEventually(equal(@NO));\n\texpect(@(receivedEvent)).to(beFalsy());\n});\n\nqck_it(@\"should send errors on the main thread\", ^{\n\tRACCommand *command = [[RACCommand alloc] initWithSignalBlock:^(RACSignal *signal) {\n\t\treturn signal;\n\t}];\n\n\tNSError *error = [NSError errorWithDomain:@\"\" code:1 userInfo:nil];\n\n\t__block RACScheduler *receivedScheduler = nil;\n\t[command.errors subscribeNext:^(NSError *e) {\n\t\texpect(e).to(equal(error));\n\t\treceivedScheduler = RACScheduler.currentScheduler;\n\t}];\n\n\tRACSignal *errorSignal = [RACSignal error:error];\n\n\t[[RACScheduler scheduler] schedule:^{\n\t\t[command execute:errorSignal];\n\t}];\n\n\texpect(receivedScheduler).to(beNil());\n\texpect(receivedScheduler).toEventually(equal(RACScheduler.mainThreadScheduler));\n});\n\nqck_describe(@\"enabled signal\", ^{\n\t__block RACSubject *enabledSubject;\n\t__block RACCommand *command;\n\n\tqck_beforeEach(^{\n\t\tenabledSubject = [RACSubject subject];\n\t\tcommand = [[RACCommand alloc] initWithEnabled:enabledSubject signalBlock:^(id _) {\n\t\t\treturn [RACSignal return:RACUnit.defaultUnit];\n\t\t}];\n\t});\n\n\tqck_it(@\"should send YES by default\", ^{\n\t\texpect([command.enabled first]).to(equal(@YES));\n\t});\n\n\tqck_it(@\"should send whatever the enabledSignal has sent most recently\", ^{\n\t\t[enabledSubject sendNext:@NO];\n\t\texpect([command.enabled first]).toEventually(equal(@NO));\n\n\t\t[enabledSubject sendNext:@YES];\n\t\texpect([command.enabled first]).toEventually(equal(@YES));\n\n\t\t[enabledSubject sendNext:@NO];\n\t\texpect([command.enabled first]).toEventually(equal(@NO));\n\t});\n\t\n\tqck_it(@\"should sample enabledSignal synchronously at initialization time\", ^{\n\t\tRACCommand *command = [[RACCommand alloc] initWithEnabled:[RACSignal return:@NO] signalBlock:^(id _) {\n\t\t\treturn [RACSignal empty];\n\t\t}];\n\t\texpect([command.enabled first]).to(equal(@NO));\n\t});\n\n\tqck_it(@\"should send NO while executing is YES and allowsConcurrentExecution is NO\", ^{\n\t\t[[command.executionSignals flatten] subscribeNext:^(id _) {\n\t\t\texpect([command.executing first]).to(equal(@YES));\n\t\t\texpect([command.enabled first]).to(equal(@NO));\n\t\t}];\n\n\t\texpect([command.enabled first]).to(equal(@YES));\n\t\texpect(@([[command execute:nil] asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy());\n\t\texpect([command.enabled first]).to(equal(@YES));\n\t});\n\n\tqck_it(@\"should send YES while executing is YES and allowsConcurrentExecution is YES\", ^{\n\t\tcommand.allowsConcurrentExecution = YES;\n\n\t\t__block BOOL outerExecuted = NO;\n\t\t__block BOOL innerExecuted = NO;\n\n\t\t// Prevent infinite recursion by only responding to the first value.\n\t\t[[[command.executionSignals\n\t\t\ttake:1]\n\t\t\tflatten]\n\t\t\tsubscribeNext:^(id _) {\n\t\t\t\touterExecuted = YES;\n\n\t\t\t\texpect([command.executing first]).to(equal(@YES));\n\t\t\t\texpect([command.enabled first]).to(equal(@YES));\n\n\t\t\t\t[[command execute:nil] subscribeCompleted:^{\n\t\t\t\t\tinnerExecuted = YES;\n\t\t\t\t}];\n\t\t\t}];\n\n\t\texpect([command.enabled first]).to(equal(@YES));\n\n\t\texpect([command execute:nil]).notTo(beNil());\n\t\texpect(@(outerExecuted)).toEventually(beTruthy());\n\t\texpect(@(innerExecuted)).toEventually(beTruthy());\n\n\t\texpect([command.enabled first]).to(equal(@YES));\n\t});\n\n\tqck_it(@\"should send an error from -execute: when NO\", ^{\n\t\t[enabledSubject sendNext:@NO];\n\n\t\tRACSignal *signal = [command execute:nil];\n\t\texpect(signal).notTo(beNil());\n\t\t\n\t\t__block BOOL success = NO;\n\t\t__block NSError *error = nil;\n\t\texpect([signal firstOrDefault:nil success:&success error:&error]).to(beNil());\n\t\texpect(@(success)).to(beFalsy());\n\n\t\texpect(error).notTo(beNil());\n\t\texpect(error.domain).to(equal(RACCommandErrorDomain));\n\t\texpect(@(error.code)).to(equal(@(RACCommandErrorNotEnabled)));\n\t\texpect(error.userInfo[RACUnderlyingCommandErrorKey]).to(beIdenticalTo(command));\n\t});\n\n\tqck_it(@\"should always update on the main thread\", ^{\n\t\t__block RACScheduler *updatedScheduler = nil;\n\t\t[[command.enabled skip:1] subscribeNext:^(id _) {\n\t\t\tupdatedScheduler = RACScheduler.currentScheduler;\n\t\t}];\n\n\t\t[[RACScheduler scheduler] schedule:^{\n\t\t\t[enabledSubject sendNext:@NO];\n\t\t}];\n\n\t\texpect([command.enabled first]).to(equal(@YES));\n\t\texpect([command.enabled first]).toEventually(equal(@NO));\n\t\texpect(updatedScheduler).to(equal(RACScheduler.mainThreadScheduler));\n\t});\n\n\tqck_it(@\"should complete when the command is deallocated even if the input signal hasn't\", ^{\n\t\t__block BOOL deallocated = NO;\n\t\t__block BOOL completed = NO;\n\n\t\t@autoreleasepool {\n\t\t\tRACCommand *command __attribute__((objc_precise_lifetime)) = [[RACCommand alloc] initWithEnabled:enabledSubject signalBlock:emptySignalBlock];\n\t\t\t[command.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tdeallocated = YES;\n\t\t\t}]];\n\n\t\t\t[command.enabled subscribeCompleted:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\t\t}\n\n\t\texpect(@(deallocated)).toEventually(beTruthy());\n\t\texpect(@(completed)).toEventually(beTruthy());\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACCompoundDisposableSpec.m",
    "content": "//\n//  RACCompoundDisposableSpec.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/30/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACCompoundDisposable.h\"\n\nQuickSpecBegin(RACCompoundDisposableSpec)\n\nqck_it(@\"should dispose of all its contained disposables\", ^{\n\t__block BOOL d1Disposed = NO;\n\tRACDisposable *d1 = [RACDisposable disposableWithBlock:^{\n\t\td1Disposed = YES;\n\t}];\n\n\t__block BOOL d2Disposed = NO;\n\tRACDisposable *d2 = [RACDisposable disposableWithBlock:^{\n\t\td2Disposed = YES;\n\t}];\n\n\t__block BOOL d3Disposed = NO;\n\tRACDisposable *d3 = [RACDisposable disposableWithBlock:^{\n\t\td3Disposed = YES;\n\t}];\n\n\t__block BOOL d4Disposed = NO;\n\tRACDisposable *d4 = [RACDisposable disposableWithBlock:^{\n\t\td4Disposed = YES;\n\t}];\n\n\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposableWithDisposables:@[ d1, d2, d3 ]];\n\t[disposable addDisposable:d4];\n\n\texpect(@(d1Disposed)).to(beFalsy());\n\texpect(@(d2Disposed)).to(beFalsy());\n\texpect(@(d3Disposed)).to(beFalsy());\n\texpect(@(d4Disposed)).to(beFalsy());\n\texpect(@(disposable.disposed)).to(beFalsy());\n\n\t[disposable dispose];\n\n\texpect(@(d1Disposed)).to(beTruthy());\n\texpect(@(d2Disposed)).to(beTruthy());\n\texpect(@(d3Disposed)).to(beTruthy());\n\texpect(@(d4Disposed)).to(beTruthy());\n\texpect(@(disposable.disposed)).to(beTruthy());\n});\n\nqck_it(@\"should dispose of any added disposables immediately if it's already been disposed\", ^{\n\tRACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];\n\t[disposable dispose];\n\n\tRACDisposable *d = [[RACDisposable alloc] init];\n\n\texpect(@(d.disposed)).to(beFalsy());\n\t[disposable addDisposable:d];\n\texpect(@(d.disposed)).to(beTruthy());\n});\n\nqck_it(@\"should work when initialized with -init\", ^{\n\tRACCompoundDisposable *disposable = [[RACCompoundDisposable alloc] init];\n\n\t__block BOOL disposed = NO;\n\tRACDisposable *d = [RACDisposable disposableWithBlock:^{\n\t\tdisposed = YES;\n\t}];\n\n\t[disposable addDisposable:d];\n\texpect(@(disposed)).to(beFalsy());\n\n\t[disposable dispose];\n\texpect(@(disposed)).to(beTruthy());\n});\n\nqck_it(@\"should work when initialized with +disposableWithBlock:\", ^{\n\t__block BOOL compoundDisposed = NO;\n\tRACCompoundDisposable *disposable = [RACCompoundDisposable disposableWithBlock:^{\n\t\tcompoundDisposed = YES;\n\t}];\n\n\t__block BOOL disposed = NO;\n\tRACDisposable *d = [RACDisposable disposableWithBlock:^{\n\t\tdisposed = YES;\n\t}];\n\n\t[disposable addDisposable:d];\n\texpect(@(disposed)).to(beFalsy());\n\texpect(@(compoundDisposed)).to(beFalsy());\n\n\t[disposable dispose];\n\texpect(@(disposed)).to(beTruthy());\n\texpect(@(compoundDisposed)).to(beTruthy());\n});\n\nqck_it(@\"should allow disposables to be removed\", ^{\n\tRACCompoundDisposable *disposable = [[RACCompoundDisposable alloc] init];\n\tRACDisposable *d = [[RACDisposable alloc] init];\n\n\t[disposable addDisposable:d];\n\t[disposable removeDisposable:d];\n\n\t[disposable dispose];\n\texpect(@(d.disposed)).to(beFalsy());\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACControlCommandExamples.h",
    "content": "//\n//  RACControlCommandExamples.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-08-15.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n// The name of the shared examples for any control class that has\n// `rac_command` and `isEnabled` properties.\nextern NSString * const RACControlCommandExamples;\n\n// The control to test.\nextern NSString * const RACControlCommandExampleControl;\n\n// A block of type `void (^)(id control)` which should activate the\n// `rac_command` of the `control` by manipulating the control itself.\nextern NSString * const RACControlCommandExampleActivateBlock;\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACControlCommandExamples.m",
    "content": "//\n//  RACControlCommandExamples.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-08-15.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACControlCommandExamples.h\"\n\n#import \"RACCommand.h\"\n#import \"RACSubject.h\"\n#import \"RACUnit.h\"\n\nNSString * const RACControlCommandExamples = @\"RACControlCommandExamples\";\nNSString * const RACControlCommandExampleControl = @\"RACControlCommandExampleControl\";\nNSString * const RACControlCommandExampleActivateBlock = @\"RACControlCommandExampleActivateBlock\";\n\n// Methods used by the unit test that would otherwise require platform-specific\n// imports.\n@interface NSObject (RACControlCommandExamples)\n\n@property (nonatomic, strong) RACCommand *rac_command;\n\n- (BOOL)isEnabled;\n\n@end\n\nQuickConfigurationBegin(RACControlCommandExampleGroups)\n\n+ (void)configure:(Configuration *)configuration {\n\tsharedExamples(RACControlCommandExamples, ^(QCKDSLSharedExampleContext exampleContext) {\n\t\t__block id control;\n\t\t__block void (^activate)(id);\n\n\t\t__block RACSubject *enabledSubject;\n\t\t__block RACCommand *command;\n\n\t\tqck_beforeEach(^{\n\t\t\tcontrol = exampleContext()[RACControlCommandExampleControl];\n\t\t\tactivate = [exampleContext()[RACControlCommandExampleActivateBlock] copy];\n\n\t\t\tenabledSubject = [RACSubject subject];\n\t\t\tcommand = [[RACCommand alloc] initWithEnabled:enabledSubject signalBlock:^(id sender) {\n\t\t\t\treturn [RACSignal return:sender];\n\t\t\t}];\n\n\t\t\t[control setRac_command:command];\n\t\t});\n\n\t\tqck_it(@\"should bind the control's enabledness to the command\", ^{\n\t\t\texpect(@([control isEnabled])).toEventually(beTruthy());\n\n\t\t\t[enabledSubject sendNext:@NO];\n\t\t\texpect(@([control isEnabled])).toEventually(beFalsy());\n\n\t\t\t[enabledSubject sendNext:@YES];\n\t\t\texpect(@([control isEnabled])).toEventually(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should execute the control's command when activated\", ^{\n\t\t\t__block BOOL executed = NO;\n\t\t\t[[command.executionSignals flatten] subscribeNext:^(id sender) {\n\t\t\t\texpect(sender).to(equal(control));\n\t\t\t\texecuted = YES;\n\t\t\t}];\n\n\t\t\tactivate(control);\n\t\t\texpect(@(executed)).toEventually(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should overwrite an existing command when setting a new one\", ^{\n\t\t\tRACCommand *secondCommand = [[RACCommand alloc] initWithSignalBlock:^(id _) {\n\t\t\t\treturn [RACSignal return:RACUnit.defaultUnit];\n\t\t\t}];\n\n\t\t\t[control setRac_command:secondCommand];\n\t\t\texpect([control rac_command]).to(beIdenticalTo(secondCommand));\n\t\t});\n\t});\n}\n\nQuickConfigurationEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACDelegateProxySpec.m",
    "content": "//\n//  RACDelegateProxySpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-06-22.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"NSObject+RACSelectorSignal.h\"\n#import \"RACDelegateProxy.h\"\n#import \"RACSignal.h\"\n#import \"RACTuple.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"NSObject+RACDeallocating.h\"\n\n@protocol TestDelegateProtocol\n- (NSUInteger)lengthOfString:(NSString *)str;\n@end\n\n@interface TestDelegate : NSObject <TestDelegateProtocol>\n@property (nonatomic, assign) BOOL lengthOfStringInvoked;\n@end\n\nQuickSpecBegin(RACDelegateProxySpec)\n\n__block id proxy;\n__block TestDelegate *delegate;\n__block Protocol *protocol;\n\nqck_beforeEach(^{\n\tprotocol = @protocol(TestDelegateProtocol);\n\texpect(protocol).notTo(beNil());\n\n\tproxy = [[RACDelegateProxy alloc] initWithProtocol:protocol];\n\texpect(proxy).notTo(beNil());\n\texpect([proxy rac_proxiedDelegate]).to(beNil());\n\n\tdelegate = [[TestDelegate alloc] init];\n\texpect(delegate).notTo(beNil());\n});\n\nqck_it(@\"should not respond to selectors at first\", ^{\n\texpect(@([proxy respondsToSelector:@selector(lengthOfString:)])).to(beFalsy());\n});\n\nqck_it(@\"should send on a signal for a protocol method\", ^{\n\t__block RACTuple *tuple;\n\t[[proxy signalForSelector:@selector(lengthOfString:)] subscribeNext:^(RACTuple *t) {\n\t\ttuple = t;\n\t}];\n\n\texpect(@([proxy respondsToSelector:@selector(lengthOfString:)])).to(beTruthy());\n\texpect(@([proxy lengthOfString:@\"foo\"])).to(equal(@0));\n\texpect(tuple).to(equal(RACTuplePack(@\"foo\")));\n});\n\nqck_it(@\"should forward to the proxied delegate\", ^{\n\t[proxy setRac_proxiedDelegate:delegate];\n\n\texpect(@([proxy respondsToSelector:@selector(lengthOfString:)])).to(beTruthy());\n\texpect(@([proxy lengthOfString:@\"foo\"])).to(equal(@3));\n\texpect(@(delegate.lengthOfStringInvoked)).to(beTruthy());\n});\n\nqck_it(@\"should not send to the delegate when signals are applied\", ^{\n\t[proxy setRac_proxiedDelegate:delegate];\n\n\t__block RACTuple *tuple;\n\t[[proxy signalForSelector:@selector(lengthOfString:)] subscribeNext:^(RACTuple *t) {\n\t\ttuple = t;\n\t}];\n\n\texpect(@([proxy respondsToSelector:@selector(lengthOfString:)])).to(beTruthy());\n\texpect(@([proxy lengthOfString:@\"foo\"])).to(equal(@0));\n\n\texpect(tuple).to(equal(RACTuplePack(@\"foo\")));\n\texpect(@(delegate.lengthOfStringInvoked)).to(beFalsy());\n});\n\nQuickSpecEnd\n\n@implementation TestDelegate\n\n- (NSUInteger)lengthOfString:(NSString *)str {\n\tself.lengthOfStringInvoked = YES;\n\treturn str.length;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACDisposableSpec.m",
    "content": "//\n//  RACDisposableSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-06-13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACDisposable.h\"\n#import \"RACScopedDisposable.h\"\n\nQuickSpecBegin(RACDisposableSpec)\n\nqck_it(@\"should initialize without a block\", ^{\n\tRACDisposable *disposable = [[RACDisposable alloc] init];\n\texpect(disposable).notTo(beNil());\n\texpect(@(disposable.disposed)).to(beFalsy());\n\n\t[disposable dispose];\n\texpect(@(disposable.disposed)).to(beTruthy());\n});\n\nqck_it(@\"should execute a block upon disposal\", ^{\n\t__block BOOL disposed = NO;\n\tRACDisposable *disposable = [RACDisposable disposableWithBlock:^{\n\t\tdisposed = YES;\n\t}];\n\n\texpect(disposable).notTo(beNil());\n\texpect(@(disposed)).to(beFalsy());\n\texpect(@(disposable.disposed)).to(beFalsy());\n\n\t[disposable dispose];\n\texpect(@(disposed)).to(beTruthy());\n\texpect(@(disposable.disposed)).to(beTruthy());\n});\n\nqck_it(@\"should not dispose upon deallocation\", ^{\n\t__block BOOL disposed = NO;\n\t__weak RACDisposable *weakDisposable = nil;\n\n\t@autoreleasepool {\n\t\tRACDisposable *disposable = [RACDisposable disposableWithBlock:^{\n\t\t\tdisposed = YES;\n\t\t}];\n\n\t\tweakDisposable = disposable;\n\t\texpect(weakDisposable).notTo(beNil());\n\t}\n\n\texpect(weakDisposable).to(beNil());\n\texpect(@(disposed)).to(beFalsy());\n});\n\nqck_it(@\"should create a scoped disposable\", ^{\n\t__block BOOL disposed = NO;\n\t__weak RACScopedDisposable *weakDisposable = nil;\n\n\t@autoreleasepool {\n\t\tRACScopedDisposable *disposable __attribute__((objc_precise_lifetime)) = [RACScopedDisposable disposableWithBlock:^{\n\t\t\tdisposed = YES;\n\t\t}];\n\n\t\tweakDisposable = disposable;\n\t\texpect(weakDisposable).notTo(beNil());\n\t\texpect(@(disposed)).to(beFalsy());\n\t}\n\n\texpect(weakDisposable).to(beNil());\n\texpect(@(disposed)).to(beTruthy());\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACEventSpec.m",
    "content": "//\n//  RACEventSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-01-07.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACEvent.h\"\n\nQuickSpecBegin(RACEventSpec)\n\nqck_it(@\"should return the singleton completed event\", ^{\n\tRACEvent *event = RACEvent.completedEvent;\n\texpect(event).notTo(beNil());\n\n\texpect(event).to(beIdenticalTo(RACEvent.completedEvent));\n\texpect([event copy]).to(beIdenticalTo(event));\n\n\texpect(@(event.eventType)).to(equal(@(RACEventTypeCompleted)));\n\texpect(@(event.finished)).to(beTruthy());\n\texpect(event.error).to(beNil());\n\texpect(event.value).to(beNil());\n});\n\nqck_it(@\"should return an error event\", ^{\n\tNSError *error = [NSError errorWithDomain:@\"foo\" code:1 userInfo:nil];\n\tRACEvent *event = [RACEvent eventWithError:error];\n\texpect(event).notTo(beNil());\n\n\texpect(event).to(equal([RACEvent eventWithError:error]));\n\texpect([event copy]).to(equal(event));\n\n\texpect(@(event.eventType)).to(equal(@(RACEventTypeError)));\n\texpect(@(event.finished)).to(beTruthy());\n\texpect(event.error).to(equal(error));\n\texpect(event.value).to(beNil());\n});\n\nqck_it(@\"should return an error event with a nil error\", ^{\n\tRACEvent *event = [RACEvent eventWithError:nil];\n\texpect(event).notTo(beNil());\n\n\texpect(event).to(equal([RACEvent eventWithError:nil]));\n\texpect([event copy]).to(equal(event));\n\n\texpect(@(event.eventType)).to(equal(@(RACEventTypeError)));\n\texpect(@(event.finished)).to(beTruthy());\n\texpect(event.error).to(beNil());\n\texpect(event.value).to(beNil());\n});\n\nqck_it(@\"should return a next event\", ^{\n\tNSString *value = @\"foo\";\n\tRACEvent *event = [RACEvent eventWithValue:value];\n\texpect(event).notTo(beNil());\n\n\texpect(event).to(equal([RACEvent eventWithValue:value]));\n\texpect([event copy]).to(equal(event));\n\n\texpect(@(event.eventType)).to(equal(@(RACEventTypeNext)));\n\texpect(@(event.finished)).to(beFalsy());\n\texpect(event.error).to(beNil());\n\texpect(event.value).to(equal(value));\n});\n\nqck_it(@\"should return a next event with a nil value\", ^{\n\tRACEvent *event = [RACEvent eventWithValue:nil];\n\texpect(event).notTo(beNil());\n\n\texpect(event).to(equal([RACEvent eventWithValue:nil]));\n\texpect([event copy]).to(equal(event));\n\n\texpect(@(event.eventType)).to(equal(@(RACEventTypeNext)));\n\texpect(@(event.finished)).to(beFalsy());\n\texpect(event.error).to(beNil());\n\texpect(event.value).to(beNil());\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACKVOChannelSpec.m",
    "content": "//\n//  RACKVOChannelSpec.m\n//  ReactiveCocoa\n//\n//  Created by Uri Baghin on 16/12/2012.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACTestObject.h\"\n#import \"RACChannelExamples.h\"\n#import \"RACPropertySignalExamples.h\"\n\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACKVOWrapper.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACKVOChannel.h\"\n#import \"RACSignal+Operations.h\"\n\nQuickSpecBegin(RACKVOChannelSpec)\n\nqck_describe(@\"RACKVOChannel\", ^{\n\t__block RACTestObject *object;\n\t__block RACKVOChannel *channel;\n\tid value1 = @\"test value 1\";\n\tid value2 = @\"test value 2\";\n\tid value3 = @\"test value 3\";\n\tNSArray *values = @[ value1, value2, value3 ];\n\t\n\tqck_beforeEach(^{\n\t\tobject = [[RACTestObject alloc] init];\n\t\tchannel = [[RACKVOChannel alloc] initWithTarget:object keyPath:@keypath(object.stringValue) nilValue:nil];\n\t});\n\t\n\tid setupBlock = ^(RACTestObject *testObject, NSString *keyPath, id nilValue, RACSignal *signal) {\n\t\tRACKVOChannel *channel = [[RACKVOChannel alloc] initWithTarget:testObject keyPath:keyPath nilValue:nilValue];\n\t\t[signal subscribe:channel.followingTerminal];\n\t};\n\t\n\tqck_itBehavesLike(RACPropertySignalExamples, ^{\n\t\treturn @{ RACPropertySignalExamplesSetupBlock: setupBlock };\n\t});\n\t\n\tqck_itBehavesLike(RACChannelExamples, ^{\n\t\treturn @{\n\t\t\tRACChannelExampleCreateBlock: [^{\n\t\t\t\treturn [[RACKVOChannel alloc] initWithTarget:object keyPath:@keypath(object.stringValue) nilValue:nil];\n\t\t\t} copy]\n\t\t};\n\t});\n\t\n\tqck_it(@\"should send the object's current value when subscribed to followingTerminal\", ^{\n\t\t__block id receivedValue = @\"received value should not be this\";\n\t\t[[channel.followingTerminal take:1] subscribeNext:^(id x) {\n\t\t\treceivedValue = x;\n\t\t}];\n\n\t\texpect(receivedValue).to(beNil());\n\t\t\n\t\tobject.stringValue = value1;\n\t\t[[channel.followingTerminal take:1] subscribeNext:^(id x) {\n\t\t\treceivedValue = x;\n\t\t}];\n\n\t\texpect(receivedValue).to(equal(value1));\n\t});\n\t\n\tqck_it(@\"should send the object's new value on followingTerminal when it's changed\", ^{\n\t\tobject.stringValue = value1;\n\n\t\tNSMutableArray *receivedValues = [NSMutableArray array];\n\t\t[channel.followingTerminal subscribeNext:^(id x) {\n\t\t\t[receivedValues addObject:x];\n\t\t}];\n\n\t\tobject.stringValue = value2;\n\t\tobject.stringValue = value3;\n\t\texpect(receivedValues).to(equal(values));\n\t});\n\t\n\tqck_it(@\"should set the object's value using values sent to the followingTerminal\", ^{\n\t\texpect(object.stringValue).to(beNil());\n\n\t\t[channel.followingTerminal sendNext:value1];\n\t\texpect(object.stringValue).to(equal(value1));\n\n\t\t[channel.followingTerminal sendNext:value2];\n\t\texpect(object.stringValue).to(equal(value2));\n\t});\n\t\n\tqck_it(@\"should be able to subscribe to signals\", ^{\n\t\tNSMutableArray *receivedValues = [NSMutableArray array];\n\t\t[object rac_observeKeyPath:@keypath(object.stringValue) options:0 observer:self block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t[receivedValues addObject:value];\n\t\t}];\n\n\t\tRACSignal *signal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:value1];\n\t\t\t[subscriber sendNext:value2];\n\t\t\t[subscriber sendNext:value3];\n\t\t\treturn nil;\n\t\t}];\n\n\t\t[signal subscribe:channel.followingTerminal];\n\t\texpect(receivedValues).to(equal(values));\n\t});\n\n\tqck_it(@\"should complete both terminals when the target deallocates\", ^{\n\t\t__block BOOL leadingCompleted = NO;\n\t\t__block BOOL followingCompleted = NO;\n\t\t__block BOOL deallocated = NO;\n\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tdeallocated = YES;\n\t\t\t}]];\n\n\t\t\tRACKVOChannel *channel = [[RACKVOChannel alloc] initWithTarget:object keyPath:@keypath(object.stringValue) nilValue:nil];\n\t\t\t[channel.leadingTerminal subscribeCompleted:^{\n\t\t\t\tleadingCompleted = YES;\n\t\t\t}];\n\n\t\t\t[channel.followingTerminal subscribeCompleted:^{\n\t\t\t\tfollowingCompleted = YES;\n\t\t\t}];\n\n\t\t\texpect(@(deallocated)).to(beFalsy());\n\t\t\texpect(@(leadingCompleted)).to(beFalsy());\n\t\t\texpect(@(followingCompleted)).to(beFalsy());\n\t\t}\n\n\t\texpect(@(deallocated)).to(beTruthy());\n\t\texpect(@(leadingCompleted)).to(beTruthy());\n\t\texpect(@(followingCompleted)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should deallocate when the target deallocates\", ^{\n\t\t__block BOOL targetDeallocated = NO;\n\t\t__block BOOL channelDeallocated = NO;\n\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *object __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\ttargetDeallocated = YES;\n\t\t\t}]];\n\n\t\t\tRACKVOChannel *channel = [[RACKVOChannel alloc] initWithTarget:object keyPath:@keypath(object.stringValue) nilValue:nil];\n\t\t\t[channel.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tchannelDeallocated = YES;\n\t\t\t}]];\n\n\t\t\texpect(@(targetDeallocated)).to(beFalsy());\n\t\t\texpect(@(channelDeallocated)).to(beFalsy());\n\t\t}\n\n\t\texpect(@(targetDeallocated)).to(beTruthy());\n\t\texpect(@(channelDeallocated)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"RACChannelTo\", ^{\n\t__block RACTestObject *a;\n\t__block RACTestObject *b;\n\t__block RACTestObject *c;\n\t__block NSString *testName1;\n\t__block NSString *testName2;\n\t__block NSString *testName3;\n\t\n\tqck_beforeEach(^{\n\t\ta = [[RACTestObject alloc] init];\n\t\tb = [[RACTestObject alloc] init];\n\t\tc = [[RACTestObject alloc] init];\n\t\ttestName1 = @\"sync it!\";\n\t\ttestName2 = @\"sync it again!\";\n\t\ttestName3 = @\"sync it once more!\";\n\t});\n\t\n\tqck_it(@\"should keep objects' properties in sync\", ^{\n\t\tRACChannelTo(a, stringValue) = RACChannelTo(b, stringValue);\n\t\texpect(a.stringValue).to(beNil());\n\t\texpect(b.stringValue).to(beNil());\n\t\t\n\t\ta.stringValue = testName1;\n\t\texpect(a.stringValue).to(equal(testName1));\n\t\texpect(b.stringValue).to(equal(testName1));\n\t\t\n\t\tb.stringValue = testName2;\n\t\texpect(a.stringValue).to(equal(testName2));\n\t\texpect(b.stringValue).to(equal(testName2));\n\t\t\n\t\ta.stringValue = nil;\n\t\texpect(a.stringValue).to(beNil());\n\t\texpect(b.stringValue).to(beNil());\n\t});\n\t\n\tqck_it(@\"should keep properties identified by keypaths in sync\", ^{\n\t\tRACChannelTo(a, strongTestObjectValue.stringValue) = RACChannelTo(b, strongTestObjectValue.stringValue);\n\t\ta.strongTestObjectValue = [[RACTestObject alloc] init];\n\t\tb.strongTestObjectValue = [[RACTestObject alloc] init];\n\t\t\n\t\ta.strongTestObjectValue.stringValue = testName1;\n\t\texpect(a.strongTestObjectValue.stringValue).to(equal(testName1));\n\t\texpect(b.strongTestObjectValue.stringValue).to(equal(testName1));\n\t\texpect(a.strongTestObjectValue).notTo(equal(b.strongTestObjectValue));\n\t\t\n\t\tb.strongTestObjectValue = nil;\n\t\texpect(a.strongTestObjectValue.stringValue).to(beNil());\n\t\t\n\t\tc.stringValue = testName2;\n\t\tb.strongTestObjectValue = c;\n\t\texpect(a.strongTestObjectValue.stringValue).to(equal(testName2));\n\t\texpect(b.strongTestObjectValue.stringValue).to(equal(testName2));\n\t\texpect(a.strongTestObjectValue).notTo(equal(b.strongTestObjectValue));\n\t});\n\t\n\tqck_it(@\"should update properties identified by keypaths when the intermediate values change\", ^{\n\t\tRACChannelTo(a, strongTestObjectValue.stringValue) = RACChannelTo(b, strongTestObjectValue.stringValue);\n\t\ta.strongTestObjectValue = [[RACTestObject alloc] init];\n\t\tb.strongTestObjectValue = [[RACTestObject alloc] init];\n\t\tc.stringValue = testName1;\n\t\tb.strongTestObjectValue = c;\n\t\t\n\t\texpect(a.strongTestObjectValue.stringValue).to(equal(testName1));\n\t\texpect(a.strongTestObjectValue).notTo(equal(b.strongTestObjectValue));\n\t});\n\t\n\tqck_it(@\"should update properties identified by keypaths when the channel was created when one of the two objects had an intermediate nil value\", ^{\n\t\tRACChannelTo(a, strongTestObjectValue.stringValue) = RACChannelTo(b, strongTestObjectValue.stringValue);\n\t\tb.strongTestObjectValue = [[RACTestObject alloc] init];\n\t\tc.stringValue = testName1;\n\t\ta.strongTestObjectValue = c;\n\t\t\n\t\texpect(a.strongTestObjectValue.stringValue).to(equal(testName1));\n\t\texpect(b.strongTestObjectValue.stringValue).to(equal(testName1));\n\t\texpect(a.strongTestObjectValue).notTo(equal(b.strongTestObjectValue));\n\t});\n\t\n\tqck_it(@\"should take the value of the object being bound to at the start\", ^{\n\t\ta.stringValue = testName1;\n\t\tb.stringValue = testName2;\n\n\t\tRACChannelTo(a, stringValue) = RACChannelTo(b, stringValue);\n\t\texpect(a.stringValue).to(equal(testName2));\n\t\texpect(b.stringValue).to(equal(testName2));\n\t});\n\t\n\tqck_it(@\"should update the value even if it's the same value the object had before it was bound\", ^{\n\t\ta.stringValue = testName1;\n\t\tb.stringValue = testName2;\n\n\t\tRACChannelTo(a, stringValue) = RACChannelTo(b, stringValue);\n\t\texpect(a.stringValue).to(equal(testName2));\n\t\texpect(b.stringValue).to(equal(testName2));\n\t\t\n\t\tb.stringValue = testName1;\n\t\texpect(a.stringValue).to(equal(testName1));\n\t\texpect(b.stringValue).to(equal(testName1));\n\t});\n\t\n\tqck_it(@\"should bind transitively\", ^{\n\t\ta.stringValue = testName1;\n\t\tb.stringValue = testName2;\n\t\tc.stringValue = testName3;\n\n\t\tRACChannelTo(a, stringValue) = RACChannelTo(b, stringValue);\n\t\tRACChannelTo(b, stringValue) = RACChannelTo(c, stringValue);\n\t\texpect(a.stringValue).to(equal(testName3));\n\t\texpect(b.stringValue).to(equal(testName3));\n\t\texpect(c.stringValue).to(equal(testName3));\n\t\t\n\t\tc.stringValue = testName1;\n\t\texpect(a.stringValue).to(equal(testName1));\n\t\texpect(b.stringValue).to(equal(testName1));\n\t\texpect(c.stringValue).to(equal(testName1));\n\t\t\n\t\tb.stringValue = testName2;\n\t\texpect(a.stringValue).to(equal(testName2));\n\t\texpect(b.stringValue).to(equal(testName2));\n\t\texpect(c.stringValue).to(equal(testName2));\n\t\t\n\t\ta.stringValue = testName3;\n\t\texpect(a.stringValue).to(equal(testName3));\n\t\texpect(b.stringValue).to(equal(testName3));\n\t\texpect(c.stringValue).to(equal(testName3));\n\t});\n\t\n\tqck_it(@\"should bind changes made by KVC on arrays\", ^{\n\t\tb.arrayValue = @[];\n\t\tRACChannelTo(a, arrayValue) = RACChannelTo(b, arrayValue);\n\n\t\t[[b mutableArrayValueForKeyPath:@keypath(b.arrayValue)] addObject:@1];\n\t\texpect(a.arrayValue).to(equal(b.arrayValue));\n\t});\n\t\n\tqck_it(@\"should bind changes made by KVC on sets\", ^{\n\t\tb.setValue = [NSSet set];\n\t\tRACChannelTo(a, setValue) = RACChannelTo(b, setValue);\n\n\t\t[[b mutableSetValueForKeyPath:@keypath(b.setValue)] addObject:@1];\n\t\texpect(a.setValue).to(equal(b.setValue));\n\t});\n\t\n\tqck_it(@\"should bind changes made by KVC on ordered sets\", ^{\n\t\tb.orderedSetValue = [NSOrderedSet orderedSet];\n\t\tRACChannelTo(a, orderedSetValue) = RACChannelTo(b, orderedSetValue);\n\n\t\t[[b mutableOrderedSetValueForKeyPath:@keypath(b.orderedSetValue)] addObject:@1];\n\t\texpect(a.orderedSetValue).to(equal(b.orderedSetValue));\n\t});\n\t\n\tqck_it(@\"should handle deallocation of intermediate objects correctly even without support from KVO\", ^{\n\t\t__block BOOL wasDisposed = NO;\n\n\t\tRACChannelTo(a, weakTestObjectValue.stringValue) = RACChannelTo(b, strongTestObjectValue.stringValue);\n\t\tb.strongTestObjectValue = [[RACTestObject alloc] init];\n\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\twasDisposed = YES;\n\t\t\t}]];\n\t\t\t\n\t\t\ta.weakTestObjectValue = object;\n\t\t\tobject.stringValue = testName1;\n\t\t\t\n\t\t\texpect(@(wasDisposed)).to(beFalsy());\n\t\t\texpect(b.strongTestObjectValue.stringValue).to(equal(testName1));\n\t\t}\n\t\t\n\t\texpect(@(wasDisposed)).toEventually(beTruthy());\n\t\texpect(b.strongTestObjectValue.stringValue).to(beNil());\n\t});\n\t\n\tqck_it(@\"should stop binding when disposed\", ^{\n\t\tRACChannelTerminal *aTerminal = RACChannelTo(a, stringValue);\n\t\tRACChannelTerminal *bTerminal = RACChannelTo(b, stringValue);\n\n\t\ta.stringValue = testName1;\n\t\tRACDisposable *disposable = [aTerminal subscribe:bTerminal];\n\n\t\texpect(a.stringValue).to(equal(testName1));\n\t\texpect(b.stringValue).to(equal(testName1));\n\n\t\ta.stringValue = testName2;\n\t\texpect(a.stringValue).to(equal(testName2));\n\t\texpect(b.stringValue).to(equal(testName2));\n\n\t\t[disposable dispose];\n\n\t\ta.stringValue = testName3;\n\t\texpect(a.stringValue).to(equal(testName3));\n\t\texpect(b.stringValue).to(equal(testName2));\n\t});\n\t\n\tqck_it(@\"should use the nilValue when sent nil\", ^{\n\t\tRACChannelTerminal *terminal = RACChannelTo(a, integerValue, @5);\n\t\texpect(@(a.integerValue)).to(equal(@0));\n\n\t\t[terminal sendNext:@2];\n\t\texpect(@(a.integerValue)).to(equal(@2));\n\n\t\t[terminal sendNext:nil];\n\t\texpect(@(a.integerValue)).to(equal(@5));\n\t});\n\n\tqck_it(@\"should use the nilValue when an intermediate object is nil\", ^{\n\t\t__block BOOL wasDisposed = NO;\n\n\t\tRACChannelTo(a, weakTestObjectValue.integerValue, @5) = RACChannelTo(b, strongTestObjectValue.integerValue, @5);\n\t\tb.strongTestObjectValue = [[RACTestObject alloc] init];\n\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\twasDisposed = YES;\n\t\t\t}]];\n\t\t\t\n\t\t\ta.weakTestObjectValue = object;\n\t\t\tobject.integerValue = 2;\n\n\t\t\texpect(@(wasDisposed)).to(beFalsy());\n\t\t\texpect(@(b.strongTestObjectValue.integerValue)).to(equal(@2));\n\t\t}\n\t\t\n\t\texpect(@(wasDisposed)).toEventually(beTruthy());\n\t\texpect(@(b.strongTestObjectValue.integerValue)).to(equal(@5));\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACKVOProxySpec.m",
    "content": "//\n//  RACKVOProxySpec.m\n//  ReactiveCocoa\n//\n//  Created by Richard Speyer on 4/24/14.\n//  Copyright (c) 2014 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACKVOProxy.h\"\n\n#import \"NSObject+RACKVOWrapper.h\"\n#import \"NSObject+RACPropertySubscribing.h\"\n#import \"RACSerialDisposable.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACScheduler.h\"\n#import \"RACSubject.h\"\n\n@interface TestObject : NSObject {\n\tvolatile int _testInt;\n}\n\n@property (assign, atomic) int testInt;\n\n@end\n\n@implementation TestObject\n\n- (int)testInt {\n\treturn _testInt;\n}\n\n// Use manual KVO notifications to avoid any possible race conditions within the\n// automatic KVO implementation.\n- (void)setTestInt:(int)value {\n\t[self willChangeValueForKey:@keypath(self.testInt)];\n\t_testInt = value;\n\t[self didChangeValueForKey:@keypath(self.testInt)];\n}\n\n+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {\n\treturn NO;\n}\n\n@end\n\nQuickSpecBegin(RACKVOProxySpec)\n\nqck_describe(@\"RACKVOProxy\", ^{\n\t__block TestObject *testObject;\n\t__block dispatch_queue_t concurrentQueue;\n\n\tqck_beforeEach(^{\n\t\ttestObject = [[TestObject alloc] init];\n\t\tconcurrentQueue = dispatch_queue_create(\"org.reactivecocoa.ReactiveCocoa.RACKVOProxySpec.concurrentQueue\", DISPATCH_QUEUE_CONCURRENT);\n\t});\n\n\tqck_afterEach(^{\n\t\tdispatch_barrier_sync(concurrentQueue, ^{\n\t\t\ttestObject = nil;\n\t\t});\n\t});\n\n\tqck_describe(@\"basic\", ^{\n\t\tqck_it(@\"should handle multiple observations on the same value\", ^{\n\t\t\t__block int observedValue1 = 0;\n\t\t\t__block int observedValue2 = 0;\n\n\t\t\t[[[RACObserve(testObject, testInt)\n\t\t\t\tskip:1]\n\t\t\t\ttake:1]\n\t\t\t\tsubscribeNext:^(NSNumber *wrappedInt) {\n\t\t\t\t\tobservedValue1 = wrappedInt.intValue;\n\t\t\t\t}];\n\n\t\t\t[[[RACObserve(testObject, testInt)\n\t\t\t\tskip:1]\n\t\t\t\ttake:1]\n\t\t\t\tsubscribeNext:^(NSNumber *wrappedInt) {\n\t\t\t\t\tobservedValue2 = wrappedInt.intValue;\n\t\t\t\t}];\n\n\t\t\ttestObject.testInt = 2;\n\n\t\t\texpect(@(observedValue1)).toEventually(equal(@2));\n\t\t\texpect(@(observedValue2)).toEventually(equal(@2));\n\t\t});\n\n\t\tqck_it(@\"can remove individual observation\", ^{\n\t\t\t__block int observedValue1 = 0;\n\t\t\t__block int observedValue2 = 0;\n\n\t\t\tRACDisposable *disposable1 = [RACObserve(testObject, testInt) subscribeNext:^(NSNumber *wrappedInt) {\n\t\t\t\tobservedValue1 = wrappedInt.intValue;\n\t\t\t}];\n\n\t\t\t[RACObserve(testObject, testInt) subscribeNext:^(NSNumber *wrappedInt) {\n\t\t\t\tobservedValue2 = wrappedInt.intValue;\n\t\t\t}];\n\n\t\t\ttestObject.testInt = 2;\n\n\t\t\texpect(@(observedValue1)).toEventually(equal(@2));\n\t\t\texpect(@(observedValue2)).toEventually(equal(@2));\n\n\t\t\t[disposable1 dispose];\n\t\t\ttestObject.testInt = 3;\n\n\t\t\texpect(@(observedValue2)).toEventually(equal(@3));\n\t\t\texpect(@(observedValue1)).to(equal(@2));\n\t\t});\n\t});\n\n\tqck_describe(@\"async\", ^{\n\t\tqck_it(@\"should handle changes being made on another queue\", ^{\n\t\t\t__block int observedValue = 0;\n\t\t\t[[[RACObserve(testObject, testInt)\n\t\t\t\tskip:1]\n\t\t\t\ttake:1]\n\t\t\t\tsubscribeNext:^(NSNumber *wrappedInt) {\n\t\t\t\t\tobservedValue = wrappedInt.intValue;\n\t\t\t\t}];\n\n\t\t\tdispatch_async(concurrentQueue, ^{\n\t\t\t\ttestObject.testInt = 2;\n\t\t\t});\n\n\t\t\tdispatch_barrier_sync(concurrentQueue, ^{});\n\t\t\texpect(@(observedValue)).toEventually(equal(@2));\n\t\t});\n\n\t\tqck_it(@\"should handle changes being made on another queue using deliverOn\", ^{\n\t\t\t__block int observedValue = 0;\n\t\t\t[[[[RACObserve(testObject, testInt)\n\t\t\t\tskip:1]\n\t\t\t\ttake:1]\n\t\t\t\tdeliverOn:[RACScheduler mainThreadScheduler]]\n\t\t\t\tsubscribeNext:^(NSNumber *wrappedInt) {\n\t\t\t\t\tobservedValue = wrappedInt.intValue;\n\t\t\t\t}];\n\n\t\t\tdispatch_async(concurrentQueue, ^{\n\t\t\t\ttestObject.testInt = 2;\n\t\t\t});\n\n\t\t\tdispatch_barrier_sync(concurrentQueue, ^{});\n\t\t\texpect(@(observedValue)).toEventually(equal(@2));\n\t\t});\n\n\t\tqck_it(@\"async disposal of target\", ^{\n\t\t\t__block int observedValue;\n\t\t\t[[RACObserve(testObject, testInt)\n\t\t\t\tdeliverOn:RACScheduler.mainThreadScheduler]\n\t\t\t\tsubscribeNext:^(NSNumber *wrappedInt) {\n\t\t\t\t\tobservedValue = wrappedInt.intValue;\n\t\t\t\t}];\n\n\t\t\tdispatch_async(concurrentQueue, ^{\n\t\t\t\ttestObject.testInt = 2;\n\t\t\t\ttestObject = nil;\n\t\t\t});\n\n\t\t\tdispatch_barrier_sync(concurrentQueue, ^{});\n\t\t\texpect(@(observedValue)).toEventually(equal(@2));\n\t\t});\n\t});\n\n\tqck_describe(@\"stress\", ^{\n\t\tstatic const size_t numIterations = 5000;\n\n\t\t__block dispatch_queue_t iterationQueue;\n\n\t\tbeforeEach(^{\n\t\t\titerationQueue = dispatch_queue_create(\"org.reactivecocoa.ReactiveCocoa.RACKVOProxySpec.iterationQueue\", DISPATCH_QUEUE_CONCURRENT);\n\t\t});\n\n\t\t// ReactiveCocoa/ReactiveCocoa#1122\n\t\tqck_it(@\"async disposal of observer\", ^{\n\t\t\tRACSerialDisposable *disposable = [[RACSerialDisposable alloc] init];\n\n\t\t\tdispatch_apply(numIterations, iterationQueue, ^(size_t index) {\n\t\t\t\tRACDisposable *newDisposable = [RACObserve(testObject, testInt) subscribeCompleted:^{}];\n\t\t\t\t[[disposable swapInDisposable:newDisposable] dispose];\n\n\t\t\t\tdispatch_async(concurrentQueue, ^{\n\t\t\t\t\ttestObject.testInt = (int)index;\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdispatch_barrier_sync(iterationQueue, ^{\n\t\t\t\t[disposable dispose];\n\t\t\t});\n\t\t});\n\n\t\tqck_it(@\"async disposal of signal with in-flight changes\", ^{\n\t\t\tRACSubject *teardown = [RACSubject subject];\n\n\t\t\tRACSignal *isEvenSignal = [[[[RACObserve(testObject, testInt)\n\t\t\t\tmap:^(NSNumber *wrappedInt) {\n\t\t\t\t\treturn @((wrappedInt.intValue % 2) == 0);\n\t\t\t\t}]\n\t\t\t\tdeliverOn:RACScheduler.mainThreadScheduler]\n\t\t\t\ttakeUntil:teardown]\n\t\t\t\treplayLast];\n\n\t\t\tdispatch_apply(numIterations, iterationQueue, ^(size_t index) {\n\t\t\t\ttestObject.testInt = (int)index;\n\t\t\t});\n\n\t\t\tdispatch_barrier_async(iterationQueue, ^{\n\t\t\t\t[teardown sendNext:nil];\n\t\t\t});\n\n\t\t\texpect(@([isEvenSignal asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy());\n\t\t});\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACKVOWrapperSpec.m",
    "content": "//\n//  RACKVOWrapperSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-08-07.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"NSObject+RACKVOWrapper.h\"\n\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"NSObject+RACDeallocating.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACKVOTrampoline.h\"\n#import \"RACTestObject.h\"\n\n@interface RACTestOperation : NSOperation\n@end\n\n// The name of the examples.\nstatic NSString * const RACKVOWrapperExamples = @\"RACKVOWrapperExamples\";\n\n// A block that returns an object to observe in the examples.\nstatic NSString * const RACKVOWrapperExamplesTargetBlock = @\"RACKVOWrapperExamplesTargetBlock\";\n\n// The key path to observe in the examples.\n//\n// The key path must have at least one weak property in it.\nstatic NSString * const RACKVOWrapperExamplesKeyPath = @\"RACKVOWrapperExamplesKeyPath\";\n\n// A block that changes the value of a weak property in the observed key path.\n// The block is passed the object the example is observing and the new value the\n// weak property should be changed to(\nstatic NSString * const RACKVOWrapperExamplesChangeBlock = @\"RACKVOWrapperExamplesChangeBlock\";\n\n// A block that returns a valid value for the weak property changed by\n// RACKVOWrapperExamplesChangeBlock. The value must deallocate\n// normally.\nstatic NSString * const RACKVOWrapperExamplesValueBlock = @\"RACKVOWrapperExamplesValueBlock\";\n\n// Whether RACKVOWrapperExamplesChangeBlock changes the value\n// of the last key path component in the key path directly.\nstatic NSString * const RACKVOWrapperExamplesChangesValueDirectly = @\"RACKVOWrapperExamplesChangesValueDirectly\";\n\n// The name of the examples.\nstatic NSString * const RACKVOWrapperCollectionExamples = @\"RACKVOWrapperCollectionExamples\";\n\n// A block that returns an object to observe in the examples.\nstatic NSString * const RACKVOWrapperCollectionExamplesTargetBlock = @\"RACKVOWrapperCollectionExamplesTargetBlock\";\n\n// The key path to observe in the examples.\n//\n// Must identify a property of type NSOrderedSet.\nstatic NSString * const RACKVOWrapperCollectionExamplesKeyPath = @\"RACKVOWrapperCollectionExamplesKeyPath\";\n\nQuickConfigurationBegin(RACKVOWrapperExampleGroups)\n\n+ (void)configure:(Configuration *)configuration {\n\tsharedExamples(RACKVOWrapperExamples, ^(QCKDSLSharedExampleContext exampleContext) {\n\t\t__block NSObject *target = nil;\n\t\t__block NSString *keyPath = nil;\n\t\t__block void (^changeBlock)(NSObject *, id) = nil;\n\t\t__block id (^valueBlock)(void) = nil;\n\t\t__block BOOL changesValueDirectly = NO;\n\n\t\t__block NSUInteger priorCallCount = 0;\n\t\t__block NSUInteger posteriorCallCount = 0;\n\t\t__block BOOL priorTriggeredByLastKeyPathComponent = NO;\n\t\t__block BOOL posteriorTriggeredByLastKeyPathComponent = NO;\n\t\t__block BOOL posteriorTriggeredByDeallocation = NO;\n\t\t__block void (^callbackBlock)(id, NSDictionary *, BOOL, BOOL) = nil;\n\n\t\tqck_beforeEach(^{\n\t\t\tNSObject * (^targetBlock)(void) = exampleContext()[RACKVOWrapperExamplesTargetBlock];\n\t\t\ttarget = targetBlock();\n\t\t\tkeyPath = exampleContext()[RACKVOWrapperExamplesKeyPath];\n\t\t\tchangeBlock = exampleContext()[RACKVOWrapperExamplesChangeBlock];\n\t\t\tvalueBlock = exampleContext()[RACKVOWrapperExamplesValueBlock];\n\t\t\tchangesValueDirectly = [exampleContext()[RACKVOWrapperExamplesChangesValueDirectly] boolValue];\n\n\t\t\tpriorCallCount = 0;\n\t\t\tposteriorCallCount = 0;\n\n\t\t\tcallbackBlock = [^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t\tif ([change[NSKeyValueChangeNotificationIsPriorKey] boolValue]) {\n\t\t\t\t\tpriorTriggeredByLastKeyPathComponent = affectedOnlyLastComponent;\n\t\t\t\t\t++priorCallCount;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tposteriorTriggeredByLastKeyPathComponent = affectedOnlyLastComponent;\n\t\t\t\tposteriorTriggeredByDeallocation = causedByDealloc;\n\t\t\t\t++posteriorCallCount;\n\t\t\t} copy];\n\t\t});\n\n\t\tqck_afterEach(^{\n\t\t\ttarget = nil;\n\t\t\tkeyPath = nil;\n\t\t\tchangeBlock = nil;\n\t\t\tvalueBlock = nil;\n\t\t\tchangesValueDirectly = NO;\n\n\t\t\tcallbackBlock = nil;\n\t\t});\n\n\t\tqck_it(@\"should not call the callback block on add if called without NSKeyValueObservingOptionInitial\", ^{\n\t\t\t[target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior observer:nil block:callbackBlock];\n\t\t\texpect(@(priorCallCount)).to(equal(@0));\n\t\t\texpect(@(posteriorCallCount)).to(equal(@0));\n\t\t});\n\n\t\tqck_it(@\"should call the callback block on add if called with NSKeyValueObservingOptionInitial\", ^{\n\t\t\t[target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior | NSKeyValueObservingOptionInitial observer:nil block:callbackBlock];\n\t\t\texpect(@(priorCallCount)).to(equal(@0));\n\t\t\texpect(@(posteriorCallCount)).to(equal(@1));\n\t\t});\n\n\t\tqck_it(@\"should call the callback block twice per change, once prior and once posterior\", ^{\n\t\t\t[target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior observer:nil block:callbackBlock];\n\t\t\tpriorCallCount = 0;\n\t\t\tposteriorCallCount = 0;\n\n\t\t\tid value1 = valueBlock();\n\t\t\tchangeBlock(target, value1);\n\t\t\texpect(@(priorCallCount)).to(equal(@1));\n\t\t\texpect(@(posteriorCallCount)).to(equal(@1));\n\t\t\texpect(@(priorTriggeredByLastKeyPathComponent)).to(equal(@(changesValueDirectly)));\n\t\t\texpect(@(posteriorTriggeredByLastKeyPathComponent)).to(equal(@(changesValueDirectly)));\n\t\t\texpect(@(posteriorTriggeredByDeallocation)).to(beFalsy());\n\n\t\t\tid value2 = valueBlock();\n\t\t\tchangeBlock(target, value2);\n\t\t\texpect(@(priorCallCount)).to(equal(@2));\n\t\t\texpect(@(posteriorCallCount)).to(equal(@2));\n\t\t\texpect(@(priorTriggeredByLastKeyPathComponent)).to(equal(@(changesValueDirectly)));\n\t\t\texpect(@(posteriorTriggeredByLastKeyPathComponent)).to(equal(@(changesValueDirectly)));\n\t\t\texpect(@(posteriorTriggeredByDeallocation)).to(beFalsy());\n\t\t});\n\n\t\tqck_it(@\"should call the callback block with NSKeyValueChangeNotificationIsPriorKey set before the value is changed, and not set after the value is changed\", ^{\n\t\t\t__block BOOL priorCalled = NO;\n\t\t\t__block BOOL posteriorCalled = NO;\n\t\t\t__block id priorValue = nil;\n\t\t\t__block id posteriorValue = nil;\n\n\t\t\tid value1 = valueBlock();\n\t\t\tchangeBlock(target, value1);\n\t\t\tid oldValue = [target valueForKeyPath:keyPath];\n\n\t\t\t[target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t\tif ([change[NSKeyValueChangeNotificationIsPriorKey] boolValue]) {\n\t\t\t\t\tpriorCalled = YES;\n\t\t\t\t\tpriorValue = value;\n\t\t\t\t\texpect(@(posteriorCalled)).to(beFalsy());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tposteriorCalled = YES;\n\t\t\t\tposteriorValue = value;\n\t\t\t\texpect(@(priorCalled)).to(beTruthy());\n\t\t\t}];\n\n\t\t\tid value2 = valueBlock();\n\t\t\tchangeBlock(target, value2);\n\t\t\tid newValue = [target valueForKeyPath:keyPath];\n\t\t\texpect(@(priorCalled)).to(beTruthy());\n\t\t\texpect(priorValue).to(equal(oldValue));\n\t\t\texpect(@(posteriorCalled)).to(beTruthy());\n\t\t\texpect(posteriorValue).to(equal(newValue));\n\t\t});\n\n\t\tqck_it(@\"should not call the callback block after it's been disposed\", ^{\n\t\t\tRACDisposable *disposable = [target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior observer:nil block:callbackBlock];\n\t\t\tpriorCallCount = 0;\n\t\t\tposteriorCallCount = 0;\n\n\t\t\t[disposable dispose];\n\t\t\texpect(@(priorCallCount)).to(equal(@0));\n\t\t\texpect(@(posteriorCallCount)).to(equal(@0));\n\n\t\t\tid value = valueBlock();\n\t\t\tchangeBlock(target, value);\n\t\t\texpect(@(priorCallCount)).to(equal(@0));\n\t\t\texpect(@(posteriorCallCount)).to(equal(@0));\n\t\t});\n\n\t\tqck_it(@\"should call the callback block only once with NSKeyValueChangeNotificationIsPriorKey not set when the value is deallocated\", ^{\n\t\t\t__block BOOL valueDidDealloc = NO;\n\n\t\t\t[target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionPrior observer:nil block:callbackBlock];\n\n\t\t\t@autoreleasepool {\n\t\t\t\tNSObject *value __attribute__((objc_precise_lifetime)) = valueBlock();\n\t\t\t\t[value.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tvalueDidDealloc = YES;\n\t\t\t\t}]];\n\n\t\t\t\tchangeBlock(target, value);\n\t\t\t\tpriorCallCount = 0;\n\t\t\t\tposteriorCallCount = 0;\n\t\t\t}\n\n\t\t\texpect(@(valueDidDealloc)).to(beTruthy());\n\t\t\texpect(@(priorCallCount)).to(equal(@0));\n\t\t\texpect(@(posteriorCallCount)).to(equal(@1));\n\t\t\texpect(@(posteriorTriggeredByDeallocation)).to(beTruthy());\n\t\t});\n\t});\n\n\tqck_sharedExamples(RACKVOWrapperCollectionExamples, ^(QCKDSLSharedExampleContext exampleContext) {\n\t\t__block NSObject *target = nil;\n\t\t__block NSString *keyPath = nil;\n\t\t__block NSMutableOrderedSet *mutableKeyPathProxy = nil;\n\t\t__block void (^callbackBlock)(id, NSDictionary *, BOOL, BOOL) = nil;\n\n\t\t__block id priorValue = nil;\n\t\t__block id posteriorValue = nil;\n\t\t__block NSDictionary *priorChange = nil;\n\t\t__block NSDictionary *posteriorChange = nil;\n\n\t\tqck_beforeEach(^{\n\t\t\tNSObject * (^targetBlock)(void) = exampleContext()[RACKVOWrapperCollectionExamplesTargetBlock];\n\t\t\ttarget = targetBlock();\n\t\t\tkeyPath = exampleContext()[RACKVOWrapperCollectionExamplesKeyPath];\n\n\t\t\tcallbackBlock = [^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t\tif ([change[NSKeyValueChangeNotificationIsPriorKey] boolValue]) {\n\t\t\t\t\tpriorValue = value;\n\t\t\t\t\tpriorChange = change;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tposteriorValue = value;\n\t\t\t\tposteriorChange = change;\n\t\t\t} copy];\n\n\t\t\t[target setValue:[NSOrderedSet orderedSetWithObject:@0] forKeyPath:keyPath];\n\t\t\t[target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionPrior observer:nil block:callbackBlock];\n\t\t\tmutableKeyPathProxy = [target mutableOrderedSetValueForKeyPath:keyPath];\n\t\t});\n\n\t\tqck_afterEach(^{\n\t\t\ttarget = nil;\n\t\t\tkeyPath = nil;\n\t\t\tcallbackBlock = nil;\n\n\t\t\tpriorValue = nil;\n\t\t\tpriorChange = nil;\n\t\t\tposteriorValue = nil;\n\t\t\tposteriorChange = nil;\n\t\t});\n\n\t\tqck_it(@\"should support inserting elements into ordered collections\", ^{\n\t\t\t[mutableKeyPathProxy insertObject:@1 atIndex:0];\n\n\t\t\texpect(priorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @0 ]]));\n\t\t\texpect(posteriorValue).to(equal([NSOrderedSet orderedSetWithArray:(@[ @1, @0 ])]));\n\t\t\texpect(priorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeInsertion)));\n\t\t\texpect(posteriorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeInsertion)));\n\t\t\texpect(priorChange[NSKeyValueChangeOldKey]).to(beNil());\n\t\t\texpect(posteriorChange[NSKeyValueChangeNewKey]).to(equal(@[ @1 ]));\n\t\t\texpect(priorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0]));\n\t\t\texpect(posteriorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0]));\n\t\t});\n\n\t\tqck_it(@\"should support removing elements from ordered collections\", ^{\n\t\t\t[mutableKeyPathProxy removeObjectAtIndex:0];\n\n\t\t\texpect(priorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @0 ]]));\n\t\t\texpect(posteriorValue).to(equal([NSOrderedSet orderedSetWithArray:@[]]));\n\t\t\texpect(priorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeRemoval)));\n\t\t\texpect(posteriorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeRemoval)));\n\t\t\texpect(priorChange[NSKeyValueChangeOldKey]).to(equal(@[ @0 ]));\n\t\t\texpect(posteriorChange[NSKeyValueChangeNewKey]).to(beNil());\n\t\t\texpect(priorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0]));\n\t\t\texpect(posteriorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0]));\n\t\t});\n\n\t\tqck_it(@\"should support replacing elements in ordered collections\", ^{\n\t\t\t[mutableKeyPathProxy replaceObjectAtIndex:0 withObject:@1];\n\n\t\t\texpect(priorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @0 ]]));\n\t\t\texpect(posteriorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @1 ]]));\n\t\t\texpect(priorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeReplacement)));\n\t\t\texpect(posteriorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeReplacement)));\n\t\t\texpect(priorChange[NSKeyValueChangeOldKey]).to(equal(@[ @0 ]));\n\t\t\texpect(posteriorChange[NSKeyValueChangeNewKey]).to(equal(@[ @1 ]));\n\t\t\texpect(priorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0]));\n\t\t\texpect(posteriorChange[NSKeyValueChangeIndexesKey]).to(equal([NSIndexSet indexSetWithIndex:0]));\n\t\t});\n\n\t\tqck_it(@\"should support adding elements to unordered collections\", ^{\n\t\t\t[mutableKeyPathProxy unionOrderedSet:[NSOrderedSet orderedSetWithObject:@1]];\n\n\t\t\texpect(priorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @0 ]]));\n\t\t\texpect(posteriorValue).to(equal([NSOrderedSet orderedSetWithArray:(@[ @0, @1 ])]));\n\t\t\texpect(priorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeInsertion)));\n\t\t\texpect(posteriorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeInsertion)));\n\t\t\texpect(priorChange[NSKeyValueChangeOldKey]).to(beNil());\n\t\t\texpect(posteriorChange[NSKeyValueChangeNewKey]).to(equal(@[ @1 ]));\n\t\t});\n\n\t\tqck_it(@\"should support removing elements from unordered collections\", ^{\n\t\t\t[mutableKeyPathProxy minusOrderedSet:[NSOrderedSet orderedSetWithObject:@0]];\n\n\t\t\texpect(priorValue).to(equal([NSOrderedSet orderedSetWithArray:@[ @0 ]]));\n\t\t\texpect(posteriorValue).to(equal([NSOrderedSet orderedSetWithArray:@[]]));\n\t\t\texpect(priorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeRemoval)));\n\t\t\texpect(posteriorChange[NSKeyValueChangeKindKey]).to(equal(@(NSKeyValueChangeRemoval)));\n\t\t\texpect(priorChange[NSKeyValueChangeOldKey]).to(equal(@[ @0 ]));\n\t\t\texpect(posteriorChange[NSKeyValueChangeNewKey]).to(beNil());\n\t\t});\n\t});\n}\n\nQuickConfigurationEnd\n\nQuickSpecBegin(RACKVOWrapperSpec)\n\nqck_describe(@\"-rac_observeKeyPath:options:observer:block:\", ^{\n\tqck_describe(@\"on simple keys\", ^{\n\t\tNSObject * (^targetBlock)(void) = ^{\n\t\t\treturn [[RACTestObject alloc] init];\n\t\t};\n\n\t\tvoid (^changeBlock)(RACTestObject *, id) = ^(RACTestObject *target, id value) {\n\t\t\ttarget.weakTestObjectValue = value;\n\t\t};\n\n\t\tid (^valueBlock)(void) = ^{\n\t\t\treturn [[RACTestObject alloc] init];\n\t\t};\n\n\t\tqck_itBehavesLike(RACKVOWrapperExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACKVOWrapperExamplesTargetBlock: targetBlock,\n\t\t\t\tRACKVOWrapperExamplesKeyPath: @keypath(RACTestObject.new, weakTestObjectValue),\n\t\t\t\tRACKVOWrapperExamplesChangeBlock: changeBlock,\n\t\t\t\tRACKVOWrapperExamplesValueBlock: valueBlock,\n\t\t\t\tRACKVOWrapperExamplesChangesValueDirectly: @YES\n\t\t\t};\n\t\t});\n\n\t\tqck_itBehavesLike(RACKVOWrapperCollectionExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACKVOWrapperCollectionExamplesTargetBlock: targetBlock,\n\t\t\t\tRACKVOWrapperCollectionExamplesKeyPath: @keypath(RACTestObject.new, orderedSetValue)\n\t\t\t};\n\t\t});\n\t});\n\n\tqck_describe(@\"on composite key paths'\", ^{\n\t\tqck_describe(@\"last key path components\", ^{\n\t\t\tNSObject *(^targetBlock)(void) = ^{\n\t\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\t\t\t\tobject.strongTestObjectValue = [[RACTestObject alloc] init];\n\t\t\t\treturn object;\n\t\t\t};\n\n\t\t\tvoid (^changeBlock)(RACTestObject *, id) = ^(RACTestObject *target, id value) {\n\t\t\t\ttarget.strongTestObjectValue.weakTestObjectValue = value;\n\t\t\t};\n\n\t\t\tid (^valueBlock)(void) = ^{\n\t\t\t\treturn [[RACTestObject alloc] init];\n\t\t\t};\n\n\t\t\tqck_itBehavesLike(RACKVOWrapperExamples, ^{\n\t\t\t\treturn @{\n\t\t\t\t\tRACKVOWrapperExamplesTargetBlock: targetBlock,\n\t\t\t\t\tRACKVOWrapperExamplesKeyPath: @keypath(RACTestObject.new, strongTestObjectValue.weakTestObjectValue),\n\t\t\t\t\tRACKVOWrapperExamplesChangeBlock: changeBlock,\n\t\t\t\t\tRACKVOWrapperExamplesValueBlock: valueBlock,\n\t\t\t\t\tRACKVOWrapperExamplesChangesValueDirectly: @YES\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tqck_itBehavesLike(RACKVOWrapperCollectionExamples, ^{\n\t\t\t\treturn @{\n\t\t\t\t\tRACKVOWrapperCollectionExamplesTargetBlock: targetBlock,\n\t\t\t\t\tRACKVOWrapperCollectionExamplesKeyPath: @keypath(RACTestObject.new, strongTestObjectValue.orderedSetValue)\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\tqck_describe(@\"intermediate key path components\", ^{\n\t\t\tNSObject *(^targetBlock)(void) = ^{\n\t\t\t\treturn [[RACTestObject alloc] init];\n\t\t\t};\n\n\t\t\tvoid (^changeBlock)(RACTestObject *, id) = ^(RACTestObject *target, id value) {\n\t\t\t\ttarget.weakTestObjectValue = value;\n\t\t\t};\n\n\t\t\tid (^valueBlock)(void) = ^{\n\t\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\t\t\t\tobject.strongTestObjectValue = [[RACTestObject alloc] init];\n\t\t\t\treturn object;\n\t\t\t};\n\n\t\t\tqck_itBehavesLike(RACKVOWrapperExamples, ^{\n\t\t\t\treturn @{\n\t\t\t\t\tRACKVOWrapperExamplesTargetBlock: targetBlock,\n\t\t\t\t\tRACKVOWrapperExamplesKeyPath: @keypath([[RACTestObject alloc] init], weakTestObjectValue.strongTestObjectValue),\n\t\t\t\t\tRACKVOWrapperExamplesChangeBlock: changeBlock,\n\t\t\t\t\tRACKVOWrapperExamplesValueBlock: valueBlock,\n\t\t\t\t\tRACKVOWrapperExamplesChangesValueDirectly: @NO\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\tqck_it(@\"should not notice deallocation of the object returned by a dynamic final property\", ^{\n\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\t\t__block id lastValue = nil;\n\t\t\t@autoreleasepool {\n\t\t\t\t[object rac_observeKeyPath:@keypath(object.dynamicObjectProperty) options:NSKeyValueObservingOptionInitial observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t\t\tlastValue = value;\n\t\t\t\t}];\n\n\t\t\t\texpect(lastValue).to(beAKindOf(RACTestObject.class));\n\t\t\t}\n\n\t\t\texpect(lastValue).to(beAKindOf(RACTestObject.class));\n\t\t});\n\n\t\tqck_it(@\"should not notice deallocation of the object returned by a dynamic intermediate property\", ^{\n\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\t\t__block id lastValue = nil;\n\t\t\t@autoreleasepool {\n\t\t\t\t[object rac_observeKeyPath:@keypath(object.dynamicObjectProperty.integerValue) options:NSKeyValueObservingOptionInitial observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t\t\tlastValue = value;\n\t\t\t\t}];\n\n\t\t\t\texpect(lastValue).to(equal(@42));\n\t\t\t}\n\n\t\t\texpect(lastValue).to(equal(@42));\n\t\t});\n\n\t\tqck_it(@\"should not notice deallocation of the object returned by a dynamic method\", ^{\n\t\t\tRACTestObject *object = [[RACTestObject alloc] init];\n\n\t\t\t__block id lastValue = nil;\n\t\t\t@autoreleasepool {\n\t\t\t\t[object rac_observeKeyPath:@keypath(object.dynamicObjectMethod) options:NSKeyValueObservingOptionInitial observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t\t\tlastValue = value;\n\t\t\t\t}];\n\n\t\t\t\texpect(lastValue).to(beAKindOf(RACTestObject.class));\n\t\t\t}\n\n\t\t\texpect(lastValue).to(beAKindOf(RACTestObject.class));\n\t\t});\n\t});\n\n\tqck_it(@\"should not call the callback block when the value is the observer\", ^{\n\t\t__block BOOL observerDisposed = NO;\n\t\t__block BOOL observerDeallocationTriggeredChange = NO;\n\t\t__block BOOL targetDisposed = NO;\n\t\t__block BOOL targetDeallocationTriggeredChange = NO;\n\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *observer __attribute__((objc_precise_lifetime)) = [RACTestObject new];\n\t\t\t[observer.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tobserverDisposed = YES;\n\t\t\t}]];\n\n\t\t\tRACTestObject *target __attribute__((objc_precise_lifetime)) = [RACTestObject new];\n\t\t\t[target.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\ttargetDisposed = YES;\n\t\t\t}]];\n\n\t\t\tobserver.weakTestObjectValue = observer;\n\t\t\ttarget.weakTestObjectValue = target;\n\n\t\t\t// These observations can only result in dealloc triggered callbacks.\n\t\t\t[observer rac_observeKeyPath:@keypath(target.weakTestObjectValue) options:0 observer:observer block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t\tobserverDeallocationTriggeredChange = YES;\n\t\t\t}];\n\n\t\t\t[target rac_observeKeyPath:@keypath(target.weakTestObjectValue) options:0 observer:observer block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t\ttargetDeallocationTriggeredChange = YES;\n\t\t\t}];\n\t\t}\n\n\t\texpect(@(observerDisposed)).to(beTruthy());\n\t\texpect(@(observerDeallocationTriggeredChange)).to(beFalsy());\n\n\t\texpect(@(targetDisposed)).to(beTruthy());\n\t\texpect(@(targetDeallocationTriggeredChange)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should call the callback block for deallocation of the initial value of a single-key key path\", ^{\n\t\tRACTestObject *target = [RACTestObject new];\n\t\t__block BOOL objectDisposed = NO;\n\t\t__block BOOL objectDeallocationTriggeredChange = NO;\n\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *object __attribute__((objc_precise_lifetime)) = [RACTestObject new];\n\t\t\ttarget.weakTestObjectValue = object;\n\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tobjectDisposed = YES;\n\t\t\t}]];\n\n\t\t\t[target rac_observeKeyPath:@keypath(target.weakTestObjectValue) options:0 observer:target block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t\tobjectDeallocationTriggeredChange = YES;\n\t\t\t}];\n\t\t}\n\n\t\texpect(@(objectDisposed)).to(beTruthy());\n\t\texpect(@(objectDeallocationTriggeredChange)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should call the callback block for deallocation of an object conforming to protocol property\", ^{\n\t\tRACTestObject *target = [RACTestObject new];\n\t\t__block BOOL objectDisposed = NO;\n\t\t__block BOOL objectDeallocationTriggeredChange = NO;\n\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *object __attribute__((objc_precise_lifetime)) = [RACTestObject new];\n\t\t\ttarget.weakObjectWithProtocol = object;\n\t\t\t[object.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tobjectDisposed = YES;\n\t\t\t}]];\n\n\t\t\t[target rac_observeKeyPath:@keypath(target.weakObjectWithProtocol) options:0 observer:target block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\t\tobjectDeallocationTriggeredChange = YES;\n\t\t\t}];\n\t\t}\n\n\t\texpect(@(objectDisposed)).to(beTruthy());\n\t\texpect(@(objectDeallocationTriggeredChange)).to(beTruthy());\n    });\n});\n\nqck_describe(@\"rac_addObserver:forKeyPath:options:block:\", ^{\n\tqck_it(@\"should add and remove an observer\", ^{\n\t\tNSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{}];\n\t\texpect(operation).notTo(beNil());\n\n\t\t__block BOOL notified = NO;\n\t\tRACDisposable *disposable = [operation rac_observeKeyPath:@\"isFinished\" options:NSKeyValueObservingOptionNew observer:self block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\texpect([change objectForKey:NSKeyValueChangeNewKey]).to(equal(@YES));\n\n\t\t\texpect(@(notified)).to(beFalsy());\n\t\t\tnotified = YES;\n\t\t}];\n\n\t\texpect(disposable).notTo(beNil());\n\n\t\t[operation start];\n\t\t[operation waitUntilFinished];\n\n\t\texpect(@(notified)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should accept a nil observer\", ^{\n\t\tNSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{}];\n\t\tRACDisposable *disposable = [operation rac_observeKeyPath:@\"isFinished\" options:NSKeyValueObservingOptionNew observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {}];\n\n\t\texpect(disposable).notTo(beNil());\n\t});\n\n\tqck_it(@\"automatically stops KVO on subclasses when the target deallocates\", ^{\n\t\tvoid (^testKVOOnSubclass)(Class targetClass, id observer) = ^(Class targetClass, id observer) {\n\t\t\t__weak id weakTarget = nil;\n\t\t\t__weak id identifier = nil;\n\n\t\t\t@autoreleasepool {\n\t\t\t\t// Create an observable target that we control the memory management of.\n\t\t\t\tCFTypeRef target = CFBridgingRetain([[targetClass alloc] init]);\n\t\t\t\texpect((__bridge id)target).notTo(beNil());\n\n\t\t\t\tweakTarget = (__bridge id)target;\n\t\t\t\texpect(weakTarget).notTo(beNil());\n\n\t\t\t\tidentifier = [(__bridge id)target rac_observeKeyPath:@\"isFinished\" options:0 observer:observer block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {}];\n\t\t\t\texpect(identifier).notTo(beNil());\n\n\t\t\t\tCFRelease(target);\n\t\t\t}\n\n\t\t\texpect(weakTarget).to(beNil());\n\t\t\texpect(identifier).to(beNil());\n\t\t};\n\n\t\tqck_it(@\"stops KVO on NSObject subclasses\", ^{\n\t\t\ttestKVOOnSubclass(NSOperation.class, self);\n\t\t});\n\n\t\tqck_it(@\"stops KVO on subclasses of already-swizzled classes\", ^{\n\t\t\ttestKVOOnSubclass(RACTestOperation.class, self);\n\t\t});\n\n\t\tqck_it(@\"stops KVO on NSObject subclasses even with a nil observer\", ^{\n\t\t\ttestKVOOnSubclass(NSOperation.class, nil);\n\t\t});\n\n\t\tqck_it(@\"stops KVO on subclasses of already-swizzled classes even with a nil observer\", ^{\n\t\t\ttestKVOOnSubclass(RACTestOperation.class, nil);\n\t\t});\n\t});\n\n\tqck_it(@\"should automatically stop KVO when the observer deallocates\", ^{\n\t\t__weak id weakObserver = nil;\n\t\t__weak id weakIdentifier = nil;\n\n\t\tNSOperation *operation = [[NSOperation alloc] init];\n\n\t\t@autoreleasepool {\n\t\t\t// Create an observer that we control the memory management of.\n\t\t\tCFTypeRef observer = CFBridgingRetain([[NSOperation alloc] init]);\n\t\t\texpect((__bridge id)observer).notTo(beNil());\n\n\t\t\tweakObserver = (__bridge id)observer;\n\t\t\texpect(weakObserver).notTo(beNil());\n\n\t\t\tid identifier = [operation rac_observeKeyPath:@\"isFinished\" options:0 observer:(__bridge id)observer block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {}];\n\t\t\texpect(identifier).notTo(beNil());\n\n\t\t\tweakIdentifier = identifier;\n\t\t\texpect(weakIdentifier).notTo(beNil());\n\n\t\t\tCFRelease(observer);\n\t\t}\n\n\t\texpect(weakObserver).to(beNil());\n\t\texpect(weakIdentifier).to(beNil());\n\t});\n\n\tqck_it(@\"should stop KVO when the observer is disposed\", ^{\n\t\tNSOperationQueue *queue = [[NSOperationQueue alloc] init];\n\t\t__block NSString *name = nil;\n\n\t\tRACDisposable *disposable = [queue rac_observeKeyPath:@\"name\" options:0 observer:self block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\tname = queue.name;\n\t\t}];\n\n\t\tqueue.name = @\"1\";\n\t\texpect(name).to(equal(@\"1\"));\n\t\t[disposable dispose];\n\t\tqueue.name = @\"2\";\n\t\texpect(name).to(equal(@\"1\"));\n\t});\n\n\tqck_it(@\"should distinguish between observers being disposed\", ^{\n\t\tNSOperationQueue *queue = [[NSOperationQueue alloc] init];\n\t\t__block NSString *name1 = nil;\n\t\t__block NSString *name2 = nil;\n\n\t\tRACDisposable *disposable = [queue rac_observeKeyPath:@\"name\" options:0 observer:self block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\tname1 = queue.name;\n\t\t}];\n\t\t[queue rac_observeKeyPath:@\"name\" options:0 observer:self block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {\n\t\t\tname2 = queue.name;\n\t\t}];\n\n\t\tqueue.name = @\"1\";\n\t\texpect(name1).to(equal(@\"1\"));\n\t\texpect(name2).to(equal(@\"1\"));\n\t\t[disposable dispose];\n\t\tqueue.name = @\"2\";\n\t\texpect(name1).to(equal(@\"1\"));\n\t\texpect(name2).to(equal(@\"2\"));\n\t});\n});\n\nQuickSpecEnd\n\n@implementation RACTestOperation\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACMulticastConnectionSpec.m",
    "content": "//\n//  RACMulticastConnectionSpec.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 10/8/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACMulticastConnection.h\"\n#import \"RACDisposable.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACSubscriber.h\"\n#import \"RACReplaySubject.h\"\n#import \"RACScheduler.h\"\n#import <libkern/OSAtomic.h>\n\nQuickSpecBegin(RACMulticastConnectionSpec)\n\n__block NSUInteger subscriptionCount = 0;\n__block RACMulticastConnection *connection;\n\nqck_beforeEach(^{\n\tsubscriptionCount = 0;\n\tconnection = [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\tsubscriptionCount++;\n\t\treturn (RACDisposable *)nil;\n\t}] publish];\n\n\texpect(@(subscriptionCount)).to(equal(@0));\n});\n\nqck_describe(@\"-connect\", ^{\n\tqck_it(@\"should subscribe to the underlying signal\", ^{\n\t\t[connection connect];\n\t\texpect(@(subscriptionCount)).to(equal(@1));\n\t});\n\n\tqck_it(@\"should return the same disposable for each invocation\", ^{\n\t\tRACDisposable *d1 = [connection connect];\n\t\tRACDisposable *d2 = [connection connect];\n\t\texpect(d1).to(equal(d2));\n\t\texpect(@(subscriptionCount)).to(equal(@1));\n\t});\n\n\tqck_it(@\"shouldn't reconnect after disposal\", ^{\n\t\tRACDisposable *disposable1 = [connection connect];\n\t\texpect(@(subscriptionCount)).to(equal(@1));\n\n\t\t[disposable1 dispose];\n\t\t\n\t\tRACDisposable *disposable2 = [connection connect];\n\t\texpect(@(subscriptionCount)).to(equal(@1));\n\t\texpect(disposable1).to(equal(disposable2));\n\t});\n\n\tqck_it(@\"shouldn't race when connecting\", ^{\n\t\tdispatch_semaphore_t semaphore = dispatch_semaphore_create(0);\n\n\t\tRACMulticastConnection *connection = [[RACSignal\n\t\t\tdefer:^ id {\n\t\t\t\tdispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);\n\t\t\t\treturn nil;\n\t\t\t}]\n\t\t\tpublish];\n\n\t\t__block RACDisposable *disposable;\n\t\t[RACScheduler.scheduler schedule:^{\n\t\t\tdisposable = [connection connect];\n\t\t\tdispatch_semaphore_signal(semaphore);\n\t\t}];\n\n\t\texpect([connection connect]).notTo(beNil());\n\t\tdispatch_semaphore_signal(semaphore);\n\n\t\texpect(disposable).toEventuallyNot(beNil());\n\t});\n});\n\nqck_describe(@\"-autoconnect\", ^{\n\t__block RACSignal *autoconnectedSignal;\n\t\n\tqck_beforeEach(^{\n\t\tautoconnectedSignal = [connection autoconnect];\n\t});\n\n\tqck_it(@\"should subscribe to the multicasted signal on the first subscription\", ^{\n\t\texpect(@(subscriptionCount)).to(equal(@0));\n\t\t\n\t\t[autoconnectedSignal subscribeNext:^(id x) {}];\n\t\texpect(@(subscriptionCount)).to(equal(@1));\n\n\t\t[autoconnectedSignal subscribeNext:^(id x) {}];\n\t\texpect(@(subscriptionCount)).to(equal(@1));\n\t});\n\n\tqck_it(@\"should dispose of the multicasted subscription when the signal has no subscribers\", ^{\n\t\t__block BOOL disposed = NO;\n\t\t__block id<RACSubscriber> connectionSubscriber = nil;\n\t\tRACSignal *signal = [[[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t// Keep the subscriber alive so it doesn't trigger disposal on dealloc\n\t\t\tconnectionSubscriber = subscriber;\n\t\t\tsubscriptionCount++;\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\tdisposed = YES;\n\t\t\t}];\n\t\t}] publish] autoconnect];\n\t\tRACDisposable *disposable = [signal subscribeNext:^(id x) {}];\n\n\t\texpect(@(disposed)).to(beFalsy());\n\t\t[disposable dispose];\n\t\texpect(@(disposed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"shouldn't reconnect after disposal\", ^{\n\t\tRACDisposable *disposable = [autoconnectedSignal subscribeNext:^(id x) {}];\n\t\texpect(@(subscriptionCount)).to(equal(@1));\n\t\t[disposable dispose];\n\n\t\tdisposable = [autoconnectedSignal subscribeNext:^(id x) {}];\n\t\texpect(@(subscriptionCount)).to(equal(@1));\n\t\t[disposable dispose];\n\t});\n\n\tqck_it(@\"should replay values after disposal when multicasted to a replay subject\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\tRACSignal *signal = [[subject multicast:[RACReplaySubject subject]] autoconnect];\n\n\t\tNSMutableArray *results1 = [NSMutableArray array];\n\t\tRACDisposable *disposable = [signal subscribeNext:^(id x) {\n\t\t\t[results1 addObject:x];\n\t\t}];\n\n\t\t[subject sendNext:@1];\n\t\t[subject sendNext:@2];\n\t\t\n\t\texpect(results1).to(equal((@[ @1, @2 ])));\n\t\t[disposable dispose];\n\n\t\tNSMutableArray *results2 = [NSMutableArray array];\n\t\t[signal subscribeNext:^(id x) {\n\t\t\t[results2 addObject:x];\n\t\t}];\n\t\texpect(results2).toEventually(equal((@[ @1, @2 ])));\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACPropertySignalExamples.h",
    "content": "//\n//  RACPropertySignalExamples.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 9/28/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n// The name of the shared examples for a signal-driven property.\nextern NSString * const RACPropertySignalExamples;\n\n// The block should have the signature:\n//\n//   void (^)(RACTestObject *testObject, NSString *keyPath, id nilValue, RACSignal *signal)\n//\n// and should tie the value of the key path on testObject to signal. `nilValue`\n// will be used when the signal sends a `nil` value.\nextern NSString * const RACPropertySignalExamplesSetupBlock;\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACPropertySignalExamples.m",
    "content": "//\n//  RACPropertySignalExamples.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 9/28/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACTestObject.h\"\n\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACPropertySubscribing.h\"\n#import \"NSObject+RACSelectorSignal.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSubject.h\"\n\nNSString * const RACPropertySignalExamples = @\"RACPropertySignalExamples\";\nNSString * const RACPropertySignalExamplesSetupBlock = @\"RACPropertySignalExamplesSetupBlock\";\n\nQuickConfigurationBegin(RACPropertySignalExampleGroups)\n\n+ (void)configure:(Configuration *)configuration {\n\tsharedExamples(RACPropertySignalExamples, ^(QCKDSLSharedExampleContext exampleContext) {\n\t\t__block RACTestObject *testObject = nil;\n\t\t__block void (^setupBlock)(RACTestObject *, NSString *keyPath, id nilValue, RACSignal *);\n\n\t\tqck_beforeEach(^{\n\t\t\tsetupBlock = exampleContext()[RACPropertySignalExamplesSetupBlock];\n\t\t\ttestObject = [[RACTestObject alloc] init];\n\t\t});\n\n\t\tqck_it(@\"should set the value of the property with the latest value from the signal\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tsetupBlock(testObject, @keypath(testObject.objectValue), nil, subject);\n\t\t\texpect(testObject.objectValue).to(beNil());\n\n\t\t\t[subject sendNext:@1];\n\t\t\texpect(testObject.objectValue).to(equal(@1));\n\n\t\t\t[subject sendNext:@2];\n\t\t\texpect(testObject.objectValue).to(equal(@2));\n\n\t\t\t[subject sendNext:nil];\n\t\t\texpect(testObject.objectValue).to(beNil());\n\t\t});\n\n\t\tqck_it(@\"should set the given nilValue for an object property\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tsetupBlock(testObject, @keypath(testObject.objectValue), @\"foo\", subject);\n\t\t\texpect(testObject.objectValue).to(beNil());\n\n\t\t\t[subject sendNext:@1];\n\t\t\texpect(testObject.objectValue).to(equal(@1));\n\n\t\t\t[subject sendNext:@2];\n\t\t\texpect(testObject.objectValue).to(equal(@2));\n\n\t\t\t[subject sendNext:nil];\n\t\t\texpect(testObject.objectValue).to(equal(@\"foo\"));\n\t\t});\n\n\t\tqck_it(@\"should leave the value of the property alone after the signal completes\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tsetupBlock(testObject, @keypath(testObject.objectValue), nil, subject);\n\t\t\texpect(testObject.objectValue).to(beNil());\n\n\t\t\t[subject sendNext:@1];\n\t\t\texpect(testObject.objectValue).to(equal(@1));\n\n\t\t\t[subject sendCompleted];\n\t\t\texpect(testObject.objectValue).to(equal(@1));\n\t\t});\n\n\t\tqck_it(@\"should set the value of a non-object property with the latest value from the signal\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tsetupBlock(testObject, @keypath(testObject.integerValue), nil, subject);\n\t\t\texpect(@(testObject.integerValue)).to(equal(@0));\n\n\t\t\t[subject sendNext:@1];\n\t\t\texpect(@(testObject.integerValue)).to(equal(@1));\n\n\t\t\t[subject sendNext:@2];\n\t\t\texpect(@(testObject.integerValue)).to(equal(@2));\n\n\t\t\t[subject sendNext:@0];\n\t\t\texpect(@(testObject.integerValue)).to(equal(@0));\n\t\t});\n\n\t\tqck_it(@\"should set the given nilValue for a non-object property\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tsetupBlock(testObject, @keypath(testObject.integerValue), @42, subject);\n\t\t\texpect(@(testObject.integerValue)).to(equal(@0));\n\n\t\t\t[subject sendNext:@1];\n\t\t\texpect(@(testObject.integerValue)).to(equal(@1));\n\n\t\t\t[subject sendNext:@2];\n\t\t\texpect(@(testObject.integerValue)).to(equal(@2));\n\n\t\t\t[subject sendNext:nil];\n\t\t\texpect(@(testObject.integerValue)).to(equal(@42));\n\t\t});\n\n\t\tqck_it(@\"should not invoke -setNilValueForKey: with a nilValue\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tsetupBlock(testObject, @keypath(testObject.integerValue), @42, subject);\n\n\t\t\t__block BOOL setNilValueForKeyInvoked = NO;\n\t\t\t[[testObject rac_signalForSelector:@selector(setNilValueForKey:)] subscribeNext:^(NSString *key) {\n\t\t\t\tsetNilValueForKeyInvoked = YES;\n\t\t\t}];\n\n\t\t\t[subject sendNext:nil];\n\t\t\texpect(@(testObject.integerValue)).to(equal(@42));\n\t\t\texpect(@(setNilValueForKeyInvoked)).to(beFalsy());\n\t\t});\n\n\t\tqck_it(@\"should invoke -setNilValueForKey: without a nilValue\", ^{\n\t\t\tRACSubject *subject = [RACSubject subject];\n\t\t\tsetupBlock(testObject, @keypath(testObject.integerValue), nil, subject);\n\n\t\t\t[subject sendNext:@1];\n\t\t\texpect(@(testObject.integerValue)).to(equal(@1));\n\n\t\t\ttestObject.catchSetNilValueForKey = YES;\n\n\t\t\t__block BOOL setNilValueForKeyInvoked = NO;\n\t\t\t[[testObject rac_signalForSelector:@selector(setNilValueForKey:)] subscribeNext:^(NSString *key) {\n\t\t\t\tsetNilValueForKeyInvoked = YES;\n\t\t\t}];\n\n\t\t\t[subject sendNext:nil];\n\t\t\texpect(@(testObject.integerValue)).to(equal(@1));\n\t\t\texpect(@(setNilValueForKeyInvoked)).to(beTruthy());\n\t\t});\n\t});\n}\n\nQuickConfigurationEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSchedulerSpec.m",
    "content": "//\n//  RACSchedulerSpec.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 11/29/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACScheduler.h\"\n#import \"RACScheduler+Private.h\"\n#import \"RACQueueScheduler+Subclass.h\"\n#import \"RACDisposable.h\"\n#import <ReactiveCocoa/EXTScope.h>\n#import \"RACTestExampleScheduler.h\"\n#import <libkern/OSAtomic.h>\n\n// This shouldn't be used directly. Use the `expectCurrentSchedulers` block\n// below instead.\nstatic void expectCurrentSchedulersInner(NSArray *schedulers, NSMutableArray *currentSchedulerArray) {\n\tif (schedulers.count > 0) {\n\t\tRACScheduler *topScheduler = schedulers[0];\n\t\t[topScheduler schedule:^{\n\t\t\tRACScheduler *currentScheduler = RACScheduler.currentScheduler;\n\t\t\tif (currentScheduler != nil) [currentSchedulerArray addObject:currentScheduler];\n\t\t\texpectCurrentSchedulersInner([schedulers subarrayWithRange:NSMakeRange(1, schedulers.count - 1)], currentSchedulerArray);\n\t\t}];\n\t}\n}\n\nQuickSpecBegin(RACSchedulerSpec)\n\nqck_it(@\"should know its current scheduler\", ^{\n\t// Recursively schedules a block in each of the given schedulers and records\n\t// the +currentScheduler at each step. It then expects the array of\n\t// +currentSchedulers and the expected array to be equal.\n\t//\n\t// schedulers                - The array of schedulers to recursively schedule.\n\t// expectedCurrentSchedulers - The array of +currentSchedulers to expect.\n\tvoid (^expectCurrentSchedulers)(NSArray *, NSArray *) = ^(NSArray *schedulers, NSArray *expectedCurrentSchedulers) {\n\t\tNSMutableArray *currentSchedulerArray = [NSMutableArray array];\n\t\texpectCurrentSchedulersInner(schedulers, currentSchedulerArray);\n\t\texpect(currentSchedulerArray).toEventually(equal(expectedCurrentSchedulers));\n\t};\n\n\tRACScheduler *backgroundScheduler = [RACScheduler scheduler];\n\n\texpectCurrentSchedulers(@[ backgroundScheduler, RACScheduler.immediateScheduler ], @[ backgroundScheduler, backgroundScheduler ]);\n\texpectCurrentSchedulers(@[ backgroundScheduler, RACScheduler.subscriptionScheduler ], @[ backgroundScheduler, backgroundScheduler ]);\n\n\tNSArray *mainThreadJumper = @[ RACScheduler.mainThreadScheduler, backgroundScheduler, RACScheduler.mainThreadScheduler ];\n\texpectCurrentSchedulers(mainThreadJumper, mainThreadJumper);\n\n\tNSArray *backgroundJumper = @[ backgroundScheduler, RACScheduler.mainThreadScheduler, backgroundScheduler ];\n\texpectCurrentSchedulers(backgroundJumper, backgroundJumper);\n});\n\nqck_describe(@\"+mainThreadScheduler\", ^{\n\tqck_it(@\"should cancel scheduled blocks when disposed\", ^{\n\t\t__block BOOL firstBlockRan = NO;\n\t\t__block BOOL secondBlockRan = NO;\n\n\t\tRACDisposable *disposable = [RACScheduler.mainThreadScheduler schedule:^{\n\t\t\tfirstBlockRan = YES;\n\t\t}];\n\n\t\texpect(disposable).notTo(beNil());\n\n\t\t[RACScheduler.mainThreadScheduler schedule:^{\n\t\t\tsecondBlockRan = YES;\n\t\t}];\n\n\t\t[disposable dispose];\n\n\t\texpect(@(secondBlockRan)).to(beFalsy());\n\t\texpect(@(secondBlockRan)).toEventually(beTruthy());\n\t\texpect(@(firstBlockRan)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should schedule future blocks\", ^{\n\t\t__block BOOL done = NO;\n\n\t\t[RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{\n\t\t\tdone = YES;\n\t\t}];\n\n\t\texpect(@(done)).to(beFalsy());\n\t\texpect(@(done)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should cancel future blocks when disposed\", ^{\n\t\t__block BOOL firstBlockRan = NO;\n\t\t__block BOOL secondBlockRan = NO;\n\n\t\tRACDisposable *disposable = [RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{\n\t\t\tfirstBlockRan = YES;\n\t\t}];\n\n\t\texpect(disposable).notTo(beNil());\n\n\t\t[RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{\n\t\t\tsecondBlockRan = YES;\n\t\t}];\n\n\t\t[disposable dispose];\n\n\t\texpect(@(secondBlockRan)).to(beFalsy());\n\t\texpect(@(secondBlockRan)).toEventually(beTruthy());\n\t\texpect(@(firstBlockRan)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should schedule recurring blocks\", ^{\n\t\t__block NSUInteger count = 0;\n\n\t\tRACDisposable *disposable = [RACScheduler.mainThreadScheduler after:[NSDate date] repeatingEvery:0.05 withLeeway:0 schedule:^{\n\t\t\tcount++;\n\t\t}];\n\n\t\texpect(@(count)).to(equal(@0));\n\t\texpect(@(count)).toEventually(beGreaterThanOrEqualTo(@1));\n\t\texpect(@(count)).toEventually(beGreaterThanOrEqualTo(@2));\n\t\texpect(@(count)).toEventually(beGreaterThanOrEqualTo(@3));\n\n\t\t[disposable dispose];\n\t\t[NSRunLoop.mainRunLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];\n\n\t\texpect(@(count)).to(beGreaterThanOrEqualTo(@3));\n\t});\n});\n\nqck_describe(@\"+scheduler\", ^{\n\t__block RACScheduler *scheduler;\n\t__block NSDate * (^futureDate)(void);\n\n\tqck_beforeEach(^{\n\t\tscheduler = [RACScheduler scheduler];\n\n\t\tfutureDate = ^{\n\t\t\treturn [NSDate dateWithTimeIntervalSinceNow:0.01];\n\t\t};\n\t});\n\n\tqck_it(@\"should cancel scheduled blocks when disposed\", ^{\n\t\t__block BOOL firstBlockRan = NO;\n\t\t__block BOOL secondBlockRan = NO;\n\n\t\t// Start off on the scheduler so the enqueued blocks won't run until we\n\t\t// return.\n\t\t[scheduler schedule:^{\n\t\t\tRACDisposable *disposable = [scheduler schedule:^{\n\t\t\t\tfirstBlockRan = YES;\n\t\t\t}];\n\n\t\t\texpect(disposable).notTo(beNil());\n\n\t\t\t[scheduler schedule:^{\n\t\t\t\tsecondBlockRan = YES;\n\t\t\t}];\n\n\t\t\t[disposable dispose];\n\t\t}];\n\n\t\texpect(@(secondBlockRan)).toEventually(beTruthy());\n\t\texpect(@(firstBlockRan)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should schedule future blocks\", ^{\n\t\t__block BOOL done = NO;\n\n\t\t[scheduler after:futureDate() schedule:^{\n\t\t\tdone = YES;\n\t\t}];\n\n\t\texpect(@(done)).to(beFalsy());\n\t\texpect(@(done)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should cancel future blocks when disposed\", ^{\n\t\t__block BOOL firstBlockRan = NO;\n\t\t__block BOOL secondBlockRan = NO;\n\n\t\tNSDate *date = futureDate();\n\t\tRACDisposable *disposable = [scheduler after:date schedule:^{\n\t\t\tfirstBlockRan = YES;\n\t\t}];\n\n\t\texpect(disposable).notTo(beNil());\n\t\t[disposable dispose];\n\n\t\t[scheduler after:date schedule:^{\n\t\t\tsecondBlockRan = YES;\n\t\t}];\n\n\t\texpect(@(secondBlockRan)).to(beFalsy());\n\t\texpect(@(secondBlockRan)).toEventually(beTruthy());\n\t\texpect(@(firstBlockRan)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should schedule recurring blocks\", ^{\n\t\t__block NSUInteger count = 0;\n\n\t\tRACDisposable *disposable = [scheduler after:[NSDate date] repeatingEvery:0.05 withLeeway:0 schedule:^{\n\t\t\tcount++;\n\t\t}];\n\n\t\texpect(@(count)).to(beGreaterThanOrEqualTo(@0));\n\t\texpect(@(count)).toEventually(beGreaterThanOrEqualTo(@1));\n\t\texpect(@(count)).toEventually(beGreaterThanOrEqualTo(@2));\n\t\texpect(@(count)).toEventually(beGreaterThanOrEqualTo(@3));\n\n\t\t[disposable dispose];\n\t\t[NSThread sleepForTimeInterval:0.1];\n\n\t\texpect(@(count)).to(beGreaterThanOrEqualTo(@3));\n\t});\n});\n\nqck_describe(@\"+subscriptionScheduler\", ^{\n\tqck_describe(@\"setting +currentScheduler\", ^{\n\t\t__block RACScheduler *currentScheduler;\n\n\t\tqck_beforeEach(^{\n\t\t\tcurrentScheduler = nil;\n\t\t});\n\n\t\tqck_it(@\"should be the +mainThreadScheduler when scheduled from the main queue\", ^{\n\t\t\tdispatch_async(dispatch_get_main_queue(), ^{\n\t\t\t\t[RACScheduler.subscriptionScheduler schedule:^{\n\t\t\t\t\tcurrentScheduler = RACScheduler.currentScheduler;\n\t\t\t\t}];\n\t\t\t});\n\n\t\t\texpect(currentScheduler).toEventually(equal(RACScheduler.mainThreadScheduler));\n\t\t});\n\n\t\tqck_it(@\"should be a +scheduler when scheduled from an unknown queue\", ^{\n\t\t\tdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n\t\t\t\t[RACScheduler.subscriptionScheduler schedule:^{\n\t\t\t\t\tcurrentScheduler = RACScheduler.currentScheduler;\n\t\t\t\t}];\n\t\t\t});\n\n\t\t\texpect(currentScheduler).toEventuallyNot(beNil());\n\t\t\texpect(currentScheduler).notTo(equal(RACScheduler.mainThreadScheduler));\n\t\t});\n\n\t\tqck_it(@\"should equal the background scheduler from which the block was scheduled\", ^{\n\t\t\tRACScheduler *backgroundScheduler = [RACScheduler scheduler];\n\t\t\t[backgroundScheduler schedule:^{\n\t\t\t\t[RACScheduler.subscriptionScheduler schedule:^{\n\t\t\t\t\tcurrentScheduler = RACScheduler.currentScheduler;\n\t\t\t\t}];\n\t\t\t}];\n\n\t\t\texpect(currentScheduler).toEventually(equal(backgroundScheduler));\n\t\t});\n\t});\n\n\tqck_it(@\"should execute scheduled blocks immediately if it's in a scheduler already\", ^{\n\t\t__block BOOL done = NO;\n\t\t__block BOOL executedImmediately = NO;\n\n\t\t[[RACScheduler scheduler] schedule:^{\n\t\t\t[RACScheduler.subscriptionScheduler schedule:^{\n\t\t\t\texecutedImmediately = YES;\n\t\t\t}];\n\n\t\t\tdone = YES;\n\t\t}];\n\n\t\texpect(@(done)).toEventually(beTruthy());\n\t\texpect(@(executedImmediately)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"+immediateScheduler\", ^{\n\tqck_it(@\"should immediately execute scheduled blocks\", ^{\n\t\t__block BOOL executed = NO;\n\t\tRACDisposable *disposable = [RACScheduler.immediateScheduler schedule:^{\n\t\t\texecuted = YES;\n\t\t}];\n\n\t\texpect(disposable).to(beNil());\n\t\texpect(@(executed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should block for future scheduled blocks\", ^{\n\t\t__block BOOL executed = NO;\n\t\tRACDisposable *disposable = [RACScheduler.immediateScheduler after:[NSDate dateWithTimeIntervalSinceNow:0.01] schedule:^{\n\t\t\texecuted = YES;\n\t\t}];\n\n\t\texpect(@(executed)).to(beTruthy());\n\t\texpect(disposable).to(beNil());\n\t});\n});\n\nqck_describe(@\"-scheduleRecursiveBlock:\", ^{\n\tqck_describe(@\"with a synchronous scheduler\", ^{\n\t\tqck_it(@\"should behave like a normal block when it doesn't invoke itself\", ^{\n\t\t\t__block BOOL executed = NO;\n\t\t\t[RACScheduler.immediateScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) {\n\t\t\t\texpect(@(executed)).to(beFalsy());\n\t\t\t\texecuted = YES;\n\t\t\t}];\n\n\t\t\texpect(@(executed)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should reschedule itself after the caller completes\", ^{\n\t\t\t__block NSUInteger count = 0;\n\t\t\t[RACScheduler.immediateScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) {\n\t\t\t\tNSUInteger thisCount = ++count;\n\t\t\t\tif (thisCount < 3) {\n\t\t\t\t\trecurse();\n\n\t\t\t\t\t// The block shouldn't have been invoked again yet, only\n\t\t\t\t\t// scheduled.\n\t\t\t\t\texpect(@(count)).to(equal(@(thisCount)));\n\t\t\t\t}\n\t\t\t}];\n\n\t\t\texpect(@(count)).to(equal(@3));\n\t\t});\n\n\t\tqck_it(@\"should unroll deep recursion\", ^{\n\t\t\tstatic const NSUInteger depth = 100000;\n\t\t\t__block NSUInteger scheduleCount = 0;\n\t\t\t[RACScheduler.immediateScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) {\n\t\t\t\tscheduleCount++;\n\n\t\t\t\tif (scheduleCount < depth) recurse();\n\t\t\t}];\n\n\t\t\texpect(@(scheduleCount)).to(equal(@(depth)));\n\t\t});\n\t});\n\n\tqck_describe(@\"with an asynchronous scheduler\", ^{\n\t\tqck_it(@\"should behave like a normal block when it doesn't invoke itself\", ^{\n\t\t\t__block BOOL executed = NO;\n\t\t\t[RACScheduler.mainThreadScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) {\n\t\t\t\texpect(@(executed)).to(beFalsy());\n\t\t\t\texecuted = YES;\n\t\t\t}];\n\n\t\t\texpect(@(executed)).toEventually(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should reschedule itself after the caller completes\", ^{\n\t\t\t__block NSUInteger count = 0;\n\t\t\t[RACScheduler.mainThreadScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) {\n\t\t\t\tNSUInteger thisCount = ++count;\n\t\t\t\tif (thisCount < 3) {\n\t\t\t\t\trecurse();\n\n\t\t\t\t\t// The block shouldn't have been invoked again yet, only\n\t\t\t\t\t// scheduled.\n\t\t\t\t\texpect(@(count)).to(equal(@(thisCount)));\n\t\t\t\t}\n\t\t\t}];\n\n\t\t\texpect(@(count)).toEventually(equal(@3));\n\t\t});\n\n\t\tqck_it(@\"should reschedule when invoked asynchronously\", ^{\n\t\t\t__block NSUInteger count = 0;\n\n\t\t\tRACScheduler *asynchronousScheduler = [RACScheduler scheduler];\n\t\t\t[RACScheduler.mainThreadScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) {\n\t\t\t\t[asynchronousScheduler after:[NSDate dateWithTimeIntervalSinceNow:0.01] schedule:^{\n\t\t\t\t\tNSUInteger thisCount = ++count;\n\t\t\t\t\tif (thisCount < 3) {\n\t\t\t\t\t\trecurse();\n\n\t\t\t\t\t\t// The block shouldn't have been invoked again yet, only\n\t\t\t\t\t\t// scheduled.\n\t\t\t\t\t\texpect(@(count)).to(equal(@(thisCount)));\n\t\t\t\t\t}\n\t\t\t\t}];\n\t\t\t}];\n\n\t\t\texpect(@(count)).toEventually(equal(@3));\n\t\t});\n\n\t\tqck_it(@\"shouldn't reschedule itself when disposed\", ^{\n\t\t\t__block NSUInteger count = 0;\n\t\t\t__block RACDisposable *disposable = [RACScheduler.mainThreadScheduler scheduleRecursiveBlock:^(void (^recurse)(void)) {\n\t\t\t\t++count;\n\n\t\t\t\texpect(disposable).notTo(beNil());\n\t\t\t\t[disposable dispose];\n\n\t\t\t\trecurse();\n\t\t\t}];\n\n\t\t\texpect(@(count)).toEventually(equal(@1));\n\t\t});\n\t});\n});\n\nqck_describe(@\"subclassing\", ^{\n\t__block RACTestExampleScheduler *scheduler;\n\n\tqck_beforeEach(^{\n\t\tscheduler = [[RACTestExampleScheduler alloc] initWithQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];\n\t});\n\n\tqck_it(@\"should invoke blocks scheduled with -schedule:\", ^{\n\t\t__block BOOL invoked = NO;\n\t\t[scheduler schedule:^{\n\t\t\tinvoked = YES;\n\t\t}];\n\n\t\texpect(@(invoked)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should invoke blocks scheduled with -after:schedule:\", ^{\n\t\t__block BOOL invoked = NO;\n\t\t[scheduler after:[NSDate dateWithTimeIntervalSinceNow:0.01] schedule:^{\n\t\t\tinvoked = YES;\n\t\t}];\n\n\t\texpect(@(invoked)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should set a valid current scheduler\", ^{\n\t\t__block RACScheduler *currentScheduler;\n\t\t[scheduler schedule:^{\n\t\t\tcurrentScheduler = RACScheduler.currentScheduler;\n\t\t}];\n\n\t\texpect(currentScheduler).toEventually(equal(scheduler));\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSequenceAdditionsSpec.m",
    "content": "//\n//  RACSequenceAdditionsSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-11-01.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACSequenceExamples.h\"\n\n#import \"NSArray+RACSequenceAdditions.h\"\n#import \"NSDictionary+RACSequenceAdditions.h\"\n#import \"NSOrderedSet+RACSequenceAdditions.h\"\n#import \"NSSet+RACSequenceAdditions.h\"\n#import \"NSString+RACSequenceAdditions.h\"\n#import \"NSIndexSet+RACSequenceAdditions.h\"\n#import \"RACSequence.h\"\n#import \"RACTuple.h\"\n\nQuickSpecBegin(RACSequenceAdditionsSpec)\n\n__block NSArray *numbers;\n\nqck_beforeEach(^{\n\tNSMutableArray *mutableNumbers = [NSMutableArray array];\n\tfor (NSUInteger i = 0; i < 100; i++) {\n\t\t[mutableNumbers addObject:@(i)];\n\t}\n\n\tnumbers = [mutableNumbers copy];\n});\n\nqck_describe(@\"NSArray sequences\", ^{\n\t__block NSMutableArray *values;\n\t__block RACSequence *sequence;\n\t\n\tqck_beforeEach(^{\n\t\tvalues = [numbers mutableCopy];\n\t\tsequence = values.rac_sequence;\n\t\texpect(sequence).notTo(beNil());\n\t});\n\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\tRACSequenceExampleExpectedValues: values\n\t\t};\n\t});\n\n\tqck_describe(@\"should be immutable\", ^{\n\t\t__block NSArray *unchangedValues;\n\t\t\n\t\tqck_beforeEach(^{\n\t\t\tunchangedValues = [values copy];\n\t\t\t[values addObject:@6];\n\t\t});\n\n\t\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\t\tRACSequenceExampleExpectedValues: unchangedValues\n\t\t\t};\n\t\t});\n\t});\n\n\tqck_it(@\"should fast enumerate after zipping\", ^{\n\t\t// This certain list of values causes issues, for some reason.\n\t\tNSArray *values = @[ @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0, @0 ];\n\t\tRACSequence *zippedSequence = [RACSequence zip:@[ values.rac_sequence, values.rac_sequence ] reduce:^(id obj1, id obj2) {\n\t\t\treturn obj1;\n\t\t}];\n\n\t\tNSMutableArray *collectedValues = [NSMutableArray array];\n\t\tfor (id value in zippedSequence) {\n\t\t\t[collectedValues addObject:value];\n\t\t}\n\n\t\texpect(collectedValues).to(equal(values));\n\t});\n});\n\nqck_describe(@\"NSDictionary sequences\", ^{\n\t__block NSMutableDictionary *dict;\n\n\t__block NSMutableArray *tuples;\n\t__block RACSequence *tupleSequence;\n\n\t__block NSArray *keys;\n\t__block RACSequence *keySequence;\n\n\t__block NSArray *values;\n\t__block RACSequence *valueSequence;\n\n\tqck_beforeEach(^{\n\t\tdict = [@{\n\t\t\t@\"foo\": @\"bar\",\n\t\t\t@\"baz\": @\"buzz\",\n\t\t\t@5: NSNull.null\n\t\t} mutableCopy];\n\n\t\ttuples = [NSMutableArray array];\n\t\tfor (id key in dict) {\n\t\t\tRACTuple *tuple = RACTuplePack(key, dict[key]);\n\t\t\t[tuples addObject:tuple];\n\t\t}\n\n\t\ttupleSequence = dict.rac_sequence;\n\t\texpect(tupleSequence).notTo(beNil());\n\n\t\tkeys = [dict.allKeys copy];\n\t\tkeySequence = dict.rac_keySequence;\n\t\texpect(keySequence).notTo(beNil());\n\n\t\tvalues = [dict.allValues copy];\n\t\tvalueSequence = dict.rac_valueSequence;\n\t\texpect(valueSequence).notTo(beNil());\n\t});\n\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: tupleSequence,\n\t\t\tRACSequenceExampleExpectedValues: tuples\n\t\t};\n\t});\n\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: keySequence,\n\t\t\tRACSequenceExampleExpectedValues: keys\n\t\t};\n\t});\n\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: valueSequence,\n\t\t\tRACSequenceExampleExpectedValues: values\n\t\t};\n\t});\n\n\tqck_describe(@\"should be immutable\", ^{\n\t\tqck_beforeEach(^{\n\t\t\tdict[@\"foo\"] = @\"rab\";\n\t\t\tdict[@6] = @7;\n\t\t});\n\n\t\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACSequenceExampleSequence: tupleSequence,\n\t\t\t\tRACSequenceExampleExpectedValues: tuples\n\t\t\t};\n\t\t});\n\n\t\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACSequenceExampleSequence: keySequence,\n\t\t\t\tRACSequenceExampleExpectedValues: keys\n\t\t\t};\n\t\t});\n\n\t\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACSequenceExampleSequence: valueSequence,\n\t\t\t\tRACSequenceExampleExpectedValues: values\n\t\t\t};\n\t\t});\n\t});\n});\n\nqck_describe(@\"NSOrderedSet sequences\", ^{\n\t__block NSMutableOrderedSet *values;\n\t__block RACSequence *sequence;\n\n\tqck_beforeEach(^{\n\t\tvalues = [NSMutableOrderedSet orderedSetWithArray:numbers];\n\t\tsequence = values.rac_sequence;\n\t\texpect(sequence).notTo(beNil());\n\t});\n\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\tRACSequenceExampleExpectedValues: values.array\n\t\t};\n\t});\n\n\tqck_describe(@\"should be immutable\", ^{\n\t\t__block NSArray *unchangedValues;\n\t\t\n\t\tqck_beforeEach(^{\n\t\t\tunchangedValues = [values.array copy];\n\t\t\t[values addObject:@6];\n\t\t});\n\n\t\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\t\tRACSequenceExampleExpectedValues: unchangedValues\n\t\t\t};\n\t\t});\n\t});\n});\n\nqck_describe(@\"NSSet sequences\", ^{\n\t__block NSMutableSet *values;\n\t__block RACSequence *sequence;\n\n\tqck_beforeEach(^{\n\t\tvalues = [NSMutableSet setWithArray:numbers];\n\t\tsequence = values.rac_sequence;\n\t\texpect(sequence).notTo(beNil());\n\t});\n\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\tRACSequenceExampleExpectedValues: values.allObjects\n\t\t};\n\t});\n\n\tqck_describe(@\"should be immutable\", ^{\n\t\t__block NSArray *unchangedValues;\n\t\t\n\t\tqck_beforeEach(^{\n\t\t\tunchangedValues = [values.allObjects copy];\n\t\t\t[values addObject:@6];\n\t\t});\n\n\t\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\t\tRACSequenceExampleExpectedValues: unchangedValues\n\t\t\t};\n\t\t});\n\t});\n});\n\nqck_describe(@\"NSString sequences\", ^{\n\t__block NSMutableString *string;\n\t__block NSArray *values;\n\t__block RACSequence *sequence;\n\n\tqck_beforeEach(^{\n\t\tstring = [@\"foobar\" mutableCopy];\n\t\tvalues = @[ @\"f\", @\"o\", @\"o\", @\"b\", @\"a\", @\"r\" ];\n\t\tsequence = string.rac_sequence;\n\t\texpect(sequence).notTo(beNil());\n\t});\n\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\tRACSequenceExampleExpectedValues: values\n\t\t};\n\t});\n\n\tqck_describe(@\"should be immutable\", ^{\n\t\tqck_beforeEach(^{\n\t\t\t[string appendString:@\"buzz\"];\n\t\t});\n\n\t\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\t\tRACSequenceExampleExpectedValues: values\n\t\t\t};\n\t\t});\n\t});\n\n\tqck_it(@\"should work with composed characters\", ^{\n\t\tNSString  *string = @\"\\u2665\\uFE0F\\u2666\\uFE0F\";\n\t\tNSArray *expectedSequence = @[ @\"\\u2665\\uFE0F\", @\"\\u2666\\uFE0F\" ];\n\t\texpect(string.rac_sequence.array).to(equal(expectedSequence));\n\t});\n});\n\nqck_describe(@\"RACTuple sequences\", ^{\n\t__block RACTuple *tuple;\n\t__block RACSequence *sequence;\n\t\n\tqck_beforeEach(^{\n\t\ttuple = RACTuplePack(@\"foo\", nil, @\"bar\", NSNull.null, RACTupleNil.tupleNil);\n\n\t\tsequence = tuple.rac_sequence;\n\t\texpect(sequence).notTo(beNil());\n\t});\n\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\tRACSequenceExampleExpectedValues: @[ @\"foo\", NSNull.null, @\"bar\", NSNull.null, NSNull.null ]\n\t\t};\n\t});\n});\n\nqck_describe(@\"NSIndexSet sequences\", ^{\n\t__block NSMutableIndexSet *values;\n\t__block RACSequence *sequence;\n\t\n\tNSArray * (^valuesFromIndexSet)(NSIndexSet *indexSet) =  ^NSArray *(NSIndexSet *indexSet) {\n\t\tNSMutableArray *arr = [NSMutableArray array];\n\t\t[indexSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {\n\t\t\t[arr addObject:@(idx)];\n\t\t}];\n\n\t\treturn [arr copy];\n\t};\n\t\n\tqck_beforeEach(^{\n\t\tvalues = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 10)];\n\t\tsequence = values.rac_sequence;\n\t\texpect(sequence).notTo(beNil());\n\t});\n\t\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\tRACSequenceExampleExpectedValues: valuesFromIndexSet(values)\n\t\t};\n\t});\n\t\n\tqck_describe(@\"should be immutable\", ^{\n\t\t__block NSArray *unchangedValues;\n\t\t\n\t\tqck_beforeEach(^{\n\t\t\tunchangedValues = valuesFromIndexSet(values);\n\t\t\t[values addIndex:20];\n\t\t});\n\t\t\n\t\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\t\tRACSequenceExampleExpectedValues: unchangedValues\n\t\t\t};\n\t\t});\n\t});\n\t\n\tqck_describe(@\"should not fire if empty\", ^{\n\t\t__block NSIndexSet *emptyIndexSet;\n\t\t__block RACSequence *emptySequence;\n\n\t\tqck_beforeEach(^{\n\t\t\temptyIndexSet = [NSIndexSet indexSet];\n\t\t\temptySequence = emptyIndexSet.rac_sequence;\n\t\t\texpect(emptySequence).notTo(beNil());\n\t\t});\n\n\t\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACSequenceExampleSequence: emptySequence,\n\t\t\t\tRACSequenceExampleExpectedValues: valuesFromIndexSet(emptyIndexSet)\n\t\t\t};\n\t\t});\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSequenceExamples.h",
    "content": "//\n//  RACSequenceExamples.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-11-01.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n// The name of the shared examples for RACSequence instances.\nextern NSString * const RACSequenceExamples;\n\n// RACSequence *\nextern NSString * const RACSequenceExampleSequence;\n\n// NSArray *\nextern NSString * const RACSequenceExampleExpectedValues;\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSequenceExamples.m",
    "content": "//\n//  RACSequenceExamples.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-11-01.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACSequenceExamples.h\"\n\n#import \"RACScheduler.h\"\n#import \"RACSequence.h\"\n#import \"RACSignal+Operations.h\"\n\nNSString * const RACSequenceExamples = @\"RACSequenceExamples\";\nNSString * const RACSequenceExampleSequence = @\"RACSequenceExampleSequence\";\nNSString * const RACSequenceExampleExpectedValues = @\"RACSequenceExampleExpectedValues\";\n\nQuickConfigurationBegin(RACSequenceExampleGroups)\n\n+ (void)configure:(Configuration *)configuration {\n\tsharedExamples(RACSequenceExamples, ^(QCKDSLSharedExampleContext exampleContext) {\n\t\t__block RACSequence *sequence;\n\t\t__block NSArray *values;\n\n\t\tqck_beforeEach(^{\n\t\t\tsequence = exampleContext()[RACSequenceExampleSequence];\n\t\t\tvalues = [exampleContext()[RACSequenceExampleExpectedValues] copy];\n\t\t});\n\n\t\tqck_it(@\"should implement <NSFastEnumeration>\", ^{\n\t\t\tNSMutableArray *collectedValues = [NSMutableArray array];\n\t\t\tfor (id value in sequence) {\n\t\t\t\t[collectedValues addObject:value];\n\t\t\t}\n\n\t\t\texpect(collectedValues).to(equal(values));\n\t\t});\n\n\t\tqck_it(@\"should return an array\", ^{\n\t\t\texpect(sequence.array).to(equal(values));\n\t\t});\n\n\t\tqck_describe(@\"-signalWithScheduler:\", ^{\n\t\t\tqck_it(@\"should return an immediately scheduled signal\", ^{\n\t\t\t\tRACSignal *signal = [sequence signalWithScheduler:RACScheduler.immediateScheduler];\n\t\t\t\texpect(signal.toArray).to(equal(values));\n\t\t\t});\n\n\t\t\tqck_it(@\"should return a background scheduled signal\", ^{\n\t\t\t\tRACSignal *signal = [sequence signalWithScheduler:[RACScheduler scheduler]];\n\t\t\t\texpect(signal.toArray).to(equal(values));\n\t\t\t});\n\n\t\t\tqck_it(@\"should only evaluate one value per scheduling\", ^{\n\t\t\t\tRACScheduler* scheduler = [RACScheduler schedulerWithPriority:RACSchedulerPriorityHigh];\n\t\t\t\tRACSignal *signal = [sequence signalWithScheduler:scheduler];\n\n\t\t\t\t__block BOOL flag = YES;\n\t\t\t\t__block BOOL completed = NO;\n\t\t\t\t[signal subscribeNext:^(id x) {\n\t\t\t\t\texpect(@(flag)).to(beTruthy());\n\t\t\t\t\tflag = NO;\n\n\t\t\t\t\t[scheduler schedule:^{\n\t\t\t\t\t\t// This should get executed before the next value (which\n\t\t\t\t\t\t// verifies that it's YES).\n\t\t\t\t\t\tflag = YES;\n\t\t\t\t\t}];\n\t\t\t\t} completed:^{\n\t\t\t\t\tcompleted = YES;\n\t\t\t\t}];\n\n\t\t\t\texpect(@(completed)).toEventually(beTruthy());\n\t\t\t});\n\t\t});\n\n\t\tqck_it(@\"should be equal to itself\", ^{\n\t\t\texpect(sequence).to(equal(sequence));\n\t\t});\n\n\t\tqck_it(@\"should be equal to the same sequence of values\", ^{\n\t\t\tRACSequence *newSequence = RACSequence.empty;\n\t\t\tfor (id value in values) {\n\t\t\t\tRACSequence *valueSeq = [RACSequence return:value];\n\t\t\t\texpect(valueSeq).notTo(beNil());\n\n\t\t\t\tnewSequence = [newSequence concat:valueSeq];\n\t\t\t}\n\n\t\t\texpect(sequence).to(equal(newSequence));\n\t\t\texpect(@(sequence.hash)).to(equal(@(newSequence.hash)));\n\t\t});\n\n\t\tqck_it(@\"should not be equal to a different sequence of values\", ^{\n\t\t\tRACSequence *anotherSequence = [RACSequence return:@(-1)];\n\t\t\texpect(sequence).notTo(equal(anotherSequence));\n\t\t});\n\n\t\tqck_it(@\"should return an identical object for -copy\", ^{\n\t\t\texpect([sequence copy]).to(beIdenticalTo(sequence));\n\t\t});\n\n\t\tqck_it(@\"should archive\", ^{\n\t\t\tNSData *data = [NSKeyedArchiver archivedDataWithRootObject:sequence];\n\t\t\texpect(data).notTo(beNil());\n\n\t\t\tRACSequence *unarchived = [NSKeyedUnarchiver unarchiveObjectWithData:data];\n\t\t\texpect(unarchived).to(equal(sequence));\n\t\t});\n\n\t\tqck_it(@\"should fold right\", ^{\n\t\t\tRACSequence *result = [sequence foldRightWithStart:[RACSequence empty] reduce:^(id first, RACSequence *rest) {\n\t\t\t\treturn [rest.head startWith:first];\n\t\t\t}];\n\t\t\texpect(result.array).to(equal(values));\n\t\t});\n\n\t\tqck_it(@\"should fold left\", ^{\n\t\t\tRACSequence *result = [sequence foldLeftWithStart:[RACSequence empty] reduce:^(RACSequence *first, id rest) {\n\t\t\t\treturn [first concat:[RACSequence return:rest]];\n\t\t\t}];\n\t\t\texpect(result.array).to(equal(values));\n\t\t});\n\t});\n}\n\nQuickConfigurationEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSequenceSpec.m",
    "content": "//\n//  RACSequenceSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-11-01.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACSequenceExamples.h\"\n#import \"RACStreamExamples.h\"\n\n#import \"NSArray+RACSequenceAdditions.h\"\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACPropertySubscribing.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSequence.h\"\n#import \"RACUnit.h\"\n\nQuickSpecBegin(RACSequenceSpec)\n\nqck_describe(@\"RACStream\", ^{\n\tid verifyValues = ^(RACSequence *sequence, NSArray *expectedValues) {\n\t\tNSMutableArray *collectedValues = [NSMutableArray array];\n\t\twhile (sequence.head != nil) {\n\t\t\t[collectedValues addObject:sequence.head];\n\t\t\tsequence = sequence.tail;\n\t\t}\n\n\t\texpect(collectedValues).to(equal(expectedValues));\n\t};\n\n\t__block RACSequence *infiniteSequence = [RACSequence sequenceWithHeadBlock:^{\n\t\treturn RACUnit.defaultUnit;\n\t} tailBlock:^{\n\t\treturn infiniteSequence;\n\t}];\n\n\tqck_itBehavesLike(RACStreamExamples, ^{\n\t\treturn @{\n\t\t\tRACStreamExamplesClass: RACSequence.class,\n\t\t\tRACStreamExamplesVerifyValuesBlock: verifyValues,\n\t\t\tRACStreamExamplesInfiniteStream: infiniteSequence\n\t\t};\n\t});\n});\n\nqck_describe(@\"+sequenceWithHeadBlock:tailBlock:\", ^{\n\t__block RACSequence *sequence;\n\t__block BOOL headInvoked;\n\t__block BOOL tailInvoked;\n\n\tqck_beforeEach(^{\n\t\theadInvoked = NO;\n\t\ttailInvoked = NO;\n\n\t\tsequence = [RACSequence sequenceWithHeadBlock:^{\n\t\t\theadInvoked = YES;\n\t\t\treturn @0;\n\t\t} tailBlock:^{\n\t\t\ttailInvoked = YES;\n\t\t\treturn [RACSequence return:@1];\n\t\t}];\n\n\t\texpect(sequence).notTo(beNil());\n\t});\n\n\tqck_it(@\"should use the values from the head and tail blocks\", ^{\n\t\texpect(sequence.head).to(equal(@0));\n\t\texpect(sequence.tail.head).to(equal(@1));\n\t\texpect(sequence.tail.tail).to(beNil());\n\t});\n\n\tqck_it(@\"should lazily invoke head and tail blocks\", ^{\n\t\texpect(@(headInvoked)).to(beFalsy());\n\t\texpect(@(tailInvoked)).to(beFalsy());\n\n\t\texpect(sequence.head).to(equal(@0));\n\t\texpect(@(headInvoked)).to(beTruthy());\n\t\texpect(@(tailInvoked)).to(beFalsy());\n\n\t\texpect(sequence.tail).notTo(beNil());\n\t\texpect(@(tailInvoked)).to(beTruthy());\n\t});\n\n\tqck_afterEach(^{\n\t\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACSequenceExampleSequence: sequence,\n\t\t\t\tRACSequenceExampleExpectedValues: @[ @0, @1 ]\n\t\t\t};\n\t\t});\n\t});\n});\n\nqck_describe(@\"empty sequences\", ^{\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: [RACSequence empty],\n\t\t\tRACSequenceExampleExpectedValues: @[]\n\t\t};\n\t});\n});\n\nqck_describe(@\"non-empty sequences\", ^{\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]],\n\t\t\tRACSequenceExampleExpectedValues: @[ @0, @1, @2 ]\n\t\t};\n\t});\n});\n\nqck_describe(@\"eager sequences\", ^{\n\t__block RACSequence *lazySequence;\n\t__block BOOL headInvoked;\n\t__block BOOL tailInvoked;\n\n\tNSArray *values = @[ @0, @1 ];\n\t\n\tqck_beforeEach(^{\n\t\theadInvoked = NO;\n\t\ttailInvoked = NO;\n\t\t\n\t\tlazySequence = [RACSequence sequenceWithHeadBlock:^{\n\t\t\theadInvoked = YES;\n\t\t\treturn @0;\n\t\t} tailBlock:^{\n\t\t\ttailInvoked = YES;\n\t\t\treturn [RACSequence return:@1];\n\t\t}];\n\t\t\n\t\texpect(lazySequence).notTo(beNil());\n\t});\n\t\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: lazySequence.eagerSequence,\n\t\t\tRACSequenceExampleExpectedValues: values\n\t\t};\n\t});\n\t\n\tqck_it(@\"should evaluate all values immediately\", ^{\n\t\tRACSequence *eagerSequence = lazySequence.eagerSequence;\n\t\texpect(@(headInvoked)).to(beTruthy());\n\t\texpect(@(tailInvoked)).to(beTruthy());\n\t\texpect(eagerSequence.array).to(equal(values));\n\t});\n});\n\nqck_describe(@\"-take:\", ^{\n\tqck_it(@\"should complete take: without needing the head of the second item in the sequence\", ^{\n\t\t__block NSUInteger valuesTaken = 0;\n\n\t\t__block RACSequence *sequence = [RACSequence sequenceWithHeadBlock:^{\n\t\t\t++valuesTaken;\n\t\t\treturn RACUnit.defaultUnit;\n\t\t} tailBlock:^{\n\t\t\treturn sequence;\n\t\t}];\n\n\t\tNSArray *values = [sequence take:1].array;\n\t\texpect(values).to(equal(@[ RACUnit.defaultUnit ]));\n\t\texpect(@(valuesTaken)).to(equal(@1));\n\t});\n});\n\nqck_describe(@\"-bind:\", ^{\n\tqck_it(@\"should only evaluate head when the resulting sequence is evaluated\", ^{\n\t\t__block BOOL headInvoked = NO;\n\n\t\tRACSequence *original = [RACSequence sequenceWithHeadBlock:^{\n\t\t\theadInvoked = YES;\n\t\t\treturn RACUnit.defaultUnit;\n\t\t} tailBlock:^ id {\n\t\t\treturn nil;\n\t\t}];\n\n\t\tRACSequence *bound = [original bind:^{\n\t\t\treturn ^(id value, BOOL *stop) {\n\t\t\t\treturn [RACSequence return:value];\n\t\t\t};\n\t\t}];\n\n\t\texpect(bound).notTo(beNil());\n\t\texpect(@(headInvoked)).to(beFalsy());\n\n\t\texpect(bound.head).to(equal(RACUnit.defaultUnit));\n\t\texpect(@(headInvoked)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"-objectEnumerator\", ^{\n\tqck_it(@\"should only evaluate head as it's enumerated\", ^{\n\t\t__block BOOL firstHeadInvoked = NO;\n\t\t__block BOOL secondHeadInvoked = NO;\n\t\t__block BOOL thirdHeadInvoked = NO;\n\t\t\n\t\tRACSequence *sequence = [RACSequence sequenceWithHeadBlock:^id{\n\t\t\tfirstHeadInvoked = YES;\n\t\t\treturn @1;\n\t\t} tailBlock:^RACSequence *{\n\t\t\treturn [RACSequence sequenceWithHeadBlock:^id{\n\t\t\t\tsecondHeadInvoked = YES;\n\t\t\t\treturn @2;\n\t\t\t} tailBlock:^RACSequence *{\n\t\t\t\treturn [RACSequence sequenceWithHeadBlock:^id{\n\t\t\t\t\tthirdHeadInvoked = YES;\n\t\t\t\t\treturn @3;\n\t\t\t\t} tailBlock:^RACSequence *{\n\t\t\t\t\treturn RACSequence.empty;\n\t\t\t\t}];\n\t\t\t}];\n\t\t}];\n\t\tNSEnumerator *enumerator = sequence.objectEnumerator;\n\t\t\n\t\texpect(@(firstHeadInvoked)).to(beFalsy());\n\t\texpect(@(secondHeadInvoked)).to(beFalsy());\n\t\texpect(@(thirdHeadInvoked)).to(beFalsy());\n\t\t\n\t\texpect([enumerator nextObject]).to(equal(@1));\n\t\t\n\t\texpect(@(firstHeadInvoked)).to(beTruthy());\n\t\texpect(@(secondHeadInvoked)).to(beFalsy());\n\t\texpect(@(thirdHeadInvoked)).to(beFalsy());\n\t\t\n\t\texpect([enumerator nextObject]).to(equal(@2));\n\t\t\n\t\texpect(@(secondHeadInvoked)).to(beTruthy());\n\t\texpect(@(thirdHeadInvoked)).to(beFalsy());\n\t\t\n\t\texpect([enumerator nextObject]).to(equal(@3));\n\t\t\n\t\texpect(@(thirdHeadInvoked)).to(beTruthy());\n\t\t\n\t\texpect([enumerator nextObject]).to(beNil());\n\t});\n\t\n\tqck_it(@\"should let the sequence dealloc as it's enumerated\", ^{\n\t\t__block BOOL firstSequenceDeallocd = NO;\n\t\t__block BOOL secondSequenceDeallocd = NO;\n\t\t__block BOOL thirdSequenceDeallocd = NO;\n\t\t\n\t\tNSEnumerator *enumerator = nil;\n\t\t\n\t\t@autoreleasepool {\n\t\t\tRACSequence *thirdSequence __attribute__((objc_precise_lifetime)) = [RACSequence sequenceWithHeadBlock:^id{\n\t\t\t\treturn @3;\n\t\t\t} tailBlock:^RACSequence *{\n\t\t\t\treturn RACSequence.empty;\n\t\t\t}];\n\t\t\t[thirdSequence.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tthirdSequenceDeallocd = YES;\n\t\t\t}]];\n\t\t\t\n\t\t\tRACSequence *secondSequence __attribute__((objc_precise_lifetime)) = [RACSequence sequenceWithHeadBlock:^id{\n\t\t\t\treturn @2;\n\t\t\t} tailBlock:^RACSequence *{\n\t\t\t\treturn thirdSequence;\n\t\t\t}];\n\t\t\t[secondSequence.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tsecondSequenceDeallocd = YES;\n\t\t\t}]];\n\t\t\t\n\t\t\tRACSequence *firstSequence __attribute__((objc_precise_lifetime)) = [RACSequence sequenceWithHeadBlock:^id{\n\t\t\t\treturn @1;\n\t\t\t} tailBlock:^RACSequence *{\n\t\t\t\treturn secondSequence;\n\t\t\t}];\n\t\t\t[firstSequence.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tfirstSequenceDeallocd = YES;\n\t\t\t}]];\n\t\t\t\n\t\t\tenumerator = firstSequence.objectEnumerator;\n\t\t}\n\t\t\n\t\t@autoreleasepool {\n\t\t\texpect([enumerator nextObject]).to(equal(@1));\n\t\t}\n\n\t\t@autoreleasepool {\n\t\t\texpect([enumerator nextObject]).to(equal(@2));\n\t\t}\n\t\texpect(@(firstSequenceDeallocd)).toEventually(beTruthy());\n\t\t\n\t\t@autoreleasepool {\n\t\t\texpect([enumerator nextObject]).to(equal(@3));\n\t\t}\n\t\texpect(@(secondSequenceDeallocd)).toEventually(beTruthy());\n\t\t\n\t\t@autoreleasepool {\n\t\t\texpect([enumerator nextObject]).to(beNil());\n\t\t}\n\t\texpect(@(thirdSequenceDeallocd)).toEventually(beTruthy());\n\t});\n});\n\nqck_it(@\"shouldn't overflow the stack when deallocated on a background queue\", ^{\n\tNSUInteger length = 10000;\n\tNSMutableArray *values = [NSMutableArray arrayWithCapacity:length];\n\tfor (NSUInteger i = 0; i < length; ++i) {\n\t\t[values addObject:@(i)];\n\t}\n\n\t__block BOOL finished = NO;\n\tdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n\t\t@autoreleasepool {\n\t\t\t(void)[[values.rac_sequence map:^(id value) {\n\t\t\t\treturn value;\n\t\t\t}] array];\n\t\t}\n\n\t\tfinished = YES;\n\t});\n\n\texpect(@(finished)).toEventually(beTruthy());\n});\n\nqck_describe(@\"-foldLeftWithStart:reduce:\", ^{\n\tqck_it(@\"should reduce with start first\", ^{\n\t\tRACSequence *sequence = [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]];\n\t\tNSNumber *result = [sequence foldLeftWithStart:@3 reduce:^(NSNumber *first, NSNumber *rest) {\n\t\t\treturn first;\n\t\t}];\n\t\texpect(result).to(equal(@3));\n\t});\n\n\tqck_it(@\"should be left associative\", ^{\n\t\tRACSequence *sequence = [[[RACSequence return:@1] concat:[RACSequence return:@2]] concat:[RACSequence return:@3]];\n\t\tNSNumber *result = [sequence foldLeftWithStart:@0 reduce:^(NSNumber *first, NSNumber *rest) {\n\t\t\tint difference = first.intValue - rest.intValue;\n\t\t\treturn @(difference);\n\t\t}];\n\t\texpect(result).to(equal(@-6));\n\t});\n});\n\nqck_describe(@\"-foldRightWithStart:reduce:\", ^{\n\tqck_it(@\"should be lazy\", ^{\n\t\t__block BOOL headInvoked = NO;\n\t\t__block BOOL tailInvoked = NO;\n\t\tRACSequence *sequence = [RACSequence sequenceWithHeadBlock:^{\n\t\t\theadInvoked = YES;\n\t\t\treturn @0;\n\t\t} tailBlock:^{\n\t\t\ttailInvoked = YES;\n\t\t\treturn [RACSequence return:@1];\n\t\t}];\n\t\t\n\t\tNSNumber *result = [sequence foldRightWithStart:@2 reduce:^(NSNumber *first, RACSequence *rest) {\n\t\t\treturn first;\n\t\t}];\n\t\t\n\t\texpect(result).to(equal(@0));\n\t\texpect(@(headInvoked)).to(beTruthy());\n\t\texpect(@(tailInvoked)).to(beFalsy());\n\t});\n\t\n\tqck_it(@\"should reduce with start last\", ^{\n\t\tRACSequence *sequence = [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]];\n\t\tNSNumber *result = [sequence foldRightWithStart:@3 reduce:^(NSNumber *first, RACSequence *rest) {\n\t\t\treturn rest.head;\n\t\t}];\n\t\texpect(result).to(equal(@3));\n\t});\n\t\n\tqck_it(@\"should be right associative\", ^{\n\t\tRACSequence *sequence = [[[RACSequence return:@1] concat:[RACSequence return:@2]] concat:[RACSequence return:@3]];\n\t\tNSNumber *result = [sequence foldRightWithStart:@0 reduce:^(NSNumber *first, RACSequence *rest) {\n\t\t\tint difference = first.intValue - [rest.head intValue];\n\t\t\treturn @(difference);\n\t\t}];\n\t\texpect(result).to(equal(@2));\n\t});\n});\n\nqck_describe(@\"-any\", ^{\n\t__block RACSequence *sequence;\n\tqck_beforeEach(^{\n\t\tsequence = [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]];\n\t});\n\t\n\tqck_it(@\"should return true when at least one exists\", ^{\n\t\tBOOL result = [sequence any:^ BOOL (NSNumber *value) {\n\t\t\treturn value.integerValue > 0;\n\t\t}];\n\t\texpect(@(result)).to(beTruthy());\n\t});\n\t\n\tqck_it(@\"should return false when no such thing exists\", ^{\n\t\tBOOL result = [sequence any:^ BOOL (NSNumber *value) {\n\t\t\treturn value.integerValue == 3;\n\t\t}];\n\t\texpect(@(result)).to(beFalsy());\n\t});\n});\n\nqck_describe(@\"-all\", ^{\n\t__block RACSequence *sequence;\n\tqck_beforeEach(^{\n\t\tsequence = [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]];\n\t});\n\t\n\tqck_it(@\"should return true when all values pass\", ^{\n\t\tBOOL result = [sequence all:^ BOOL (NSNumber *value) {\n\t\t\treturn value.integerValue >= 0;\n\t\t}];\n\t\texpect(@(result)).to(beTruthy());\n\t});\n\t\n\tqck_it(@\"should return false when at least one value fails\", ^{\n\t\tBOOL result = [sequence all:^ BOOL (NSNumber *value) {\n\t\t\treturn value.integerValue < 2;\n\t\t}];\n\t\texpect(@(result)).to(beFalsy());\n\t});\n});\n\nqck_describe(@\"-objectPassingTest:\", ^{\n\t__block RACSequence *sequence;\n\tqck_beforeEach(^{\n\t\tsequence = [[[RACSequence return:@0] concat:[RACSequence return:@1]] concat:[RACSequence return:@2]];\n\t});\n\t\n\tqck_it(@\"should return leftmost object that passes the test\", ^{\n\t\tNSNumber *result = [sequence objectPassingTest:^ BOOL (NSNumber *value) {\n\t\t\treturn value.intValue > 0;\n\t\t}];\n\t\texpect(result).to(equal(@1));\n\t});\n\t\n\tqck_it(@\"should return nil if no objects pass the test\", ^{\n\t\tNSNumber *result = [sequence objectPassingTest:^ BOOL (NSNumber *value) {\n\t\t\treturn value.intValue < 0;\n\t\t}];\n\t\texpect(result).to(beNil());\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSerialDisposableSpec.m",
    "content": "//\n//  RACSerialDisposableSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-07-22.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACSerialDisposable.h\"\n\nQuickSpecBegin(RACSerialDisposableSpec)\n\nqck_it(@\"should initialize with -init\", ^{\n\tRACSerialDisposable *serial = [[RACSerialDisposable alloc] init];\n\texpect(serial).notTo(beNil());\n\texpect(serial.disposable).to(beNil());\n});\n\nqck_it(@\"should initialize an inner disposable with -initWithBlock:\", ^{\n\t__block BOOL disposed = NO;\n\tRACSerialDisposable *serial = [RACSerialDisposable disposableWithBlock:^{\n\t\tdisposed = YES;\n\t}];\n\n\texpect(serial).notTo(beNil());\n\texpect(serial.disposable).notTo(beNil());\n\n\t[serial.disposable dispose];\n\texpect(@(serial.disposed)).to(beFalsy());\n\texpect(@(disposed)).to(beTruthy());\n});\n\nqck_it(@\"should initialize with a disposable\", ^{\n\tRACDisposable *inner = [[RACDisposable alloc] init];\n\tRACSerialDisposable *serial = [RACSerialDisposable serialDisposableWithDisposable:inner];\n\texpect(serial).notTo(beNil());\n\texpect(serial.disposable).to(equal(inner));\n});\n\nqck_it(@\"should dispose of the inner disposable\", ^{\n\t__block BOOL disposed = NO;\n\tRACDisposable *inner = [RACDisposable disposableWithBlock:^{\n\t\tdisposed = YES;\n\t}];\n\n\tRACSerialDisposable *serial = [RACSerialDisposable serialDisposableWithDisposable:inner];\n\texpect(@(serial.disposed)).to(beFalsy());\n\texpect(@(disposed)).to(beFalsy());\n\n\t[serial dispose];\n\texpect(@(serial.disposed)).to(beTruthy());\n\texpect(serial.disposable).to(beNil());\n\texpect(@(disposed)).to(beTruthy());\n});\n\nqck_it(@\"should dispose of a new inner disposable if it's already been disposed\", ^{\n\t__block BOOL disposed = NO;\n\tRACDisposable *inner = [RACDisposable disposableWithBlock:^{\n\t\tdisposed = YES;\n\t}];\n\n\tRACSerialDisposable *serial = [[RACSerialDisposable alloc] init];\n\texpect(@(serial.disposed)).to(beFalsy());\n\n\t[serial dispose];\n\texpect(@(serial.disposed)).to(beTruthy());\n\texpect(@(disposed)).to(beFalsy());\n\n\tserial.disposable = inner;\n\texpect(@(disposed)).to(beTruthy());\n\texpect(serial.disposable).to(beNil());\n});\n\nqck_it(@\"should allow the inner disposable to be set to nil\", ^{\n\t__block BOOL disposed = NO;\n\tRACDisposable *inner = [RACDisposable disposableWithBlock:^{\n\t\tdisposed = YES;\n\t}];\n\n\tRACSerialDisposable *serial = [RACSerialDisposable serialDisposableWithDisposable:inner];\n\texpect(@(disposed)).to(beFalsy());\n\n\tserial.disposable = nil;\n\texpect(serial.disposable).to(beNil());\n\n\tserial.disposable = inner;\n\texpect(serial.disposable).to(equal(inner));\n\n\t[serial dispose];\n\texpect(@(disposed)).to(beTruthy());\n\texpect(serial.disposable).to(beNil());\n});\n\nqck_it(@\"should swap inner disposables\", ^{\n\t__block BOOL firstDisposed = NO;\n\tRACDisposable *first = [RACDisposable disposableWithBlock:^{\n\t\tfirstDisposed = YES;\n\t}];\n\n\t__block BOOL secondDisposed = NO;\n\tRACDisposable *second = [RACDisposable disposableWithBlock:^{\n\t\tsecondDisposed = YES;\n\t}];\n\n\tRACSerialDisposable *serial = [RACSerialDisposable serialDisposableWithDisposable:first];\n\texpect([serial swapInDisposable:second]).to(equal(first));\n\n\texpect(@(serial.disposed)).to(beFalsy());\n\texpect(@(firstDisposed)).to(beFalsy());\n\texpect(@(secondDisposed)).to(beFalsy());\n\n\t[serial dispose];\n\texpect(@(serial.disposed)).to(beTruthy());\n\texpect(serial.disposable).to(beNil());\n\n\texpect(@(firstDisposed)).to(beFalsy());\n\texpect(@(secondDisposed)).to(beTruthy());\n});\n\nqck_it(@\"should release the inner disposable upon deallocation\", ^{\n\t__weak RACDisposable *weakInnerDisposable;\n\t__weak RACSerialDisposable *weakSerialDisposable;\n\n\t@autoreleasepool {\n\t\tRACDisposable *innerDisposable __attribute__((objc_precise_lifetime)) = [[RACDisposable alloc] init];\n\t\tweakInnerDisposable = innerDisposable;\n\n\t\tRACSerialDisposable *serialDisposable __attribute__((objc_precise_lifetime)) = [[RACSerialDisposable alloc] init];\n\t\tserialDisposable.disposable = innerDisposable;\n\t\tweakSerialDisposable = serialDisposable;\n\t}\n\n\texpect(weakSerialDisposable).to(beNil());\n\texpect(weakInnerDisposable).to(beNil());\n});\n\nqck_it(@\"should not crash when racing between swapInDisposable and disposable\", ^{\n\t__block BOOL stop = NO;\n\tdispatch_after(dispatch_time(DISPATCH_TIME_NOW, (long long)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n\t\tstop = YES;\n\t});\n\n\tRACSerialDisposable *serialDisposable =  [[RACSerialDisposable alloc] init];\n\tdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n\t\twhile (!stop) {\n\t\t\t[serialDisposable swapInDisposable:[RACDisposable disposableWithBlock:^{}]];\n\t\t}\n\t});\n\n\tdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n\t\twhile (!stop) {\n\t\t\t(void)[serialDisposable disposable];\n\t\t}\n\t});\n\n\texpect(@(stop)).toEventually(beTruthy());\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSignalSpec.m",
    "content": "//\n//  RACSignalSpec.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/2/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACPropertySignalExamples.h\"\n#import \"RACSequenceExamples.h\"\n#import \"RACStreamExamples.h\"\n#import \"RACTestObject.h\"\n\n#import <ReactiveCocoa/EXTKeyPathCoding.h>\n#import \"NSObject+RACDeallocating.h\"\n#import \"NSObject+RACPropertySubscribing.h\"\n#import \"RACBehaviorSubject.h\"\n#import \"RACCommand.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACEvent.h\"\n#import \"RACGroupedSignal.h\"\n#import \"RACMulticastConnection.h\"\n#import \"RACReplaySubject.h\"\n#import \"RACScheduler.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACSubject.h\"\n#import \"RACSubscriber+Private.h\"\n#import \"RACSubscriber.h\"\n#import \"RACTestScheduler.h\"\n#import \"RACTuple.h\"\n#import \"RACUnit.h\"\n#import <libkern/OSAtomic.h>\n\n// Set in a beforeAll below.\nstatic NSError *RACSignalTestError;\n\nstatic NSString * const RACSignalMergeConcurrentCompletionExampleGroup = @\"RACSignalMergeConcurrentCompletionExampleGroup\";\nstatic NSString * const RACSignalMaxConcurrent = @\"RACSignalMaxConcurrent\";\n\nQuickConfigurationBegin(mergeConcurrentCompletionName)\n\n+ (void)configure:(Configuration *)configuration {\n\tsharedExamples(RACSignalMergeConcurrentCompletionExampleGroup, ^(QCKDSLSharedExampleContext exampleContext) {\n\t\tqck_it(@\"should complete only after the source and all its signals have completed\", ^{\n\t\t\tRACSubject *subject1 = [RACSubject subject];\n\t\t\tRACSubject *subject2 = [RACSubject subject];\n\t\t\tRACSubject *subject3 = [RACSubject subject];\n\n\t\t\tRACSubject *signalsSubject = [RACSubject subject];\n\t\t\t__block BOOL completed = NO;\n\t\t\t[[signalsSubject flatten:[exampleContext()[RACSignalMaxConcurrent] unsignedIntegerValue]] subscribeCompleted:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\n\t\t\t[signalsSubject sendNext:subject1];\n\t\t\t[subject1 sendCompleted];\n\n\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\t[signalsSubject sendNext:subject2];\n\t\t\t[signalsSubject sendNext:subject3];\n\n\t\t\t[signalsSubject sendCompleted];\n\n\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\t[subject2 sendCompleted];\n\n\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\t[subject3 sendCompleted];\n\n\t\t\texpect(@(completed)).to(beTruthy());\n\t\t});\n\t});\n}\n\nQuickConfigurationEnd\n\nQuickSpecBegin(RACSignalSpec)\n\nqck_beforeSuite(^{\n\t// We do this instead of a macro to ensure that to(equal() will work\n\t// correctly (by matching identity), even if -[NSError isEqual:] is broken.\n\tRACSignalTestError = [NSError errorWithDomain:@\"foo\" code:100 userInfo:nil];\n});\n\nqck_describe(@\"RACStream\", ^{\n\tid verifyValues = ^(RACSignal *signal, NSArray *expectedValues) {\n\t\texpect(signal).notTo(beNil());\n\n\t\tNSMutableArray *collectedValues = [NSMutableArray array];\n\n\t\t__block BOOL success = NO;\n\t\t__block NSError *error = nil;\n\t\t[signal subscribeNext:^(id value) {\n\t\t\t[collectedValues addObject:value];\n\t\t} error:^(NSError *receivedError) {\n\t\t\terror = receivedError;\n\t\t} completed:^{\n\t\t\tsuccess = YES;\n\t\t}];\n\n\t\texpect(@(success)).toEventually(beTruthy());\n\t\texpect(error).to(beNil());\n\t\texpect(collectedValues).to(equal(expectedValues));\n\t};\n\n\tRACSignal *infiniteSignal = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t__block volatile int32_t done = 0;\n\n\t\t[RACScheduler.mainThreadScheduler schedule:^{\n\t\t\twhile (!done) {\n\t\t\t\t[subscriber sendNext:RACUnit.defaultUnit];\n\t\t\t}\n\t\t}];\n\n\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\tOSAtomicIncrement32Barrier(&done);\n\t\t}];\n\t}];\n\n\tqck_itBehavesLike(RACStreamExamples, ^{\n\t\treturn @{\n\t\t\tRACStreamExamplesClass: RACSignal.class,\n\t\t\tRACStreamExamplesVerifyValuesBlock: verifyValues,\n\t\t\tRACStreamExamplesInfiniteStream: infiniteSignal\n\t\t};\n\t});\n});\n\nqck_describe(@\"-bind:\", ^{\n\t__block RACSubject *signals;\n\t__block BOOL disposed;\n\t__block id lastValue;\n\t__block RACSubject *values;\n\n\tqck_beforeEach(^{\n\t\t// Tests send a (RACSignal, BOOL) pair that are used below in -bind:.\n\t\tsignals = [RACSubject subject];\n\n\t\tdisposed = NO;\n\t\tRACSignal *source = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t[signals subscribe:subscriber];\n\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\tdisposed = YES;\n\t\t\t}];\n\t\t}];\n\n\t\tRACSignal *bind = [source bind:^{\n\t\t\treturn ^(RACTuple *x, BOOL *stop) {\n\t\t\t\tRACTupleUnpack(RACSignal *signal, NSNumber *stopValue) = x;\n\t\t\t\t*stop = stopValue.boolValue;\n\t\t\t\treturn signal;\n\t\t\t};\n\t\t}];\n\n\t\tlastValue = nil;\n\t\t[bind subscribeNext:^(id x) {\n\t\t\tlastValue = x;\n\t\t}];\n\n\t\t// Send `bind` an open ended subject to subscribe to( These tests make\n\t\t// use of this in two ways:\n\t\t//   1. Used to test a regression bug where -bind: would not actually\n\t\t//      stop when instructed to. This bug manifested itself only when\n\t\t//      there were subscriptions that lived on past the point at which\n\t\t//      -bind: was stopped. This subject represents such a subscription.\n\t\t//   2. Test that values sent by this subject are received by `bind`'s\n\t\t//      subscriber, even *after* -bind: has been instructed to stop.\n\t\tvalues = [RACSubject subject];\n\t\t[signals sendNext:RACTuplePack(values, @NO)];\n\t\texpect(@(disposed)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should dispose source signal when stopped with nil signal\", ^{\n\t\t// Tell -bind: to stop by sending it a `nil` signal.\n\t\t[signals sendNext:RACTuplePack(nil, @NO)];\n\t\texpect(@(disposed)).to(beTruthy());\n\n\t\t// Should still receive values sent after stopping.\n\t\texpect(lastValue).to(beNil());\n\t\t[values sendNext:RACUnit.defaultUnit];\n\t\texpect(lastValue).to(equal(RACUnit.defaultUnit));\n\t});\n\n\tqck_it(@\"should dispose source signal when stop flag set to YES\", ^{\n\t\t// Tell -bind: to stop by setting the stop flag to YES.\n\t\t[signals sendNext:RACTuplePack([RACSignal return:@1], @YES)];\n\t\texpect(@(disposed)).to(beTruthy());\n\n\t\t// Should still recieve last signal sent at the time of setting stop to YES.\n\t\texpect(lastValue).to(equal(@1));\n\n\t\t// Should still receive values sent after stopping.\n\t\t[values sendNext:@2];\n\t\texpect(lastValue).to(equal(@2));\n\t});\n\n\tqck_it(@\"should properly stop subscribing to new signals after error\", ^{\n\t\tRACSignal *signal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@0];\n\t\t\t[subscriber sendNext:@1];\n\t\t\treturn nil;\n\t\t}];\n\n\t\t__block BOOL subscribedAfterError = NO;\n\t\tRACSignal *bind = [signal bind:^{\n\t\t\treturn ^(NSNumber *x, BOOL *stop) {\n\t\t\t\tif (x.integerValue == 0) return [RACSignal error:nil];\n\n\t\t\t\treturn [RACSignal defer:^{\n\t\t\t\t\tsubscribedAfterError = YES;\n\t\t\t\t\treturn [RACSignal empty];\n\t\t\t\t}];\n\t\t\t};\n\t\t}];\n\n\t\t[bind subscribeCompleted:^{}];\n\t\texpect(@(subscribedAfterError)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should not subscribe to signals following error in +merge:\", ^{\n\t\t__block BOOL firstSubscribed = NO;\n\t\t__block BOOL secondSubscribed = NO;\n\t\t__block BOOL errored = NO;\n\n\t\tRACSignal *signal = [[RACSignal\n\t\t\tmerge:@[\n\t\t\t\t[RACSignal defer:^{\n\t\t\t\t\tfirstSubscribed = YES;\n\t\t\t\t\treturn [RACSignal error:nil];\n\t\t\t\t}],\n\t\t\t\t[RACSignal defer:^{\n\t\t\t\t\tsecondSubscribed = YES;\n\t\t\t\t\treturn [RACSignal return:nil];\n\t\t\t\t}]\n\t\t\t]]\n\t\t\tdoError:^(NSError *error) {\n\t\t\t\terrored = YES;\n\t\t\t}];\n\n\t\t[signal subscribeCompleted:^{}];\n\n\t\texpect(@(firstSubscribed)).to(beTruthy());\n\t\texpect(@(secondSubscribed)).to(beFalsy());\n\t\texpect(@(errored)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"subscribing\", ^{\n\t__block RACSignal *signal = nil;\n\tid nextValueSent = @\"1\";\n\n\tqck_beforeEach(^{\n\t\tsignal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:nextValueSent];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\t});\n\n\tqck_it(@\"should get next values\", ^{\n\t\t__block id nextValueReceived = nil;\n\t\t[signal subscribeNext:^(id x) {\n\t\t\tnextValueReceived = x;\n\t\t} error:^(NSError *error) {\n\n\t\t} completed:^{\n\n\t\t}];\n\n\t\texpect(nextValueReceived).to(equal(nextValueSent));\n\t});\n\n\tqck_it(@\"should get completed\", ^{\n\t\t__block BOOL didGetCompleted = NO;\n\t\t[signal subscribeNext:^(id x) {\n\n\t\t} error:^(NSError *error) {\n\n\t\t} completed:^{\n\t\t\tdidGetCompleted = YES;\n\t\t}];\n\n\t\texpect(@(didGetCompleted)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should not get an error\", ^{\n\t\t__block BOOL didGetError = NO;\n\t\t[signal subscribeNext:^(id x) {\n\n\t\t} error:^(NSError *error) {\n\t\t\tdidGetError = YES;\n\t\t} completed:^{\n\n\t\t}];\n\n\t\texpect(@(didGetError)).to(beFalsy());\n\t});\n\n\tqck_it(@\"shouldn't get anything after dispose\", ^{\n\t\tRACTestScheduler *scheduler = [[RACTestScheduler alloc] init];\n\t\tNSMutableArray *receivedValues = [NSMutableArray array];\n\n\t\tRACSignal *signal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@0];\n\n\t\t\t[scheduler afterDelay:0 schedule:^{\n\t\t\t\t[subscriber sendNext:@1];\n\t\t\t}];\n\n\t\t\treturn nil;\n\t\t}];\n\n\t\tRACDisposable *disposable = [signal subscribeNext:^(id x) {\n\t\t\t[receivedValues addObject:x];\n\t\t}];\n\n\t\tNSArray *expectedValues = @[ @0 ];\n\t\texpect(receivedValues).to(equal(expectedValues));\n\n\t\t[disposable dispose];\n\t\t[scheduler stepAll];\n\n\t\texpect(receivedValues).to(equal(expectedValues));\n\t});\n\n\tqck_it(@\"should have a current scheduler in didSubscribe block\", ^{\n\t\t__block RACScheduler *currentScheduler;\n\t\tRACSignal *signal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\tcurrentScheduler = RACScheduler.currentScheduler;\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\n\t\t[signal subscribeNext:^(id x) {}];\n\t\texpect(currentScheduler).notTo(beNil());\n\n\t\tcurrentScheduler = nil;\n\t\tdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n\t\t\t[signal subscribeNext:^(id x) {}];\n\t\t});\n\t\texpect(currentScheduler).toEventuallyNot(beNil());\n\t});\n\n\tqck_it(@\"should automatically dispose of other subscriptions from +createSignal:\", ^{\n\t\t__block BOOL innerDisposed = NO;\n\t\t__block id<RACSubscriber> innerSubscriber = nil;\n\n\t\tRACSignal *innerSignal = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t// Keep the subscriber alive so it doesn't trigger disposal on dealloc\n\t\t\tinnerSubscriber = subscriber;\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\tinnerDisposed = YES;\n\t\t\t}];\n\t\t}];\n\n\t\tRACSignal *outerSignal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[innerSignal subscribe:subscriber];\n\t\t\treturn nil;\n\t\t}];\n\n\t\tRACDisposable *disposable = [outerSignal subscribeCompleted:^{}];\n\t\texpect(disposable).notTo(beNil());\n\t\texpect(@(innerDisposed)).to(beFalsy());\n\n\t\t[disposable dispose];\n\t\texpect(@(innerDisposed)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"-takeUntil:\", ^{\n\tqck_it(@\"should support value as trigger\", ^{\n\t\t__block BOOL shouldBeGettingItems = YES;\n\t\tRACSubject *subject = [RACSubject subject];\n\t\tRACSubject *cutOffSubject = [RACSubject subject];\n\t\t[[subject takeUntil:cutOffSubject] subscribeNext:^(id x) {\n\t\t\texpect(@(shouldBeGettingItems)).to(beTruthy());\n\t\t}];\n\n\t\tshouldBeGettingItems = YES;\n\t\t[subject sendNext:@\"test 1\"];\n\t\t[subject sendNext:@\"test 2\"];\n\n\t\t[cutOffSubject sendNext:[RACUnit defaultUnit]];\n\n\t\tshouldBeGettingItems = NO;\n\t\t[subject sendNext:@\"test 3\"];\n\t});\n\n\tqck_it(@\"should support completion as trigger\", ^{\n\t\t__block BOOL shouldBeGettingItems = YES;\n\t\tRACSubject *subject = [RACSubject subject];\n\t\tRACSubject *cutOffSubject = [RACSubject subject];\n\t\t[[subject takeUntil:cutOffSubject] subscribeNext:^(id x) {\n\t\t\texpect(@(shouldBeGettingItems)).to(beTruthy());\n\t\t}];\n\n\t\t[cutOffSubject sendCompleted];\n\n\t\tshouldBeGettingItems = NO;\n\t\t[subject sendNext:@\"should not go through\"];\n\t});\n\n\tqck_it(@\"should squelch any values sent immediately upon subscription\", ^{\n\t\tRACSignal *valueSignal = [RACSignal return:RACUnit.defaultUnit];\n\t\tRACSignal *cutOffSignal = [RACSignal empty];\n\n\t\t__block BOOL gotNext = NO;\n\t\t__block BOOL completed = NO;\n\n\t\t[[valueSignal takeUntil:cutOffSignal] subscribeNext:^(id _) {\n\t\t\tgotNext = YES;\n\t\t} completed:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\n\t\texpect(@(gotNext)).to(beFalsy());\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"-takeUntilReplacement:\", ^{\n\tqck_it(@\"should forward values from the receiver until it's replaced\", ^{\n\t\tRACSubject *receiver = [RACSubject subject];\n\t\tRACSubject *replacement = [RACSubject subject];\n\n\t\tNSMutableArray *receivedValues = [NSMutableArray array];\n\n\t\t[[receiver takeUntilReplacement:replacement] subscribeNext:^(id x) {\n\t\t\t[receivedValues addObject:x];\n\t\t}];\n\n\t\texpect(receivedValues).to(equal(@[]));\n\n\t\t[receiver sendNext:@1];\n\t\texpect(receivedValues).to(equal(@[ @1 ]));\n\n\t\t[receiver sendNext:@2];\n\t\texpect(receivedValues).to(equal((@[ @1, @2 ])));\n\n\t\t[replacement sendNext:@3];\n\t\texpect(receivedValues).to(equal((@[ @1, @2, @3 ])));\n\n\t\t[receiver sendNext:@4];\n\t\texpect(receivedValues).to(equal((@[ @1, @2, @3 ])));\n\n\t\t[replacement sendNext:@5];\n\t\texpect(receivedValues).to(equal((@[ @1, @2, @3, @5 ])));\n\t});\n\n\tqck_it(@\"should forward error from the receiver\", ^{\n\t\tRACSubject *receiver = [RACSubject subject];\n\t\t__block BOOL receivedError = NO;\n\n\t\t[[receiver takeUntilReplacement:RACSignal.never] subscribeError:^(NSError *error) {\n\t\t\treceivedError = YES;\n\t\t}];\n\n\t\t[receiver sendError:nil];\n\t\texpect(@(receivedError)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should not forward completed from the receiver\", ^{\n\t\tRACSubject *receiver = [RACSubject subject];\n\t\t__block BOOL receivedCompleted = NO;\n\n\t\t[[receiver takeUntilReplacement:RACSignal.never] subscribeCompleted: ^{\n\t\t\treceivedCompleted = YES;\n\t\t}];\n\n\t\t[receiver sendCompleted];\n\t\texpect(@(receivedCompleted)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should forward error from the replacement signal\", ^{\n\t\tRACSubject *replacement = [RACSubject subject];\n\t\t__block BOOL receivedError = NO;\n\n\t\t[[RACSignal.never takeUntilReplacement:replacement] subscribeError:^(NSError *error) {\n\t\t\treceivedError = YES;\n\t\t}];\n\n\t\t[replacement sendError:nil];\n\t\texpect(@(receivedError)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should forward completed from the replacement signal\", ^{\n\t\tRACSubject *replacement = [RACSubject subject];\n\t\t__block BOOL receivedCompleted = NO;\n\n\t\t[[RACSignal.never takeUntilReplacement:replacement] subscribeCompleted: ^{\n\t\t\treceivedCompleted = YES;\n\t\t}];\n\n\t\t[replacement sendCompleted];\n\t\texpect(@(receivedCompleted)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should not forward values from the receiver if both send synchronously\", ^{\n\t\tRACSignal *receiver = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendNext:@2];\n\t\t\t[subscriber sendNext:@3];\n\t\t\treturn nil;\n\t\t}];\n\t\tRACSignal *replacement = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@4];\n\t\t\t[subscriber sendNext:@5];\n\t\t\t[subscriber sendNext:@6];\n\t\t\treturn nil;\n\t\t}];\n\n\t\tNSMutableArray *receivedValues = [NSMutableArray array];\n\n\t\t[[receiver takeUntilReplacement:replacement] subscribeNext:^(id x) {\n\t\t\t[receivedValues addObject:x];\n\t\t}];\n\n\t\texpect(receivedValues).to(equal((@[ @4, @5, @6 ])));\n\t});\n\n\tqck_it(@\"should dispose of the receiver when it's disposed of\", ^{\n\t\t__block BOOL receiverDisposed = NO;\n\t\tRACSignal *receiver = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\treceiverDisposed = YES;\n\t\t\t}];\n\t\t}];\n\n\t\t[[[receiver takeUntilReplacement:RACSignal.never] subscribeCompleted:^{}] dispose];\n\n\t\texpect(@(receiverDisposed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should dispose of the replacement signal when it's disposed of\", ^{\n\t\t__block BOOL replacementDisposed = NO;\n\t\tRACSignal *replacement = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\treplacementDisposed = YES;\n\t\t\t}];\n\t\t}];\n\n\t\t[[[RACSignal.never takeUntilReplacement:replacement] subscribeCompleted:^{}] dispose];\n\n\t\texpect(@(replacementDisposed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should dispose of the receiver when the replacement signal sends an event\", ^{\n\t\t__block BOOL receiverDisposed = NO;\n\t\t__block id<RACSubscriber> receiverSubscriber = nil;\n\t\tRACSignal *receiver = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t// Keep the subscriber alive so it doesn't trigger disposal on dealloc\n\t\t\treceiverSubscriber = subscriber;\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\treceiverDisposed = YES;\n\t\t\t}];\n\t\t}];\n\t\tRACSubject *replacement = [RACSubject subject];\n\n\t\t[[receiver takeUntilReplacement:replacement] subscribeCompleted:^{}];\n\n\t\texpect(@(receiverDisposed)).to(beFalsy());\n\n\t\t[replacement sendNext:nil];\n\n\t\texpect(@(receiverDisposed)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"disposal\", ^{\n\tqck_it(@\"should dispose of the didSubscribe disposable\", ^{\n\t\t__block BOOL innerDisposed = NO;\n\t\tRACSignal *signal = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\tinnerDisposed = YES;\n\t\t\t}];\n\t\t}];\n\n\t\texpect(@(innerDisposed)).to(beFalsy());\n\n\t\tRACDisposable *disposable = [signal subscribeNext:^(id x) {}];\n\t\texpect(disposable).notTo(beNil());\n\n\t\t[disposable dispose];\n\t\texpect(@(innerDisposed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should dispose of the didSubscribe disposable asynchronously\", ^{\n\t\t__block BOOL innerDisposed = NO;\n\t\tRACSignal *signal = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\tinnerDisposed = YES;\n\t\t\t}];\n\t\t}];\n\n\t\t[[RACScheduler scheduler] schedule:^{\n\t\t\tRACDisposable *disposable = [signal subscribeNext:^(id x) {}];\n\t\t\t[disposable dispose];\n\t\t}];\n\n\t\texpect(@(innerDisposed)).toEventually(beTruthy());\n\t});\n});\n\nqck_describe(@\"querying\", ^{\n\t__block RACSignal *signal = nil;\n\tid nextValueSent = @\"1\";\n\n\tqck_beforeEach(^{\n\t\tsignal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:nextValueSent];\n\t\t\t[subscriber sendNext:@\"other value\"];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\t});\n\n\tqck_it(@\"should return first 'next' value with -firstOrDefault:success:error:\", ^{\n\t\tRACSignal *signal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendNext:@2];\n\t\t\t[subscriber sendNext:@3];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\n\t\texpect(signal).notTo(beNil());\n\n\t\t__block BOOL success = NO;\n\t\t__block NSError *error = nil;\n\t\texpect([signal firstOrDefault:@5 success:&success error:&error]).to(equal(@1));\n\t\texpect(@(success)).to(beTruthy());\n\t\texpect(error).to(beNil());\n\t});\n\n\tqck_it(@\"should return first default value with -firstOrDefault:success:error:\", ^{\n\t\tRACSignal *signal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\n\t\texpect(signal).notTo(beNil());\n\n\t\t__block BOOL success = NO;\n\t\t__block NSError *error = nil;\n\t\texpect([signal firstOrDefault:@5 success:&success error:&error]).to(equal(@5));\n\t\texpect(@(success)).to(beTruthy());\n\t\texpect(error).to(beNil());\n\t});\n\n\tqck_it(@\"should return error with -firstOrDefault:success:error:\", ^{\n\t\tRACSignal *signal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendError:RACSignalTestError];\n\t\t\treturn nil;\n\t\t}];\n\n\t\texpect(signal).notTo(beNil());\n\n\t\t__block BOOL success = NO;\n\t\t__block NSError *error = nil;\n\t\texpect([signal firstOrDefault:@5 success:&success error:&error]).to(equal(@5));\n\t\texpect(@(success)).to(beFalsy());\n\t\texpect(error).to(equal(RACSignalTestError));\n\t});\n\n\tqck_it(@\"shouldn't crash when returning an error from a background scheduler\", ^{\n\t\tRACSignal *signal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[[RACScheduler scheduler] schedule:^{\n\t\t\t\t[subscriber sendError:RACSignalTestError];\n\t\t\t}];\n\n\t\t\treturn nil;\n\t\t}];\n\n\t\texpect(signal).notTo(beNil());\n\n\t\t__block BOOL success = NO;\n\t\t__block NSError *error = nil;\n\t\texpect([signal firstOrDefault:@5 success:&success error:&error]).to(equal(@5));\n\t\texpect(@(success)).to(beFalsy());\n\t\texpect(error).to(equal(RACSignalTestError));\n\t});\n\n\tqck_it(@\"should terminate the subscription after returning from -firstOrDefault:success:error:\", ^{\n\t\t__block BOOL disposed = NO;\n\t\tRACSignal *signal = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:RACUnit.defaultUnit];\n\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\tdisposed = YES;\n\t\t\t}];\n\t\t}];\n\n\t\texpect(signal).notTo(beNil());\n\t\texpect(@(disposed)).to(beFalsy());\n\n\t\texpect([signal firstOrDefault:nil success:NULL error:NULL]).to(equal(RACUnit.defaultUnit));\n\t\texpect(@(disposed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should return YES from -waitUntilCompleted: when successful\", ^{\n\t\tRACSignal *signal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:RACUnit.defaultUnit];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\n\t\t__block NSError *error = nil;\n\t\texpect(@([signal waitUntilCompleted:&error])).to(beTruthy());\n\t\texpect(error).to(beNil());\n\t});\n\n\tqck_it(@\"should return NO from -waitUntilCompleted: upon error\", ^{\n\t\tRACSignal *signal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:RACUnit.defaultUnit];\n\t\t\t[subscriber sendError:RACSignalTestError];\n\t\t\treturn nil;\n\t\t}];\n\n\t\t__block NSError *error = nil;\n\t\texpect(@([signal waitUntilCompleted:&error])).to(beFalsy());\n\t\texpect(error).to(equal(RACSignalTestError));\n\t});\n\n\tqck_it(@\"should return a delayed value from -asynchronousFirstOrDefault:success:error:\", ^{\n\t\tRACSignal *signal = [[RACSignal return:RACUnit.defaultUnit] delay:0];\n\n\t\t__block BOOL scheduledBlockRan = NO;\n\t\t[RACScheduler.mainThreadScheduler schedule:^{\n\t\t\tscheduledBlockRan = YES;\n\t\t}];\n\n\t\texpect(@(scheduledBlockRan)).to(beFalsy());\n\n\t\tBOOL success = NO;\n\t\tNSError *error = nil;\n\t\tid value = [signal asynchronousFirstOrDefault:nil success:&success error:&error];\n\n\t\texpect(@(scheduledBlockRan)).to(beTruthy());\n\n\t\texpect(value).to(equal(RACUnit.defaultUnit));\n\t\texpect(@(success)).to(beTruthy());\n\t\texpect(error).to(beNil());\n\t});\n\n\tqck_it(@\"should return a default value from -asynchronousFirstOrDefault:success:error:\", ^{\n\t\tRACSignal *signal = [[RACSignal error:RACSignalTestError] delay:0];\n\n\t\t__block BOOL scheduledBlockRan = NO;\n\t\t[RACScheduler.mainThreadScheduler schedule:^{\n\t\t\tscheduledBlockRan = YES;\n\t\t}];\n\n\t\texpect(@(scheduledBlockRan)).to(beFalsy());\n\n\t\tBOOL success = NO;\n\t\tNSError *error = nil;\n\t\tid value = [signal asynchronousFirstOrDefault:RACUnit.defaultUnit success:&success error:&error];\n\n\t\texpect(@(scheduledBlockRan)).to(beTruthy());\n\n\t\texpect(value).to(equal(RACUnit.defaultUnit));\n\t\texpect(@(success)).to(beFalsy());\n\t\texpect(error).to(equal(RACSignalTestError));\n\t});\n\n\tqck_it(@\"should return a delayed error from -asynchronousFirstOrDefault:success:error:\", ^{\n\t\tRACSignal *signal = [[RACSignal\n\t\t\tcreateSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t\treturn [[RACScheduler scheduler] schedule:^{\n\t\t\t\t\t[subscriber sendError:RACSignalTestError];\n\t\t\t\t}];\n\t\t\t}]\n\t\t\tdeliverOn:RACScheduler.mainThreadScheduler];\n\n\t\t__block NSError *error = nil;\n\t\t__block BOOL success = NO;\n\t\texpect([signal asynchronousFirstOrDefault:nil success:&success error:&error]).to(beNil());\n\n\t\texpect(@(success)).to(beFalsy());\n\t\texpect(error).to(equal(RACSignalTestError));\n\t});\n\n\tqck_it(@\"should terminate the subscription after returning from -asynchronousFirstOrDefault:success:error:\", ^{\n\t\t__block BOOL disposed = NO;\n\t\tRACSignal *signal = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t[[RACScheduler scheduler] schedule:^{\n\t\t\t\t[subscriber sendNext:RACUnit.defaultUnit];\n\t\t\t}];\n\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\tdisposed = YES;\n\t\t\t}];\n\t\t}];\n\n\t\texpect(signal).notTo(beNil());\n\t\texpect(@(disposed)).to(beFalsy());\n\n\t\texpect([signal asynchronousFirstOrDefault:nil success:NULL error:NULL]).to(equal(RACUnit.defaultUnit));\n\t\texpect(@(disposed)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should return a delayed success from -asynchronouslyWaitUntilCompleted:\", ^{\n\t\tRACSignal *signal = [[RACSignal return:RACUnit.defaultUnit] delay:0];\n\n\t\t__block BOOL scheduledBlockRan = NO;\n\t\t[RACScheduler.mainThreadScheduler schedule:^{\n\t\t\tscheduledBlockRan = YES;\n\t\t}];\n\n\t\texpect(@(scheduledBlockRan)).to(beFalsy());\n\n\t\tNSError *error = nil;\n\t\tBOOL success = [signal asynchronouslyWaitUntilCompleted:&error];\n\n\t\texpect(@(scheduledBlockRan)).to(beTruthy());\n\n\t\texpect(@(success)).to(beTruthy());\n\t\texpect(error).to(beNil());\n\t});\n});\n\nqck_describe(@\"continuation\", ^{\n\tqck_it(@\"should repeat after completion\", ^{\n\t\t__block NSUInteger numberOfSubscriptions = 0;\n\t\tRACScheduler *scheduler = [RACScheduler scheduler];\n\n\t\tRACSignal *signal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\treturn [scheduler schedule:^{\n\t\t\t\tif (numberOfSubscriptions == 3) {\n\t\t\t\t\t[subscriber sendError:RACSignalTestError];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tnumberOfSubscriptions++;\n\n\t\t\t\t[subscriber sendNext:@\"1\"];\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t\t[subscriber sendError:RACSignalTestError];\n\t\t\t}];\n\t\t}];\n\n\t\t__block NSUInteger nextCount = 0;\n\t\t__block BOOL gotCompleted = NO;\n\t\t[[signal repeat] subscribeNext:^(id x) {\n\t\t\tnextCount++;\n\t\t} error:^(NSError *error) {\n\n\t\t} completed:^{\n\t\t\tgotCompleted = YES;\n\t\t}];\n\n\t\texpect(@(nextCount)).toEventually(equal(@3));\n\t\texpect(@(gotCompleted)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should stop repeating when disposed\", ^{\n\t\tRACSignal *signal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\n\t\tNSMutableArray *values = [NSMutableArray array];\n\n\t\t__block BOOL completed = NO;\n\t\t__block RACDisposable *disposable = [[[signal\n\t\t\trepeat]\n\t\t\tsubscribeOn:RACScheduler.mainThreadScheduler]\n\t\t\tsubscribeNext:^(id x) {\n\t\t\t\t[values addObject:x];\n\t\t\t\t[disposable dispose];\n\t\t\t} completed:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\n\t\texpect(values).toEventually(equal(@[ @1 ]));\n\t\texpect(@(completed)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should stop repeating when disposed by -take:\", ^{\n\t\tRACSignal *signal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\n\t\tNSMutableArray *values = [NSMutableArray array];\n\n\t\t__block BOOL completed = NO;\n\t\t[[[signal repeat] take:1] subscribeNext:^(id x) {\n\t\t\t[values addObject:x];\n\t\t} completed:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\n\t\texpect(values).toEventually(equal(@[ @1 ]));\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"+combineLatestWith:\", ^{\n\t__block RACSubject *subject1 = nil;\n\t__block RACSubject *subject2 = nil;\n\t__block RACSignal *combined = nil;\n\n\tqck_beforeEach(^{\n\t\tsubject1 = [RACSubject subject];\n\t\tsubject2 = [RACSubject subject];\n\t\tcombined = [RACSignal combineLatest:@[ subject1, subject2 ]];\n\t});\n\n\tqck_it(@\"should send next only once both signals send next\", ^{\n\t\t__block RACTuple *tuple;\n\n\t\t[combined subscribeNext:^(id x) {\n\t\t\ttuple = x;\n\t\t}];\n\n\t\texpect(tuple).to(beNil());\n\n\t\t[subject1 sendNext:@\"1\"];\n\t\texpect(tuple).to(beNil());\n\n\t\t[subject2 sendNext:@\"2\"];\n\t\texpect(tuple).to(equal(RACTuplePack(@\"1\", @\"2\")));\n\t});\n\n\tqck_it(@\"should send nexts when either signal sends multiple times\", ^{\n\t\tNSMutableArray *results = [NSMutableArray array];\n\t\t[combined subscribeNext:^(id x) {\n\t\t\t[results addObject:x];\n\t\t}];\n\n\t\t[subject1 sendNext:@\"1\"];\n\t\t[subject2 sendNext:@\"2\"];\n\n\t\t[subject1 sendNext:@\"3\"];\n\t\t[subject2 sendNext:@\"4\"];\n\n\t\texpect(results[0]).to(equal(RACTuplePack(@\"1\", @\"2\")));\n\t\texpect(results[1]).to(equal(RACTuplePack(@\"3\", @\"2\")));\n\t\texpect(results[2]).to(equal(RACTuplePack(@\"3\", @\"4\")));\n\t});\n\n\tqck_it(@\"should complete when only both signals complete\", ^{\n\t\t__block BOOL completed = NO;\n\n\t\t[combined subscribeCompleted:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\n\t\texpect(@(completed)).to(beFalsy());\n\n\t\t[subject1 sendCompleted];\n\t\texpect(@(completed)).to(beFalsy());\n\n\t\t[subject2 sendCompleted];\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should error when either signal errors\", ^{\n\t\t__block NSError *receivedError = nil;\n\t\t[combined subscribeError:^(NSError *error) {\n\t\t\treceivedError = error;\n\t\t}];\n\n\t\t[subject1 sendError:RACSignalTestError];\n\t\texpect(receivedError).to(equal(RACSignalTestError));\n\t});\n\n\tqck_it(@\"shouldn't create a retain cycle\", ^{\n\t\t__block BOOL subjectDeallocd = NO;\n\t\t__block BOOL signalDeallocd = NO;\n\n\t\t@autoreleasepool {\n\t\t\tRACSubject *subject __attribute__((objc_precise_lifetime)) = [RACSubject subject];\n\t\t\t[subject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tsubjectDeallocd = YES;\n\t\t\t}]];\n\n\t\t\tRACSignal *signal __attribute__((objc_precise_lifetime)) = [RACSignal combineLatest:@[ subject ]];\n\t\t\t[signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tsignalDeallocd = YES;\n\t\t\t}]];\n\n\t\t\t[signal subscribeCompleted:^{}];\n\t\t\t[subject sendCompleted];\n\t\t}\n\n\t\texpect(@(subjectDeallocd)).toEventually(beTruthy());\n\t\texpect(@(signalDeallocd)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should combine the same signal\", ^{\n\t\tRACSignal *combined = [subject1 combineLatestWith:subject1];\n\n\t\t__block RACTuple *tuple;\n\t\t[combined subscribeNext:^(id x) {\n\t\t\ttuple = x;\n\t\t}];\n\n\t\t[subject1 sendNext:@\"foo\"];\n\t\texpect(tuple).to(equal(RACTuplePack(@\"foo\", @\"foo\")));\n\n\t\t[subject1 sendNext:@\"bar\"];\n\t\texpect(tuple).to(equal(RACTuplePack(@\"bar\", @\"bar\")));\n\t});\n\n\tqck_it(@\"should combine the same side-effecting signal\", ^{\n\t\t__block NSUInteger counter = 0;\n\t\tRACSignal *sideEffectingSignal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@(++counter)];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\n\t\tRACSignal *combined = [sideEffectingSignal combineLatestWith:sideEffectingSignal];\n\t\texpect(@(counter)).to(equal(@0));\n\n\t\tNSMutableArray *receivedValues = [NSMutableArray array];\n\t\t[combined subscribeNext:^(id x) {\n\t\t\t[receivedValues addObject:x];\n\t\t}];\n\n\t\texpect(@(counter)).to(equal(@2));\n\n\t\tNSArray *expected = @[ RACTuplePack(@1, @2) ];\n\t\texpect(receivedValues).to(equal(expected));\n\t});\n});\n\nqck_describe(@\"+combineLatest:\", ^{\n\tqck_it(@\"should return tuples even when only combining one signal\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\n\t\t__block RACTuple *tuple;\n\t\t[[RACSignal combineLatest:@[ subject ]] subscribeNext:^(id x) {\n\t\t\ttuple = x;\n\t\t}];\n\n\t\t[subject sendNext:@\"foo\"];\n\t\texpect(tuple).to(equal(RACTuplePack(@\"foo\")));\n\t});\n\n\tqck_it(@\"should complete immediately when not given any signals\", ^{\n\t\tRACSignal *signal = [RACSignal combineLatest:@[]];\n\n\t\t__block BOOL completed = NO;\n\t\t[signal subscribeCompleted:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should only complete after all its signals complete\", ^{\n\t\tRACSubject *subject1 = [RACSubject subject];\n\t\tRACSubject *subject2 = [RACSubject subject];\n\t\tRACSubject *subject3 = [RACSubject subject];\n\t\tRACSignal *combined = [RACSignal combineLatest:@[ subject1, subject2, subject3 ]];\n\n\t\t__block BOOL completed = NO;\n\t\t[combined subscribeCompleted:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\n\t\texpect(@(completed)).to(beFalsy());\n\n\t\t[subject1 sendCompleted];\n\t\texpect(@(completed)).to(beFalsy());\n\n\t\t[subject2 sendCompleted];\n\t\texpect(@(completed)).to(beFalsy());\n\n\t\t[subject3 sendCompleted];\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"+combineLatest:reduce:\", ^{\n\t__block RACSubject *subject1;\n\t__block RACSubject *subject2;\n\t__block RACSubject *subject3;\n\n\tqck_beforeEach(^{\n\t\tsubject1 = [RACSubject subject];\n\t\tsubject2 = [RACSubject subject];\n\t\tsubject3 = [RACSubject subject];\n\t});\n\n\tqck_it(@\"should send nils for nil values\", ^{\n\t\t__block id receivedVal1;\n\t\t__block id receivedVal2;\n\t\t__block id receivedVal3;\n\n\t\tRACSignal *combined = [RACSignal combineLatest:@[ subject1, subject2, subject3 ] reduce:^ id (id val1, id val2, id val3) {\n\t\t\treceivedVal1 = val1;\n\t\t\treceivedVal2 = val2;\n\t\t\treceivedVal3 = val3;\n\t\t\treturn nil;\n\t\t}];\n\n\t\t__block BOOL gotValue = NO;\n\t\t[combined subscribeNext:^(id x) {\n\t\t\tgotValue = YES;\n\t\t}];\n\n\t\t[subject1 sendNext:nil];\n\t\t[subject2 sendNext:nil];\n\t\t[subject3 sendNext:nil];\n\n\t\texpect(@(gotValue)).to(beTruthy());\n\t\texpect(receivedVal1).to(beNil());\n\t\texpect(receivedVal2).to(beNil());\n\t\texpect(receivedVal3).to(beNil());\n\t});\n\n\tqck_it(@\"should send the return result of the reduce block\", ^{\n\t\tRACSignal *combined = [RACSignal combineLatest:@[ subject1, subject2, subject3 ] reduce:^(NSString *string1, NSString *string2, NSString *string3) {\n\t\t\treturn [NSString stringWithFormat:@\"%@: %@%@\", string1, string2, string3];\n\t\t}];\n\n\t\t__block id received;\n\t\t[combined subscribeNext:^(id x) {\n\t\t\treceived = x;\n\t\t}];\n\n\t\t[subject1 sendNext:@\"hello\"];\n\t\t[subject2 sendNext:@\"world\"];\n\t\t[subject3 sendNext:@\"!!1\"];\n\n\t\texpect(received).to(equal(@\"hello: world!!1\"));\n\t});\n\n\tqck_it(@\"should handle multiples of the same signals\", ^{\n\t\tRACSignal *combined = [RACSignal combineLatest:@[ subject1, subject2, subject1, subject3 ] reduce:^(NSString *string1, NSString *string2, NSString *string3, NSString *string4) {\n\t\t\treturn [NSString stringWithFormat:@\"%@ : %@ = %@ : %@\", string1, string2, string3, string4];\n\t\t}];\n\n\t\tNSMutableArray *receivedValues = NSMutableArray.array;\n\n\t\t[combined subscribeNext:^(id x) {\n\t\t\t[receivedValues addObject:x];\n\t\t}];\n\n\t\t[subject1 sendNext:@\"apples\"];\n\t\texpect(receivedValues.lastObject).to(beNil());\n\n\t\t[subject2 sendNext:@\"oranges\"];\n\t\texpect(receivedValues.lastObject).to(beNil());\n\n\t\t[subject3 sendNext:@\"cattle\"];\n\t\texpect(receivedValues.lastObject).to(equal(@\"apples : oranges = apples : cattle\"));\n\n\t\t[subject1 sendNext:@\"horses\"];\n\t\texpect(receivedValues.lastObject).to(equal(@\"horses : oranges = horses : cattle\"));\n\t});\n\n\tqck_it(@\"should handle multiples of the same side-effecting signal\", ^{\n\t\t__block NSUInteger counter = 0;\n\t\tRACSignal *sideEffectingSignal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@(++counter)];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\n\t\tRACSignal *combined = [RACSignal combineLatest:@[ sideEffectingSignal, sideEffectingSignal, sideEffectingSignal ] reduce:^(id x, id y, id z) {\n\t\t\treturn [NSString stringWithFormat:@\"%@%@%@\", x, y, z];\n\t\t}];\n\n\t\tNSMutableArray *receivedValues = [NSMutableArray array];\n\t\texpect(@(counter)).to(equal(@0));\n\n\t\t[combined subscribeNext:^(id x) {\n\t\t\t[receivedValues addObject:x];\n\t\t}];\n\n\t\texpect(@(counter)).to(equal(@3));\n\t\texpect(receivedValues).to(equal(@[ @\"123\" ]));\n\t});\n});\n\nqck_describe(@\"distinctUntilChanged\", ^{\n\tqck_it(@\"should only send values that are distinct from the previous value\", ^{\n\t\tRACSignal *sub = [[RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendNext:@2];\n\t\t\t[subscriber sendNext:@2];\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}] distinctUntilChanged];\n\n\t\tNSArray *values = sub.toArray;\n\t\tNSArray *expected = @[ @1, @2, @1 ];\n\t\texpect(values).to(equal(expected));\n\t});\n\n\tqck_it(@\"shouldn't consider nils to always be distinct\", ^{\n\t\tRACSignal *sub = [[RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendNext:nil];\n\t\t\t[subscriber sendNext:nil];\n\t\t\t[subscriber sendNext:nil];\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}] distinctUntilChanged];\n\n\t\tNSArray *values = sub.toArray;\n\t\tNSArray *expected = @[ @1, [NSNull null], @1 ];\n\t\texpect(values).to(equal(expected));\n\t});\n\n\tqck_it(@\"should consider initial nil to be distinct\", ^{\n\t\tRACSignal *sub = [[RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:nil];\n\t\t\t[subscriber sendNext:nil];\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}] distinctUntilChanged];\n\n\t\tNSArray *values = sub.toArray;\n\t\tNSArray *expected = @[ [NSNull null], @1 ];\n\t\texpect(values).to(equal(expected));\n\t});\n});\n\nqck_describe(@\"RACObserve\", ^{\n\t__block RACTestObject *testObject;\n\n\tqck_beforeEach(^{\n\t\ttestObject = [[RACTestObject alloc] init];\n\t});\n\n\tqck_it(@\"should work with object properties\", ^{\n\t\tNSArray *expected = @[ @\"hello\", @\"world\" ];\n\t\ttestObject.objectValue = expected[0];\n\n\t\tNSMutableArray *valuesReceived = [NSMutableArray array];\n\t\t[RACObserve(testObject, objectValue) subscribeNext:^(id x) {\n\t\t\t[valuesReceived addObject:x];\n\t\t}];\n\n\t\ttestObject.objectValue = expected[1];\n\n\t\texpect(valuesReceived).to(equal(expected));\n\t});\n\n\tqck_it(@\"should work with non-object properties\", ^{\n\t\tNSArray *expected = @[ @42, @43 ];\n\t\ttestObject.integerValue = [expected[0] integerValue];\n\n\t\tNSMutableArray *valuesReceived = [NSMutableArray array];\n\t\t[RACObserve(testObject, integerValue) subscribeNext:^(id x) {\n\t\t\t[valuesReceived addObject:x];\n\t\t}];\n\n\t\ttestObject.integerValue = [expected[1] integerValue];\n\n\t\texpect(valuesReceived).to(equal(expected));\n\t});\n\n\tqck_it(@\"should read the initial value upon subscription\", ^{\n\t\ttestObject.objectValue = @\"foo\";\n\n\t\tRACSignal *signal = RACObserve(testObject, objectValue);\n\t\ttestObject.objectValue = @\"bar\";\n\n\t\texpect([signal first]).to(equal(@\"bar\"));\n\t});\n});\n\nqck_describe(@\"-setKeyPath:onObject:\", ^{\n\tid setupBlock = ^(RACTestObject *testObject, NSString *keyPath, id nilValue, RACSignal *signal) {\n\t\t[signal setKeyPath:keyPath onObject:testObject nilValue:nilValue];\n\t};\n\n\tqck_itBehavesLike(RACPropertySignalExamples, ^{\n\t\treturn @{ RACPropertySignalExamplesSetupBlock: setupBlock };\n\t});\n\n\tqck_it(@\"shouldn't send values to dealloc'd objects\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t@autoreleasepool {\n\t\t\tRACTestObject *testObject __attribute__((objc_precise_lifetime)) = [[RACTestObject alloc] init];\n\t\t\t[subject setKeyPath:@keypath(testObject.objectValue) onObject:testObject];\n\t\t\texpect(testObject.objectValue).to(beNil());\n\n\t\t\t[subject sendNext:@1];\n\t\t\texpect(testObject.objectValue).to(equal(@1));\n\n\t\t\t[subject sendNext:@2];\n\t\t\texpect(testObject.objectValue).to(equal(@2));\n\t\t}\n\n\t\t// This shouldn't do anything.\n\t\t[subject sendNext:@3];\n\t});\n\n\tqck_it(@\"should allow a new derivation after the signal's completed\", ^{\n\t\tRACSubject *subject1 = [RACSubject subject];\n\t\tRACTestObject *testObject = [[RACTestObject alloc] init];\n\t\t[subject1 setKeyPath:@keypath(testObject.objectValue) onObject:testObject];\n\t\t[subject1 sendCompleted];\n\n\t\tRACSubject *subject2 = [RACSubject subject];\n\t\t// This will assert if the previous completion didn't dispose of the\n\t\t// subscription.\n\t\t[subject2 setKeyPath:@keypath(testObject.objectValue) onObject:testObject];\n\t});\n\n\tqck_it(@\"should set the given value when nil is received\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\tRACTestObject *testObject = [[RACTestObject alloc] init];\n\t\t[subject setKeyPath:@keypath(testObject.integerValue) onObject:testObject nilValue:@5];\n\n\t\t[subject sendNext:@1];\n\t\texpect(@(testObject.integerValue)).to(equal(@1));\n\n\t\t[subject sendNext:nil];\n\t\texpect(@(testObject.integerValue)).to(equal(@5));\n\n\t\t[subject sendCompleted];\n\t\texpect(@(testObject.integerValue)).to(equal(@5));\n\t});\n\n\tqck_it(@\"should keep object alive over -sendNext:\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\t__block RACTestObject *testObject = [[RACTestObject alloc] init];\n\t\t__block id deallocValue;\n\n\t\t__unsafe_unretained RACTestObject *unsafeTestObject = testObject;\n\t\t[testObject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\tdeallocValue = unsafeTestObject.slowObjectValue;\n\t\t}]];\n\n\t\t[subject setKeyPath:@keypath(testObject.slowObjectValue) onObject:testObject];\n\t\texpect(testObject.slowObjectValue).to(beNil());\n\n\t\t// Attempt to deallocate concurrently.\n\t\t[[RACScheduler scheduler] afterDelay:0.01 schedule:^{\n\t\t\ttestObject = nil;\n\t\t}];\n\n\t\texpect(deallocValue).to(beNil());\n\t\t[subject sendNext:@1];\n\t\texpect(deallocValue).to(equal(@1));\n\t});\n});\n\nqck_describe(@\"memory management\", ^{\n\tqck_it(@\"should dealloc signals if the signal does nothing\", ^{\n\t\t__block BOOL deallocd = NO;\n\t\t@autoreleasepool {\n\t\t\tRACSignal *signal __attribute__((objc_precise_lifetime)) = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t\treturn nil;\n\t\t\t}];\n\n\t\t\t[signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tdeallocd = YES;\n\t\t\t}]];\n\t\t}\n\n\t\texpect(@(deallocd)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should dealloc signals if the signal immediately completes\", ^{\n\t\t__block BOOL deallocd = NO;\n\t\t@autoreleasepool {\n\t\t\t__block BOOL done = NO;\n\n\t\t\tRACSignal *signal __attribute__((objc_precise_lifetime)) = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t\treturn nil;\n\t\t\t}];\n\n\t\t\t[signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tdeallocd = YES;\n\t\t\t}]];\n\n\t\t\t[signal subscribeCompleted:^{\n\t\t\t\tdone = YES;\n\t\t\t}];\n\n\t\t\texpect(@(done)).toEventually(beTruthy());\n\t\t}\n\n\t\texpect(@(deallocd)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should dealloc a replay subject if it completes immediately\", ^{\n\t\t__block BOOL completed = NO;\n\t\t__block BOOL deallocd = NO;\n\t\t@autoreleasepool {\n\t\t\tRACReplaySubject *subject __attribute__((objc_precise_lifetime)) = [RACReplaySubject subject];\n\t\t\t[subject sendCompleted];\n\n\t\t\t[subject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tdeallocd = YES;\n\t\t\t}]];\n\n\t\t\t[subject subscribeCompleted:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\t\t}\n\n\t\texpect(@(completed)).toEventually(beTruthy());\n\t\texpect(@(deallocd)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should dealloc if the signal was created on a background queue\", ^{\n\t\t__block BOOL completed = NO;\n\t\t__block BOOL deallocd = NO;\n\t\t@autoreleasepool {\n\t\t\t[[RACScheduler scheduler] schedule:^{\n\t\t\t\tRACSignal *signal __attribute__((objc_precise_lifetime)) = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t\t\t[subscriber sendCompleted];\n\t\t\t\t\treturn nil;\n\t\t\t\t}];\n\n\t\t\t\t[signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tdeallocd = YES;\n\t\t\t\t}]];\n\n\t\t\t\t[signal subscribeCompleted:^{\n\t\t\t\t\tcompleted = YES;\n\t\t\t\t}];\n\t\t\t}];\n\t\t}\n\n\t\texpect(@(completed)).toEventually(beTruthy());\n\t\texpect(@(deallocd)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should dealloc if the signal was created on a background queue, never gets any subscribers, and the background queue gets delayed\", ^{\n\t\t__block BOOL deallocd = NO;\n\t\tdispatch_semaphore_t semaphore = dispatch_semaphore_create(0);\n\n\t\t@autoreleasepool {\n\t\t\t[[RACScheduler scheduler] schedule:^{\n\t\t\t\tRACSignal *signal __attribute__((objc_precise_lifetime)) = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t\t\treturn nil;\n\t\t\t\t}];\n\n\t\t\t\t[signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\tdeallocd = YES;\n\t\t\t\t\tdispatch_semaphore_signal(semaphore);\n\t\t\t\t}]];\n\n\t\t\t\t[NSThread sleepForTimeInterval:1];\n\n\t\t\t\texpect(@(deallocd)).to(beFalsy());\n\t\t\t}];\n\t\t}\n\n\t\tdispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);\n\t\texpect(@(deallocd)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should retain intermediate signals when subscribing\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\texpect(subject).notTo(beNil());\n\n\t\t__block BOOL gotNext = NO;\n\t\t__block BOOL completed = NO;\n\n\t\tRACDisposable *disposable;\n\n\t\t@autoreleasepool {\n\t\t\tRACSignal *intermediateSignal = [subject doNext:^(id _) {\n\t\t\t\tgotNext = YES;\n\t\t\t}];\n\n\t\t\texpect(intermediateSignal).notTo(beNil());\n\n\t\t\tdisposable = [intermediateSignal subscribeCompleted:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\t\t}\n\n\t\t[subject sendNext:@5];\n\t\texpect(@(gotNext)).to(beTruthy());\n\n\t\t[subject sendCompleted];\n\t\texpect(@(completed)).to(beTruthy());\n\n\t\t[disposable dispose];\n\t});\n});\n\nqck_describe(@\"-merge:\", ^{\n\t__block RACSubject *sub1;\n\t__block RACSubject *sub2;\n\t__block RACSignal *merged;\n\tqck_beforeEach(^{\n\t\tsub1 = [RACSubject subject];\n\t\tsub2 = [RACSubject subject];\n\t\tmerged = [sub1 merge:sub2];\n\t});\n\n\tqck_it(@\"should send all values from both signals\", ^{\n\t\tNSMutableArray *values = [NSMutableArray array];\n\t\t[merged subscribeNext:^(id x) {\n\t\t\t[values addObject:x];\n\t\t}];\n\n\t\t[sub1 sendNext:@1];\n\t\t[sub2 sendNext:@2];\n\t\t[sub2 sendNext:@3];\n\t\t[sub1 sendNext:@4];\n\n\t\tNSArray *expected = @[ @1, @2, @3, @4 ];\n\t\texpect(values).to(equal(expected));\n\t});\n\n\tqck_it(@\"should send an error if one occurs\", ^{\n\t\t__block NSError *errorReceived;\n\t\t[merged subscribeError:^(NSError *error) {\n\t\t\terrorReceived = error;\n\t\t}];\n\n\t\t[sub1 sendError:RACSignalTestError];\n\t\texpect(errorReceived).to(equal(RACSignalTestError));\n\t});\n\n\tqck_it(@\"should complete only after both signals complete\", ^{\n\t\tNSMutableArray *values = [NSMutableArray array];\n\t\t__block BOOL completed = NO;\n\t\t[merged subscribeNext:^(id x) {\n\t\t\t[values addObject:x];\n\t\t} completed:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\n\t\t[sub1 sendNext:@1];\n\t\t[sub2 sendNext:@2];\n\t\t[sub2 sendNext:@3];\n\t\t[sub2 sendCompleted];\n\t\texpect(@(completed)).to(beFalsy());\n\n\t\t[sub1 sendNext:@4];\n\t\t[sub1 sendCompleted];\n\t\texpect(@(completed)).to(beTruthy());\n\n\t\tNSArray *expected = @[ @1, @2, @3, @4 ];\n\t\texpect(values).to(equal(expected));\n\t});\n\n\tqck_it(@\"should complete only after both signals complete for any number of subscribers\", ^{\n\t\t__block BOOL completed1 = NO;\n\t\t__block BOOL completed2 = NO;\n\t\t[merged subscribeCompleted:^{\n\t\t\tcompleted1 = YES;\n\t\t}];\n\n\t\t[merged subscribeCompleted:^{\n\t\t\tcompleted2 = YES;\n\t\t}];\n\n\t\texpect(@(completed1)).to(beFalsy());\n\t\texpect(@(completed2)).to(beFalsy());\n\n\t\t[sub1 sendCompleted];\n\t\t[sub2 sendCompleted];\n\t\texpect(@(completed1)).to(beTruthy());\n\t\texpect(@(completed2)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"+merge:\", ^{\n\t__block RACSubject *sub1;\n\t__block RACSubject *sub2;\n\t__block RACSignal *merged;\n\tqck_beforeEach(^{\n\t\tsub1 = [RACSubject subject];\n\t\tsub2 = [RACSubject subject];\n\t\tmerged = [RACSignal merge:@[ sub1, sub2 ].objectEnumerator];\n\t});\n\n\tqck_it(@\"should send all values from both signals\", ^{\n\t\tNSMutableArray *values = [NSMutableArray array];\n\t\t[merged subscribeNext:^(id x) {\n\t\t\t[values addObject:x];\n\t\t}];\n\n\t\t[sub1 sendNext:@1];\n\t\t[sub2 sendNext:@2];\n\t\t[sub2 sendNext:@3];\n\t\t[sub1 sendNext:@4];\n\n\t\tNSArray *expected = @[ @1, @2, @3, @4 ];\n\t\texpect(values).to(equal(expected));\n\t});\n\n\tqck_it(@\"should send an error if one occurs\", ^{\n\t\t__block NSError *errorReceived;\n\t\t[merged subscribeError:^(NSError *error) {\n\t\t\terrorReceived = error;\n\t\t}];\n\n\t\t[sub1 sendError:RACSignalTestError];\n\t\texpect(errorReceived).to(equal(RACSignalTestError));\n\t});\n\n\tqck_it(@\"should complete only after both signals complete\", ^{\n\t\tNSMutableArray *values = [NSMutableArray array];\n\t\t__block BOOL completed = NO;\n\t\t[merged subscribeNext:^(id x) {\n\t\t\t[values addObject:x];\n\t\t} completed:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\n\t\t[sub1 sendNext:@1];\n\t\t[sub2 sendNext:@2];\n\t\t[sub2 sendNext:@3];\n\t\t[sub2 sendCompleted];\n\t\texpect(@(completed)).to(beFalsy());\n\n\t\t[sub1 sendNext:@4];\n\t\t[sub1 sendCompleted];\n\t\texpect(@(completed)).to(beTruthy());\n\n\t\tNSArray *expected = @[ @1, @2, @3, @4 ];\n\t\texpect(values).to(equal(expected));\n\t});\n\n\tqck_it(@\"should complete immediately when not given any signals\", ^{\n\t\tRACSignal *signal = [RACSignal merge:@[].objectEnumerator];\n\n\t\t__block BOOL completed = NO;\n\t\t[signal subscribeCompleted:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should complete only after both signals complete for any number of subscribers\", ^{\n\t\t__block BOOL completed1 = NO;\n\t\t__block BOOL completed2 = NO;\n\t\t[merged subscribeCompleted:^{\n\t\t\tcompleted1 = YES;\n\t\t}];\n\n\t\t[merged subscribeCompleted:^{\n\t\t\tcompleted2 = YES;\n\t\t}];\n\n\t\texpect(@(completed1)).to(beFalsy());\n\t\texpect(@(completed2)).to(beFalsy());\n\n\t\t[sub1 sendCompleted];\n\t\t[sub2 sendCompleted];\n\t\texpect(@(completed1)).to(beTruthy());\n\t\texpect(@(completed2)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"-flatten:\", ^{\n\t__block BOOL subscribedTo1 = NO;\n\t__block BOOL subscribedTo2 = NO;\n\t__block BOOL subscribedTo3 = NO;\n\t__block RACSignal *sub1;\n\t__block RACSignal *sub2;\n\t__block RACSignal *sub3;\n\t__block RACSubject *subject1;\n\t__block RACSubject *subject2;\n\t__block RACSubject *subject3;\n\t__block RACSubject *signalsSubject;\n\t__block NSMutableArray *values;\n\n\tqck_beforeEach(^{\n\t\tsubscribedTo1 = NO;\n\t\tsubject1 = [RACSubject subject];\n\t\tsub1 = [RACSignal defer:^{\n\t\t\tsubscribedTo1 = YES;\n\t\t\treturn subject1;\n\t\t}];\n\n\t\tsubscribedTo2 = NO;\n\t\tsubject2 = [RACSubject subject];\n\t\tsub2 = [RACSignal defer:^{\n\t\t\tsubscribedTo2 = YES;\n\t\t\treturn subject2;\n\t\t}];\n\n\t\tsubscribedTo3 = NO;\n\t\tsubject3 = [RACSubject subject];\n\t\tsub3 = [RACSignal defer:^{\n\t\t\tsubscribedTo3 = YES;\n\t\t\treturn subject3;\n\t\t}];\n\n\t\tsignalsSubject = [RACSubject subject];\n\n\t\tvalues = [NSMutableArray array];\n\t});\n\n\tqck_describe(@\"when its max is 0\", ^{\n\t\tqck_it(@\"should merge all the signals concurrently\", ^{\n\t\t\t[[signalsSubject flatten:0] subscribeNext:^(id x) {\n\t\t\t\t[values addObject:x];\n\t\t\t}];\n\n\t\t\texpect(@(subscribedTo1)).to(beFalsy());\n\t\t\texpect(@(subscribedTo2)).to(beFalsy());\n\t\t\texpect(@(subscribedTo3)).to(beFalsy());\n\n\t\t\t[signalsSubject sendNext:sub1];\n\t\t\t[signalsSubject sendNext:sub2];\n\n\t\t\texpect(@(subscribedTo1)).to(beTruthy());\n\t\t\texpect(@(subscribedTo2)).to(beTruthy());\n\t\t\texpect(@(subscribedTo3)).to(beFalsy());\n\n\t\t\t[subject1 sendNext:@1];\n\n\t\t\t[signalsSubject sendNext:sub3];\n\n\t\t\texpect(@(subscribedTo1)).to(beTruthy());\n\t\t\texpect(@(subscribedTo2)).to(beTruthy());\n\t\t\texpect(@(subscribedTo3)).to(beTruthy());\n\n\t\t\t[subject1 sendCompleted];\n\n\t\t\t[subject2 sendNext:@2];\n\t\t\t[subject2 sendCompleted];\n\n\t\t\t[subject3 sendNext:@3];\n\t\t\t[subject3 sendCompleted];\n\n\t\t\tNSArray *expected = @[ @1, @2, @3 ];\n\t\t\texpect(values).to(equal(expected));\n\t\t});\n\n\t\tqck_itBehavesLike(RACSignalMergeConcurrentCompletionExampleGroup, ^{\n\t\t\treturn @{ RACSignalMaxConcurrent: @0 };\n\t\t});\n\t});\n\n\tqck_describe(@\"when its max is > 0\", ^{\n\t\tqck_it(@\"should merge only the given number at a time\", ^{\n\t\t\t[[signalsSubject flatten:1] subscribeNext:^(id x) {\n\t\t\t\t[values addObject:x];\n\t\t\t}];\n\n\t\t\texpect(@(subscribedTo1)).to(beFalsy());\n\t\t\texpect(@(subscribedTo2)).to(beFalsy());\n\t\t\texpect(@(subscribedTo3)).to(beFalsy());\n\n\t\t\t[signalsSubject sendNext:sub1];\n\t\t\t[signalsSubject sendNext:sub2];\n\n\t\t\texpect(@(subscribedTo1)).to(beTruthy());\n\t\t\texpect(@(subscribedTo2)).to(beFalsy());\n\t\t\texpect(@(subscribedTo3)).to(beFalsy());\n\n\t\t\t[subject1 sendNext:@1];\n\n\t\t\t[signalsSubject sendNext:sub3];\n\n\t\t\texpect(@(subscribedTo1)).to(beTruthy());\n\t\t\texpect(@(subscribedTo2)).to(beFalsy());\n\t\t\texpect(@(subscribedTo3)).to(beFalsy());\n\n\t\t\t[signalsSubject sendCompleted];\n\n\t\t\texpect(@(subscribedTo1)).to(beTruthy());\n\t\t\texpect(@(subscribedTo2)).to(beFalsy());\n\t\t\texpect(@(subscribedTo3)).to(beFalsy());\n\n\t\t\t[subject1 sendCompleted];\n\n\t\t\texpect(@(subscribedTo2)).to(beTruthy());\n\t\t\texpect(@(subscribedTo3)).to(beFalsy());\n\n\t\t\t[subject2 sendNext:@2];\n\t\t\t[subject2 sendCompleted];\n\n\t\t\texpect(@(subscribedTo3)).to(beTruthy());\n\n\t\t\t[subject3 sendNext:@3];\n\t\t\t[subject3 sendCompleted];\n\n\t\t\tNSArray *expected = @[ @1, @2, @3 ];\n\t\t\texpect(values).to(equal(expected));\n\t\t});\n\n\t\tqck_itBehavesLike(RACSignalMergeConcurrentCompletionExampleGroup, ^{\n\t\t\treturn @{ RACSignalMaxConcurrent: @1 };\n\t\t});\n\t});\n\n\tqck_it(@\"shouldn't create a retain cycle\", ^{\n\t\t__block BOOL subjectDeallocd = NO;\n\t\t__block BOOL signalDeallocd = NO;\n\t\t@autoreleasepool {\n\t\t\tRACSubject *subject __attribute__((objc_precise_lifetime)) = [RACSubject subject];\n\t\t\t[subject.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tsubjectDeallocd = YES;\n\t\t\t}]];\n\n\t\t\tRACSignal *signal __attribute__((objc_precise_lifetime)) = [subject flatten];\n\t\t\t[signal.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\tsignalDeallocd = YES;\n\t\t\t}]];\n\n\t\t\t[signal subscribeCompleted:^{}];\n\n\t\t\t[subject sendCompleted];\n\t\t}\n\n\t\texpect(@(subjectDeallocd)).toEventually(beTruthy());\n\t\texpect(@(signalDeallocd)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should not crash when disposing while subscribing\", ^{\n\t\tRACDisposable *disposable = [[signalsSubject flatten:0] subscribeCompleted:^{\n\t\t}];\n\n\t\t[signalsSubject sendNext:[RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[disposable dispose];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}]];\n\n\t\t[signalsSubject sendCompleted];\n\t});\n\n\tqck_it(@\"should dispose after last synchronous signal subscription and should not crash\", ^{\n\n\t\tRACSignal *flattened = [signalsSubject flatten:1];\n\t\tRACDisposable *flattenDisposable = [flattened subscribeCompleted:^{}];\n\n\t\tRACSignal *syncSignal = [RACSignal createSignal:^ RACDisposable *(id<RACSubscriber> subscriber) {\n\t\t\texpect(@(flattenDisposable.disposed)).to(beFalsy());\n\t\t\t[subscriber sendCompleted];\n\t\t\texpect(@(flattenDisposable.disposed)).to(beTruthy());\n\t\t\treturn nil;\n\t\t}];\n\n\t\tRACSignal *asyncSignal = [sub1 delay:0];\n\n\t\t[signalsSubject sendNext:asyncSignal];\n\t\t[signalsSubject sendNext:syncSignal];\n\n\t\t[signalsSubject sendCompleted];\n\n\t\t[subject1 sendCompleted];\n\n\t\texpect(@(flattenDisposable.disposed)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should not crash when disposed because of takeUntil:\", ^{\n\t\tfor (int i = 0; i < 100; i++) {\n\t\t\tRACSubject *flattenedReceiver = [RACSubject subject];\n\t\t\tRACSignal *done = [flattenedReceiver map:^(NSNumber *n) {\n\t\t\t\treturn @(n.integerValue == 1);\n\t\t\t}];\n\n\t\t\tRACSignal *flattened = [signalsSubject flatten:1];\n\n\t\t\tRACDisposable *flattenDisposable = [[flattened takeUntil:[done ignore:@NO]] subscribe:flattenedReceiver];\n\n\t\t\tRACSignal *syncSignal = [RACSignal createSignal:^ RACDisposable *(id<RACSubscriber> subscriber) {\n\t\t\t\texpect(@(flattenDisposable.disposed)).to(beFalsy());\n\t\t\t\t[subscriber sendNext:@1];\n\t\t\t\texpect(@(flattenDisposable.disposed)).to(beTruthy());\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t\treturn nil;\n\t\t\t}];\n\n\t\t\tRACSignal *asyncSignal = [sub1 delay:0];\n\t\t\t[subject1 sendNext:@0];\n\n\t\t\t[signalsSubject sendNext:asyncSignal];\n\t\t\t[signalsSubject sendNext:syncSignal];\n\t\t\t[signalsSubject sendCompleted];\n\n\t\t\t[subject1 sendCompleted];\n\n\t\t\texpect(@(flattenDisposable.disposed)).toEventually(beTruthy());\n\t\t}\n\t});\n});\n\nqck_describe(@\"-switchToLatest\", ^{\n\t__block RACSubject *subject;\n\n\t__block NSMutableArray *values;\n\t__block NSError *lastError = nil;\n\t__block BOOL completed = NO;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACSubject subject];\n\n\t\tvalues = [NSMutableArray array];\n\t\tlastError = nil;\n\t\tcompleted = NO;\n\n\t\t[[subject switchToLatest] subscribeNext:^(id x) {\n\t\t\texpect(lastError).to(beNil());\n\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\t[values addObject:x];\n\t\t} error:^(NSError *error) {\n\t\t\texpect(lastError).to(beNil());\n\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\tlastError = error;\n\t\t} completed:^{\n\t\t\texpect(lastError).to(beNil());\n\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\tcompleted = YES;\n\t\t}];\n\t});\n\n\tqck_it(@\"should send values from the most recent signal\", ^{\n\t\t[subject sendNext:[RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendNext:@2];\n\t\t\treturn nil;\n\t\t}]];\n\n\t\t[subject sendNext:[RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@3];\n\t\t\t[subscriber sendNext:@4];\n\t\t\treturn nil;\n\t\t}]];\n\n\t\tNSArray *expected = @[ @1, @2, @3, @4 ];\n\t\texpect(values).to(equal(expected));\n\t});\n\n\tqck_it(@\"should send errors from the most recent signal\", ^{\n\t\t[subject sendNext:[RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendError:[NSError errorWithDomain:@\"\" code:-1 userInfo:nil]];\n\t\t\treturn nil;\n\t\t}]];\n\n\t\texpect(lastError).notTo(beNil());\n\t});\n\n\tqck_it(@\"should not send completed if only the switching signal completes\", ^{\n\t\t[subject sendNext:RACSignal.never];\n\n\t\texpect(@(completed)).to(beFalsy());\n\n\t\t[subject sendCompleted];\n\t\texpect(@(completed)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should send completed when the switching signal completes and the last sent signal does\", ^{\n\t\t[subject sendNext:RACSignal.empty];\n\n\t\texpect(@(completed)).to(beFalsy());\n\n\t\t[subject sendCompleted];\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should accept nil signals\", ^{\n\t\t[subject sendNext:nil];\n\t\t[subject sendNext:[RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendNext:@2];\n\t\t\treturn nil;\n\t\t}]];\n\n\t\tNSArray *expected = @[ @1, @2 ];\n\t\texpect(values).to(equal(expected));\n\t});\n\n\tqck_it(@\"should return a cold signal\", ^{\n\t\t__block NSUInteger subscriptions = 0;\n\t\tRACSignal *signalOfSignals = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\tsubscriptions++;\n\t\t\t[subscriber sendNext:[RACSignal empty]];\n\t\t\treturn nil;\n\t\t}];\n\n\t\tRACSignal *switched = [signalOfSignals switchToLatest];\n\n\t\t[[switched publish] connect];\n\t\texpect(@(subscriptions)).to(equal(@1));\n\n\t\t[[switched publish] connect];\n\t\texpect(@(subscriptions)).to(equal(@2));\n\t});\n});\n\nqck_describe(@\"+switch:cases:default:\", ^{\n\t__block RACSubject *keySubject;\n\n\t__block RACSubject *subjectZero;\n\t__block RACSubject *subjectOne;\n\t__block RACSubject *subjectTwo;\n\n\t__block RACSubject *defaultSubject;\n\n\t__block NSMutableArray *values;\n\t__block NSError *lastError = nil;\n\t__block BOOL completed = NO;\n\n\tqck_beforeEach(^{\n\t\tkeySubject = [RACSubject subject];\n\n\t\tsubjectZero = [RACSubject subject];\n\t\tsubjectOne = [RACSubject subject];\n\t\tsubjectTwo = [RACSubject subject];\n\n\t\tdefaultSubject = [RACSubject subject];\n\n\t\tvalues = [NSMutableArray array];\n\t\tlastError = nil;\n\t\tcompleted = NO;\n\t});\n\n\tqck_describe(@\"switching between values with a default\", ^{\n\t\t__block RACSignal *switchSignal;\n\n\t\tqck_beforeEach(^{\n\t\t\tswitchSignal = [RACSignal switch:keySubject cases:@{\n\t\t\t\t@0: subjectZero,\n\t\t\t\t@1: subjectOne,\n\t\t\t\t@2: subjectTwo,\n\t\t\t} default:[RACSignal never]];\n\n\t\t\t[switchSignal subscribeNext:^(id x) {\n\t\t\t\texpect(lastError).to(beNil());\n\t\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\t\t[values addObject:x];\n\t\t\t} error:^(NSError *error) {\n\t\t\t\texpect(lastError).to(beNil());\n\t\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\t\tlastError = error;\n\t\t\t} completed:^{\n\t\t\t\texpect(lastError).to(beNil());\n\t\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\t\t});\n\n\t\tqck_it(@\"should not send any values before a key is sent\", ^{\n\t\t\t[subjectZero sendNext:RACUnit.defaultUnit];\n\t\t\t[subjectOne sendNext:RACUnit.defaultUnit];\n\t\t\t[subjectTwo sendNext:RACUnit.defaultUnit];\n\n\t\t\texpect(values).to(equal(@[]));\n\t\t\texpect(lastError).to(beNil());\n\t\t\texpect(@(completed)).to(beFalsy());\n\t\t});\n\n\t\tqck_it(@\"should send events based on the latest key\", ^{\n\t\t\t[keySubject sendNext:@0];\n\n\t\t\t[subjectZero sendNext:@\"zero\"];\n\t\t\t[subjectZero sendNext:@\"zero\"];\n\t\t\t[subjectOne sendNext:@\"one\"];\n\t\t\t[subjectTwo sendNext:@\"two\"];\n\n\t\t\tNSArray *expected = @[ @\"zero\", @\"zero\" ];\n\t\t\texpect(values).to(equal(expected));\n\n\t\t\t[keySubject sendNext:@1];\n\n\t\t\t[subjectZero sendNext:@\"zero\"];\n\t\t\t[subjectOne sendNext:@\"one\"];\n\t\t\t[subjectTwo sendNext:@\"two\"];\n\n\t\t\texpected = @[ @\"zero\", @\"zero\", @\"one\" ];\n\t\t\texpect(values).to(equal(expected));\n\n\t\t\texpect(lastError).to(beNil());\n\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\t[keySubject sendNext:@2];\n\n\t\t\t[subjectZero sendError:[NSError errorWithDomain:@\"\" code:-1 userInfo:nil]];\n\t\t\t[subjectOne sendError:[NSError errorWithDomain:@\"\" code:-1 userInfo:nil]];\n\t\t\texpect(lastError).to(beNil());\n\n\t\t\t[subjectTwo sendError:[NSError errorWithDomain:@\"\" code:-1 userInfo:nil]];\n\t\t\texpect(lastError).notTo(beNil());\n\t\t});\n\n\t\tqck_it(@\"should not send completed when only the key signal completes\", ^{\n\t\t\t[keySubject sendNext:@0];\n\t\t\t[subjectZero sendNext:@\"zero\"];\n\t\t\t[keySubject sendCompleted];\n\n\t\t\texpect(values).to(equal(@[ @\"zero\" ]));\n\t\t\texpect(@(completed)).to(beFalsy());\n\t\t});\n\n\t\tqck_it(@\"should send completed when the key signal and the latest sent signal complete\", ^{\n\t\t\t[keySubject sendNext:@0];\n\t\t\t[subjectZero sendNext:@\"zero\"];\n\t\t\t[keySubject sendCompleted];\n\t\t\t[subjectZero sendCompleted];\n\n\t\t\texpect(values).to(equal(@[ @\"zero\" ]));\n\t\t\texpect(@(completed)).to(beTruthy());\n\t\t});\n\t});\n\n\tqck_it(@\"should use the default signal if key that was sent does not have an associated signal\", ^{\n\t\t[[RACSignal\n\t\t\tswitch:keySubject\n\t\t\tcases:@{\n\t\t\t\t@0: subjectZero,\n\t\t\t\t@1: subjectOne,\n\t\t\t}\n\t\t\tdefault:defaultSubject]\n\t\t\tsubscribeNext:^(id x) {\n\t\t\t\t[values addObject:x];\n\t\t\t}];\n\n\t\t[keySubject sendNext:@\"not a valid key\"];\n\t\t[defaultSubject sendNext:@\"default\"];\n\n\t\texpect(values).to(equal(@[ @\"default\" ]));\n\n\t\t[keySubject sendNext:nil];\n\t\t[defaultSubject sendNext:@\"default\"];\n\n\t\texpect(values).to(equal((@[ @\"default\", @\"default\" ])));\n\t});\n\n\tqck_it(@\"should send an error if key that was sent does not have an associated signal and there's no default\", ^{\n\t\t[[RACSignal\n\t\t\tswitch:keySubject\n\t\t\tcases:@{\n\t\t\t\t@0: subjectZero,\n\t\t\t\t@1: subjectOne,\n\t\t\t}\n\t\t\tdefault:nil]\n\t\t\tsubscribeNext:^(id x) {\n\t\t\t\t[values addObject:x];\n\t\t\t} error:^(NSError *error) {\n\t\t\t\tlastError = error;\n\t\t\t}];\n\n\t\t[keySubject sendNext:@0];\n\t\t[subjectZero sendNext:@\"zero\"];\n\n\t\texpect(values).to(equal(@[ @\"zero\" ]));\n\t\texpect(lastError).to(beNil());\n\n\t\t[keySubject sendNext:nil];\n\n\t\texpect(values).to(equal(@[ @\"zero\" ]));\n\t\texpect(lastError).notTo(beNil());\n\t\texpect(lastError.domain).to(equal(RACSignalErrorDomain));\n\t\texpect(@(lastError.code)).to(equal(@(RACSignalErrorNoMatchingCase)));\n\t});\n\n\tqck_it(@\"should match RACTupleNil case when a nil value is sent\", ^{\n\t\t[[RACSignal\n\t\t\tswitch:keySubject\n\t\t\tcases:@{\n\t\t\t\tRACTupleNil.tupleNil: subjectZero,\n\t\t\t}\n\t\t\tdefault:defaultSubject]\n\t\t\tsubscribeNext:^(id x) {\n\t\t\t\t[values addObject:x];\n\t\t\t}];\n\n\t\t[keySubject sendNext:nil];\n\t\t[subjectZero sendNext:@\"zero\"];\n\t\texpect(values).to(equal(@[ @\"zero\" ]));\n\t});\n});\n\nqck_describe(@\"+if:then:else\", ^{\n\t__block RACSubject *boolSubject;\n\t__block RACSubject *trueSubject;\n\t__block RACSubject *falseSubject;\n\n\t__block NSMutableArray *values;\n\t__block NSError *lastError = nil;\n\t__block BOOL completed = NO;\n\n\tqck_beforeEach(^{\n\t\tboolSubject = [RACSubject subject];\n\t\ttrueSubject = [RACSubject subject];\n\t\tfalseSubject = [RACSubject subject];\n\n\t\tvalues = [NSMutableArray array];\n\t\tlastError = nil;\n\t\tcompleted = NO;\n\n\t\t[[RACSignal if:boolSubject then:trueSubject else:falseSubject] subscribeNext:^(id x) {\n\t\t\texpect(lastError).to(beNil());\n\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\t[values addObject:x];\n\t\t} error:^(NSError *error) {\n\t\t\texpect(lastError).to(beNil());\n\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\tlastError = error;\n\t\t} completed:^{\n\t\t\texpect(lastError).to(beNil());\n\t\t\texpect(@(completed)).to(beFalsy());\n\n\t\t\tcompleted = YES;\n\t\t}];\n\t});\n\n\tqck_it(@\"should not send any values before a boolean is sent\", ^{\n\t\t[trueSubject sendNext:RACUnit.defaultUnit];\n\t\t[falseSubject sendNext:RACUnit.defaultUnit];\n\n\t\texpect(values).to(equal(@[]));\n\t\texpect(lastError).to(beNil());\n\t\texpect(@(completed)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should send events based on the latest boolean\", ^{\n\t\t[boolSubject sendNext:@YES];\n\n\t\t[trueSubject sendNext:@\"foo\"];\n\t\t[falseSubject sendNext:@\"buzz\"];\n\t\t[trueSubject sendNext:@\"bar\"];\n\n\t\tNSArray *expected = @[ @\"foo\", @\"bar\" ];\n\t\texpect(values).to(equal(expected));\n\t\texpect(lastError).to(beNil());\n\t\texpect(@(completed)).to(beFalsy());\n\n\t\t[boolSubject sendNext:@NO];\n\n\t\t[trueSubject sendNext:@\"baz\"];\n\t\t[falseSubject sendNext:@\"buzz\"];\n\t\t[trueSubject sendNext:@\"barfoo\"];\n\n\t\texpected = @[ @\"foo\", @\"bar\", @\"buzz\" ];\n\t\texpect(values).to(equal(expected));\n\t\texpect(lastError).to(beNil());\n\t\texpect(@(completed)).to(beFalsy());\n\n\t\t[trueSubject sendError:[NSError errorWithDomain:@\"\" code:-1 userInfo:nil]];\n\t\texpect(lastError).to(beNil());\n\n\t\t[falseSubject sendError:[NSError errorWithDomain:@\"\" code:-1 userInfo:nil]];\n\t\texpect(lastError).notTo(beNil());\n\t});\n\n\tqck_it(@\"should not send completed when only the BOOL signal completes\", ^{\n\t\t[boolSubject sendNext:@YES];\n\t\t[trueSubject sendNext:@\"foo\"];\n\t\t[boolSubject sendCompleted];\n\n\t\texpect(values).to(equal(@[ @\"foo\" ]));\n\t\texpect(@(completed)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should send completed when the BOOL signal and the latest sent signal complete\", ^{\n\t\t[boolSubject sendNext:@YES];\n\t\t[trueSubject sendNext:@\"foo\"];\n\t\t[trueSubject sendCompleted];\n\t\t[boolSubject sendCompleted];\n\n\t\texpect(values).to(equal(@[ @\"foo\" ]));\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"+interval:onScheduler: and +interval:onScheduler:withLeeway:\", ^{\n\tstatic const NSTimeInterval interval = 0.1;\n\tstatic const NSTimeInterval leeway = 0.2;\n\n\t__block void (^testTimer)(RACSignal *, NSNumber *, NSNumber *) = nil;\n\n\tqck_beforeEach(^{\n\t\ttestTimer = [^(RACSignal *timer, NSNumber *minInterval, NSNumber *leeway) {\n\t\t\t__block NSUInteger nextsReceived = 0;\n\n\t\t\tNSTimeInterval startTime = NSDate.timeIntervalSinceReferenceDate;\n\t\t\t[[timer take:3] subscribeNext:^(NSDate *date) {\n\t\t\t\t++nextsReceived;\n\n\t\t\t\tNSTimeInterval currentTime = date.timeIntervalSinceReferenceDate;\n\n\t\t\t\t// Uniformly distribute the expected interval for all\n\t\t\t\t// received values. We do this instead of saving a timestamp\n\t\t\t\t// because a delayed interval may cause the _next_ value to\n\t\t\t\t// send sooner than the interval.\n\t\t\t\tNSTimeInterval expectedMinInterval = minInterval.doubleValue * nextsReceived;\n\t\t\t\tNSTimeInterval expectedMaxInterval = expectedMinInterval + leeway.doubleValue * 3 + 0.1;\n\n\t\t\t\texpect(@(currentTime - startTime)).to(beGreaterThanOrEqualTo(@(expectedMinInterval)));\n\t\t\t\texpect(@(currentTime - startTime)).to(beLessThanOrEqualTo(@(expectedMaxInterval)));\n\t\t\t}];\n\n\t\t\texpect(@(nextsReceived)).toEventually(equal(@3));\n\t\t} copy];\n\t});\n\n\tqck_describe(@\"+interval:onScheduler:\", ^{\n\t\tqck_it(@\"should work on the main thread scheduler\", ^{\n\t\t\ttestTimer([RACSignal interval:interval onScheduler:RACScheduler.mainThreadScheduler], @(interval), @0);\n\t\t});\n\n\t\tqck_it(@\"should work on a background scheduler\", ^{\n\t\t\ttestTimer([RACSignal interval:interval onScheduler:[RACScheduler scheduler]], @(interval), @0);\n\t\t});\n\t});\n\n\tqck_describe(@\"+interval:onScheduler:withLeeway:\", ^{\n\t\tqck_it(@\"should work on the main thread scheduler\", ^{\n\t\t\ttestTimer([RACSignal interval:interval onScheduler:RACScheduler.mainThreadScheduler withLeeway:leeway], @(interval), @(leeway));\n\t\t});\n\n\t\tqck_it(@\"should work on a background scheduler\", ^{\n\t\t\ttestTimer([RACSignal interval:interval onScheduler:[RACScheduler scheduler] withLeeway:leeway], @(interval), @(leeway));\n\t\t});\n\t});\n});\n\nqck_describe(@\"-timeout:onScheduler:\", ^{\n\t__block RACSubject *subject;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACSubject subject];\n\t});\n\n\tqck_it(@\"should time out\", ^{\n\t\tRACTestScheduler *scheduler = [[RACTestScheduler alloc] init];\n\n\t\t__block NSError *receivedError = nil;\n\t\t[[subject timeout:1 onScheduler:scheduler] subscribeError:^(NSError *e) {\n\t\t\treceivedError = e;\n\t\t}];\n\n\t\texpect(receivedError).to(beNil());\n\n\t\t[scheduler stepAll];\n\t\texpect(receivedError).toEventuallyNot(beNil());\n\t\texpect(receivedError.domain).to(equal(RACSignalErrorDomain));\n\t\texpect(@(receivedError.code)).to(equal(@(RACSignalErrorTimedOut)));\n\t});\n\n\tqck_it(@\"should pass through events while not timed out\", ^{\n\t\t__block id next = nil;\n\t\t__block BOOL completed = NO;\n\t\t[[subject timeout:1 onScheduler:RACScheduler.mainThreadScheduler] subscribeNext:^(id x) {\n\t\t\tnext = x;\n\t\t} completed:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\n\t\t[subject sendNext:RACUnit.defaultUnit];\n\t\texpect(next).to(equal(RACUnit.defaultUnit));\n\n\t\t[subject sendCompleted];\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should not time out after disposal\", ^{\n\t\tRACTestScheduler *scheduler = [[RACTestScheduler alloc] init];\n\n\t\t__block NSError *receivedError = nil;\n\t\tRACDisposable *disposable = [[subject timeout:1 onScheduler:scheduler] subscribeError:^(NSError *e) {\n\t\t\treceivedError = e;\n\t\t}];\n\n\t\t[disposable dispose];\n\t\t[scheduler stepAll];\n\t\texpect(receivedError).to(beNil());\n\t});\n});\n\nqck_describe(@\"-delay:\", ^{\n\t__block RACSubject *subject;\n\t__block RACSignal *delayedSignal;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACSubject subject];\n\t\tdelayedSignal = [subject delay:0];\n\t});\n\n\tqck_it(@\"should delay nexts\", ^{\n\t\t__block id next = nil;\n\t\t[delayedSignal subscribeNext:^(id x) {\n\t\t\tnext = x;\n\t\t}];\n\n\t\t[subject sendNext:@\"foo\"];\n\t\texpect(next).to(beNil());\n\t\texpect(next).toEventually(equal(@\"foo\"));\n\t});\n\n\tqck_it(@\"should delay completed\", ^{\n\t\t__block BOOL completed = NO;\n\t\t[delayedSignal subscribeCompleted:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\n\t\t[subject sendCompleted];\n\t\texpect(@(completed)).to(beFalsy());\n\t\texpect(@(completed)).toEventually(beTruthy());\n\t});\n\n\tqck_it(@\"should not delay errors\", ^{\n\t\t__block NSError *error = nil;\n\t\t[delayedSignal subscribeError:^(NSError *e) {\n\t\t\terror = e;\n\t\t}];\n\n\t\t[subject sendError:RACSignalTestError];\n\t\texpect(error).to(equal(RACSignalTestError));\n\t});\n\n\tqck_it(@\"should cancel delayed events when disposed\", ^{\n\t\t__block id next = nil;\n\t\tRACDisposable *disposable = [delayedSignal subscribeNext:^(id x) {\n\t\t\tnext = x;\n\t\t}];\n\n\t\t[subject sendNext:@\"foo\"];\n\n\t\t__block BOOL done = NO;\n\t\t[RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{\n\t\t\tdone = YES;\n\t\t}];\n\n\t\t[disposable dispose];\n\n\t\texpect(@(done)).toEventually(beTruthy());\n\t\texpect(next).to(beNil());\n\t});\n});\n\nqck_describe(@\"-catch:\", ^{\n\tqck_it(@\"should subscribe to ensuing signal on error\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\n\t\tRACSignal *signal = [subject catch:^(NSError *error) {\n\t\t\treturn [RACSignal return:@41];\n\t\t}];\n\n\t\t__block id value = nil;\n\t\t[signal subscribeNext:^(id x) {\n\t\t\tvalue = x;\n\t\t}];\n\n\t\t[subject sendError:RACSignalTestError];\n\t\texpect(value).to(equal(@41));\n\t});\n\n\tqck_it(@\"should prevent source error from propagating\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\n\t\tRACSignal *signal = [subject catch:^(NSError *error) {\n\t\t\treturn [RACSignal empty];\n\t\t}];\n\n\t\t__block BOOL errorReceived = NO;\n\t\t[signal subscribeError:^(NSError *error) {\n\t\t\terrorReceived = YES;\n\t\t}];\n\n\t\t[subject sendError:RACSignalTestError];\n\t\texpect(@(errorReceived)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should propagate error from ensuing signal\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\n\t\tNSError *secondaryError = [NSError errorWithDomain:@\"bubs\" code:41 userInfo:nil];\n\t\tRACSignal *signal = [subject catch:^(NSError *error) {\n\t\t\treturn [RACSignal error:secondaryError];\n\t\t}];\n\n\t\t__block NSError *errorReceived = nil;\n\t\t[signal subscribeError:^(NSError *error) {\n\t\t\terrorReceived = error;\n\t\t}];\n\n\t\t[subject sendError:RACSignalTestError];\n\t\texpect(errorReceived).to(equal(secondaryError));\n\t});\n\n\tqck_it(@\"should dispose ensuing signal\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\n\t\t__block BOOL disposed = NO;\n\t\tRACSignal *signal = [subject catch:^(NSError *error) {\n\t\t\treturn [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\t\tdisposed = YES;\n\t\t\t\t}];\n\t\t\t}];\n\t\t}];\n\n\t\tRACDisposable *disposable = [signal subscribeCompleted:^{}];\n\t\t[subject sendError:RACSignalTestError];\n\t\t[disposable dispose];\n\n\t\texpect(@(disposed)).toEventually(beTruthy());\n\t});\n});\n\nqck_describe(@\"+try:\", ^{\n\t__block id value;\n\t__block NSError *receivedError;\n\n\tqck_beforeEach(^{\n\t\tvalue = nil;\n\t\treceivedError = nil;\n\t});\n\n\tqck_it(@\"should pass the value if it is non-nil\", ^{\n\t\tRACSignal *signal = [RACSignal try:^(NSError **error) {\n\t\t\treturn @\"foo\";\n\t\t}];\n\n\t\t[signal subscribeNext:^(id x) {\n\t\t\tvalue = x;\n\t\t} error:^(NSError *error) {\n\t\t\treceivedError = error;\n\t\t}];\n\n\t\texpect(value).to(equal(@\"foo\"));\n\t\texpect(receivedError).to(beNil());\n\t});\n\n\tqck_it(@\"should ignore the error if the value is non-nil\", ^{\n\t\tRACSignal *signal = [RACSignal try:^(NSError **error) {\n\t\t\tif (error != nil) *error = RACSignalTestError;\n\n\t\t\treturn @\"foo\";\n\t\t}];\n\n\t\t[signal subscribeNext:^(id x) {\n\t\t\tvalue = x;\n\t\t} error:^(NSError *error) {\n\t\t\treceivedError = error;\n\t\t}];\n\n\t\texpect(receivedError).to(beNil());\n\t\texpect(value).to(equal(@\"foo\"));\n\t});\n\n\tqck_it(@\"should send the error if the return value is nil\", ^{\n\t\tRACSignal *signal = [RACSignal try:^id(NSError **error) {\n\t\t\tif (error) *error = RACSignalTestError;\n\n\t\t\treturn nil;\n\t\t}];\n\n\t\t[signal subscribeNext:^(id x) {\n\t\t\tvalue = x;\n\t\t} error:^(NSError *error) {\n\t\t\treceivedError = error;\n\t\t}];\n\n\t\texpect(value).to(beNil());\n\t\texpect(receivedError).to(equal(RACSignalTestError));\n\t});\n});\n\nqck_describe(@\"-try:\", ^{\n\t__block RACSubject *subject;\n\t__block NSError *receivedError;\n\t__block NSMutableArray *nextValues;\n\t__block BOOL completed;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACSubject subject];\n\t\tnextValues = [NSMutableArray array];\n\t\tcompleted = NO;\n\t\treceivedError = nil;\n\n\t\t[[subject try:^(NSString *value, NSError **error) {\n\t\t\tif (value != nil) return YES;\n\n\t\t\tif (error != nil) *error = RACSignalTestError;\n\n\t\t\treturn NO;\n\t\t}] subscribeNext:^(id x) {\n\t\t\t[nextValues addObject:x];\n\t\t} error:^(NSError *error) {\n\t\t\treceivedError = error;\n\t\t} completed:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\t});\n\n\tqck_it(@\"should pass values while YES is returned from the tryBlock\", ^{\n\t\t[subject sendNext:@\"foo\"];\n\t\t[subject sendNext:@\"bar\"];\n\t\t[subject sendNext:@\"baz\"];\n\t\t[subject sendNext:@\"buzz\"];\n\t\t[subject sendCompleted];\n\n\t\tNSArray *receivedValues = [nextValues copy];\n\t\tNSArray *expectedValues = @[ @\"foo\", @\"bar\", @\"baz\", @\"buzz\" ];\n\n\t\texpect(receivedError).to(beNil());\n\t\texpect(receivedValues).to(equal(expectedValues));\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should pass values until NO is returned from the tryBlock\", ^{\n\t\t[subject sendNext:@\"foo\"];\n\t\t[subject sendNext:@\"bar\"];\n\t\t[subject sendNext:nil];\n\t\t[subject sendNext:@\"buzz\"];\n\t\t[subject sendCompleted];\n\n\t\tNSArray *receivedValues = [nextValues copy];\n\t\tNSArray *expectedValues = @[ @\"foo\", @\"bar\" ];\n\n\t\texpect(receivedError).to(equal(RACSignalTestError));\n\t\texpect(receivedValues).to(equal(expectedValues));\n\t\texpect(@(completed)).to(beFalsy());\n\t});\n});\n\nqck_describe(@\"-tryMap:\", ^{\n\t__block RACSubject *subject;\n\t__block NSError *receivedError;\n\t__block NSMutableArray *nextValues;\n\t__block BOOL completed;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACSubject subject];\n\t\tnextValues = [NSMutableArray array];\n\t\tcompleted = NO;\n\t\treceivedError = nil;\n\n\t\t[[subject tryMap:^ id (NSString *value, NSError **error) {\n\t\t\tif (value != nil) return [NSString stringWithFormat:@\"%@_a\", value];\n\n\t\t\tif (error != nil) *error = RACSignalTestError;\n\n\t\t\treturn nil;\n\t\t}] subscribeNext:^(id x) {\n\t\t\t[nextValues addObject:x];\n\t\t} error:^(NSError *error) {\n\t\t\treceivedError = error;\n\t\t} completed:^{\n\t\t\tcompleted = YES;\n\t\t}];\n\t});\n\n\tqck_it(@\"should map values with the mapBlock\", ^{\n\t\t[subject sendNext:@\"foo\"];\n\t\t[subject sendNext:@\"bar\"];\n\t\t[subject sendNext:@\"baz\"];\n\t\t[subject sendNext:@\"buzz\"];\n\t\t[subject sendCompleted];\n\n\t\tNSArray *receivedValues = [nextValues copy];\n\t\tNSArray *expectedValues = @[ @\"foo_a\", @\"bar_a\", @\"baz_a\", @\"buzz_a\" ];\n\n\t\texpect(receivedError).to(beNil());\n\t\texpect(receivedValues).to(equal(expectedValues));\n\t\texpect(@(completed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should map values with the mapBlock, until the mapBlock returns nil\", ^{\n\t\t[subject sendNext:@\"foo\"];\n\t\t[subject sendNext:@\"bar\"];\n\t\t[subject sendNext:nil];\n\t\t[subject sendNext:@\"buzz\"];\n\t\t[subject sendCompleted];\n\n\t\tNSArray *receivedValues = [nextValues copy];\n\t\tNSArray *expectedValues = @[ @\"foo_a\", @\"bar_a\" ];\n\n\t\texpect(receivedError).to(equal(RACSignalTestError));\n\t\texpect(receivedValues).to(equal(expectedValues));\n\t\texpect(@(completed)).to(beFalsy());\n\t});\n});\n\nqck_describe(@\"throttling\", ^{\n\t__block RACSubject *subject;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACSubject subject];\n\t});\n\n\tqck_describe(@\"-throttle:\", ^{\n\t\t__block RACSignal *throttledSignal;\n\n\t\tqck_beforeEach(^{\n\t\t\tthrottledSignal = [subject throttle:0];\n\t\t});\n\n\t\tqck_it(@\"should throttle nexts\", ^{\n\t\t\tNSMutableArray *valuesReceived = [NSMutableArray array];\n\t\t\t[throttledSignal subscribeNext:^(id x) {\n\t\t\t\t[valuesReceived addObject:x];\n\t\t\t}];\n\n\t\t\t[subject sendNext:@\"foo\"];\n\t\t\t[subject sendNext:@\"bar\"];\n\t\t\texpect(valuesReceived).to(equal(@[]));\n\n\t\t\tNSArray *expected = @[ @\"bar\" ];\n\t\t\texpect(valuesReceived).toEventually(equal(expected));\n\n\t\t\t[subject sendNext:@\"buzz\"];\n\t\t\texpect(valuesReceived).to(equal(expected));\n\n\t\t\texpected = @[ @\"bar\", @\"buzz\" ];\n\t\t\texpect(valuesReceived).toEventually(equal(expected));\n\t\t});\n\n\t\tqck_it(@\"should forward completed immediately\", ^{\n\t\t\t__block BOOL completed = NO;\n\t\t\t[throttledSignal subscribeCompleted:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\n\t\t\t[subject sendCompleted];\n\t\t\texpect(@(completed)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should forward errors immediately\", ^{\n\t\t\t__block NSError *error = nil;\n\t\t\t[throttledSignal subscribeError:^(NSError *e) {\n\t\t\t\terror = e;\n\t\t\t}];\n\n\t\t\t[subject sendError:RACSignalTestError];\n\t\t\texpect(error).to(equal(RACSignalTestError));\n\t\t});\n\n\t\tqck_it(@\"should cancel future nexts when disposed\", ^{\n\t\t\t__block id next = nil;\n\t\t\tRACDisposable *disposable = [throttledSignal subscribeNext:^(id x) {\n\t\t\t\tnext = x;\n\t\t\t}];\n\n\t\t\t[subject sendNext:@\"foo\"];\n\n\t\t\t__block BOOL done = NO;\n\t\t\t[RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{\n\t\t\t\tdone = YES;\n\t\t\t}];\n\n\t\t\t[disposable dispose];\n\n\t\t\texpect(@(done)).toEventually(beTruthy());\n\t\t\texpect(next).to(beNil());\n\t\t});\n\t});\n\n\tqck_describe(@\"-throttle:valuesPassingTest:\", ^{\n\t\t__block RACSignal *throttledSignal;\n\t\t__block BOOL shouldThrottle;\n\n\t\tqck_beforeEach(^{\n\t\t\tshouldThrottle = YES;\n\n\t\t\t__block id value = nil;\n\t\t\tthrottledSignal = [[subject\n\t\t\t\tdoNext:^(id x) {\n\t\t\t\t\tvalue = x;\n\t\t\t\t}]\n\t\t\t\tthrottle:0 valuesPassingTest:^(id x) {\n\t\t\t\t\t// Make sure that we're given the latest value.\n\t\t\t\t\texpect(x).to(beIdenticalTo(value));\n\n\t\t\t\t\treturn shouldThrottle;\n\t\t\t\t}];\n\n\t\t\texpect(throttledSignal).notTo(beNil());\n\t\t});\n\n\t\tqck_describe(@\"nexts\", ^{\n\t\t\t__block NSMutableArray *valuesReceived;\n\t\t\t__block NSMutableArray *expected;\n\n\t\t\tqck_beforeEach(^{\n\t\t\t\texpected = [[NSMutableArray alloc] init];\n\t\t\t\tvaluesReceived = [[NSMutableArray alloc] init];\n\n\t\t\t\t[throttledSignal subscribeNext:^(id x) {\n\t\t\t\t\t[valuesReceived addObject:x];\n\t\t\t\t}];\n\t\t\t});\n\n\t\t\tqck_it(@\"should forward unthrottled values immediately\", ^{\n\t\t\t\tshouldThrottle = NO;\n\t\t\t\t[subject sendNext:@\"foo\"];\n\n\t\t\t\t[expected addObject:@\"foo\"];\n\t\t\t\texpect(valuesReceived).to(equal(expected));\n\t\t\t});\n\n\t\t\tqck_it(@\"should delay throttled values\", ^{\n\t\t\t\t[subject sendNext:@\"bar\"];\n\t\t\t\texpect(valuesReceived).to(equal(expected));\n\n\t\t\t\t[expected addObject:@\"bar\"];\n\t\t\t\texpect(valuesReceived).toEventually(equal(expected));\n\t\t\t});\n\n\t\t\tqck_it(@\"should drop buffered values when a throttled value arrives\", ^{\n\t\t\t\t[subject sendNext:@\"foo\"];\n\t\t\t\t[subject sendNext:@\"bar\"];\n\t\t\t\t[subject sendNext:@\"buzz\"];\n\t\t\t\texpect(valuesReceived).to(equal(expected));\n\n\t\t\t\t[expected addObject:@\"buzz\"];\n\t\t\t\texpect(valuesReceived).toEventually(equal(expected));\n\t\t\t});\n\n\t\t\tqck_it(@\"should drop buffered values when an immediate value arrives\", ^{\n\t\t\t\t[subject sendNext:@\"foo\"];\n\t\t\t\t[subject sendNext:@\"bar\"];\n\n\t\t\t\tshouldThrottle = NO;\n\t\t\t\t[subject sendNext:@\"buzz\"];\n\t\t\t\t[expected addObject:@\"buzz\"];\n\t\t\t\texpect(valuesReceived).to(equal(expected));\n\n\t\t\t\t// Make sure that nothing weird happens when sending another\n\t\t\t\t// throttled value.\n\t\t\t\tshouldThrottle = YES;\n\t\t\t\t[subject sendNext:@\"baz\"];\n\t\t\t\texpect(valuesReceived).to(equal(expected));\n\n\t\t\t\t[expected addObject:@\"baz\"];\n\t\t\t\texpect(valuesReceived).toEventually(equal(expected));\n\t\t\t});\n\n\t\t\tqck_it(@\"should not be resent upon completion\", ^{\n\t\t\t\t[subject sendNext:@\"bar\"];\n\t\t\t\t[expected addObject:@\"bar\"];\n\t\t\t\texpect(valuesReceived).toEventually(equal(expected));\n\n\t\t\t\t[subject sendCompleted];\n\t\t\t\texpect(valuesReceived).to(equal(expected));\n\t\t\t});\n\t\t});\n\n\t\tqck_it(@\"should forward completed immediately\", ^{\n\t\t\t__block BOOL completed = NO;\n\t\t\t[throttledSignal subscribeCompleted:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\n\t\t\t[subject sendCompleted];\n\t\t\texpect(@(completed)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should forward errors immediately\", ^{\n\t\t\t__block NSError *error = nil;\n\t\t\t[throttledSignal subscribeError:^(NSError *e) {\n\t\t\t\terror = e;\n\t\t\t}];\n\n\t\t\t[subject sendError:RACSignalTestError];\n\t\t\texpect(error).to(equal(RACSignalTestError));\n\t\t});\n\n\t\tqck_it(@\"should cancel future nexts when disposed\", ^{\n\t\t\t__block id next = nil;\n\t\t\tRACDisposable *disposable = [throttledSignal subscribeNext:^(id x) {\n\t\t\t\tnext = x;\n\t\t\t}];\n\n\t\t\t[subject sendNext:@\"foo\"];\n\n\t\t\t__block BOOL done = NO;\n\t\t\t[RACScheduler.mainThreadScheduler after:[NSDate date] schedule:^{\n\t\t\t\tdone = YES;\n\t\t\t}];\n\n\t\t\t[disposable dispose];\n\n\t\t\texpect(@(done)).toEventually(beTruthy());\n\t\t\texpect(next).to(beNil());\n\t\t});\n\t});\n});\n\nqck_describe(@\"-then:\", ^{\n\tqck_it(@\"should continue onto returned signal\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\n\t\t__block id value = nil;\n\t\t[[subject then:^{\n\t\t\treturn [RACSignal return:@2];\n\t\t}] subscribeNext:^(id x) {\n\t\t\tvalue = x;\n\t\t}];\n\n\t\t[subject sendNext:@1];\n\n\t\t// The value shouldn't change until the first signal completes.\n\t\texpect(value).to(beNil());\n\n\t\t[subject sendCompleted];\n\n\t\texpect(value).to(equal(@2));\n\t});\n\n\tqck_it(@\"should sequence even if no next value is sent\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\n\t\t__block id value = nil;\n\t\t[[subject then:^{\n\t\t\treturn [RACSignal return:RACUnit.defaultUnit];\n\t\t}] subscribeNext:^(id x) {\n\t\t\tvalue = x;\n\t\t}];\n\n\t\t[subject sendCompleted];\n\n\t\texpect(value).to(equal(RACUnit.defaultUnit));\n\t});\n});\n\nqck_describe(@\"-sequence\", ^{\n\tRACSignal *signal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t[subscriber sendNext:@1];\n\t\t[subscriber sendNext:@2];\n\t\t[subscriber sendNext:@3];\n\t\t[subscriber sendNext:@4];\n\t\t[subscriber sendCompleted];\n\t\treturn nil;\n\t}];\n\n\tqck_itBehavesLike(RACSequenceExamples, ^{\n\t\treturn @{\n\t\t\tRACSequenceExampleSequence: signal.sequence,\n\t\t\tRACSequenceExampleExpectedValues: @[ @1, @2, @3, @4 ]\n\t\t};\n\t});\n});\n\nqck_it(@\"should complete take: even if the original signal doesn't\", ^{\n\tRACSignal *sendOne = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t[subscriber sendNext:RACUnit.defaultUnit];\n\t\treturn nil;\n\t}];\n\n\t__block id value = nil;\n\t__block BOOL completed = NO;\n\t[[sendOne take:1] subscribeNext:^(id received) {\n\t\tvalue = received;\n\t} completed:^{\n\t\tcompleted = YES;\n\t}];\n\n\texpect(value).to(equal(RACUnit.defaultUnit));\n\texpect(@(completed)).to(beTruthy());\n});\n\nqck_it(@\"should complete take: even if the signal is recursive\", ^{\n\tRACSubject *subject = [RACSubject subject];\n\tconst NSUInteger number = 3;\n\tconst NSUInteger guard = number + 1;\n\n\tNSMutableArray *values = NSMutableArray.array;\n\t__block BOOL completed = NO;\n\n\t[[subject take:number] subscribeNext:^(NSNumber* received) {\n\t\t[values addObject:received];\n\t\tif (values.count >= guard) {\n\t\t\t[subject sendError:RACSignalTestError];\n\t\t}\n\t\t[subject sendNext:@(received.integerValue + 1)];\n\t} completed:^{\n\t\tcompleted = YES;\n\t}];\n\t[subject sendNext:@0];\n\n\tNSMutableArray* expectedValues = [NSMutableArray arrayWithCapacity:number];\n\tfor (NSUInteger i = 0 ; i < number ; ++i) {\n\t\t[expectedValues addObject:@(i)];\n\t}\n\n\texpect(values).to(equal(expectedValues));\n\texpect(@(completed)).to(beTruthy());\n});\n\nqck_describe(@\"+zip:\", ^{\n\t__block RACSubject *subject1 = nil;\n\t__block RACSubject *subject2 = nil;\n\t__block BOOL hasSentError = NO;\n\t__block BOOL hasSentCompleted = NO;\n\t__block RACDisposable *disposable = nil;\n\t__block void (^send2NextAndErrorTo1)(void) = nil;\n\t__block void (^send3NextAndErrorTo1)(void) = nil;\n\t__block void (^send2NextAndCompletedTo2)(void) = nil;\n\t__block void (^send3NextAndCompletedTo2)(void) = nil;\n\n\tqck_beforeEach(^{\n\t\tsend2NextAndErrorTo1 = [^{\n\t\t\t[subject1 sendNext:@1];\n\t\t\t[subject1 sendNext:@2];\n\t\t\t[subject1 sendError:RACSignalTestError];\n\t\t} copy];\n\t\tsend3NextAndErrorTo1 = [^{\n\t\t\t[subject1 sendNext:@1];\n\t\t\t[subject1 sendNext:@2];\n\t\t\t[subject1 sendNext:@3];\n\t\t\t[subject1 sendError:RACSignalTestError];\n\t\t} copy];\n\t\tsend2NextAndCompletedTo2 = [^{\n\t\t\t[subject2 sendNext:@1];\n\t\t\t[subject2 sendNext:@2];\n\t\t\t[subject2 sendCompleted];\n\t\t} copy];\n\t\tsend3NextAndCompletedTo2 = [^{\n\t\t\t[subject2 sendNext:@1];\n\t\t\t[subject2 sendNext:@2];\n\t\t\t[subject2 sendNext:@3];\n\t\t\t[subject2 sendCompleted];\n\t\t} copy];\n\t\tsubject1 = [RACSubject subject];\n\t\tsubject2 = [RACSubject subject];\n\t\thasSentError = NO;\n\t\thasSentCompleted = NO;\n\t\tdisposable = [[RACSignal zip:@[ subject1, subject2 ]] subscribeError:^(NSError *error) {\n\t\t\thasSentError = YES;\n\t\t} completed:^{\n\t\t\thasSentCompleted = YES;\n\t\t}];\n\t});\n\n\tqck_afterEach(^{\n\t\t[disposable dispose];\n\t});\n\n\tqck_it(@\"should complete as soon as no new zipped values are possible\", ^{\n\t\t[subject1 sendNext:@1];\n\t\t[subject2 sendNext:@1];\n\t\texpect(@(hasSentCompleted)).to(beFalsy());\n\n\t\t[subject1 sendNext:@2];\n\t\t[subject1 sendCompleted];\n\t\texpect(@(hasSentCompleted)).to(beFalsy());\n\n\t\t[subject2 sendNext:@2];\n\t\texpect(@(hasSentCompleted)).to(beTruthy());\n\t});\n\n\tqck_it(@\"outcome should not be dependent on order of signals\", ^{\n\t\t[subject2 sendCompleted];\n\t\texpect(@(hasSentCompleted)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should forward errors sent earlier than (time-wise) and before (position-wise) a complete\", ^{\n\t\tsend2NextAndErrorTo1();\n\t\tsend3NextAndCompletedTo2();\n\t\texpect(@(hasSentError)).to(beTruthy());\n\t\texpect(@(hasSentCompleted)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should forward errors sent earlier than (time-wise) and after (position-wise) a complete\", ^{\n\t\tsend3NextAndErrorTo1();\n\t\tsend2NextAndCompletedTo2();\n\t\texpect(@(hasSentError)).to(beTruthy());\n\t\texpect(@(hasSentCompleted)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should forward errors sent later than (time-wise) and before (position-wise) a complete\", ^{\n\t\tsend3NextAndCompletedTo2();\n\t\tsend2NextAndErrorTo1();\n\t\texpect(@(hasSentError)).to(beTruthy());\n\t\texpect(@(hasSentCompleted)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should ignore errors sent later than (time-wise) and after (position-wise) a complete\", ^{\n\t\tsend2NextAndCompletedTo2();\n\t\tsend3NextAndErrorTo1();\n\t\texpect(@(hasSentError)).to(beFalsy());\n\t\texpect(@(hasSentCompleted)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should handle signals sending values unevenly\", ^{\n\t\t__block NSError *receivedError = nil;\n\t\t__block BOOL hasCompleted = NO;\n\n\t\tRACSubject *a = [RACSubject subject];\n\t\tRACSubject *b = [RACSubject subject];\n\t\tRACSubject *c = [RACSubject subject];\n\n\t\tNSMutableArray *receivedValues = NSMutableArray.array;\n\t\tNSArray *expectedValues = nil;\n\n\t\t[[RACSignal zip:@[ a, b, c ] reduce:^(NSNumber *a, NSNumber *b, NSNumber *c) {\n\t\t\treturn [NSString stringWithFormat:@\"%@%@%@\", a, b, c];\n\t\t}] subscribeNext:^(id x) {\n\t\t\t[receivedValues addObject:x];\n\t\t} error:^(NSError *error) {\n\t\t\treceivedError = error;\n\t\t} completed:^{\n\t\t\thasCompleted = YES;\n\t\t}];\n\n\t\t[a sendNext:@1];\n\t\t[a sendNext:@2];\n\t\t[a sendNext:@3];\n\n\t\t[b sendNext:@1];\n\n\t\t[c sendNext:@1];\n\t\t[c sendNext:@2];\n\n\t\t// a: [===......]\n\t\t// b: [=........]\n\t\t// c: [==.......]\n\n\t\texpectedValues = @[ @\"111\" ];\n\t\texpect(receivedValues).to(equal(expectedValues));\n\t\texpect(receivedError).to(beNil());\n\t\texpect(@(hasCompleted)).to(beFalsy());\n\n\t\t[b sendNext:@2];\n\t\t[b sendNext:@3];\n\t\t[b sendNext:@4];\n\t\t[b sendCompleted];\n\n\t\t// a: [===......]\n\t\t// b: [====C....]\n\t\t// c: [==.......]\n\n\t\texpectedValues = @[ @\"111\", @\"222\" ];\n\t\texpect(receivedValues).to(equal(expectedValues));\n\t\texpect(receivedError).to(beNil());\n\t\texpect(@(hasCompleted)).to(beFalsy());\n\n\t\t[c sendNext:@3];\n\t\t[c sendNext:@4];\n\t\t[c sendNext:@5];\n\t\t[c sendError:RACSignalTestError];\n\n\t\t// a: [===......]\n\t\t// b: [====C....]\n\t\t// c: [=====E...]\n\n\t\texpectedValues = @[ @\"111\", @\"222\", @\"333\" ];\n\t\texpect(receivedValues).to(equal(expectedValues));\n\t\texpect(receivedError).to(equal(RACSignalTestError));\n\t\texpect(@(hasCompleted)).to(beFalsy());\n\n\t\t[a sendNext:@4];\n\t\t[a sendNext:@5];\n\t\t[a sendNext:@6];\n\t\t[a sendNext:@7];\n\n\t\t// a: [=======..]\n\t\t// b: [====C....]\n\t\t// c: [=====E...]\n\n\t\texpectedValues = @[ @\"111\", @\"222\", @\"333\" ];\n\t\texpect(receivedValues).to(equal(expectedValues));\n\t\texpect(receivedError).to(equal(RACSignalTestError));\n\t\texpect(@(hasCompleted)).to(beFalsy());\n\t});\n\n\tqck_it(@\"should handle multiples of the same side-effecting signal\", ^{\n\t\t__block NSUInteger counter = 0;\n\t\tRACSignal *sideEffectingSignal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\t++counter;\n\t\t\t[subscriber sendNext:@1];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\t\tRACSignal *combined = [RACSignal zip:@[ sideEffectingSignal, sideEffectingSignal ] reduce:^ NSString * (id x, id y) {\n\t\t\treturn [NSString stringWithFormat:@\"%@%@\", x, y];\n\t\t}];\n\t\tNSMutableArray *receivedValues = NSMutableArray.array;\n\n\t\texpect(@(counter)).to(equal(@0));\n\n\t\t[combined subscribeNext:^(id x) {\n\t\t\t[receivedValues addObject:x];\n\t\t}];\n\n\t\texpect(@(counter)).to(equal(@2));\n\t\texpect(receivedValues).to(equal(@[ @\"11\" ]));\n\t});\n});\n\nqck_describe(@\"-sample:\", ^{\n\tqck_it(@\"should send the latest value when the sampler signal fires\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\tRACSubject *sampleSubject = [RACSubject subject];\n\t\tRACSignal *sampled = [subject sample:sampleSubject];\n\t\tNSMutableArray *values = [NSMutableArray array];\n\t\t[sampled subscribeNext:^(id x) {\n\t\t\t[values addObject:x];\n\t\t}];\n\n\t\t[sampleSubject sendNext:RACUnit.defaultUnit];\n\t\texpect(values).to(equal(@[]));\n\n\t\t[subject sendNext:@1];\n\t\t[subject sendNext:@2];\n\t\texpect(values).to(equal(@[]));\n\n\t\t[sampleSubject sendNext:RACUnit.defaultUnit];\n\t\tNSArray *expected = @[ @2 ];\n\t\texpect(values).to(equal(expected));\n\n\t\t[subject sendNext:@3];\n\t\texpect(values).to(equal(expected));\n\n\t\t[sampleSubject sendNext:RACUnit.defaultUnit];\n\t\texpected = @[ @2, @3 ];\n\t\texpect(values).to(equal(expected));\n\n\t\t[sampleSubject sendNext:RACUnit.defaultUnit];\n\t\texpected = @[ @2, @3, @3 ];\n\t\texpect(values).to(equal(expected));\n\t});\n});\n\nqck_describe(@\"-collect\", ^{\n\t__block RACSubject *subject;\n\t__block RACSignal *collected;\n\n\t__block id value;\n\t__block BOOL hasCompleted;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACSubject subject];\n\t\tcollected = [subject collect];\n\n\t\tvalue = nil;\n\t\thasCompleted = NO;\n\n\t\t[collected subscribeNext:^(id x) {\n\t\t\tvalue = x;\n\t\t} completed:^{\n\t\t\thasCompleted = YES;\n\t\t}];\n\t});\n\n\tqck_it(@\"should send a single array when the original signal completes\", ^{\n\t\tNSArray *expected = @[ @1, @2, @3 ];\n\n\t\t[subject sendNext:@1];\n\t\t[subject sendNext:@2];\n\t\t[subject sendNext:@3];\n\t\texpect(value).to(beNil());\n\n\t\t[subject sendCompleted];\n\t\texpect(value).to(equal(expected));\n\t\texpect(@(hasCompleted)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should add NSNull to an array for nil values\", ^{\n\t\tNSArray *expected = @[ NSNull.null, @1, NSNull.null ];\n\n\t\t[subject sendNext:nil];\n\t\t[subject sendNext:@1];\n\t\t[subject sendNext:nil];\n\t\texpect(value).to(beNil());\n\n\t\t[subject sendCompleted];\n\t\texpect(value).to(equal(expected));\n\t\texpect(@(hasCompleted)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"-bufferWithTime:onScheduler:\", ^{\n\t__block RACTestScheduler *scheduler;\n\n\t__block RACSubject *input;\n\t__block RACSignal *bufferedInput;\n\t__block RACTuple *latestValue;\n\n\tqck_beforeEach(^{\n\t\tscheduler = [[RACTestScheduler alloc] init];\n\n\t\tinput = [RACSubject subject];\n\t\tbufferedInput = [input bufferWithTime:1 onScheduler:scheduler];\n\t\tlatestValue = nil;\n\n\t\t[bufferedInput subscribeNext:^(RACTuple *x) {\n\t\t\tlatestValue = x;\n\t\t}];\n\t});\n\n\tqck_it(@\"should buffer nexts\", ^{\n\t\t[input sendNext:@1];\n\t\t[input sendNext:@2];\n\n\t\t[scheduler stepAll];\n\t\texpect(latestValue).to(equal(RACTuplePack(@1, @2)));\n\n\t\t[input sendNext:@3];\n\t\t[input sendNext:@4];\n\n\t\t[scheduler stepAll];\n\t\texpect(latestValue).to(equal(RACTuplePack(@3, @4)));\n\t});\n\n\tqck_it(@\"should not perform buffering until a value is sent\", ^{\n\t\t[input sendNext:@1];\n\t\t[input sendNext:@2];\n\t\t[scheduler stepAll];\n\t\texpect(latestValue).to(equal(RACTuplePack(@1, @2)));\n\n\t\t[scheduler stepAll];\n\t\texpect(latestValue).to(equal(RACTuplePack(@1, @2)));\n\n\t\t[input sendNext:@3];\n\t\t[input sendNext:@4];\n\t\t[scheduler stepAll];\n\t\texpect(latestValue).to(equal(RACTuplePack(@3, @4)));\n\t});\n\n\tqck_it(@\"should flush any buffered nexts upon completion\", ^{\n\t\t[input sendNext:@1];\n\t\t[input sendCompleted];\n\t\t[scheduler stepAll];\n\t\texpect(latestValue).to(equal(RACTuplePack(@1)));\n\t});\n\n\tqck_it(@\"should support NSNull values\", ^{\n\t\t[input sendNext:NSNull.null];\n\t\t[scheduler stepAll];\n\t\texpect(latestValue).to(equal(RACTuplePack(NSNull.null)));\n\t});\n\n\tqck_it(@\"should buffer nil values\", ^{\n\t\t[input sendNext:nil];\n\t\t[scheduler stepAll];\n\t\texpect(latestValue).to(equal(RACTuplePack(nil)));\n\t});\n});\n\nqck_describe(@\"-concat\", ^{\n\t__block RACSubject *subject;\n\n\t__block RACSignal *oneSignal;\n\t__block RACSignal *twoSignal;\n\t__block RACSignal *threeSignal;\n\n\t__block RACSignal *errorSignal;\n\t__block RACSignal *completedSignal;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACReplaySubject subject];\n\n\t\toneSignal = [RACSignal return:@1];\n\t\ttwoSignal = [RACSignal return:@2];\n\t\tthreeSignal = [RACSignal return:@3];\n\n\t\terrorSignal = [RACSignal error:RACSignalTestError];\n\t\tcompletedSignal = RACSignal.empty;\n\t});\n\n\tqck_it(@\"should concatenate the values of inner signals\", ^{\n\t\t[subject sendNext:oneSignal];\n\t\t[subject sendNext:twoSignal];\n\t\t[subject sendNext:completedSignal];\n\t\t[subject sendNext:threeSignal];\n\n\t\tNSMutableArray *values = [NSMutableArray array];\n\t\t[[subject concat] subscribeNext:^(id x) {\n\t\t\t[values addObject:x];\n\t\t}];\n\n\t\tNSArray *expected = @[ @1, @2, @3 ];\n\t\texpect(values).to(equal(expected));\n\t});\n\n\tqck_it(@\"should complete only after all signals complete\", ^{\n\t\tRACReplaySubject *valuesSubject = [RACReplaySubject subject];\n\n\t\t[subject sendNext:valuesSubject];\n\t\t[subject sendCompleted];\n\n\t\t[valuesSubject sendNext:@1];\n\t\t[valuesSubject sendNext:@2];\n\t\t[valuesSubject sendCompleted];\n\n\t\tNSArray *expected = @[ @1, @2 ];\n\t\texpect([[subject concat] toArray]).to(equal(expected));\n\t});\n\n\tqck_it(@\"should pass through errors\", ^{\n\t\t[subject sendNext:errorSignal];\n\n\t\tNSError *error = nil;\n\t\t[[subject concat] firstOrDefault:nil success:NULL error:&error];\n\t\texpect(error).to(equal(RACSignalTestError));\n\t});\n\n\tqck_it(@\"should concat signals sent later\", ^{\n\t\t[subject sendNext:oneSignal];\n\n\t\tNSMutableArray *values = [NSMutableArray array];\n\t\t[[subject concat] subscribeNext:^(id x) {\n\t\t\t[values addObject:x];\n\t\t}];\n\n\t\tNSArray *expected = @[ @1 ];\n\t\texpect(values).to(equal(expected));\n\n\t\t[subject sendNext:[twoSignal delay:0]];\n\n\t\texpected = @[ @1, @2 ];\n\t\texpect(values).toEventually(equal(expected));\n\n\t\t[subject sendNext:threeSignal];\n\n\t\texpected = @[ @1, @2, @3 ];\n\t\texpect(values).to(equal(expected));\n\t});\n\n\tqck_it(@\"should dispose the current signal\", ^{\n\t\t__block BOOL disposed = NO;\n\t\t__block id<RACSubscriber> innerSubscriber = nil;\n\t\tRACSignal *innerSignal = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t// Keep the subscriber alive so it doesn't trigger disposal on dealloc\n\t\t\tinnerSubscriber = subscriber;\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\tdisposed = YES;\n\t\t\t}];\n\t\t}];\n\n\t\tRACDisposable *concatDisposable = [[subject concat] subscribeCompleted:^{}];\n\n\t\t[subject sendNext:innerSignal];\n\t\texpect(@(disposed)).notTo(beTruthy());\n\n\t\t[concatDisposable dispose];\n\t\texpect(@(disposed)).to(beTruthy());\n\t});\n\n\tqck_it(@\"should dispose later signals\", ^{\n\t\t__block BOOL disposed = NO;\n\t\t__block id<RACSubscriber> laterSubscriber = nil;\n\t\tRACSignal *laterSignal = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t// Keep the subscriber alive so it doesn't trigger disposal on dealloc\n\t\t\tlaterSubscriber = subscriber;\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\tdisposed = YES;\n\t\t\t}];\n\t\t}];\n\n\t\tRACSubject *firstSignal = [RACSubject subject];\n\t\tRACSignal *outerSignal = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:firstSignal];\n\t\t\t[subscriber sendNext:laterSignal];\n\t\t\treturn nil;\n\t\t}];\n\n\t\tRACDisposable *concatDisposable = [[outerSignal concat] subscribeCompleted:^{}];\n\n\t\t[firstSignal sendCompleted];\n\t\texpect(@(disposed)).notTo(beTruthy());\n\n\t\t[concatDisposable dispose];\n\t\texpect(@(disposed)).to(beTruthy());\n\t});\n});\n\nqck_describe(@\"-initially:\", ^{\n\t__block RACSubject *subject;\n\n\t__block NSUInteger initiallyInvokedCount;\n\t__block RACSignal *signal;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACSubject subject];\n\n\t\tinitiallyInvokedCount = 0;\n\t\tsignal = [subject initially:^{\n\t\t\t++initiallyInvokedCount;\n\t\t}];\n\t});\n\n\tqck_it(@\"should not run without a subscription\", ^{\n\t\t[subject sendCompleted];\n\t\texpect(@(initiallyInvokedCount)).to(equal(@0));\n\t});\n\n\tqck_it(@\"should run on subscription\", ^{\n\t\t[signal subscribe:[RACSubscriber new]];\n\t\texpect(@(initiallyInvokedCount)).to(equal(@1));\n\t});\n\n\tqck_it(@\"should re-run for each subscription\", ^{\n\t\t[signal subscribe:[RACSubscriber new]];\n\t\t[signal subscribe:[RACSubscriber new]];\n\t\texpect(@(initiallyInvokedCount)).to(equal(@2));\n\t});\n});\n\nqck_describe(@\"-finally:\", ^{\n\t__block RACSubject *subject;\n\n\t__block BOOL finallyInvoked;\n\t__block RACSignal *signal;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACSubject subject];\n\n\t\tfinallyInvoked = NO;\n\t\tsignal = [subject finally:^{\n\t\t\tfinallyInvoked = YES;\n\t\t}];\n\t});\n\n\tqck_it(@\"should not run finally without a subscription\", ^{\n\t\t[subject sendCompleted];\n\t\texpect(@(finallyInvoked)).to(beFalsy());\n\t});\n\n\tqck_describe(@\"with a subscription\", ^{\n\t\t__block RACDisposable *disposable;\n\n\t\tqck_beforeEach(^{\n\t\t\tdisposable = [signal subscribeCompleted:^{}];\n\t\t});\n\n\t\tqck_afterEach(^{\n\t\t\t[disposable dispose];\n\t\t});\n\n\t\tqck_it(@\"should not run finally upon next\", ^{\n\t\t\t[subject sendNext:RACUnit.defaultUnit];\n\t\t\texpect(@(finallyInvoked)).to(beFalsy());\n\t\t});\n\n\t\tqck_it(@\"should run finally upon completed\", ^{\n\t\t\t[subject sendCompleted];\n\t\t\texpect(@(finallyInvoked)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should run finally upon error\", ^{\n\t\t\t[subject sendError:nil];\n\t\t\texpect(@(finallyInvoked)).to(beTruthy());\n\t\t});\n\t});\n});\n\nqck_describe(@\"-ignoreValues\", ^{\n\t__block RACSubject *subject;\n\n\t__block BOOL gotNext;\n\t__block BOOL gotCompleted;\n\t__block NSError *receivedError;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACSubject subject];\n\n\t\tgotNext = NO;\n\t\tgotCompleted = NO;\n\t\treceivedError = nil;\n\n\t\t[[subject ignoreValues] subscribeNext:^(id _) {\n\t\t\tgotNext = YES;\n\t\t} error:^(NSError *error) {\n\t\t\treceivedError = error;\n\t\t} completed:^{\n\t\t\tgotCompleted = YES;\n\t\t}];\n\t});\n\n\tqck_it(@\"should skip nexts and pass through completed\", ^{\n\t\t[subject sendNext:RACUnit.defaultUnit];\n\t\t[subject sendCompleted];\n\n\t\texpect(@(gotNext)).to(beFalsy());\n\t\texpect(@(gotCompleted)).to(beTruthy());\n\t\texpect(receivedError).to(beNil());\n\t});\n\n\tqck_it(@\"should skip nexts and pass through errors\", ^{\n\t\t[subject sendNext:RACUnit.defaultUnit];\n\t\t[subject sendError:RACSignalTestError];\n\n\t\texpect(@(gotNext)).to(beFalsy());\n\t\texpect(@(gotCompleted)).to(beFalsy());\n\t\texpect(receivedError).to(equal(RACSignalTestError));\n\t});\n});\n\nqck_describe(@\"-materialize\", ^{\n\tqck_it(@\"should convert nexts and completed into RACEvents\", ^{\n\t\tNSArray *events = [[[RACSignal return:RACUnit.defaultUnit] materialize] toArray];\n\t\tNSArray *expected = @[\n\t\t\t[RACEvent eventWithValue:RACUnit.defaultUnit],\n\t\t\tRACEvent.completedEvent\n\t\t];\n\n\t\texpect(events).to(equal(expected));\n\t});\n\n\tqck_it(@\"should convert errors into RACEvents and complete\", ^{\n\t\tNSArray *events = [[[RACSignal error:RACSignalTestError] materialize] toArray];\n\t\tNSArray *expected = @[ [RACEvent eventWithError:RACSignalTestError] ];\n\t\texpect(events).to(equal(expected));\n\t});\n});\n\nqck_describe(@\"-dematerialize\", ^{\n\tqck_it(@\"should convert nexts from RACEvents\", ^{\n\t\tRACSignal *events = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:[RACEvent eventWithValue:@1]];\n\t\t\t[subscriber sendNext:[RACEvent eventWithValue:@2]];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\n\t\tNSArray *expected = @[ @1, @2 ];\n\t\texpect([[events dematerialize] toArray]).to(equal(expected));\n\t});\n\n\tqck_it(@\"should convert completed from a RACEvent\", ^{\n\t\tRACSignal *events = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:[RACEvent eventWithValue:@1]];\n\t\t\t[subscriber sendNext:RACEvent.completedEvent];\n\t\t\t[subscriber sendNext:[RACEvent eventWithValue:@2]];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\n\t\tNSArray *expected = @[ @1 ];\n\t\texpect([[events dematerialize] toArray]).to(equal(expected));\n\t});\n\n\tqck_it(@\"should convert error from a RACEvent\", ^{\n\t\tRACSignal *events = [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t[subscriber sendNext:[RACEvent eventWithError:RACSignalTestError]];\n\t\t\t[subscriber sendNext:[RACEvent eventWithValue:@1]];\n\t\t\t[subscriber sendCompleted];\n\t\t\treturn nil;\n\t\t}];\n\n\t\t__block NSError *error = nil;\n\t\texpect([[events dematerialize] firstOrDefault:nil success:NULL error:&error]).to(beNil());\n\t\texpect(error).to(equal(RACSignalTestError));\n\t});\n});\n\nqck_describe(@\"-not\", ^{\n\tqck_it(@\"should invert every BOOL sent\", ^{\n\t\tRACSubject *subject = [RACReplaySubject subject];\n\t\t[subject sendNext:@NO];\n\t\t[subject sendNext:@YES];\n\t\t[subject sendCompleted];\n\t\tNSArray *results = [[subject not] toArray];\n\t\tNSArray *expected = @[ @YES, @NO ];\n\t\texpect(results).to(equal(expected));\n\t});\n});\n\nqck_describe(@\"-and\", ^{\n\tqck_it(@\"should return YES if all YES values are sent\", ^{\n\t\tRACSubject *subject = [RACReplaySubject subject];\n\n\t\t[subject sendNext:RACTuplePack(@YES, @NO, @YES)];\n\t\t[subject sendNext:RACTuplePack(@NO, @NO, @NO)];\n\t\t[subject sendNext:RACTuplePack(@YES, @YES, @YES)];\n\t\t[subject sendCompleted];\n\n\t\tNSArray *results = [[subject and] toArray];\n\t\tNSArray *expected = @[ @NO, @NO, @YES ];\n\n\t\texpect(results).to(equal(expected));\n\t});\n});\n\nqck_describe(@\"-or\", ^{\n\tqck_it(@\"should return YES for any YES values sent\", ^{\n\t\tRACSubject *subject = [RACReplaySubject subject];\n\n\t\t[subject sendNext:RACTuplePack(@YES, @NO, @YES)];\n\t\t[subject sendNext:RACTuplePack(@NO, @NO, @NO)];\n\t\t[subject sendCompleted];\n\n\t\tNSArray *results = [[subject or] toArray];\n\t\tNSArray *expected = @[ @YES, @NO ];\n\n\t\texpect(results).to(equal(expected));\n\t});\n});\n\nqck_describe(@\"-groupBy:\", ^{\n\tqck_it(@\"should send completed to all grouped signals.\", ^{\n\t\tRACSubject *subject = [RACReplaySubject subject];\n\n\t\t__block NSUInteger groupedSignalCount = 0;\n\t\t__block NSUInteger completedGroupedSignalCount = 0;\n\t\t[[subject groupBy:^(NSNumber *number) {\n\t\t\treturn @(floorf(number.floatValue));\n\t\t}] subscribeNext:^(RACGroupedSignal *groupedSignal) {\n\t\t\t++groupedSignalCount;\n\n\t\t\t[groupedSignal subscribeCompleted:^{\n\t\t\t\t++completedGroupedSignalCount;\n\t\t\t}];\n\t\t}];\n\n\t\t[subject sendNext:@1];\n\t\t[subject sendNext:@2];\n\t\t[subject sendCompleted];\n\n\t\texpect(@(completedGroupedSignalCount)).to(equal(@(groupedSignalCount)));\n\t});\n\n\tqck_it(@\"should send error to all grouped signals.\", ^{\n\t\tRACSubject *subject = [RACReplaySubject subject];\n\n\t\t__block NSUInteger groupedSignalCount = 0;\n\t\t__block NSUInteger erroneousGroupedSignalCount = 0;\n\t\t[[subject groupBy:^(NSNumber *number) {\n\t\t\treturn @(floorf(number.floatValue));\n\t\t}] subscribeNext:^(RACGroupedSignal *groupedSignal) {\n\t\t\t++groupedSignalCount;\n\n\t\t\t[groupedSignal subscribeError:^(NSError *error) {\n\t\t\t\t++erroneousGroupedSignalCount;\n\n\t\t\t\texpect(error.domain).to(equal(@\"TestDomain\"));\n\t\t\t\texpect(@(error.code)).to(equal(@123));\n\t\t\t}];\n\t\t}];\n\n\t\t[subject sendNext:@1];\n\t\t[subject sendNext:@2];\n\t\t[subject sendError:[NSError errorWithDomain:@\"TestDomain\" code:123 userInfo:nil]];\n\n\t\texpect(@(erroneousGroupedSignalCount)).to(equal(@(groupedSignalCount)));\n\t});\n\n\n\tqck_it(@\"should send completed in the order grouped signals were created.\", ^{\n\t\tRACSubject *subject = [RACReplaySubject subject];\n\n\t\tNSMutableArray *startedSignals = [NSMutableArray array];\n\t\tNSMutableArray *completedSignals = [NSMutableArray array];\n\t\t[[subject groupBy:^(NSNumber *number) {\n\t\t\treturn @(number.integerValue % 4);\n\t\t}] subscribeNext:^(RACGroupedSignal *groupedSignal) {\n\t\t\t[startedSignals addObject:groupedSignal];\n\n\t\t\t[groupedSignal subscribeCompleted:^{\n\t\t\t\t[completedSignals addObject:groupedSignal];\n\t\t\t}];\n\t\t}];\n\n\t\tfor (NSInteger i = 0; i < 20; i++)\n\t\t{\n\t\t\t[subject sendNext:@(i)];\n\t\t}\n\t\t[subject sendCompleted];\n\n\t\texpect(completedSignals).to(equal(startedSignals));\n\t});\n});\n\nqck_describe(@\"starting signals\", ^{\n\tqck_describe(@\"+startLazilyWithScheduler:block:\", ^{\n\t\t__block NSUInteger invokedCount = 0;\n\t\t__block void (^subscribe)(void);\n\n\t\tqck_beforeEach(^{\n\t\t\tinvokedCount = 0;\n\n\t\t\tRACSignal *signal = [RACSignal startLazilyWithScheduler:RACScheduler.immediateScheduler block:^(id<RACSubscriber> subscriber) {\n\t\t\t\tinvokedCount++;\n\t\t\t\t[subscriber sendNext:@42];\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t}];\n\n\t\t\tsubscribe = [^{\n\t\t\t\t[signal subscribe:[RACSubscriber subscriberWithNext:nil error:nil completed:nil]];\n\t\t\t} copy];\n\t\t});\n\n\t\tqck_it(@\"should only invoke the block on subscription\", ^{\n\t\t\texpect(@(invokedCount)).to(equal(@0));\n\t\t\tsubscribe();\n\t\t\texpect(@(invokedCount)).to(equal(@1));\n\t\t});\n\n\t\tqck_it(@\"should only invoke the block once\", ^{\n\t\t\texpect(@(invokedCount)).to(equal(@0));\n\t\t\tsubscribe();\n\t\t\texpect(@(invokedCount)).to(equal(@1));\n\t\t\tsubscribe();\n\t\t\texpect(@(invokedCount)).to(equal(@1));\n\t\t\tsubscribe();\n\t\t\texpect(@(invokedCount)).to(equal(@1));\n\t\t});\n\n\t\tqck_it(@\"should invoke the block on the given scheduler\", ^{\n\t\t\tRACScheduler *scheduler = [RACScheduler scheduler];\n\t\t\t__block RACScheduler *currentScheduler;\n\t\t\t[[[RACSignal\n\t\t\t\tstartLazilyWithScheduler:scheduler block:^(id<RACSubscriber> subscriber) {\n\t\t\t\t\tcurrentScheduler = RACScheduler.currentScheduler;\n\t\t\t\t}]\n\t\t\t\tpublish]\n\t\t\t\tconnect];\n\n\t\t\texpect(currentScheduler).toEventually(equal(scheduler));\n\t\t});\n\t});\n\n\tqck_describe(@\"+startEagerlyWithScheduler:block:\", ^{\n\t\tqck_it(@\"should immediately invoke the block\", ^{\n\t\t\t__block BOOL blockInvoked = NO;\n\t\t\t[RACSignal startEagerlyWithScheduler:[RACScheduler scheduler] block:^(id<RACSubscriber> subscriber) {\n\t\t\t\tblockInvoked = YES;\n\t\t\t}];\n\n\t\t\texpect(@(blockInvoked)).toEventually(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should only invoke the block once\", ^{\n\t\t\t__block NSUInteger invokedCount = 0;\n\t\t\tRACSignal *signal = [RACSignal startEagerlyWithScheduler:RACScheduler.immediateScheduler block:^(id<RACSubscriber> subscriber) {\n\t\t\t\tinvokedCount++;\n\t\t\t}];\n\n\t\t\texpect(@(invokedCount)).to(equal(@1));\n\n\t\t\t[[signal publish] connect];\n\t\t\texpect(@(invokedCount)).to(equal(@1));\n\n\t\t\t[[signal publish] connect];\n\t\t\texpect(@(invokedCount)).to(equal(@1));\n\t\t});\n\n\t\tqck_it(@\"should invoke the block on the given scheduler\", ^{\n\t\t\tRACScheduler *scheduler = [RACScheduler scheduler];\n\t\t\t__block RACScheduler *currentScheduler;\n\t\t\t[RACSignal startEagerlyWithScheduler:scheduler block:^(id<RACSubscriber> subscriber) {\n\t\t\t\tcurrentScheduler = RACScheduler.currentScheduler;\n\t\t\t}];\n\n\t\t\texpect(currentScheduler).toEventually(equal(scheduler));\n\t\t});\n\t});\n});\n\nqck_describe(@\"-toArray\", ^{\n\t__block RACSubject *subject;\n\n\tqck_beforeEach(^{\n\t\tsubject = [RACReplaySubject subject];\n\t});\n\n\tqck_it(@\"should return an array which contains NSNulls for nil values\", ^{\n\t\tNSArray *expected = @[ NSNull.null, @1, NSNull.null ];\n\n\t\t[subject sendNext:nil];\n\t\t[subject sendNext:@1];\n\t\t[subject sendNext:nil];\n\t\t[subject sendCompleted];\n\n\t\texpect([subject toArray]).to(equal(expected));\n\t});\n\n\tqck_it(@\"should return nil upon error\", ^{\n\t\t[subject sendError:nil];\n\t\texpect([subject toArray]).to(beNil());\n\t});\n\n\tqck_it(@\"should return nil upon error even if some nexts were sent\", ^{\n\t\t[subject sendNext:@1];\n\t\t[subject sendNext:@2];\n\t\t[subject sendError:nil];\n\n\t\texpect([subject toArray]).to(beNil());\n\t});\n});\n\nqck_describe(@\"-ignore:\", ^{\n\tqck_it(@\"should ignore nil\", ^{\n\t\tRACSignal *signal = [[RACSignal\n\t\t\tcreateSignal:^ id (id<RACSubscriber> subscriber) {\n\t\t\t\t[subscriber sendNext:@1];\n\t\t\t\t[subscriber sendNext:nil];\n\t\t\t\t[subscriber sendNext:@3];\n\t\t\t\t[subscriber sendNext:@4];\n\t\t\t\t[subscriber sendNext:nil];\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t\treturn nil;\n\t\t\t}]\n\t\t\tignore:nil];\n\n\t\tNSArray *expected = @[ @1, @3, @4 ];\n\t\texpect([signal toArray]).to(equal(expected));\n\t});\n});\n\nqck_describe(@\"-replayLazily\", ^{\n\t__block NSUInteger subscriptionCount;\n\t__block BOOL disposed;\n\n\t__block RACSignal *signal;\n\t__block RACSubject *disposeSubject;\n\t__block RACSignal *replayedSignal;\n\n\tqck_beforeEach(^{\n\t\tsubscriptionCount = 0;\n\t\tdisposed = NO;\n\n\t\tsignal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {\n\t\t\tsubscriptionCount++;\n\t\t\t[subscriber sendNext:RACUnit.defaultUnit];\n\n\t\t\tRACDisposable *schedulingDisposable = [RACScheduler.mainThreadScheduler schedule:^{\n\t\t\t\t[subscriber sendNext:RACUnit.defaultUnit];\n\t\t\t\t[subscriber sendCompleted];\n\t\t\t}];\n\n\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\t[schedulingDisposable dispose];\n\t\t\t\tdisposed = YES;\n\t\t\t}];\n\t\t}];\n\n\t\tdisposeSubject = [RACSubject subject];\n\t\treplayedSignal = [[signal takeUntil:disposeSubject] replayLazily];\n\t});\n\n\tqck_it(@\"should forward the input signal upon subscription\", ^{\n\t\texpect(@(subscriptionCount)).to(equal(@0));\n\n\t\texpect(@([replayedSignal asynchronouslyWaitUntilCompleted:NULL])).to(beTruthy());\n\t\texpect(@(subscriptionCount)).to(equal(@1));\n\t});\n\n\tqck_it(@\"should replay the input signal for future subscriptions\", ^{\n\t\tNSArray *events = [[[replayedSignal materialize] collect] asynchronousFirstOrDefault:nil success:NULL error:NULL];\n\t\texpect(events).notTo(beNil());\n\n\t\texpect([[[replayedSignal materialize] collect] asynchronousFirstOrDefault:nil success:NULL error:NULL]).to(equal(events));\n\t\texpect(@(subscriptionCount)).to(equal(@1));\n\t});\n\n\tqck_it(@\"should replay even after disposal\", ^{\n\t\t__block NSUInteger valueCount = 0;\n\t\t[replayedSignal subscribeNext:^(id x) {\n\t\t\tvalueCount++;\n\t\t}];\n\n\t\t[disposeSubject sendCompleted];\n\t\texpect(@(valueCount)).to(equal(@1));\n\t\texpect(@([[replayedSignal toArray] count])).to(equal(@(valueCount)));\n\t});\n});\n\nqck_describe(@\"-reduceApply\", ^{\n\tqck_it(@\"should apply a block to the rest of a tuple\", ^{\n\t\tRACSubject *subject = [RACReplaySubject subject];\n\n\t\tid sum = ^(NSNumber *a, NSNumber *b) {\n\t\t\treturn @(a.intValue + b.intValue);\n\t\t};\n\t\tid madd = ^(NSNumber *a, NSNumber *b, NSNumber *c) {\n\t\t\treturn @(a.intValue * b.intValue + c.intValue);\n\t\t};\n\n\t\t[subject sendNext:RACTuplePack(sum, @1, @2)];\n\t\t[subject sendNext:RACTuplePack(madd, @2, @3, @1)];\n\t\t[subject sendCompleted];\n\n\t\tNSArray *results = [[subject reduceApply] toArray];\n\t\tNSArray *expected = @[ @3, @7 ];\n\n\t\texpect(results).to(equal(expected));\n\t});\n});\n\ndescribe(@\"-deliverOnMainThread\", ^{\n\tvoid (^dispatchSyncInBackground)(dispatch_block_t) = ^(dispatch_block_t block) {\n\t\tdispatch_group_t group = dispatch_group_create();\n\t\tdispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), block);\n\t\tdispatch_group_wait(group, DISPATCH_TIME_FOREVER);\n\t};\n\n\tbeforeEach(^{\n\t\texpect(@(NSThread.isMainThread)).to(beTruthy());\n\t});\n\n\tit(@\"should deliver events immediately when on the main thread\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\tNSMutableArray *values = [NSMutableArray array];\n\n\t\t[[subject deliverOnMainThread] subscribeNext:^(id value) {\n\t\t\t[values addObject:value];\n\t\t}];\n\n\t\t[subject sendNext:@0];\n\t\texpect(values).to(equal(@[ @0 ]));\n\n\t\t[subject sendNext:@1];\n\t\t[subject sendNext:@2];\n\t\texpect(values).to(equal(@[ @0, @1, @2 ]));\n\t});\n\n\tit(@\"should enqueue events sent from the background\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\tNSMutableArray *values = [NSMutableArray array];\n\n\t\t[[subject deliverOnMainThread] subscribeNext:^(id value) {\n\t\t\t[values addObject:value];\n\t\t}];\n\n\t\tdispatchSyncInBackground(^{\n\t\t\t[subject sendNext:@0];\n\t\t});\n\n\t\texpect(values).to(equal(@[]));\n\t\texpect(values).toEventually(equal(@[ @0 ]));\n\n\t\tdispatchSyncInBackground(^{\n\t\t\t[subject sendNext:@1];\n\t\t\t[subject sendNext:@2];\n\t\t});\n\n\t\texpect(values).to(equal(@[ @0 ]));\n\t\texpect(values).toEventually(equal(@[ @0, @1, @2 ]));\n\t});\n\n\tit(@\"should enqueue events sent from the main thread after events from the background\", ^{\n\t\tRACSubject *subject = [RACSubject subject];\n\t\tNSMutableArray *values = [NSMutableArray array];\n\n\t\t[[subject deliverOnMainThread] subscribeNext:^(id value) {\n\t\t\t[values addObject:value];\n\t\t}];\n\n\t\tdispatchSyncInBackground(^{\n\t\t\t[subject sendNext:@0];\n\t\t});\n\n\t\t[subject sendNext:@1];\n\t\t[subject sendNext:@2];\n\n\t\texpect(values).to(equal(@[]));\n\t\texpect(values).toEventually(equal(@[ @0, @1, @2 ]));\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACStreamExamples.h",
    "content": "//\n//  RACStreamExamples.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-11-01.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n// The name of the shared examples for a RACStream subclass.\nextern NSString * const RACStreamExamples;\n\n// The RACStream subclass to test.\nextern NSString * const RACStreamExamplesClass;\n\n// An infinite RACStream to test, making sure that certain operations\n// terminate.\n//\n// The stream should contain infinite RACUnit values.\nextern NSString * const RACStreamExamplesInfiniteStream;\n\n// A block with the signature:\n//\n// void (^)(RACStream *stream, NSArray *expectedValues)\n//\n// … used to verify that a stream contains the expected values.\nextern NSString * const RACStreamExamplesVerifyValuesBlock;\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACStreamExamples.m",
    "content": "//\n//  RACStreamExamples.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-11-01.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACStreamExamples.h\"\n\n#import \"RACStream.h\"\n#import \"RACUnit.h\"\n#import \"RACTuple.h\"\n\nNSString * const RACStreamExamples = @\"RACStreamExamples\";\nNSString * const RACStreamExamplesClass = @\"RACStreamExamplesClass\";\nNSString * const RACStreamExamplesInfiniteStream = @\"RACStreamExamplesInfiniteStream\";\nNSString * const RACStreamExamplesVerifyValuesBlock = @\"RACStreamExamplesVerifyValuesBlock\";\n\nQuickConfigurationBegin(RACStreamExampleGroups)\n\n+ (void)configure:(Configuration *)configuration {\n\tsharedExamples(RACStreamExamples, ^(QCKDSLSharedExampleContext exampleContext) {\n\t\t__block Class streamClass;\n\t\t__block void (^verifyValues)(RACStream *, NSArray *);\n\t\t__block RACStream *infiniteStream;\n\n\t\t__block RACStream *(^streamWithValues)(NSArray *);\n\n\t\tqck_beforeEach(^{\n\t\t\tstreamClass = exampleContext()[RACStreamExamplesClass];\n\t\t\tverifyValues = exampleContext()[RACStreamExamplesVerifyValuesBlock];\n\t\t\tinfiniteStream = exampleContext()[RACStreamExamplesInfiniteStream];\n\t\t\tstreamWithValues = [^(NSArray *values) {\n\t\t\t\tRACStream *stream = [streamClass empty];\n\n\t\t\t\tfor (id value in values) {\n\t\t\t\t\tstream = [stream concat:[streamClass return:value]];\n\t\t\t\t}\n\n\t\t\t\treturn stream;\n\t\t\t} copy];\n\t\t});\n\n\t\tqck_it(@\"should return an empty stream\", ^{\n\t\t\tRACStream *stream = [streamClass empty];\n\t\t\tverifyValues(stream, @[]);\n\t\t});\n\n\t\tqck_it(@\"should lift a value into a stream\", ^{\n\t\t\tRACStream *stream = [streamClass return:RACUnit.defaultUnit];\n\t\t\tverifyValues(stream, @[ RACUnit.defaultUnit ]);\n\t\t});\n\n\t\tqck_describe(@\"-concat:\", ^{\n\t\t\tqck_it(@\"should concatenate two streams\", ^{\n\t\t\t\tRACStream *stream = [[streamClass return:@0] concat:[streamClass return:@1]];\n\t\t\t\tverifyValues(stream, @[ @0, @1 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should concatenate three streams\", ^{\n\t\t\t\tRACStream *stream = [[[streamClass return:@0] concat:[streamClass return:@1]] concat:[streamClass return:@2]];\n\t\t\t\tverifyValues(stream, @[ @0, @1, @2 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should concatenate around an empty stream\", ^{\n\t\t\t\tRACStream *stream = [[[streamClass return:@0] concat:[streamClass empty]] concat:[streamClass return:@2]];\n\t\t\t\tverifyValues(stream, @[ @0, @2 ]);\n\t\t\t});\n\t\t});\n\n\t\tqck_it(@\"should flatten\", ^{\n\t\t\tRACStream *stream = [[streamClass return:[streamClass return:RACUnit.defaultUnit]] flatten];\n\t\t\tverifyValues(stream, @[ RACUnit.defaultUnit ]);\n\t\t});\n\n\t\tqck_describe(@\"-bind:\", ^{\n\t\t\tqck_it(@\"should return the result of binding a single value\", ^{\n\t\t\t\tRACStream *stream = [[streamClass return:@0] bind:^{\n\t\t\t\t\treturn ^(NSNumber *value, BOOL *stop) {\n\t\t\t\t\t\tNSNumber *newValue = @(value.integerValue + 1);\n\t\t\t\t\t\treturn [streamClass return:newValue];\n\t\t\t\t\t};\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(stream, @[ @1 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should concatenate the result of binding multiple values\", ^{\n\t\t\t\tRACStream *baseStream = streamWithValues(@[ @0, @1 ]);\n\t\t\t\tRACStream *stream = [baseStream bind:^{\n\t\t\t\t\treturn ^(NSNumber *value, BOOL *stop) {\n\t\t\t\t\t\tNSNumber *newValue = @(value.integerValue + 1);\n\t\t\t\t\t\treturn [streamClass return:newValue];\n\t\t\t\t\t};\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(stream, @[ @1, @2 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should concatenate with an empty result from binding a value\", ^{\n\t\t\t\tRACStream *baseStream = streamWithValues(@[ @0, @1, @2 ]);\n\t\t\t\tRACStream *stream = [baseStream bind:^{\n\t\t\t\t\treturn ^(NSNumber *value, BOOL *stop) {\n\t\t\t\t\t\tif (value.integerValue == 1) return [streamClass empty];\n\n\t\t\t\t\t\tNSNumber *newValue = @(value.integerValue + 1);\n\t\t\t\t\t\treturn [streamClass return:newValue];\n\t\t\t\t\t};\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(stream, @[ @1, @3 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should terminate immediately when returning nil\", ^{\n\t\t\t\tRACStream *stream = [infiniteStream bind:^{\n\t\t\t\t\treturn ^ id (id _, BOOL *stop) {\n\t\t\t\t\t\treturn nil;\n\t\t\t\t\t};\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(stream, @[]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should terminate after one value when setting 'stop'\", ^{\n\t\t\t\tRACStream *stream = [infiniteStream bind:^{\n\t\t\t\t\treturn ^ id (id value, BOOL *stop) {\n\t\t\t\t\t\t*stop = YES;\n\t\t\t\t\t\treturn [streamClass return:value];\n\t\t\t\t\t};\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(stream, @[ RACUnit.defaultUnit ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should terminate immediately when returning nil and setting 'stop'\", ^{\n\t\t\t\tRACStream *stream = [infiniteStream bind:^{\n\t\t\t\t\treturn ^ id (id _, BOOL *stop) {\n\t\t\t\t\t\t*stop = YES;\n\t\t\t\t\t\treturn nil;\n\t\t\t\t\t};\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(stream, @[]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should be restartable even with block state\", ^{\n\t\t\t\tNSArray *values = @[ @0, @1, @2 ];\n\t\t\t\tRACStream *baseStream = streamWithValues(values);\n\n\t\t\t\tRACStream *countingStream = [baseStream bind:^{\n\t\t\t\t\t__block NSUInteger counter = 0;\n\n\t\t\t\t\treturn ^(id x, BOOL *stop) {\n\t\t\t\t\t\treturn [streamClass return:@(counter++)];\n\t\t\t\t\t};\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(countingStream, @[ @0, @1, @2 ]);\n\t\t\t\tverifyValues(countingStream, @[ @0, @1, @2 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should be interleavable even with block state\", ^{\n\t\t\t\tNSArray *values = @[ @0, @1, @2 ];\n\t\t\t\tRACStream *baseStream = streamWithValues(values);\n\n\t\t\t\tRACStream *countingStream = [baseStream bind:^{\n\t\t\t\t\t__block NSUInteger counter = 0;\n\n\t\t\t\t\treturn ^(id x, BOOL *stop) {\n\t\t\t\t\t\treturn [streamClass return:@(counter++)];\n\t\t\t\t\t};\n\t\t\t\t}];\n\n\t\t\t\t// Just so +zip:reduce: thinks this is a unique stream.\n\t\t\t\tRACStream *anotherStream = [[streamClass empty] concat:countingStream];\n\n\t\t\t\tRACStream *zipped = [streamClass zip:@[ countingStream, anotherStream ] reduce:^(NSNumber *v1, NSNumber *v2) {\n\t\t\t\t\treturn @(v1.integerValue + v2.integerValue);\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(zipped, @[ @0, @2, @4 ]);\n\t\t\t});\n\t\t});\n\n\t\tqck_describe(@\"-flattenMap:\", ^{\n\t\t\tqck_it(@\"should return a single mapped result\", ^{\n\t\t\t\tRACStream *stream = [[streamClass return:@0] flattenMap:^(NSNumber *value) {\n\t\t\t\t\tNSNumber *newValue = @(value.integerValue + 1);\n\t\t\t\t\treturn [streamClass return:newValue];\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(stream, @[ @1 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should concatenate the results of mapping multiple values\", ^{\n\t\t\t\tRACStream *baseStream = streamWithValues(@[ @0, @1 ]);\n\t\t\t\tRACStream *stream = [baseStream flattenMap:^(NSNumber *value) {\n\t\t\t\t\tNSNumber *newValue = @(value.integerValue + 1);\n\t\t\t\t\treturn [streamClass return:newValue];\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(stream, @[ @1, @2 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should concatenate with an empty result from mapping a value\", ^{\n\t\t\t\tRACStream *baseStream = streamWithValues(@[ @0, @1, @2 ]);\n\t\t\t\tRACStream *stream = [baseStream flattenMap:^(NSNumber *value) {\n\t\t\t\t\tif (value.integerValue == 1) return [streamClass empty];\n\n\t\t\t\t\tNSNumber *newValue = @(value.integerValue + 1);\n\t\t\t\t\treturn [streamClass return:newValue];\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(stream, @[ @1, @3 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should treat nil streams like empty streams\", ^{\n\t\t\t\tRACStream *baseStream = streamWithValues(@[ @0, @1, @2 ]);\n\t\t\t\tRACStream *stream = [baseStream flattenMap:^ RACStream * (NSNumber *value) {\n\t\t\t\t\tif (value.integerValue == 1) return nil;\n\n\t\t\t\t\tNSNumber *newValue = @(value.integerValue + 1);\n\t\t\t\t\treturn [streamClass return:newValue];\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(stream, @[ @1, @3 ]);\n\t\t\t});\n\t\t});\n\n\t\tqck_it(@\"should map\", ^{\n\t\t\tRACStream *baseStream = streamWithValues(@[ @0, @1, @2 ]);\n\t\t\tRACStream *stream = [baseStream map:^(NSNumber *value) {\n\t\t\t\treturn @(value.integerValue + 1);\n\t\t\t}];\n\n\t\t\tverifyValues(stream, @[ @1, @2, @3 ]);\n\t\t});\n\n\t\tqck_it(@\"should map and replace\", ^{\n\t\t\tRACStream *baseStream = streamWithValues(@[ @0, @1, @2 ]);\n\t\t\tRACStream *stream = [baseStream mapReplace:RACUnit.defaultUnit];\n\n\t\t\tverifyValues(stream, @[ RACUnit.defaultUnit, RACUnit.defaultUnit, RACUnit.defaultUnit ]);\n\t\t});\n\n\t\tqck_it(@\"should filter\", ^{\n\t\t\tRACStream *baseStream = streamWithValues(@[ @0, @1, @2, @3, @4, @5, @6 ]);\n\t\t\tRACStream *stream = [baseStream filter:^ BOOL (NSNumber *value) {\n\t\t\t\treturn value.integerValue % 2 == 0;\n\t\t\t}];\n\n\t\t\tverifyValues(stream, @[ @0, @2, @4, @6 ]);\n\t\t});\n\n\t\tqck_describe(@\"-ignore:\", ^{\n\t\t\tqck_it(@\"should ignore a value\", ^{\n\t\t\t\tRACStream *baseStream = streamWithValues(@[ @0, @1, @2, @3, @4, @5, @6 ]);\n\t\t\t\tRACStream *stream = [baseStream ignore:@1];\n\n\t\t\t\tverifyValues(stream, @[ @0, @2, @3, @4, @5, @6 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should ignore based on object equality\", ^{\n\t\t\t\tRACStream *baseStream = streamWithValues(@[ @\"0\", @\"1\", @\"2\", @\"3\", @\"4\", @\"5\", @\"6\" ]);\n\n\t\t\t\tNSMutableString *valueToIgnore = [[NSMutableString alloc] init];\n\t\t\t\t[valueToIgnore appendString:@\"1\"];\n\t\t\t\tRACStream *stream = [baseStream ignore:valueToIgnore];\n\n\t\t\t\tverifyValues(stream, @[ @\"0\", @\"2\", @\"3\", @\"4\", @\"5\", @\"6\" ]);\n\t\t\t});\n\t\t});\n\n\t\tqck_it(@\"should start with a value\", ^{\n\t\t\tRACStream *stream = [[streamClass return:@1] startWith:@0];\n\t\t\tverifyValues(stream, @[ @0, @1 ]);\n\t\t});\n\n\t\tqck_describe(@\"-skip:\", ^{\n\t\t\t__block NSArray *values;\n\t\t\t__block RACStream *stream;\n\n\t\t\tqck_beforeEach(^{\n\t\t\t\tvalues = @[ @0, @1, @2 ];\n\t\t\t\tstream = streamWithValues(values);\n\t\t\t});\n\n\t\t\tqck_it(@\"should skip any valid number of values\", ^{\n\t\t\t\tfor (NSUInteger i = 0; i < values.count; i++) {\n\t\t\t\t\tverifyValues([stream skip:i], [values subarrayWithRange:NSMakeRange(i, values.count - i)]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tqck_it(@\"should return an empty stream when skipping too many values\", ^{\n\t\t\t\tverifyValues([stream skip:4], @[]);\n\t\t\t});\n\t\t});\n\n\t\tqck_describe(@\"-take:\", ^{\n\t\t\tqck_describe(@\"with three values\", ^{\n\t\t\t\t__block NSArray *values;\n\t\t\t\t__block RACStream *stream;\n\n\t\t\t\tqck_beforeEach(^{\n\t\t\t\t\tvalues = @[ @0, @1, @2 ];\n\t\t\t\t\tstream = streamWithValues(values);\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should take any valid number of values\", ^{\n\t\t\t\t\tfor (NSUInteger i = 0; i < values.count; i++) {\n\t\t\t\t\t\tverifyValues([stream take:i], [values subarrayWithRange:NSMakeRange(0, i)]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should return the same stream when taking too many values\", ^{\n\t\t\t\t\tverifyValues([stream take:4], values);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tqck_it(@\"should take and terminate from an infinite stream\", ^{\n\t\t\t\tverifyValues([infiniteStream take:0], @[]);\n\t\t\t\tverifyValues([infiniteStream take:1], @[ RACUnit.defaultUnit ]);\n\t\t\t\tverifyValues([infiniteStream take:2], @[ RACUnit.defaultUnit, RACUnit.defaultUnit ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should take and terminate from a single-item stream\", ^{\n\t\t\t\tNSArray *values = @[ RACUnit.defaultUnit ];\n\t\t\t\tRACStream *stream = streamWithValues(values);\n\t\t\t\tverifyValues([stream take:1], values);\n\t\t\t});\n\t\t});\n\n\t\tqck_describe(@\"zip stream creation methods\", ^{\n\t\t\t__block NSArray *valuesOne;\n\n\t\t\t__block RACStream *streamOne;\n\t\t\t__block RACStream *streamTwo;\n\t\t\t__block RACStream *streamThree;\n\t\t\t__block NSArray *threeStreams;\n\n\t\t\t__block NSArray *oneStreamTuples;\n\t\t\t__block NSArray *twoStreamTuples;\n\t\t\t__block NSArray *threeStreamTuples;\n\n\t\t\tqck_beforeEach(^{\n\t\t\t\tvaluesOne = @[ @\"Ada\", @\"Bob\", @\"Dea\" ];\n\t\t\t\tNSArray *valuesTwo = @[ @\"eats\", @\"cooks\", @\"jumps\" ];\n\t\t\t\tNSArray *valuesThree = @[ @\"fish\", @\"bear\", @\"rock\" ];\n\n\t\t\t\tstreamOne = streamWithValues(valuesOne);\n\t\t\t\tstreamTwo = streamWithValues(valuesTwo);\n\t\t\t\tstreamThree = streamWithValues(valuesThree);\n\t\t\t\tthreeStreams = @[ streamOne, streamTwo, streamThree ];\n\n\t\t\t\toneStreamTuples = @[\n\t\t\t\t\tRACTuplePack(valuesOne[0]),\n\t\t\t\t\tRACTuplePack(valuesOne[1]),\n\t\t\t\t\tRACTuplePack(valuesOne[2]),\n\t\t\t\t];\n\n\t\t\t\ttwoStreamTuples = @[\n\t\t\t\t\tRACTuplePack(valuesOne[0], valuesTwo[0]),\n\t\t\t\t\tRACTuplePack(valuesOne[1], valuesTwo[1]),\n\t\t\t\t\tRACTuplePack(valuesOne[2], valuesTwo[2]),\n\t\t\t\t];\n\n\t\t\t\tthreeStreamTuples = @[\n\t\t\t\t\tRACTuplePack(valuesOne[0], valuesTwo[0], valuesThree[0]),\n\t\t\t\t\tRACTuplePack(valuesOne[1], valuesTwo[1], valuesThree[1]),\n\t\t\t\t\tRACTuplePack(valuesOne[2], valuesTwo[2], valuesThree[2]),\n\t\t\t\t];\n\t\t\t});\n\n\t\t\tqck_describe(@\"-zipWith:\", ^{\n\t\t\t\tqck_it(@\"should make a stream of tuples\", ^{\n\t\t\t\t\tRACStream *stream = [streamOne zipWith:streamTwo];\n\t\t\t\t\tverifyValues(stream, twoStreamTuples);\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should truncate streams\", ^{\n\t\t\t\t\tRACStream *shortStream = streamWithValues(@[ @\"now\", @\"later\" ]);\n\t\t\t\t\tRACStream *stream = [streamOne zipWith:shortStream];\n\n\t\t\t\t\tverifyValues(stream, @[\n\t\t\t\t\t\tRACTuplePack(valuesOne[0], @\"now\"),\n\t\t\t\t\t\tRACTuplePack(valuesOne[1], @\"later\")\n\t\t\t\t\t]);\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should work on infinite streams\", ^{\n\t\t\t\t\tRACStream *stream = [streamOne zipWith:infiniteStream];\n\t\t\t\t\tverifyValues(stream, @[\n\t\t\t\t\t\tRACTuplePack(valuesOne[0], RACUnit.defaultUnit),\n\t\t\t\t\t\tRACTuplePack(valuesOne[1], RACUnit.defaultUnit),\n\t\t\t\t\t\tRACTuplePack(valuesOne[2], RACUnit.defaultUnit)\n\t\t\t\t\t]);\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should handle multiples of the same stream\", ^{\n\t\t\t\t\tRACStream *stream = [streamOne zipWith:streamOne];\n\t\t\t\t\tverifyValues(stream, @[\n\t\t\t\t\t\tRACTuplePack(valuesOne[0], valuesOne[0]),\n\t\t\t\t\t\tRACTuplePack(valuesOne[1], valuesOne[1]),\n\t\t\t\t\t\tRACTuplePack(valuesOne[2], valuesOne[2]),\n\t\t\t\t\t]);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tqck_describe(@\"+zip:reduce:\", ^{\n\t\t\t\tqck_it(@\"should reduce values\", ^{\n\t\t\t\t\tRACStream *stream = [streamClass zip:threeStreams reduce:^ NSString * (id x, id y, id z) {\n\t\t\t\t\t\treturn [NSString stringWithFormat:@\"%@ %@ %@\", x, y, z];\n\t\t\t\t\t}];\n\t\t\t\t\tverifyValues(stream, @[ @\"Ada eats fish\", @\"Bob cooks bear\", @\"Dea jumps rock\" ]);\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should truncate streams\", ^{\n\t\t\t\t\tRACStream *shortStream = streamWithValues(@[ @\"now\", @\"later\" ]);\n\t\t\t\t\tNSArray *streams = [threeStreams arrayByAddingObject:shortStream];\n\t\t\t\t\tRACStream *stream = [streamClass zip:streams reduce:^ NSString * (id w, id x, id y, id z) {\n\t\t\t\t\t\treturn [NSString stringWithFormat:@\"%@ %@ %@ %@\", w, x, y, z];\n\t\t\t\t\t}];\n\t\t\t\t\tverifyValues(stream, @[ @\"Ada eats fish now\", @\"Bob cooks bear later\" ]);\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should work on infinite streams\", ^{\n\t\t\t\t\tNSArray *streams = [threeStreams arrayByAddingObject:infiniteStream];\n\t\t\t\t\tRACStream *stream = [streamClass zip:streams reduce:^ NSString * (id w, id x, id y, id z) {\n\t\t\t\t\t\treturn [NSString stringWithFormat:@\"%@ %@ %@\", w, x, y];\n\t\t\t\t\t}];\n\t\t\t\t\tverifyValues(stream, @[ @\"Ada eats fish\", @\"Bob cooks bear\", @\"Dea jumps rock\" ]);\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should handle multiples of the same stream\", ^{\n\t\t\t\t\tNSArray *streams = @[ streamOne, streamOne, streamTwo, streamThree, streamTwo, streamThree ];\n\t\t\t\t\tRACStream *stream = [streamClass zip:streams reduce:^ NSString * (id x1, id x2, id y1, id z1, id y2, id z2) {\n\t\t\t\t\t\treturn [NSString stringWithFormat:@\"%@ %@ %@ %@ %@ %@\", x1, x2, y1, z1, y2, z2];\n\t\t\t\t\t}];\n\t\t\t\t\tverifyValues(stream, @[ @\"Ada Ada eats fish eats fish\", @\"Bob Bob cooks bear cooks bear\", @\"Dea Dea jumps rock jumps rock\" ]);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tqck_describe(@\"+zip:\", ^{\n\t\t\t\tqck_it(@\"should make a stream of tuples out of single value\", ^{\n\t\t\t\t\tRACStream *stream = [streamClass zip:@[ streamOne ]];\n\t\t\t\t\tverifyValues(stream, oneStreamTuples);\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should make a stream of tuples out of an array of streams\", ^{\n\t\t\t\t\tRACStream *stream = [streamClass zip:threeStreams];\n\t\t\t\t\tverifyValues(stream, threeStreamTuples);\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should make an empty stream if given an empty array\", ^{\n\t\t\t\t\tRACStream *stream = [streamClass zip:@[]];\n\t\t\t\t\tverifyValues(stream, @[]);\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should make a stream of tuples out of an enumerator of streams\", ^{\n\t\t\t\t\tRACStream *stream = [streamClass zip:threeStreams.objectEnumerator];\n\t\t\t\t\tverifyValues(stream, threeStreamTuples);\n\t\t\t\t});\n\n\t\t\t\tqck_it(@\"should make an empty stream if given an empty enumerator\", ^{\n\t\t\t\t\tRACStream *stream = [streamClass zip:@[].objectEnumerator];\n\t\t\t\t\tverifyValues(stream, @[]);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tqck_describe(@\"+concat:\", ^{\n\t\t\t__block NSArray *streams = nil;\n\t\t\t__block NSArray *result = nil;\n\n\t\t\tqck_beforeEach(^{\n\t\t\t\tRACStream *a = [streamClass return:@0];\n\t\t\t\tRACStream *b = [streamClass empty];\n\t\t\t\tRACStream *c = streamWithValues(@[ @1, @2, @3 ]);\n\t\t\t\tRACStream *d = [streamClass return:@4];\n\t\t\t\tRACStream *e = [streamClass return:@5];\n\t\t\t\tRACStream *f = [streamClass empty];\n\t\t\t\tRACStream *g = [streamClass empty];\n\t\t\t\tRACStream *h = streamWithValues(@[ @6, @7 ]);\n\t\t\t\tstreams = @[ a, b, c, d, e, f, g, h ];\n\t\t\t\tresult = @[ @0, @1, @2, @3, @4, @5, @6, @7 ];\n\t\t\t});\n\n\t\t\tqck_it(@\"should concatenate an array of streams\", ^{\n\t\t\t\tRACStream *stream = [streamClass concat:streams];\n\t\t\t\tverifyValues(stream, result);\n\t\t\t});\n\n\t\t\tqck_it(@\"should concatenate an enumerator of streams\", ^{\n\t\t\t\tRACStream *stream = [streamClass concat:streams.objectEnumerator];\n\t\t\t\tverifyValues(stream, result);\n\t\t\t});\n\t\t});\n\n\t\tqck_describe(@\"scanning\", ^{\n\t\t\tNSArray *values = @[ @1, @2, @3, @4 ];\n\n\t\t\t__block RACStream *stream;\n\n\t\t\tqck_beforeEach(^{\n\t\t\t\tstream = streamWithValues(values);\n\t\t\t});\n\n\t\t\tqck_it(@\"should scan\", ^{\n\t\t\t\tRACStream *scanned = [stream scanWithStart:@0 reduce:^(NSNumber *running, NSNumber *next) {\n\t\t\t\t\treturn @(running.integerValue + next.integerValue);\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(scanned, @[ @1, @3, @6, @10 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should scan with index\", ^{\n\t\t\t\tRACStream *scanned = [stream scanWithStart:@0 reduceWithIndex:^(NSNumber *running, NSNumber *next, NSUInteger index) {\n\t\t\t\t\treturn @(running.integerValue + next.integerValue + (NSInteger)index);\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(scanned, @[ @1, @4, @9, @16 ]);\n\t\t\t});\n\t\t});\n\n\t\tqck_describe(@\"taking with a predicate\", ^{\n\t\t\tNSArray *values = @[ @0, @1, @2, @3, @0, @2, @4 ];\n\n\t\t\t__block RACStream *stream;\n\n\t\t\tqck_beforeEach(^{\n\t\t\t\tstream = streamWithValues(values);\n\t\t\t});\n\n\t\t\tqck_it(@\"should take until a predicate is true\", ^{\n\t\t\t\tRACStream *taken = [stream takeUntilBlock:^ BOOL (NSNumber *x) {\n\t\t\t\t\treturn x.integerValue >= 3;\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(taken, @[ @0, @1, @2 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should take while a predicate is true\", ^{\n\t\t\t\tRACStream *taken = [stream takeWhileBlock:^ BOOL (NSNumber *x) {\n\t\t\t\t\treturn x.integerValue <= 1;\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(taken, @[ @0, @1 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should take a full stream\", ^{\n\t\t\t\tRACStream *taken = [stream takeWhileBlock:^ BOOL (NSNumber *x) {\n\t\t\t\t\treturn x.integerValue <= 10;\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(taken, values);\n\t\t\t});\n\n\t\t\tqck_it(@\"should return an empty stream\", ^{\n\t\t\t\tRACStream *taken = [stream takeWhileBlock:^ BOOL (NSNumber *x) {\n\t\t\t\t\treturn x.integerValue < 0;\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(taken, @[]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should terminate an infinite stream\", ^{\n\t\t\t\tRACStream *infiniteCounter = [infiniteStream scanWithStart:@0 reduce:^(NSNumber *running, id _) {\n\t\t\t\t\treturn @(running.unsignedIntegerValue + 1);\n\t\t\t\t}];\n\n\t\t\t\tRACStream *taken = [infiniteCounter takeWhileBlock:^ BOOL (NSNumber *x) {\n\t\t\t\t\treturn x.integerValue <= 5;\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(taken, @[ @1, @2, @3, @4, @5 ]);\n\t\t\t});\n\t\t});\n\n\t\tqck_describe(@\"skipping with a predicate\", ^{\n\t\t\tNSArray *values = @[ @0, @1, @2, @3, @0, @2, @4 ];\n\n\t\t\t__block RACStream *stream;\n\n\t\t\tqck_beforeEach(^{\n\t\t\t\tstream = streamWithValues(values);\n\t\t\t});\n\n\t\t\tqck_it(@\"should skip until a predicate is true\", ^{\n\t\t\t\tRACStream *taken = [stream skipUntilBlock:^ BOOL (NSNumber *x) {\n\t\t\t\t\treturn x.integerValue >= 3;\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(taken, @[ @3, @0, @2, @4 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should skip while a predicate is true\", ^{\n\t\t\t\tRACStream *taken = [stream skipWhileBlock:^ BOOL (NSNumber *x) {\n\t\t\t\t\treturn x.integerValue <= 1;\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(taken, @[ @2, @3, @0, @2, @4 ]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should skip a full stream\", ^{\n\t\t\t\tRACStream *taken = [stream skipWhileBlock:^ BOOL (NSNumber *x) {\n\t\t\t\t\treturn x.integerValue <= 10;\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(taken, @[]);\n\t\t\t});\n\n\t\t\tqck_it(@\"should finish skipping immediately\", ^{\n\t\t\t\tRACStream *taken = [stream skipWhileBlock:^ BOOL (NSNumber *x) {\n\t\t\t\t\treturn x.integerValue < 0;\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(taken, values);\n\t\t\t});\n\t\t});\n\n\t\tqck_describe(@\"-combinePreviousWithStart:reduce:\", ^{\n\t\t\tNSArray *values = @[ @1, @2, @3 ];\n\t\t\t__block RACStream *stream;\n\t\t\tqck_beforeEach(^{\n\t\t\t\tstream = streamWithValues(values);\n\t\t\t});\n\n\t\t\tqck_it(@\"should pass the previous next into the reduce block\", ^{\n\t\t\t\tNSMutableArray *previouses = [NSMutableArray array];\n\t\t\t\tRACStream *mapped = [stream combinePreviousWithStart:nil reduce:^(id previous, id next) {\n\t\t\t\t\t[previouses addObject:previous ?: RACTupleNil.tupleNil];\n\t\t\t\t\treturn next;\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(mapped, @[ @1, @2, @3 ]);\n\n\t\t\t\tNSArray *expected = @[ RACTupleNil.tupleNil, @1, @2 ];\n\t\t\t\texpect(previouses).to(equal(expected));\n\t\t\t});\n\n\t\t\tqck_it(@\"should send the combined value\", ^{\n\t\t\t\tRACStream *mapped = [stream combinePreviousWithStart:@1 reduce:^(NSNumber *previous, NSNumber *next) {\n\t\t\t\t\treturn [NSString stringWithFormat:@\"%lu - %lu\", (unsigned long)previous.unsignedIntegerValue, (unsigned long)next.unsignedIntegerValue];\n\t\t\t\t}];\n\n\t\t\t\tverifyValues(mapped, @[ @\"1 - 1\", @\"1 - 2\", @\"2 - 3\" ]);\n\t\t\t});\n\t\t});\n\n\t\tqck_it(@\"should reduce tuples\", ^{\n\t\t\tRACStream *stream = streamWithValues(@[\n\t\t\t\tRACTuplePack(@\"foo\", @\"bar\"),\n\t\t\t\tRACTuplePack(@\"buzz\", @\"baz\"),\n\t\t\t\tRACTuplePack(@\"\", @\"_\")\n\t\t\t]);\n\n\t\t\tRACStream *reduced = [stream reduceEach:^(NSString *a, NSString *b) {\n\t\t\t\treturn [a stringByAppendingString:b];\n\t\t\t}];\n\n\t\t\tverifyValues(reduced, @[ @\"foobar\", @\"buzzbaz\", @\"_\" ]);\n\t\t});\n\t});\n}\n\nQuickConfigurationEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubclassObject.h",
    "content": "//\n//  RACSubclassObject.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/18/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACTestObject.h\"\n\n@interface RACSubclassObject : RACTestObject\n\n// Set whenever -forwardInvocation: is invoked on the receiver.\n@property (nonatomic, assign) SEL forwardedSelector;\n\n// Invokes the superclass implementation with `objectValue` concatenated to\n// \"SUBCLASS\".\n- (NSString *)combineObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue;\n\n// Asynchronously invokes the superclass implementation on the current scheduler.\n- (void)setObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubclassObject.m",
    "content": "//\n//  RACSubclassObject.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 3/18/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACSubclassObject.h\"\n#import \"RACScheduler.h\"\n\n@implementation RACSubclassObject\n\n- (void)forwardInvocation:(NSInvocation *)invocation {\n\tself.forwardedSelector = invocation.selector;\n}\n\n- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector {\n\tNSParameterAssert(selector != NULL);\n\n\tNSMethodSignature *signature = [super methodSignatureForSelector:selector];\n\tif (signature != nil) return signature;\n\n\treturn [super methodSignatureForSelector:@selector(description)];\n}\n\n- (NSString *)combineObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue {\n\tNSString *appended = [[objectValue description] stringByAppendingString:@\"SUBCLASS\"];\n\treturn [super combineObjectValue:appended andIntegerValue:integerValue];\n}\n\n- (void)setObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue {\n\t[RACScheduler.currentScheduler schedule:^{\n\t\t[super setObjectValue:objectValue andSecondObjectValue:secondObjectValue];\n\t}];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubjectSpec.m",
    "content": "//\n//  RACSubjectSpec.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 6/24/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACSubscriberExamples.h\"\n\n#import <libkern/OSAtomic.h>\n#import <ReactiveCocoa/EXTScope.h>\n#import \"RACBehaviorSubject.h\"\n#import \"RACDisposable.h\"\n#import \"RACReplaySubject.h\"\n#import \"RACScheduler.h\"\n#import \"RACSignal+Operations.h\"\n#import \"RACSubject.h\"\n#import \"RACUnit.h\"\n\nQuickSpecBegin(RACSubjectSpec)\n\nqck_describe(@\"RACSubject\", ^{\n\t__block RACSubject *subject;\n\t__block NSMutableArray *values;\n\n\t__block BOOL success;\n\t__block NSError *error;\n\n\tqck_beforeEach(^{\n\t\tvalues = [NSMutableArray array];\n\n\t\tsubject = [RACSubject subject];\n\t\tsuccess = YES;\n\t\terror = nil;\n\n\t\t[subject subscribeNext:^(id value) {\n\t\t\t[values addObject:value];\n\t\t} error:^(NSError *e) {\n\t\t\terror = e;\n\t\t\tsuccess = NO;\n\t\t} completed:^{\n\t\t\tsuccess = YES;\n\t\t}];\n\t});\n\n\tqck_itBehavesLike(RACSubscriberExamples, ^{\n\t\treturn @{\n\t\t\tRACSubscriberExampleSubscriber: subject,\n\t\t\tRACSubscriberExampleValuesReceivedBlock: [^{ return [values copy]; } copy],\n\t\t\tRACSubscriberExampleErrorReceivedBlock: [^{ return error; } copy],\n\t\t\tRACSubscriberExampleSuccessBlock: [^{ return success; } copy]\n\t\t};\n\t});\n});\n\nqck_describe(@\"RACReplaySubject\", ^{\n\t__block RACReplaySubject *subject = nil;\n\n\tqck_describe(@\"with a capacity of 1\", ^{\n\t\tqck_beforeEach(^{\n\t\t\tsubject = [RACReplaySubject replaySubjectWithCapacity:1];\n\t\t});\n\n\t\tqck_it(@\"should send the last value\", ^{\n\t\t\tid firstValue = @\"blah\";\n\t\t\tid secondValue = @\"more blah\";\n\n\t\t\t[subject sendNext:firstValue];\n\t\t\t[subject sendNext:secondValue];\n\n\t\t\t__block id valueReceived = nil;\n\t\t\t[subject subscribeNext:^(id x) {\n\t\t\t\tvalueReceived = x;\n\t\t\t}];\n\n\t\t\texpect(valueReceived).to(equal(secondValue));\n\t\t});\n\n\t\tqck_it(@\"should send the last value to new subscribers after completion\", ^{\n\t\t\tid firstValue = @\"blah\";\n\t\t\tid secondValue = @\"more blah\";\n\n\t\t\t__block id valueReceived = nil;\n\t\t\t__block NSUInteger nextsReceived = 0;\n\n\t\t\t[subject sendNext:firstValue];\n\t\t\t[subject sendNext:secondValue];\n\n\t\t\texpect(@(nextsReceived)).to(equal(@0));\n\t\t\texpect(valueReceived).to(beNil());\n\n\t\t\t[subject sendCompleted];\n\n\t\t\t[subject subscribeNext:^(id x) {\n\t\t\t\tvalueReceived = x;\n\t\t\t\tnextsReceived++;\n\t\t\t}];\n\n\t\t\texpect(@(nextsReceived)).to(equal(@1));\n\t\t\texpect(valueReceived).to(equal(secondValue));\n\t\t});\n\n\t\tqck_it(@\"should not send any values to new subscribers if none were sent originally\", ^{\n\t\t\t[subject sendCompleted];\n\n\t\t\t__block BOOL nextInvoked = NO;\n\t\t\t[subject subscribeNext:^(id x) {\n\t\t\t\tnextInvoked = YES;\n\t\t\t}];\n\n\t\t\texpect(@(nextInvoked)).to(beFalsy());\n\t\t});\n\n\t\tqck_it(@\"should resend errors\", ^{\n\t\t\tNSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:0 userInfo:nil];\n\t\t\t[subject sendError:error];\n\n\t\t\t__block BOOL errorSent = NO;\n\t\t\t[subject subscribeError:^(NSError *sentError) {\n\t\t\t\texpect(sentError).to(equal(error));\n\t\t\t\terrorSent = YES;\n\t\t\t}];\n\n\t\t\texpect(@(errorSent)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should resend nil errors\", ^{\n\t\t\t[subject sendError:nil];\n\n\t\t\t__block BOOL errorSent = NO;\n\t\t\t[subject subscribeError:^(NSError *sentError) {\n\t\t\t\texpect(sentError).to(beNil());\n\t\t\t\terrorSent = YES;\n\t\t\t}];\n\n\t\t\texpect(@(errorSent)).to(beTruthy());\n\t\t});\n\t});\n\n\tqck_describe(@\"with an unlimited capacity\", ^{\n\t\tqck_beforeEach(^{\n\t\t\tsubject = [RACReplaySubject subject];\n\t\t});\n\n\t\tqck_itBehavesLike(RACSubscriberExamples, ^{\n\t\t\treturn @{\n\t\t\t\tRACSubscriberExampleSubscriber: subject,\n\t\t\t\tRACSubscriberExampleValuesReceivedBlock: [^{\n\t\t\t\t\tNSMutableArray *values = [NSMutableArray array];\n\n\t\t\t\t\t// This subscription should synchronously dump all values already\n\t\t\t\t\t// received into 'values'.\n\t\t\t\t\t[subject subscribeNext:^(id value) {\n\t\t\t\t\t\t[values addObject:value];\n\t\t\t\t\t}];\n\n\t\t\t\t\treturn values;\n\t\t\t\t} copy],\n\t\t\t\tRACSubscriberExampleErrorReceivedBlock: [^{\n\t\t\t\t\t__block NSError *error = nil;\n\n\t\t\t\t\t[subject subscribeError:^(NSError *x) {\n\t\t\t\t\t\terror = x;\n\t\t\t\t\t}];\n\n\t\t\t\t\treturn error;\n\t\t\t\t} copy],\n\t\t\t\tRACSubscriberExampleSuccessBlock: [^{\n\t\t\t\t\t__block BOOL success = YES;\n\n\t\t\t\t\t[subject subscribeError:^(NSError *x) {\n\t\t\t\t\t\tsuccess = NO;\n\t\t\t\t\t}];\n\n\t\t\t\t\treturn success;\n\t\t\t\t} copy]\n\t\t\t};\n\t\t});\n\n\t\tqck_it(@\"should send both values to new subscribers after completion\", ^{\n\t\t\tid firstValue = @\"blah\";\n\t\t\tid secondValue = @\"more blah\";\n\n\t\t\t[subject sendNext:firstValue];\n\t\t\t[subject sendNext:secondValue];\n\t\t\t[subject sendCompleted];\n\n\t\t\t__block BOOL completed = NO;\n\t\t\tNSMutableArray *valuesReceived = [NSMutableArray array];\n\t\t\t[subject subscribeNext:^(id x) {\n\t\t\t\t[valuesReceived addObject:x];\n\t\t\t} completed:^{\n\t\t\t\tcompleted = YES;\n\t\t\t}];\n\n\t\t\texpect(valuesReceived).to(haveCount(@2));\n\t\t\tNSArray *expected = [NSArray arrayWithObjects:firstValue, secondValue, nil];\n\t\t\texpect(valuesReceived).to(equal(expected));\n\t\t\texpect(@(completed)).to(beTruthy());\n\t\t});\n\n\t\tqck_it(@\"should send values in the same order live as when replaying\", ^{\n\t\t\tNSUInteger count = 49317;\n\n\t\t\t// Just leak it, ain't no thang.\n\t\t\t__unsafe_unretained volatile id *values = (__unsafe_unretained id *)calloc(count, sizeof(*values));\n\t\t\t__block volatile int32_t nextIndex = 0;\n\n\t\t\t[subject subscribeNext:^(NSNumber *value) {\n\t\t\t\tint32_t indexPlusOne = OSAtomicIncrement32(&nextIndex);\n\t\t\t\tvalues[indexPlusOne - 1] = value;\n\t\t\t}];\n\n\t\t\tdispatch_queue_t queue = dispatch_queue_create(\"org.reactivecocoa.ReactiveCocoa.RACSubjectSpec\", DISPATCH_QUEUE_CONCURRENT);\n\t\t\tdispatch_suspend(queue);\n\n\t\t\tfor (NSUInteger i = 0; i < count; i++) {\n\t\t\t\tdispatch_async(queue, ^{\n\t\t\t\t\t[subject sendNext:@(i)];\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tdispatch_resume(queue);\n\t\t\tdispatch_barrier_sync(queue, ^{\n\t\t\t\t[subject sendCompleted];\n\t\t\t});\n\n\t\t\tOSMemoryBarrier();\n\n\t\t\tNSArray *liveValues = [NSArray arrayWithObjects:(id *)values count:(NSUInteger)nextIndex];\n\t\t\texpect(liveValues).to(haveCount(@(count)));\n\n\t\t\tNSArray *replayedValues = subject.toArray;\n\t\t\texpect(replayedValues).to(haveCount(@(count)));\n\n\t\t\t// It should return the same ordering for multiple invocations too.\n\t\t\texpect(replayedValues).to(equal(subject.toArray));\n\n\t\t\t[replayedValues enumerateObjectsUsingBlock:^(id value, NSUInteger index, BOOL *stop) {\n\t\t\t\texpect(liveValues[index]).to(equal(value));\n\t\t\t}];\n\t\t});\n\n\t\tqck_it(@\"should have a current scheduler when replaying\", ^{\n\t\t\t[subject sendNext:RACUnit.defaultUnit];\n\n\t\t\t__block RACScheduler *currentScheduler;\n\t\t\t[subject subscribeNext:^(id x) {\n\t\t\t\tcurrentScheduler = RACScheduler.currentScheduler;\n\t\t\t}];\n\n\t\t\texpect(currentScheduler).notTo(beNil());\n\n\t\t\tcurrentScheduler = nil;\n\t\t\tdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n\t\t\t\t[subject subscribeNext:^(id x) {\n\t\t\t\t\tcurrentScheduler = RACScheduler.currentScheduler;\n\t\t\t\t}];\n\t\t\t});\n\n\t\t\texpect(currentScheduler).toEventuallyNot(beNil());\n\t\t});\n\n\t\tqck_it(@\"should stop replaying when the subscription is disposed\", ^{\n\t\t\tNSMutableArray *values = [NSMutableArray array];\n\n\t\t\t[subject sendNext:@0];\n\t\t\t[subject sendNext:@1];\n\n\t\t\tdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n\t\t\t\t__block RACDisposable *disposable = [subject subscribeNext:^(id x) {\n\t\t\t\t\texpect(disposable).notTo(beNil());\n\n\t\t\t\t\t[values addObject:x];\n\t\t\t\t\t[disposable dispose];\n\t\t\t\t}];\n\t\t\t});\n\n\t\t\texpect(values).toEventually(equal(@[ @0 ]));\n\t\t});\n\n\t\tqck_it(@\"should finish replaying before completing\", ^{\n\t\t\t[subject sendNext:@1];\n\n\t\t\t__block id received;\n\t\t\tdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n\t\t\t\t[subject subscribeNext:^(id x) {\n\t\t\t\t\treceived = x;\n\t\t\t\t}];\n\n\t\t\t\t[subject sendCompleted];\n\t\t\t});\n\n\t\t\texpect(received).toEventually(equal(@1));\n\t\t});\n\n\t\tqck_it(@\"should finish replaying before erroring\", ^{\n\t\t\t[subject sendNext:@1];\n\n\t\t\t__block id received;\n\t\t\tdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n\t\t\t\t[subject subscribeNext:^(id x) {\n\t\t\t\t\treceived = x;\n\t\t\t\t}];\n\n\t\t\t\t[subject sendError:[NSError errorWithDomain:@\"blah\" code:-99 userInfo:nil]];\n\t\t\t});\n\n\t\t\texpect(received).toEventually(equal(@1));\n\t\t});\n\n\t\tqck_it(@\"should finish replaying before sending new values\", ^{\n\t\t\t[subject sendNext:@1];\n\n\t\t\tNSMutableArray *received = [NSMutableArray array];\n\t\t\tdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n\t\t\t\t[subject subscribeNext:^(id x) {\n\t\t\t\t\t[received addObject:x];\n\t\t\t\t}];\n\n\t\t\t\t[subject sendNext:@2];\n\t\t\t});\n\n\t\t\tNSArray *expected = @[ @1, @2 ];\n\t\t\texpect(received).toEventually(equal(expected));\n\t\t});\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubscriberExamples.h",
    "content": "//\n//  RACSubscriberExamples.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-11-27.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n// The name of the shared examples for implementors of <RACSubscriber>.\nextern NSString * const RACSubscriberExamples;\n\n// id<RACSubscriber>\nextern NSString * const RACSubscriberExampleSubscriber;\n\n// A block which returns an NSArray of the values received so far.\nextern NSString * const RACSubscriberExampleValuesReceivedBlock;\n\n// A block which returns any NSError received so far.\nextern NSString * const RACSubscriberExampleErrorReceivedBlock;\n\n// A block which returns a BOOL indicating whether the subscriber is successful\n// so far.\nextern NSString * const RACSubscriberExampleSuccessBlock;\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubscriberExamples.m",
    "content": "//\n//  RACSubscriberExamples.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-11-27.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACSubscriberExamples.h\"\n\n#import \"NSObject+RACDeallocating.h\"\n#import \"RACCompoundDisposable.h\"\n#import \"RACDisposable.h\"\n#import \"RACSubject.h\"\n#import \"RACSubscriber.h\"\n\nNSString * const RACSubscriberExamples = @\"RACSubscriberExamples\";\nNSString * const RACSubscriberExampleSubscriber = @\"RACSubscriberExampleSubscriber\";\nNSString * const RACSubscriberExampleValuesReceivedBlock = @\"RACSubscriberExampleValuesReceivedBlock\";\nNSString * const RACSubscriberExampleErrorReceivedBlock = @\"RACSubscriberExampleErrorReceivedBlock\";\nNSString * const RACSubscriberExampleSuccessBlock = @\"RACSubscriberExampleSuccessBlock\";\n\nQuickConfigurationBegin(RACSubscriberExampleGroups)\n\n+ (void)configure:(Configuration *)configuration {\n\tsharedExamples(RACSubscriberExamples, ^(QCKDSLSharedExampleContext exampleContext) {\n\t\t__block NSArray * (^valuesReceived)(void);\n\t\t__block NSError * (^errorReceived)(void);\n\t\t__block BOOL (^success)(void);\n\t\t__block id<RACSubscriber> subscriber;\n\n\t\tqck_beforeEach(^{\n\t\t\tvaluesReceived = exampleContext()[RACSubscriberExampleValuesReceivedBlock];\n\t\t\terrorReceived = exampleContext()[RACSubscriberExampleErrorReceivedBlock];\n\t\t\tsuccess = exampleContext()[RACSubscriberExampleSuccessBlock];\n\t\t\tsubscriber = exampleContext()[RACSubscriberExampleSubscriber];\n\t\t\texpect(subscriber).notTo(beNil());\n\t\t});\n\n\t\tqck_it(@\"should accept a nil error\", ^{\n\t\t\t[subscriber sendError:nil];\n\n\t\t\texpect(@(success())).to(beFalsy());\n\t\t\texpect(errorReceived()).to(beNil());\n\t\t\texpect(valuesReceived()).to(equal(@[]));\n\t\t});\n\n\t\tqck_describe(@\"with values\", ^{\n\t\t\t__block NSSet *values;\n\n\t\t\tqck_beforeEach(^{\n\t\t\t\tNSMutableSet *mutableValues = [NSMutableSet set];\n\t\t\t\tfor (NSUInteger i = 0; i < 20; i++) {\n\t\t\t\t\t[mutableValues addObject:@(i)];\n\t\t\t\t}\n\n\t\t\t\tvalues = [mutableValues copy];\n\t\t\t});\n\n\t\t\tqck_it(@\"should send nexts serially, even when delivered from multiple threads\", ^{\n\t\t\t\tNSArray *allValues = values.allObjects;\n\t\t\t\tdispatch_apply(allValues.count, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [^(size_t index) {\n\t\t\t\t\t[subscriber sendNext:allValues[index]];\n\t\t\t\t} copy]);\n\n\t\t\t\texpect(@(success())).to(beTruthy());\n\t\t\t\texpect(errorReceived()).to(beNil());\n\n\t\t\t\tNSSet *valuesReceivedSet = [NSSet setWithArray:valuesReceived()];\n\t\t\t\texpect(valuesReceivedSet).to(equal(values));\n\t\t\t});\n\t\t});\n\n\t\tqck_describe(@\"multiple subscriptions\", ^{\n\t\t\t__block RACSubject *first;\n\t\t\t__block RACSubject *second;\n\n\t\t\tqck_beforeEach(^{\n\t\t\t\tfirst = [RACSubject subject];\n\t\t\t\t[first subscribe:subscriber];\n\n\t\t\t\tsecond = [RACSubject subject];\n\t\t\t\t[second subscribe:subscriber];\n\t\t\t});\n\n\t\t\tqck_it(@\"should send values from all subscriptions\", ^{\n\t\t\t\t[first sendNext:@\"foo\"];\n\t\t\t\t[second sendNext:@\"bar\"];\n\t\t\t\t[first sendNext:@\"buzz\"];\n\t\t\t\t[second sendNext:@\"baz\"];\n\n\t\t\t\texpect(@(success())).to(beTruthy());\n\t\t\t\texpect(errorReceived()).to(beNil());\n\n\t\t\t\tNSArray *expected = @[ @\"foo\", @\"bar\", @\"buzz\", @\"baz\" ];\n\t\t\t\texpect(valuesReceived()).to(equal(expected));\n\t\t\t});\n\n\t\t\tqck_it(@\"should terminate after the first error from any subscription\", ^{\n\t\t\t\tNSError *error = [NSError errorWithDomain:@\"\" code:-1 userInfo:nil];\n\n\t\t\t\t[first sendNext:@\"foo\"];\n\t\t\t\t[second sendError:error];\n\t\t\t\t[first sendNext:@\"buzz\"];\n\n\t\t\t\texpect(@(success())).to(beFalsy());\n\t\t\t\texpect(errorReceived()).to(equal(error));\n\n\t\t\t\tNSArray *expected = @[ @\"foo\" ];\n\t\t\t\texpect(valuesReceived()).to(equal(expected));\n\t\t\t});\n\n\t\t\tqck_it(@\"should terminate after the first completed from any subscription\", ^{\n\t\t\t\t[first sendNext:@\"foo\"];\n\t\t\t\t[second sendNext:@\"bar\"];\n\t\t\t\t[first sendCompleted];\n\t\t\t\t[second sendNext:@\"baz\"];\n\n\t\t\t\texpect(@(success())).to(beTruthy());\n\t\t\t\texpect(errorReceived()).to(beNil());\n\n\t\t\t\tNSArray *expected = @[ @\"foo\", @\"bar\" ];\n\t\t\t\texpect(valuesReceived()).to(equal(expected));\n\t\t\t});\n\n\t\t\tqck_it(@\"should dispose of all current subscriptions upon termination\", ^{\n\t\t\t\t__block BOOL firstDisposed = NO;\n\t\t\t\tRACSignal *firstDisposableSignal = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\t\t\tfirstDisposed = YES;\n\t\t\t\t\t}];\n\t\t\t\t}];\n\n\t\t\t\t__block BOOL secondDisposed = NO;\n\t\t\t\tRACSignal *secondDisposableSignal = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\t\t\tsecondDisposed = YES;\n\t\t\t\t\t}];\n\t\t\t\t}];\n\n\t\t\t\t[firstDisposableSignal subscribe:subscriber];\n\t\t\t\t[secondDisposableSignal subscribe:subscriber];\n\n\t\t\t\texpect(@(firstDisposed)).to(beFalsy());\n\t\t\t\texpect(@(secondDisposed)).to(beFalsy());\n\n\t\t\t\t[first sendCompleted];\n\n\t\t\t\texpect(@(firstDisposed)).to(beTruthy());\n\t\t\t\texpect(@(secondDisposed)).to(beTruthy());\n\t\t\t});\n\n\t\t\tqck_it(@\"should dispose of future subscriptions upon termination\", ^{\n\t\t\t\t__block BOOL disposed = NO;\n\t\t\t\tRACSignal *disposableSignal = [RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n\t\t\t\t\treturn [RACDisposable disposableWithBlock:^{\n\t\t\t\t\t\tdisposed = YES;\n\t\t\t\t\t}];\n\t\t\t\t}];\n\n\t\t\t\t[first sendCompleted];\n\t\t\t\texpect(@(disposed)).to(beFalsy());\n\n\t\t\t\t[disposableSignal subscribe:subscriber];\n\t\t\t\texpect(@(disposed)).to(beTruthy());\n\t\t\t});\n\t\t});\n\n\t\tqck_describe(@\"memory management\", ^{\n\t\t\tqck_it(@\"should not retain disposed disposables\", ^{\n\t\t\t\t__block BOOL disposableDeallocd = NO;\n\t\t\t\t@autoreleasepool {\n\t\t\t\t\tRACCompoundDisposable *disposable __attribute__((objc_precise_lifetime)) = [RACCompoundDisposable disposableWithBlock:^{}];\n\t\t\t\t\t[disposable.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{\n\t\t\t\t\t\tdisposableDeallocd = YES;\n\t\t\t\t\t}]];\n\n\t\t\t\t\t[subscriber didSubscribeWithDisposable:disposable];\n\t\t\t\t\t[disposable dispose];\n\t\t\t\t}\n\t\t\t\texpect(@(disposableDeallocd)).to(beTruthy());\n\t\t\t});\n\t\t});\n\t});\n}\n\nQuickConfigurationEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubscriberSpec.m",
    "content": "//\n//  RACSubscriberSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-11-27.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACSubscriberExamples.h\"\n\n#import \"RACSubscriber.h\"\n#import \"RACSubscriber+Private.h\"\n#import <libkern/OSAtomic.h>\n\nQuickSpecBegin(RACSubscriberSpec)\n\n__block RACSubscriber *subscriber;\n__block NSMutableArray *values;\n\n__block volatile BOOL finished;\n__block volatile int32_t nextsAfterFinished;\n\n__block BOOL success;\n__block NSError *error;\n\nqck_beforeEach(^{\n\tvalues = [NSMutableArray array];\n\n\tfinished = NO;\n\tnextsAfterFinished = 0;\n\n\tsuccess = YES;\n\terror = nil;\n\n\tsubscriber = [RACSubscriber subscriberWithNext:^(id value) {\n\t\tif (finished) OSAtomicIncrement32Barrier(&nextsAfterFinished);\n\n\t\t[values addObject:value];\n\t} error:^(NSError *e) {\n\t\terror = e;\n\t\tsuccess = NO;\n\t} completed:^{\n\t\tsuccess = YES;\n\t}];\n});\n\nqck_itBehavesLike(RACSubscriberExamples, ^{\n\treturn @{\n\t\tRACSubscriberExampleSubscriber: subscriber,\n\t\tRACSubscriberExampleValuesReceivedBlock: [^{ return [values copy]; } copy],\n\t\tRACSubscriberExampleErrorReceivedBlock: [^{ return error; } copy],\n\t\tRACSubscriberExampleSuccessBlock: [^{ return success; } copy]\n\t};\n});\n\nqck_describe(@\"finishing\", ^{\n\t__block void (^sendValues)(void);\n\t__block BOOL expectedSuccess;\n\n\t__block dispatch_group_t dispatchGroup;\n\t__block dispatch_queue_t concurrentQueue;\n\n\tqck_beforeEach(^{\n\t\tdispatchGroup = dispatch_group_create();\n\t\texpect(dispatchGroup).notTo(beNil());\n\n\t\tconcurrentQueue = dispatch_queue_create(\"org.reactivecocoa.ReactiveCocoa.RACSubscriberSpec\", DISPATCH_QUEUE_CONCURRENT);\n\t\texpect(concurrentQueue).notTo(beNil());\n\n\t\tdispatch_suspend(concurrentQueue);\n\n\t\tsendValues = [^{\n\t\t\tfor (NSUInteger i = 0; i < 15; i++) {\n\t\t\t\tdispatch_group_async(dispatchGroup, concurrentQueue, ^{\n\t\t\t\t\t[subscriber sendNext:@(i)];\n\t\t\t\t});\n\t\t\t}\n\t\t} copy];\n\n\t\tsendValues();\n\t});\n\n\tqck_afterEach(^{\n\t\tsendValues();\n\t\tdispatch_resume(concurrentQueue);\n\n\t\t// Time out after one second.\n\t\tdispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC));\n\t\texpect(@(dispatch_group_wait(dispatchGroup, time))).to(equal(@0));\n\n\t\tdispatchGroup = NULL;\n\t\tconcurrentQueue = NULL;\n\n\t\texpect(@(nextsAfterFinished)).to(equal(@0));\n\n\t\tif (expectedSuccess) {\n\t\t\texpect(@(success)).to(beTruthy());\n\t\t\texpect(error).to(beNil());\n\t\t} else {\n\t\t\texpect(@(success)).to(beFalsy());\n\t\t}\n\t});\n\n\tqck_it(@\"should never invoke next after sending completed\", ^{\n\t\texpectedSuccess = YES;\n\n\t\tdispatch_group_async(dispatchGroup, concurrentQueue, ^{\n\t\t\t[subscriber sendCompleted];\n\n\t\t\tfinished = YES;\n\t\t\tOSMemoryBarrier();\n\t\t});\n\t});\n\n\tqck_it(@\"should never invoke next after sending error\", ^{\n\t\texpectedSuccess = NO;\n\n\t\tdispatch_group_async(dispatchGroup, concurrentQueue, ^{\n\t\t\t[subscriber sendError:nil];\n\n\t\t\tfinished = YES;\n\t\t\tOSMemoryBarrier();\n\t\t});\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACSubscriptingAssignmentTrampolineSpec.m",
    "content": "//\n//  RACSubscriptingAssignmentTrampolineSpec.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 9/24/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACSubscriptingAssignmentTrampoline.h\"\n#import \"RACPropertySignalExamples.h\"\n#import \"RACTestObject.h\"\n#import \"RACSubject.h\"\n\nQuickSpecBegin(RACSubscriptingAssignmentTrampolineSpec)\n\nid setupBlock = ^(RACTestObject *testObject, NSString *keyPath, id nilValue, RACSignal *signal) {\n\t[[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:testObject nilValue:nilValue][keyPath] = signal;\n};\n\nqck_itBehavesLike(RACPropertySignalExamples, ^{\n\treturn @{ RACPropertySignalExamplesSetupBlock: setupBlock };\n});\n\nqck_it(@\"should expand the RAC macro properly\", ^{\n\tRACSubject *subject = [RACSubject subject];\n\tRACTestObject *testObject = [[RACTestObject alloc] init];\n\tRAC(testObject, objectValue) = subject;\n\n\t[subject sendNext:@1];\n\texpect(testObject.objectValue).to(equal(@1));\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTargetQueueSchedulerSpec.m",
    "content": "//\n//  RACTargetQueueSchedulerSpec.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 6/7/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACTargetQueueScheduler.h\"\n#import <libkern/OSAtomic.h>\n\nQuickSpecBegin(RACTargetQueueSchedulerSpec)\n\nqck_it(@\"should have a valid current scheduler\", ^{\n\tdispatch_queue_t queue = dispatch_queue_create(\"test-queue\", DISPATCH_QUEUE_SERIAL);\n\tRACScheduler *scheduler = [[RACTargetQueueScheduler alloc] initWithName:@\"test-scheduler\" targetQueue:queue];\n\t__block RACScheduler *currentScheduler;\n\t[scheduler schedule:^{\n\t\tcurrentScheduler = RACScheduler.currentScheduler;\n\t}];\n\n\texpect(currentScheduler).toEventually(equal(scheduler));\n});\n\nqck_it(@\"should schedule blocks FIFO even when given a concurrent queue\", ^{\n\tdispatch_queue_t queue = dispatch_queue_create(\"test-queue\", DISPATCH_QUEUE_CONCURRENT);\n\tRACScheduler *scheduler = [[RACTargetQueueScheduler alloc] initWithName:@\"test-scheduler\" targetQueue:queue];\n\t__block volatile int32_t startedCount = 0;\n\t__block volatile uint32_t waitInFirst = 1;\n\t[scheduler schedule:^{\n\t\tOSAtomicIncrement32Barrier(&startedCount);\n\t\twhile (waitInFirst == 1) ;\n\t}];\n\n\t[scheduler schedule:^{\n\t\tOSAtomicIncrement32Barrier(&startedCount);\n\t}];\n\n\texpect(@(startedCount)).toEventually(equal(@1));\n\n\tOSAtomicAnd32Barrier(0, &waitInFirst);\n\n\texpect(@(startedCount)).toEventually(equal(@2));\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestExampleScheduler.h",
    "content": "//\n//  RACTestExampleScheduler.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 6/7/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <ReactiveCocoa/ReactiveCocoa.h>\n\n@interface RACTestExampleScheduler : RACQueueScheduler\n\n- (id)initWithQueue:(dispatch_queue_t)queue;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestExampleScheduler.m",
    "content": "//\n//  RACTestExampleScheduler.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 6/7/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACTestExampleScheduler.h\"\n#import \"RACQueueScheduler+Subclass.h\"\n\n@implementation RACTestExampleScheduler\n\n#pragma mark Lifecycle\n\n- (id)initWithQueue:(dispatch_queue_t)queue {\n\treturn [super initWithName:nil queue:queue];\n}\n\n#pragma mark RACScheduler\n\n- (RACDisposable *)schedule:(void (^)(void))block {\n\tdispatch_async(self.queue, ^{\n\t\t[self performAsCurrentScheduler:block];\n\t});\n\n\treturn nil;\n}\n\n- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block {\n\tdispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)([date timeIntervalSinceNow] * NSEC_PER_SEC));\n\tdispatch_after(when, self.queue, ^{\n\t\t[self performAsCurrentScheduler:block];\n\t});\n\n\treturn nil;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestObject.h",
    "content": "//\n//  RACTestObject.h\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 9/18/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <CoreGraphics/CoreGraphics.h>\n#import <Foundation/Foundation.h>\n\ntypedef struct {\n\tlong long integerField;\n\tdouble doubleField;\n} RACTestStruct;\n\n@protocol RACTestProtocol <NSObject>\n\n@optional\n- (void)optionalProtocolMethodWithObjectValue:(id)objectValue;\n\n@end\n\n@interface RACTestObject : NSObject <RACTestProtocol>\n\n@property (nonatomic, strong) id objectValue;\n@property (nonatomic, strong) id secondObjectValue;\n@property (nonatomic, strong) RACTestObject *strongTestObjectValue;\n@property (nonatomic, weak) RACTestObject *weakTestObjectValue;\n@property (nonatomic, weak) id<RACTestProtocol> weakObjectWithProtocol;\n@property (nonatomic, assign) NSInteger integerValue;\n// Holds a copy of the string.\n@property (nonatomic, assign) char *charPointerValue;\n// Holds a copy of the string.\n@property (nonatomic, assign) const char *constCharPointerValue;\n@property (nonatomic, assign) CGRect rectValue;\n@property (nonatomic, assign) CGSize sizeValue;\n@property (nonatomic, assign) CGPoint pointValue;\n@property (nonatomic, assign) NSRange rangeValue;\n@property (nonatomic, assign) RACTestStruct structValue;\n@property (nonatomic, assign) _Bool c99BoolValue;\n@property (nonatomic, copy) NSString *stringValue;\n@property (nonatomic, copy) NSArray *arrayValue;\n@property (nonatomic, copy) NSSet *setValue;\n@property (nonatomic, copy) NSOrderedSet *orderedSetValue;\n@property (nonatomic, strong) id slowObjectValue;\n\n// Returns a new object each time, with the integerValue set to 42.\n@property (nonatomic, copy, readonly) RACTestObject *dynamicObjectProperty;\n\n// Returns a new object each time, with the integerValue set to 42.\n- (RACTestObject *)dynamicObjectMethod;\n\n// Whether to allow -setNilValueForKey: to be invoked without throwing an\n// exception.\n@property (nonatomic, assign) BOOL catchSetNilValueForKey;\n\n// Has -setObjectValue:andIntegerValue: been called?\n@property (nonatomic, assign) BOOL hasInvokedSetObjectValueAndIntegerValue;\n\n// Has -setObjectValue:andSecondObjectValue: been called?\n@property (nonatomic, assign) BOOL hasInvokedSetObjectValueAndSecondObjectValue;\n\n- (void)setObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue;\n- (void)setObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue;\n\n// Returns a string of the form \"objectValue: integerValue\".\n- (NSString *)combineObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue;\n- (NSString *)combineObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue;\n\n- (void)lifeIsGood:(id)sender;\n\n+ (void)lifeIsGood:(id)sender;\n\n- (NSRange)returnRangeValueWithObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue;\n\n// Writes 5 to the int pointed to by intPointer.\n- (void)write5ToIntPointer:(int *)intPointer;\n\n- (NSInteger)doubleInteger:(NSInteger)integer;\n- (char *)doubleString:(char *)string;\n- (const char *)doubleConstString:(const char *)string;\n- (RACTestStruct)doubleStruct:(RACTestStruct)testStruct;\n\n- (dispatch_block_t)wrapBlock:(dispatch_block_t)block;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestObject.m",
    "content": "//\n//  RACTestObject.m\n//  ReactiveCocoa\n//\n//  Created by Josh Abernathy on 9/18/12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACTestObject.h\"\n\n@implementation RACTestObject\n\n- (void)dealloc {\n\tfree(_charPointerValue);\n\tfree((void *)_constCharPointerValue);\n}\n\n- (void)setNilValueForKey:(NSString *)key {\n\tif (!self.catchSetNilValueForKey) [super setNilValueForKey:key];\n}\n\n- (void)setCharPointerValue:(char *)charPointerValue {\n\tif (charPointerValue == _charPointerValue) return;\n\tfree(_charPointerValue);\n\t_charPointerValue = strdup(charPointerValue);\n}\n\n- (void)setConstCharPointerValue:(const char *)constCharPointerValue {\n\tif (constCharPointerValue == _constCharPointerValue) return;\n\tfree((void *)_constCharPointerValue);\n\t_constCharPointerValue = strdup(constCharPointerValue);\n}\n\n- (void)setObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue {\n\tself.hasInvokedSetObjectValueAndIntegerValue = YES;\n\tself.objectValue = objectValue;\n\tself.integerValue = integerValue;\n}\n\n- (void)setObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue {\n\tself.hasInvokedSetObjectValueAndSecondObjectValue = YES;\n\tself.objectValue = objectValue;\n\tself.secondObjectValue = secondObjectValue;\n}\n\n- (void)setSlowObjectValue:(id)value {\n\t[NSThread sleepForTimeInterval:0.02];\n\t_slowObjectValue = value;\n}\n\n- (NSString *)combineObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue {\n\treturn [NSString stringWithFormat:@\"%@: %ld\", objectValue, (long)integerValue];\n}\n\n- (NSString *)combineObjectValue:(id)objectValue andSecondObjectValue:(id)secondObjectValue {\n\treturn [NSString stringWithFormat:@\"%@: %@\", objectValue, secondObjectValue];\n}\n\n- (void)lifeIsGood:(id)sender {\n\t\n}\n\n+ (void)lifeIsGood:(id)sender {\n\t\n}\n\n- (NSRange)returnRangeValueWithObjectValue:(id)objectValue andIntegerValue:(NSInteger)integerValue {\n\treturn NSMakeRange((NSUInteger)[objectValue integerValue], (NSUInteger)integerValue);\n}\n\n- (RACTestObject *)dynamicObjectProperty {\n\treturn [self dynamicObjectMethod];\n}\n\n- (RACTestObject *)dynamicObjectMethod {\n\tRACTestObject *testObject = [[RACTestObject alloc] init];\n\ttestObject.integerValue = 42;\n\treturn testObject;\n}\n\n- (void)write5ToIntPointer:(int *)intPointer {\n\tNSCParameterAssert(intPointer != NULL);\n\t*intPointer = 5;\n}\n\n- (NSInteger)doubleInteger:(NSInteger)integer {\n\treturn integer * 2;\n}\n\n- (char *)doubleString:(char *)string {\n\tsize_t doubledSize = strlen(string) * 2 + 1;\n\tchar *doubledString = malloc(sizeof(char) * doubledSize);\n\n\tdoubledString[0] = '\\0';\n\tstrlcat(doubledString, string, doubledSize);\n\tstrlcat(doubledString, string, doubledSize);\n\n\tdispatch_async(dispatch_get_main_queue(), ^{\n\t\tfree(doubledString);\n\t});\n\n\treturn doubledString;\n}\n\n- (const char *)doubleConstString:(const char *)string {\n\treturn [self doubleString:(char *)string];\n}\n\n- (RACTestStruct)doubleStruct:(RACTestStruct)testStruct {\n\ttestStruct.integerField *= 2;\n\ttestStruct.doubleField *= 2;\n\treturn testStruct;\n}\n\n- (dispatch_block_t)wrapBlock:(dispatch_block_t)block {\n\treturn ^{\n\t\tblock();\n\t};\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestSchedulerSpec.m",
    "content": "//\n//  RACTestSchedulerSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-07-06.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACTestScheduler.h\"\n\nQuickSpecBegin(RACTestSchedulerSpec)\n\n__block RACTestScheduler *scheduler;\n\nqck_beforeEach(^{\n\tscheduler = [[RACTestScheduler alloc] init];\n\texpect(scheduler).notTo(beNil());\n});\n\nqck_it(@\"should do nothing when stepping while empty\", ^{\n\t[scheduler step];\n\t[scheduler step:5];\n\t[scheduler stepAll];\n});\n\nqck_it(@\"should execute the earliest enqueued block when stepping\", ^{\n\t__block BOOL firstExecuted = NO;\n\t[scheduler schedule:^{\n\t\tfirstExecuted = YES;\n\t}];\n\n\t__block BOOL secondExecuted = NO;\n\t[scheduler schedule:^{\n\t\tsecondExecuted = YES;\n\t}];\n\n\texpect(@(firstExecuted)).to(beFalsy());\n\texpect(@(secondExecuted)).to(beFalsy());\n\n\t[scheduler step];\n\texpect(@(firstExecuted)).to(beTruthy());\n\texpect(@(secondExecuted)).to(beFalsy());\n\n\t[scheduler step];\n\texpect(@(secondExecuted)).to(beTruthy());\n});\n\nqck_it(@\"should step multiple times\", ^{\n\t__block BOOL firstExecuted = NO;\n\t[scheduler schedule:^{\n\t\tfirstExecuted = YES;\n\t}];\n\n\t__block BOOL secondExecuted = NO;\n\t[scheduler schedule:^{\n\t\tsecondExecuted = YES;\n\t}];\n\n\t__block BOOL thirdExecuted = NO;\n\t[scheduler schedule:^{\n\t\tthirdExecuted = YES;\n\t}];\n\n\texpect(@(firstExecuted)).to(beFalsy());\n\texpect(@(secondExecuted)).to(beFalsy());\n\texpect(@(thirdExecuted)).to(beFalsy());\n\n\t[scheduler step:2];\n\texpect(@(firstExecuted)).to(beTruthy());\n\texpect(@(secondExecuted)).to(beTruthy());\n\texpect(@(thirdExecuted)).to(beFalsy());\n\n\t[scheduler step:1];\n\texpect(@(thirdExecuted)).to(beTruthy());\n});\n\nqck_it(@\"should step through all scheduled blocks\", ^{\n\t__block NSUInteger executions = 0;\n\tfor (NSUInteger i = 0; i < 10; i++) {\n\t\t[scheduler schedule:^{\n\t\t\texecutions++;\n\t\t}];\n\t}\n\n\texpect(@(executions)).to(equal(@0));\n\n\t[scheduler stepAll];\n\texpect(@(executions)).to(equal(@10));\n});\n\nqck_it(@\"should execute blocks in date order when stepping\", ^{\n\t__block BOOL laterExecuted = NO;\n\t[scheduler after:[NSDate distantFuture] schedule:^{\n\t\tlaterExecuted = YES;\n\t}];\n\n\t__block BOOL earlierExecuted = NO;\n\t[scheduler after:[NSDate dateWithTimeIntervalSinceNow:20] schedule:^{\n\t\tearlierExecuted = YES;\n\t}];\n\n\texpect(@(earlierExecuted)).to(beFalsy());\n\texpect(@(laterExecuted)).to(beFalsy());\n\n\t[scheduler step];\n\texpect(@(earlierExecuted)).to(beTruthy());\n\texpect(@(laterExecuted)).to(beFalsy());\n\n\t[scheduler step];\n\texpect(@(laterExecuted)).to(beTruthy());\n});\n\nqck_it(@\"should execute delayed blocks in date order when stepping\", ^{\n\t__block BOOL laterExecuted = NO;\n\t[scheduler afterDelay:100 schedule:^{\n\t\tlaterExecuted = YES;\n\t}];\n\n\t__block BOOL earlierExecuted = NO;\n\t[scheduler afterDelay:50 schedule:^{\n\t\tearlierExecuted = YES;\n\t}];\n\n\texpect(@(earlierExecuted)).to(beFalsy());\n\texpect(@(laterExecuted)).to(beFalsy());\n\n\t[scheduler step];\n\texpect(@(earlierExecuted)).to(beTruthy());\n\texpect(@(laterExecuted)).to(beFalsy());\n\n\t[scheduler step];\n\texpect(@(laterExecuted)).to(beTruthy());\n});\n\nqck_it(@\"should execute a repeating blocks in date order\", ^{\n\t__block NSUInteger firstExecutions = 0;\n\t[scheduler after:[NSDate dateWithTimeIntervalSinceNow:20] repeatingEvery:5 withLeeway:0 schedule:^{\n\t\tfirstExecutions++;\n\t}];\n\n\t__block NSUInteger secondExecutions = 0;\n\t[scheduler after:[NSDate dateWithTimeIntervalSinceNow:22] repeatingEvery:10 withLeeway:0 schedule:^{\n\t\tsecondExecutions++;\n\t}];\n\n\texpect(@(firstExecutions)).to(equal(@0));\n\texpect(@(secondExecutions)).to(equal(@0));\n\n\t// 20 ticks\n\t[scheduler step];\n\texpect(@(firstExecutions)).to(equal(@1));\n\texpect(@(secondExecutions)).to(equal(@0));\n\n\t// 22 ticks\n\t[scheduler step];\n\texpect(@(firstExecutions)).to(equal(@1));\n\texpect(@(secondExecutions)).to(equal(@1));\n\n\t// 25 ticks\n\t[scheduler step];\n\texpect(@(firstExecutions)).to(equal(@2));\n\texpect(@(secondExecutions)).to(equal(@1));\n\n\t// 30 ticks\n\t[scheduler step];\n\texpect(@(firstExecutions)).to(equal(@3));\n\texpect(@(secondExecutions)).to(equal(@1));\n\n\t// 32 ticks\n\t[scheduler step];\n\texpect(@(firstExecutions)).to(equal(@3));\n\texpect(@(secondExecutions)).to(equal(@2));\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestUIButton.h",
    "content": "//\n//  RACTestUIButton.h\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-06-15.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n// Enables use of -sendActionsForControlEvents: in unit tests.\n@interface RACTestUIButton : UIButton\n\n+ (instancetype)button;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTestUIButton.m",
    "content": "//\n//  RACTestUIButton.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2013-06-15.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import \"RACTestUIButton.h\"\n\n@implementation RACTestUIButton\n\n+ (instancetype)button {\n\tRACTestUIButton *button = [self buttonWithType:UIButtonTypeCustom];\n\treturn button;\n}\n\n// Required for unit testing – controls don't work normally\n// outside of normal apps. \n-(void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"\n\t[target performSelector:action withObject:self];\n#pragma clang diagnostic pop\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/RACTupleSpec.m",
    "content": "//\n//  RACTupleSpec.m\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2012-12-12.\n//  Copyright (c) 2012 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACTuple.h\"\n#import \"RACUnit.h\"\n\nQuickSpecBegin(RACTupleSpec)\n\nqck_describe(@\"RACTupleUnpack\", ^{\n\tqck_it(@\"should unpack a single value\", ^{\n\t\tRACTupleUnpack(RACUnit *value) = [RACTuple tupleWithObjects:RACUnit.defaultUnit, nil];\n\t\texpect(value).to(equal(RACUnit.defaultUnit));\n\t});\n\n\tqck_it(@\"should translate RACTupleNil\", ^{\n\t\tRACTupleUnpack(id value) = [RACTuple tupleWithObjects:RACTupleNil.tupleNil, nil];\n\t\texpect(value).to(beNil());\n\t});\n\n\tqck_it(@\"should unpack multiple values\", ^{\n\t\tRACTupleUnpack(NSString *str, NSNumber *num) = [RACTuple tupleWithObjects:@\"foobar\", @5, nil];\n\n\t\texpect(str).to(equal(@\"foobar\"));\n\t\texpect(num).to(equal(@5));\n\t});\n\n\tqck_it(@\"should fill in missing values with nil\", ^{\n\t\tRACTupleUnpack(NSString *str, NSNumber *num) = [RACTuple tupleWithObjects:@\"foobar\", nil];\n\n\t\texpect(str).to(equal(@\"foobar\"));\n\t\texpect(num).to(beNil());\n\t});\n\n\tqck_it(@\"should skip any values not assigned to\", ^{\n\t\tRACTupleUnpack(NSString *str, NSNumber *num) = [RACTuple tupleWithObjects:@\"foobar\", @5, RACUnit.defaultUnit, nil];\n\n\t\texpect(str).to(equal(@\"foobar\"));\n\t\texpect(num).to(equal(@5));\n\t});\n\n\tqck_it(@\"should keep an unpacked value alive when captured in a block\", ^{\n\t\t__weak id weakPtr = nil;\n\t\tid (^block)(void) = nil;\n\n\t\t@autoreleasepool {\n\t\t\tRACTupleUnpack(NSString *str) = [RACTuple tupleWithObjects:[[NSMutableString alloc] init], nil];\n\n\t\t\tweakPtr = str;\n\t\t\texpect(weakPtr).notTo(beNil());\n\n\t\t\tblock = [^{\n\t\t\t\treturn str;\n\t\t\t} copy];\n\t\t}\n\n\t\texpect(weakPtr).notTo(beNil());\n\t\texpect(block()).to(equal(weakPtr));\n\t});\n});\n\nqck_describe(@\"RACTuplePack\", ^{\n\tqck_it(@\"should pack a single value\", ^{\n\t\tRACTuple *tuple = [RACTuple tupleWithObjects:RACUnit.defaultUnit, nil];\n\t\texpect(RACTuplePack(RACUnit.defaultUnit)).to(equal(tuple));\n\t});\n\t\n\tqck_it(@\"should translate nil\", ^{\n\t\tRACTuple *tuple = [RACTuple tupleWithObjects:RACTupleNil.tupleNil, nil];\n\t\texpect(RACTuplePack(nil)).to(equal(tuple));\n\t});\n\t\n\tqck_it(@\"should pack multiple values\", ^{\n\t\tNSString *string = @\"foobar\";\n\t\tNSNumber *number = @5;\n\t\tRACTuple *tuple = [RACTuple tupleWithObjects:string, number, nil];\n\t\texpect(RACTuplePack(string, number)).to(equal(tuple));\n\t});\n});\n\nqck_describe(@\"-tupleByAddingObject:\", ^{\n\t__block RACTuple *tuple;\n\n\tqck_beforeEach(^{\n\t\ttuple = RACTuplePack(@\"foo\", nil, @\"bar\");\n\t});\n\n\tqck_it(@\"should add a non-nil object\", ^{\n\t\tRACTuple *newTuple = [tuple tupleByAddingObject:@\"buzz\"];\n\t\texpect(@(newTuple.count)).to(equal(@4));\n\t\texpect(newTuple[0]).to(equal(@\"foo\"));\n\t\texpect(newTuple[1]).to(beNil());\n\t\texpect(newTuple[2]).to(equal(@\"bar\"));\n\t\texpect(newTuple[3]).to(equal(@\"buzz\"));\n\t});\n\n\tqck_it(@\"should add nil\", ^{\n\t\tRACTuple *newTuple = [tuple tupleByAddingObject:nil];\n\t\texpect(@(newTuple.count)).to(equal(@4));\n\t\texpect(newTuple[0]).to(equal(@\"foo\"));\n\t\texpect(newTuple[1]).to(beNil());\n\t\texpect(newTuple[2]).to(equal(@\"bar\"));\n\t\texpect(newTuple[3]).to(beNil());\n\t});\n\n\tqck_it(@\"should add NSNull\", ^{\n\t\tRACTuple *newTuple = [tuple tupleByAddingObject:NSNull.null];\n\t\texpect(@(newTuple.count)).to(equal(@4));\n\t\texpect(newTuple[0]).to(equal(@\"foo\"));\n\t\texpect(newTuple[1]).to(beNil());\n\t\texpect(newTuple[2]).to(equal(@\"bar\"));\n\t\texpect(newTuple[3]).to(equal(NSNull.null));\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/UIActionSheetRACSupportSpec.m",
    "content": "//\n//  UIActionSheetRACSupportSpec.m\n//  ReactiveCocoa\n//\n//  Created by Dave Lee on 2013-06-22.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACSignal.h\"\n#import \"RACSignal+Operations.h\"\n#import \"UIActionSheet+RACSignalSupport.h\"\n\nQuickSpecBegin(UIActionSheetRACSupportSpec)\n\nqck_describe(@\"-rac_buttonClickedSignal\", ^{\n\t__block UIActionSheet *actionSheet;\n\n\tqck_beforeEach(^{\n\t\tactionSheet = [[UIActionSheet alloc] init];\n\t\t[actionSheet addButtonWithTitle:@\"Button 0\"];\n\t\t[actionSheet addButtonWithTitle:@\"Button 1\"];\n\t\texpect(actionSheet).notTo(beNil());\n\t});\n\n\tqck_it(@\"should send the index of the clicked button\", ^{\n\t\t__block NSNumber *index = nil;\n\t\t[actionSheet.rac_buttonClickedSignal subscribeNext:^(NSNumber *i) {\n\t\t\tindex = i;\n\t\t}];\n\n\t\t[actionSheet.delegate actionSheet:actionSheet clickedButtonAtIndex:1];\n\t\texpect(index).to(equal(@1));\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/UIAlertViewRACSupportSpec.m",
    "content": "//\n//  UIAlertViewRACSupportSpec.m\n//  ReactiveCocoa\n//\n//  Created by Henrik Hodne on 6/16/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import <objc/message.h>\n#import \"RACSignal.h\"\n#import \"UIAlertView+RACSignalSupport.h\"\n\nQuickSpecBegin(UIAlertViewRACSupportSpec)\n\nqck_describe(@\"UIAlertView\", ^{\n\t__block UIAlertView *alertView;\n\n\tqck_beforeEach(^{\n\t\talertView = [[UIAlertView alloc] initWithFrame:CGRectZero];\n\t\texpect(alertView).notTo(beNil());\n\t});\n\n\tqck_it(@\"sends the index of the clicked button to the buttonClickedSignal when a button is clicked\", ^{\n\t\t__block NSInteger index = -1;\n\t\t[alertView.rac_buttonClickedSignal subscribeNext:^(NSNumber *sentIndex) {\n\t\t\tindex = sentIndex.integerValue;\n\t\t}];\n\n\t\t[alertView.delegate alertView:alertView clickedButtonAtIndex:2];\n\t\texpect(@(index)).to(equal(@2));\n\t});\n\n\tqck_it(@\"sends the index of the appropriate button to the willDismissSignal when dismissed programatically\", ^{\n\t\t__block NSInteger index = -1;\n\t\t[alertView.rac_willDismissSignal subscribeNext:^(NSNumber *sentIndex) {\n\t\t\tindex = sentIndex.integerValue;\n\t\t}];\n\n\t\t[alertView.delegate alertView:alertView willDismissWithButtonIndex:2];\n\t\texpect(@(index)).to(equal(@2));\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/UIBarButtonItemRACSupportSpec.m",
    "content": "//\n//  UIBarButtonItemRACSupportSpec.m\n//  ReactiveCocoa\n//\n//  Created by Kyle LeNeau on 4/13/13.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACControlCommandExamples.h\"\n\n#import \"UIBarButtonItem+RACCommandSupport.h\"\n#import \"RACCommand.h\"\n#import \"RACDisposable.h\"\n\nQuickSpecBegin(UIBarButtonItemRACSupportSpec)\n\nqck_describe(@\"UIBarButtonItem\", ^{\n\t__block UIBarButtonItem *button;\n\t\n\tqck_beforeEach(^{\n\t\tbutton = [[UIBarButtonItem alloc] init];\n\t\texpect(button).notTo(beNil());\n\t});\n\n\tqck_itBehavesLike(RACControlCommandExamples, ^{\n\t\treturn @{\n\t\t\tRACControlCommandExampleControl: button,\n\t\t\tRACControlCommandExampleActivateBlock: ^(UIBarButtonItem *button) {\n\t\t\t\tNSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[button.target methodSignatureForSelector:button.action]];\n\t\t\t\tinvocation.selector = button.action;\n\n\t\t\t\tid target = button.target;\n\t\t\t\t[invocation setArgument:&target atIndex:2];\n\t\t\t\t[invocation invokeWithTarget:target];\n\t\t\t}\n\t\t};\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/UIButtonRACSupportSpec.m",
    "content": "//\n//  UIButtonRACSupportSpec.m\n//  ReactiveCocoa\n//\n//  Created by Ash Furrow on 2013-06-06.\n//  Copyright (c) 2013 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"RACControlCommandExamples.h\"\n#import \"RACTestUIButton.h\"\n\n#import \"UIButton+RACCommandSupport.h\"\n#import \"RACCommand.h\"\n#import \"RACDisposable.h\"\n\nQuickSpecBegin(UIButtonRACSupportSpec)\n\nqck_describe(@\"UIButton\", ^{\n\t__block UIButton *button;\n\t\n\tqck_beforeEach(^{\n\t\tbutton = [RACTestUIButton button];\n\t\texpect(button).notTo(beNil());\n\t});\n\n\tqck_itBehavesLike(RACControlCommandExamples, ^{\n\t\treturn @{\n\t\t\tRACControlCommandExampleControl: button,\n\t\t\tRACControlCommandExampleActivateBlock: ^(UIButton *button) {\n\t\t\t\t#pragma clang diagnostic push\n\t\t\t\t#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"\n\t\t\t\t[button sendActionsForControlEvents:UIControlEventTouchUpInside];\n\t\t\t\t#pragma clang diagnostic pop\n\t\t\t}\n\t\t};\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Objective-C/UIImagePickerControllerRACSupportSpec.m",
    "content": "//\n//  UIImagePickerControllerRACSupportSpec.m\n//  ReactiveCocoa\n//\n//  Created by Timur Kuchkarov on 17.04.14.\n//  Copyright (c) 2014 GitHub, Inc. All rights reserved.\n//\n\n#import <Quick/Quick.h>\n#import <Nimble/Nimble.h>\n\n#import \"UIImagePickerController+RACSignalSupport.h\"\n#import \"RACSignal.h\"\n\nQuickSpecBegin(UIImagePickerControllerRACSupportSpec)\n\nqck_describe(@\"UIImagePickerController\", ^{\n\t__block UIImagePickerController *imagePicker;\n\t\n\tqck_beforeEach(^{\n\t\timagePicker = [[UIImagePickerController alloc] init];\n\t\texpect(imagePicker).notTo(beNil());\n\t});\n\t\n\tqck_it(@\"sends the user info dictionary after confirmation\", ^{\n\t\t__block NSDictionary *selectedImageUserInfo = nil;\n\t\t[imagePicker.rac_imageSelectedSignal subscribeNext:^(NSDictionary *userInfo) {\n\t\t\tselectedImageUserInfo = userInfo;\n\t\t}];\n\t\t\n\t\tNSDictionary *info = @{\n\t\t\tUIImagePickerControllerMediaType: @\"public.image\",\n\t\t\tUIImagePickerControllerMediaMetadata: @{}\n\t\t};\n\t\t[imagePicker.delegate imagePickerController:imagePicker didFinishPickingMediaWithInfo:info];\n\t\texpect(selectedImageUserInfo).to(equal(info));\n\t});\n\t\n\tqck_it(@\"cancels image picking process\", ^{\n\t\t__block BOOL didSend = NO;\n\t\t__block BOOL didComplete = NO;\n\t\t[imagePicker.rac_imageSelectedSignal subscribeNext:^(NSDictionary *userInfo) {\n\t\t\tdidSend = YES;\n\t\t} completed:^{\n\t\t\tdidComplete = YES;\n\t\t}];\n\t\t\n\t\t[imagePicker.delegate imagePickerControllerDidCancel:imagePicker];\n\t\texpect(@(didSend)).to(beFalsy());\n\t\texpect(@(didComplete)).to(beTruthy());\n\t});\n});\n\nQuickSpecEnd\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/ActionSpec.swift",
    "content": "//\n//  ActionSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-12-11.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\nimport Result\nimport Nimble\nimport Quick\nimport ReactiveCocoa\n\nclass ActionSpec: QuickSpec {\n\toverride func spec() {\n\t\tdescribe(\"Action\") {\n\t\t\tvar action: Action<Int, String, NSError>!\n\t\t\tvar enabled: MutableProperty<Bool>!\n\n\t\t\tvar executionCount = 0\n\t\t\tvar values: [String] = []\n\t\t\tvar errors: [NSError] = []\n\n\t\t\tvar scheduler: TestScheduler!\n\t\t\tlet testError = NSError(domain: \"ActionSpec\", code: 1, userInfo: nil)\n\n\t\t\tbeforeEach {\n\t\t\t\texecutionCount = 0\n\t\t\t\tvalues = []\n\t\t\t\terrors = []\n\t\t\t\tenabled = MutableProperty(false)\n\n\t\t\t\tscheduler = TestScheduler()\n\t\t\t\taction = Action(enabledIf: enabled) { number in\n\t\t\t\t\treturn SignalProducer { observer, disposable in\n\t\t\t\t\t\texecutionCount++\n\n\t\t\t\t\t\tif number % 2 == 0 {\n\t\t\t\t\t\t\tobserver.sendNext(\"\\(number)\")\n\t\t\t\t\t\t\tobserver.sendNext(\"\\(number)\\(number)\")\n\n\t\t\t\t\t\t\tscheduler.schedule {\n\t\t\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tscheduler.schedule {\n\t\t\t\t\t\t\t\tobserver.sendFailed(testError)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\taction.values.observeNext { values.append($0) }\n\t\t\t\taction.errors.observeNext { errors.append($0) }\n\t\t\t}\n\n\t\t\tit(\"should be disabled and not executing after initialization\") {\n\t\t\t\texpect(action.enabled.value) == false\n\t\t\t\texpect(action.executing.value) == false\n\t\t\t}\n\n\t\t\tit(\"should error if executed while disabled\") {\n\t\t\t\tvar receivedError: ActionError<NSError>?\n\t\t\t\taction.apply(0).startWithFailed {\n\t\t\t\t\treceivedError = $0\n\t\t\t\t}\n\n\t\t\t\texpect(receivedError).notTo(beNil())\n\t\t\t\tif let error = receivedError {\n\t\t\t\t\tlet expectedError = ActionError<NSError>.NotEnabled\n\t\t\t\t\texpect(error == expectedError) == true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tit(\"should enable and disable based on the given property\") {\n\t\t\t\tenabled.value = true\n\t\t\t\texpect(action.enabled.value) == true\n\t\t\t\texpect(action.executing.value) == false\n\n\t\t\t\tenabled.value = false\n\t\t\t\texpect(action.enabled.value) == false\n\t\t\t\texpect(action.executing.value) == false\n\t\t\t}\n\n\t\t\tdescribe(\"execution\") {\n\t\t\t\tbeforeEach {\n\t\t\t\t\tenabled.value = true\n\t\t\t\t}\n\n\t\t\t\tit(\"should execute successfully\") {\n\t\t\t\t\tvar receivedValue: String?\n\n\t\t\t\t\taction.apply(0).startWithNext {\n\t\t\t\t\t\treceivedValue = $0\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(executionCount) == 1\n\t\t\t\t\texpect(action.executing.value) == true\n\t\t\t\t\texpect(action.enabled.value) == false\n\n\t\t\t\t\texpect(receivedValue) == \"00\"\n\t\t\t\t\texpect(values) == [ \"0\", \"00\" ]\n\t\t\t\t\texpect(errors) == []\n\n\t\t\t\t\tscheduler.run()\n\t\t\t\t\texpect(action.executing.value) == false\n\t\t\t\t\texpect(action.enabled.value) == true\n\n\t\t\t\t\texpect(values) == [ \"0\", \"00\" ]\n\t\t\t\t\texpect(errors) == []\n\t\t\t\t}\n\n\t\t\t\tit(\"should execute with an error\") {\n\t\t\t\t\tvar receivedError: ActionError<NSError>?\n\n\t\t\t\t\taction.apply(1).startWithFailed {\n\t\t\t\t\t\treceivedError = $0\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(executionCount) == 1\n\t\t\t\t\texpect(action.executing.value) == true\n\t\t\t\t\texpect(action.enabled.value) == false\n\n\t\t\t\t\tscheduler.run()\n\t\t\t\t\texpect(action.executing.value) == false\n\t\t\t\t\texpect(action.enabled.value) == true\n\n\t\t\t\t\texpect(receivedError).notTo(beNil())\n\t\t\t\t\tif let error = receivedError {\n\t\t\t\t\t\tlet expectedError = ActionError<NSError>.ProducerError(testError)\n\t\t\t\t\t\texpect(error == expectedError) == true\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(values) == []\n\t\t\t\t\texpect(errors) == [ testError ]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"CocoaAction\") {\n\t\t\tvar action: Action<Int, Int, NoError>!\n\n\t\t\tbeforeEach {\n\t\t\t\taction = Action { value in SignalProducer(value: value + 1) }\n\t\t\t\texpect(action.enabled.value) == true\n\n\t\t\t\texpect(action.unsafeCocoaAction.enabled).toEventually(beTruthy())\n\t\t\t}\n\n\t\t\t#if os(OSX)\n\t\t\t\tit(\"should be compatible with AppKit\") {\n\t\t\t\t\tlet control = NSControl(frame: NSZeroRect)\n\t\t\t\t\tcontrol.target = action.unsafeCocoaAction\n\t\t\t\t\tcontrol.action = CocoaAction.selector\n\t\t\t\t\tcontrol.performClick(nil)\n\t\t\t\t}\n\t\t\t#elseif os(iOS)\n\t\t\t\tit(\"should be compatible with UIKit\") {\n\t\t\t\t\tlet control = UIControl(frame: CGRectZero)\n\t\t\t\t\tcontrol.addTarget(action.unsafeCocoaAction, action: CocoaAction.selector, forControlEvents: UIControlEvents.TouchDown)\n\t\t\t\t\tcontrol.sendActionsForControlEvents(UIControlEvents.TouchDown)\n\t\t\t\t}\n\t\t\t#endif\n\n\t\t\tit(\"should generate KVO notifications for enabled\") {\n\t\t\t\tvar values: [Bool] = []\n\n\t\t\t\taction.unsafeCocoaAction\n\t\t\t\t\t.rac_valuesForKeyPath(\"enabled\", observer: nil)\n\t\t\t\t\t.toSignalProducer()\n\t\t\t\t\t.map { $0! as! Bool }\n\t\t\t\t\t.start(Observer(next: { values.append($0) }))\n\n\t\t\t\texpect(values) == [ true ]\n\n\t\t\t\tlet result = action.apply(0).first()\n\t\t\t\texpect(result?.value) == 1\n\t\t\t\texpect(values).toEventually(equal([ true, false, true ]))\n\t\t\t}\n\n\t\t\tit(\"should generate KVO notifications for executing\") {\n\t\t\t\tvar values: [Bool] = []\n\n\t\t\t\taction.unsafeCocoaAction\n\t\t\t\t\t.rac_valuesForKeyPath(\"executing\", observer: nil)\n\t\t\t\t\t.toSignalProducer()\n\t\t\t\t\t.map { $0! as! Bool }\n\t\t\t\t\t.start(Observer(next: { values.append($0) }))\n\n\t\t\t\texpect(values) == [ false ]\n\n\t\t\t\tlet result = action.apply(0).first()\n\t\t\t\texpect(result?.value) == 1\n\t\t\t\texpect(values).toEventually(equal([ false, true, false ]))\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/AtomicSpec.swift",
    "content": "//\n//  AtomicSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-07-13.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\nimport Nimble\nimport Quick\nimport ReactiveCocoa\n\nclass AtomicSpec: QuickSpec {\n\toverride func spec() {\n\t\tvar atomic: Atomic<Int>!\n\n\t\tbeforeEach {\n\t\t\tatomic = Atomic(1)\n\t\t}\n\n\t\tit(\"should read and write the value directly\") {\n\t\t\texpect(atomic.value) == 1\n\n\t\t\tatomic.value = 2\n\t\t\texpect(atomic.value) == 2\n\t\t}\n\n\t\tit(\"should swap the value atomically\") {\n\t\t\texpect(atomic.swap(2)) == 1\n\t\t\texpect(atomic.value) == 2\n\t\t}\n\n\t\tit(\"should modify the value atomically\") {\n\t\t\texpect(atomic.modify({ $0 + 1 })) == 1\n\t\t\texpect(atomic.value) == 2\n\t\t}\n\n\t\tit(\"should perform an action with the value\") {\n\t\t\tlet result: Bool = atomic.withValue { $0 == 1 }\n\t\t\texpect(result) == true\n\t\t\texpect(atomic.value) == 1\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/BagSpec.swift",
    "content": "//\n//  BagSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-07-13.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\nimport Nimble\nimport Quick\nimport ReactiveCocoa\n\nclass BagSpec: QuickSpec {\n\toverride func spec() {\n\t\tvar bag = Bag<String>()\n\n\t\tbeforeEach {\n\t\t\tbag = Bag()\n\t\t}\n\n\t\tit(\"should insert values\") {\n\t\t\tbag.insert(\"foo\")\n\t\t\tbag.insert(\"bar\")\n\t\t\tbag.insert(\"buzz\")\n\n\t\t\texpect(bag).to(contain(\"foo\"))\n\t\t\texpect(bag).to(contain(\"bar\"))\n\t\t\texpect(bag).to(contain(\"buzz\"))\n\t\t\texpect(bag).toNot(contain(\"fuzz\"))\n\t\t\texpect(bag).toNot(contain(\"foobar\"))\n\t\t}\n\n\t\tit(\"should remove values given the token from insertion\") {\n\t\t\tlet a = bag.insert(\"foo\")\n\t\t\tlet b = bag.insert(\"bar\")\n\t\t\tlet c = bag.insert(\"buzz\")\n\n\t\t\tbag.removeValueForToken(b)\n\t\t\texpect(bag).to(contain(\"foo\"))\n\t\t\texpect(bag).toNot(contain(\"bar\"))\n\t\t\texpect(bag).to(contain(\"buzz\"))\n\n\t\t\tbag.removeValueForToken(a)\n\t\t\texpect(bag).toNot(contain(\"foo\"))\n\t\t\texpect(bag).toNot(contain(\"bar\"))\n\t\t\texpect(bag).to(contain(\"buzz\"))\n\n\t\t\tbag.removeValueForToken(c)\n\t\t\texpect(bag).toNot(contain(\"foo\"))\n\t\t\texpect(bag).toNot(contain(\"bar\"))\n\t\t\texpect(bag).toNot(contain(\"buzz\"))\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/DisposableSpec.swift",
    "content": "//\n//  DisposableSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-07-13.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\nimport Nimble\nimport Quick\nimport ReactiveCocoa\n\nclass DisposableSpec: QuickSpec {\n\toverride func spec() {\n\t\tdescribe(\"SimpleDisposable\") {\n\t\t\tit(\"should set disposed to true\") {\n\t\t\t\tlet disposable = SimpleDisposable()\n\t\t\t\texpect(disposable.disposed) == false\n\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(disposable.disposed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"ActionDisposable\") {\n\t\t\tit(\"should run the given action upon disposal\") {\n\t\t\t\tvar didDispose = false\n\t\t\t\tlet disposable = ActionDisposable {\n\t\t\t\t\tdidDispose = true\n\t\t\t\t}\n\n\t\t\t\texpect(didDispose) == false\n\t\t\t\texpect(disposable.disposed) == false\n\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(didDispose) == true\n\t\t\t\texpect(disposable.disposed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"CompositeDisposable\") {\n\t\t\tvar disposable = CompositeDisposable()\n\n\t\t\tbeforeEach {\n\t\t\t\tdisposable = CompositeDisposable()\n\t\t\t}\n\n\t\t\tit(\"should ignore the addition of nil\") {\n\t\t\t\tdisposable.addDisposable(nil)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tit(\"should dispose of added disposables\") {\n\t\t\t\tlet simpleDisposable = SimpleDisposable()\n\t\t\t\tdisposable.addDisposable(simpleDisposable)\n\n\t\t\t\tvar didDispose = false\n\t\t\t\tdisposable.addDisposable {\n\t\t\t\t\tdidDispose = true\n\t\t\t\t}\n\n\t\t\t\texpect(simpleDisposable.disposed) == false\n\t\t\t\texpect(didDispose) == false\n\t\t\t\texpect(disposable.disposed) == false\n\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(simpleDisposable.disposed) == true\n\t\t\t\texpect(didDispose) == true\n\t\t\t\texpect(disposable.disposed) == true\n\t\t\t}\n\n\t\t\tit(\"should not dispose of removed disposables\") {\n\t\t\t\tlet simpleDisposable = SimpleDisposable()\n\t\t\t\tlet handle = disposable += simpleDisposable\n\n\t\t\t\t// We should be allowed to call this any number of times.\n\t\t\t\thandle.remove()\n\t\t\t\thandle.remove()\n\t\t\t\texpect(simpleDisposable.disposed) == false\n\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(simpleDisposable.disposed) == false\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"ScopedDisposable\") {\n\t\t\tit(\"should dispose of the inner disposable upon deinitialization\") {\n\t\t\t\tlet simpleDisposable = SimpleDisposable()\n\n\t\t\t\tfunc runScoped() {\n\t\t\t\t\tlet scopedDisposable = ScopedDisposable(simpleDisposable)\n\t\t\t\t\texpect(simpleDisposable.disposed) == false\n\t\t\t\t\texpect(scopedDisposable.disposed) == false\n\t\t\t\t}\n\n\t\t\t\texpect(simpleDisposable.disposed) == false\n\n\t\t\t\trunScoped()\n\t\t\t\texpect(simpleDisposable.disposed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"SerialDisposable\") {\n\t\t\tvar disposable: SerialDisposable!\n\n\t\t\tbeforeEach {\n\t\t\t\tdisposable = SerialDisposable()\n\t\t\t}\n\n\t\t\tit(\"should dispose of the inner disposable\") {\n\t\t\t\tlet simpleDisposable = SimpleDisposable()\n\t\t\t\tdisposable.innerDisposable = simpleDisposable\n\n\t\t\t\texpect(disposable.innerDisposable).notTo(beNil())\n\t\t\t\texpect(simpleDisposable.disposed) == false\n\t\t\t\texpect(disposable.disposed) == false\n\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(disposable.innerDisposable).to(beNil())\n\t\t\t\texpect(simpleDisposable.disposed) == true\n\t\t\t\texpect(disposable.disposed) == true\n\t\t\t}\n\n\t\t\tit(\"should dispose of the previous disposable when swapping innerDisposable\") {\n\t\t\t\tlet oldDisposable = SimpleDisposable()\n\t\t\t\tlet newDisposable = SimpleDisposable()\n\n\t\t\t\tdisposable.innerDisposable = oldDisposable\n\t\t\t\texpect(oldDisposable.disposed) == false\n\t\t\t\texpect(newDisposable.disposed) == false\n\n\t\t\t\tdisposable.innerDisposable = newDisposable\n\t\t\t\texpect(oldDisposable.disposed) == true\n\t\t\t\texpect(newDisposable.disposed) == false\n\t\t\t\texpect(disposable.disposed) == false\n\n\t\t\t\tdisposable.innerDisposable = nil\n\t\t\t\texpect(newDisposable.disposed) == true\n\t\t\t\texpect(disposable.disposed) == false\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/FlattenSpec.swift",
    "content": "//\n//  FlattenSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Oleg Shnitko on 1/22/16.\n//  Copyright © 2016 GitHub. All rights reserved.\n//\n\nimport Result\nimport Nimble\nimport Quick\nimport ReactiveCocoa\n\nprivate extension SignalType {\n\ttypealias Pipe = (signal: Signal<Value, Error>, observer: Observer<Value, Error>)\n}\n\nprivate typealias Pipe = Signal<SignalProducer<Int, TestError>, TestError>.Pipe\n\nclass FlattenSpec: QuickSpec {\n\toverride func spec() {\n\t\tfunc describeSignalFlattenDisposal(flattenStrategy: FlattenStrategy, name: String) {\n\t\t\tdescribe(name) {\n\t\t\t\tvar pipe: Pipe!\n\t\t\t\tvar disposable: Disposable?\n\n\t\t\t\tbeforeEach {\n\t\t\t\t\tpipe = Signal.pipe()\n\t\t\t\t\tdisposable = pipe.signal\n\t\t\t\t\t\t.flatten(flattenStrategy)\n\t\t\t\t\t\t.observe { _ in }\n\t\t\t\t}\n\n\t\t\t\tafterEach {\n\t\t\t\t\tdisposable?.dispose()\n\t\t\t\t}\n\n\t\t\t\tcontext(\"disposal\") {\n\t\t\t\t\tvar disposed = false\n\n\t\t\t\t\tbeforeEach {\n\t\t\t\t\t\tdisposed = false\n\t\t\t\t\t\tpipe.observer.sendNext(SignalProducer<Int, TestError> { _, disposable in\n\t\t\t\t\t\t\tdisposable += ActionDisposable {\n\t\t\t\t\t\t\t\tdisposed = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should dispose inner signals when outer signal interrupted\") {\n\t\t\t\t\t\tpipe.observer.sendInterrupted()\n\t\t\t\t\t\texpect(disposed) == true\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should dispose inner signals when outer signal failed\") {\n\t\t\t\t\t\tpipe.observer.sendFailed(.Default)\n\t\t\t\t\t\texpect(disposed) == true\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should not dispose inner signals when outer signal completed\") {\n\t\t\t\t\t\tpipe.observer.sendCompleted()\n\t\t\t\t\t\texpect(disposed) == false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcontext(\"Signal\") {\n\t\t\tdescribeSignalFlattenDisposal(.Latest, name: \"switchToLatest\")\n\t\t\tdescribeSignalFlattenDisposal(.Merge, name: \"merge\")\n\t\t\tdescribeSignalFlattenDisposal(.Concat, name: \"concat\")\n\t\t}\n\n\t\tfunc describeSignalProducerFlattenDisposal(flattenStrategy: FlattenStrategy, name: String) {\n\t\t\tdescribe(name) {\n\t\t\t\tit(\"disposes original signal when result signal interrupted\") {\n\t\t\t\t\tvar disposed = false\n\n\t\t\t\t\tlet disposable = SignalProducer<SignalProducer<(), NoError>, NoError> { _, disposable in\n\t\t\t\t\t\tdisposable += ActionDisposable {\n\t\t\t\t\t\t\tdisposed = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\t.flatten(flattenStrategy)\n\t\t\t\t\t\t.start()\n\n\t\t\t\t\tdisposable.dispose()\n\t\t\t\t\texpect(disposed) == true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcontext(\"SignalProducer\") {\n\t\t\tdescribeSignalProducerFlattenDisposal(.Latest, name: \"switchToLatest\")\n\t\t\tdescribeSignalProducerFlattenDisposal(.Merge, name: \"merge\")\n\t\t\tdescribeSignalProducerFlattenDisposal(.Concat, name: \"concat\")\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/FoundationExtensionsSpec.swift",
    "content": "//\n//  FoundationExtensionsSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Neil Pankey on 5/22/15.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\nimport Result\nimport Nimble\nimport Quick\nimport ReactiveCocoa\n\nclass FoundationExtensionsSpec: QuickSpec {\n\toverride func spec() {\n\t\tdescribe(\"NSNotificationCenter.rac_notifications\") {\n\n\t\t\tit(\"should send notifications on the producer\") {\n\t\t\t\tlet center = NSNotificationCenter.defaultCenter()\n\t\t\t\tlet producer = center.rac_notifications(\"rac_notifications_test\")\n\n\t\t\t\tvar notif: NSNotification? = nil\n\t\t\t\tlet disposable = producer.startWithNext { notif = $0 }\n\n\t\t\t\tcenter.postNotificationName(\"some_other_notification\", object: nil)\n\t\t\t\texpect(notif).to(beNil())\n\n\t\t\t\tcenter.postNotificationName(\"rac_notifications_test\", object: nil)\n\t\t\t\texpect(notif?.name) == \"rac_notifications_test\"\n\n\t\t\t\tnotif = nil\n\t\t\t\tdisposable.dispose()\n\n\t\t\t\tcenter.postNotificationName(\"rac_notifications_test\", object: nil)\n\t\t\t\texpect(notif).to(beNil())\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/ObjectiveCBridgingSpec.swift",
    "content": "//\n//  ObjectiveCBridgingSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2015-01-23.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\nimport Result\nimport Nimble\nimport Quick\nimport ReactiveCocoa\nimport XCTest\n\nclass ObjectiveCBridgingSpec: QuickSpec {\n\toverride func spec() {\n\t\tdescribe(\"RACScheduler\") {\n\t\t\tvar originalScheduler: RACTestScheduler!\n\t\t\tvar scheduler: DateSchedulerType!\n\n\t\t\tbeforeEach {\n\t\t\t\toriginalScheduler = RACTestScheduler()\n\t\t\t\tscheduler = originalScheduler as DateSchedulerType\n\t\t\t}\n\n\t\t\tit(\"gives current date\") {\n\t\t\t\texpect(scheduler.currentDate).to(beCloseTo(NSDate()))\n\t\t\t}\n\n\t\t\tit(\"schedules actions\") {\n\t\t\t\tvar actionRan: Bool = false\n\n\t\t\t\tscheduler.schedule {\n\t\t\t\t\tactionRan = true\n\t\t\t\t}\n\n\t\t\t\texpect(actionRan) == false\n\t\t\t\toriginalScheduler.step()\n\t\t\t\texpect(actionRan) == true\n\t\t\t}\n\n\t\t\tit(\"does not invoke action if disposed\") {\n\t\t\t\tvar actionRan: Bool = false\n\n\t\t\t\tlet disposable: Disposable? = scheduler.schedule {\n\t\t\t\t\tactionRan = true\n\t\t\t\t}\n\n\t\t\t\texpect(actionRan) == false\n\t\t\t\tdisposable!.dispose()\n\t\t\t\toriginalScheduler.step()\n\t\t\t\texpect(actionRan) == false\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"RACSignal.toSignalProducer\") {\n\t\t\tit(\"should subscribe once per start()\") {\n\t\t\t\tvar subscriptions = 0\n\n\t\t\t\tlet racSignal = RACSignal.createSignal { subscriber in\n\t\t\t\t\tsubscriber.sendNext(subscriptions++)\n\t\t\t\t\tsubscriber.sendCompleted()\n\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\n\t\t\t\tlet producer = racSignal.toSignalProducer().map { $0 as! Int }\n\n\t\t\t\texpect((producer.single())?.value) == 0\n\t\t\t\texpect((producer.single())?.value) == 1\n\t\t\t\texpect((producer.single())?.value) == 2\n\t\t\t}\n\n\t\t\tit(\"should forward errors\")\t{\n\t\t\t\tlet error = TestError.Default as NSError\n\n\t\t\t\tlet racSignal = RACSignal.error(error)\n\t\t\t\tlet producer = racSignal.toSignalProducer()\n\t\t\t\tlet result = producer.last()\n\n\t\t\t\texpect(result?.error) == error\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"toRACSignal\") {\n\t\t\tlet key = \"TestKey\"\n\t\t\tlet userInfo: [String: String] = [key: \"TestValue\"]\n\t\t\tlet testNSError = NSError(domain: \"TestDomain\", code: 1, userInfo: userInfo)\n\t\t\tdescribe(\"on a Signal\") {\n\t\t\t\tit(\"should forward events\") {\n\t\t\t\t\tlet (signal, observer) = Signal<NSNumber, NoError>.pipe()\n\t\t\t\t\tlet racSignal = signal.toRACSignal()\n\n\t\t\t\t\tvar lastValue: NSNumber?\n\t\t\t\t\tvar didComplete = false\n\n\t\t\t\t\tracSignal.subscribeNext({ number in\n\t\t\t\t\t\tlastValue = number as? NSNumber\n\t\t\t\t\t}, completed: {\n\t\t\t\t\t\tdidComplete = true\n\t\t\t\t\t})\n\n\t\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\t\tfor number in [1, 2, 3] {\n\t\t\t\t\t\tobserver.sendNext(number)\n\t\t\t\t\t\texpect(lastValue) == number\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(didComplete) == false\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\texpect(didComplete) == true\n\t\t\t\t}\n\n\t\t\t\tit(\"should convert errors to NSError\") {\n\t\t\t\t\tlet (signal, observer) = Signal<AnyObject, TestError>.pipe()\n\t\t\t\t\tlet racSignal = signal.toRACSignal()\n\n\t\t\t\t\tlet expectedError = TestError.Error2\n\t\t\t\t\tvar error: NSError?\n\n\t\t\t\t\tracSignal.subscribeError {\n\t\t\t\t\t\terror = $0\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tobserver.sendFailed(expectedError)\n\t\t\t\t\texpect(error) == expectedError as NSError\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tit(\"should maintain userInfo on NSError\") {\n\t\t\t\t\tlet (signal, observer) = Signal<AnyObject, NSError>.pipe()\n\t\t\t\t\tlet racSignal = signal.toRACSignal()\n\t\t\t\t\t\n\t\t\t\t\tvar error: NSError?\n\t\t\t\t\t\n\t\t\t\t\tracSignal.subscribeError {\n\t\t\t\t\t\terror = $0\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tobserver.sendFailed(testNSError)\n\t\t\t\t\t\n\t\t\t\t\tlet userInfoValue = error?.userInfo[key] as? String\n\t\t\t\t\texpect(userInfoValue) == userInfo[key]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdescribe(\"on a SignalProducer\") {\n\t\t\t\tit(\"should start once per subscription\") {\n\t\t\t\t\tvar subscriptions = 0\n\n\t\t\t\t\tlet producer = SignalProducer<NSNumber, NoError>.attempt {\n\t\t\t\t\t\treturn .Success(subscriptions++)\n\t\t\t\t\t}\n\t\t\t\t\tlet racSignal = producer.toRACSignal()\n\n\t\t\t\t\texpect(racSignal.first() as? NSNumber) == 0\n\t\t\t\t\texpect(racSignal.first() as? NSNumber) == 1\n\t\t\t\t\texpect(racSignal.first() as? NSNumber) == 2\n\t\t\t\t}\n\n\t\t\t\tit(\"should convert errors to NSError\") {\n\t\t\t\t\tlet producer = SignalProducer<AnyObject, TestError>(error: .Error1)\n\t\t\t\t\tlet racSignal = producer.toRACSignal().materialize()\n\n\t\t\t\t\tlet event = racSignal.first() as? RACEvent\n\t\t\t\t\texpect(event?.error) == TestError.Error1 as NSError\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tit(\"should maintain userInfo on NSError\") {\n\t\t\t\t\tlet producer = SignalProducer<AnyObject, NSError>(error: testNSError)\n\t\t\t\t\tlet racSignal = producer.toRACSignal().materialize()\n\t\t\t\t\t\n\t\t\t\t\tlet event = racSignal.first() as? RACEvent\n\t\t\t\t\tlet userInfoValue = event?.error.userInfo[key] as? String\n\t\t\t\t\texpect(userInfoValue) == userInfo[key]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"RACCommand.toAction\") {\n\t\t\tvar command: RACCommand!\n\t\t\tvar results: [Int] = []\n\n\t\t\tvar enabledSubject: RACSubject!\n\t\t\tvar enabled = false\n\n\t\t\tvar action: Action<AnyObject?, AnyObject?, NSError>!\n\n\t\t\tbeforeEach {\n\t\t\t\tenabledSubject = RACSubject()\n\t\t\t\tresults = []\n\n\t\t\t\tcommand = RACCommand(enabled: enabledSubject) { (input: AnyObject?) -> RACSignal! in\n\t\t\t\t\tlet inputNumber = input as! Int\n\t\t\t\t\treturn RACSignal.`return`(inputNumber + 1)\n\t\t\t\t}\n\n\t\t\t\texpect(command).notTo(beNil())\n\n\t\t\t\tcommand.enabled.subscribeNext { enabled = $0 as! Bool }\n\t\t\t\texpect(enabled) == true\n\n\t\t\t\tcommand.executionSignals.flatten().subscribeNext { results.append($0 as! Int) }\n\t\t\t\texpect(results) == []\n\n\t\t\t\taction = command.toAction()\n\t\t\t}\n\n\t\t\tit(\"should reflect the enabledness of the command\") {\n\t\t\t\texpect(action.enabled.value) == true\n\n\t\t\t\tenabledSubject.sendNext(false)\n\t\t\t\texpect(enabled).toEventually(beFalsy())\n\t\t\t\texpect(action.enabled.value) == false\n\t\t\t}\n\n\t\t\tit(\"should execute the command once per start()\") {\n\t\t\t\tlet producer = action.apply(0)\n\t\t\t\texpect(results) == []\n\n\t\t\t\tproducer.start()\n\t\t\t\texpect(results).toEventually(equal([ 1 ]))\n\n\t\t\t\tproducer.start()\n\t\t\t\texpect(results).toEventually(equal([ 1, 1 ]))\n\n\t\t\t\tlet otherProducer = action.apply(2)\n\t\t\t\texpect(results) == [ 1, 1 ]\n\n\t\t\t\totherProducer.start()\n\t\t\t\texpect(results).toEventually(equal([ 1, 1, 3 ]))\n\n\t\t\t\tproducer.start()\n\t\t\t\texpect(results).toEventually(equal([ 1, 1, 3, 1 ]))\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"toRACCommand\") {\n\t\t\tvar action: Action<AnyObject?, NSString, TestError>!\n\t\t\tvar results: [NSString] = []\n\n\t\t\tvar enabledProperty: MutableProperty<Bool>!\n\n\t\t\tvar command: RACCommand!\n\t\t\tvar enabled = false\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tresults = []\n\t\t\t\tenabledProperty = MutableProperty(true)\n\n\t\t\t\taction = Action(enabledIf: enabledProperty) { input in\n\t\t\t\t\tlet inputNumber = input as! Int\n\t\t\t\t\treturn SignalProducer(value: \"\\(inputNumber + 1)\")\n\t\t\t\t}\n\n\t\t\t\texpect(action.enabled.value) == true\n\n\t\t\t\taction.values.observeNext { results.append($0) }\n\n\t\t\t\tcommand = toRACCommand(action)\n\t\t\t\texpect(command).notTo(beNil())\n\n\t\t\t\tcommand.enabled.subscribeNext { enabled = $0 as! Bool }\n\t\t\t\texpect(enabled) == true\n\t\t\t}\n\n\t\t\tit(\"should reflect the enabledness of the action\") {\n\t\t\t\tenabledProperty.value = false\n\t\t\t\texpect(enabled).toEventually(beFalsy())\n\n\t\t\t\tenabledProperty.value = true\n\t\t\t\texpect(enabled).toEventually(beTruthy())\n\t\t\t}\n\n\t\t\tit(\"should apply and start a signal once per execution\") {\n\t\t\t\tlet signal = command.execute(0)\n\n\t\t\t\tdo {\n\t\t\t\t\ttry signal.asynchronouslyWaitUntilCompleted()\n\t\t\t\t\texpect(results) == [ \"1\" ]\n\n\t\t\t\t\ttry signal.asynchronouslyWaitUntilCompleted()\n\t\t\t\t\texpect(results) == [ \"1\" ]\n\n\t\t\t\t\ttry command.execute(2).asynchronouslyWaitUntilCompleted()\n\t\t\t\t\texpect(results) == [ \"1\", \"3\" ]\n\t\t\t\t} catch {\n\t\t\t\t\tXCTFail(\"Failed to wait for completion\")\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/PropertySpec.swift",
    "content": "//\n//  PropertySpec.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2015-01-23.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\nimport Result\nimport Nimble\nimport Quick\nimport ReactiveCocoa\n\nprivate let initialPropertyValue = \"InitialValue\"\nprivate let subsequentPropertyValue = \"SubsequentValue\"\nprivate let finalPropertyValue = \"FinalValue\"\n\nclass PropertySpec: QuickSpec {\n\toverride func spec() {\n\t\tdescribe(\"ConstantProperty\") {\n\t\t\tit(\"should have the value given at initialization\") {\n\t\t\t\tlet constantProperty = ConstantProperty(initialPropertyValue)\n\n\t\t\t\texpect(constantProperty.value) == initialPropertyValue\n\t\t\t}\n\n\t\t\tit(\"should yield a signal that interrupts observers without emitting any value.\") {\n\t\t\t\tlet constantProperty = ConstantProperty(initialPropertyValue)\n\n\t\t\t\tvar signalInterrupted = false\n\t\t\t\tvar hasUnexpectedEventsEmitted = false\n\n\t\t\t\tconstantProperty.signal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase .Interrupted:\n\t\t\t\t\t\tsignalInterrupted = true\n\t\t\t\t\tcase .Next, .Failed, .Completed:\n\t\t\t\t\t\thasUnexpectedEventsEmitted = true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(signalInterrupted) == true\n\t\t\t\texpect(hasUnexpectedEventsEmitted) == false\n\t\t\t}\n\n\t\t\tit(\"should yield a producer that sends the current value then completes\") {\n\t\t\t\tlet constantProperty = ConstantProperty(initialPropertyValue)\n\n\t\t\t\tvar sentValue: String?\n\t\t\t\tvar signalCompleted = false\n\n\t\t\t\tconstantProperty.producer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tsentValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tsignalCompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(sentValue) == initialPropertyValue\n\t\t\t\texpect(signalCompleted) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"MutableProperty\") {\n\t\t\tit(\"should have the value given at initialization\") {\n\t\t\t\tlet mutableProperty = MutableProperty(initialPropertyValue)\n\n\t\t\t\texpect(mutableProperty.value) == initialPropertyValue\n\t\t\t}\n\n\t\t\tit(\"should yield a producer that sends the current value then all changes\") {\n\t\t\t\tlet mutableProperty = MutableProperty(initialPropertyValue)\n\t\t\t\tvar sentValue: String?\n\n\t\t\t\tmutableProperty.producer.startWithNext { sentValue = $0 }\n\n\t\t\t\texpect(sentValue) == initialPropertyValue\n\n\t\t\t\tmutableProperty.value = subsequentPropertyValue\n\t\t\t\texpect(sentValue) == subsequentPropertyValue\n\n\t\t\t\tmutableProperty.value = finalPropertyValue\n\t\t\t\texpect(sentValue) == finalPropertyValue\n\t\t\t}\n\n\t\t\tit(\"should yield a producer that sends the current value then all changes, even if the value actually remains unchanged\") {\n\t\t\t\tlet mutableProperty = MutableProperty(initialPropertyValue)\n\t\t\t\tvar count = 0\n\n\t\t\t\tmutableProperty.producer.startWithNext { _ in count = count + 1 }\n\n\t\t\t\texpect(count) == 1\n\n\t\t\t\tmutableProperty.value = initialPropertyValue\n\t\t\t\texpect(count) == 2\n\n\t\t\t\tmutableProperty.value = initialPropertyValue\n\t\t\t\texpect(count) == 3\n\t\t\t}\n\n\t\t\tit(\"should yield a signal that emits subsequent changes to the value\") {\n\t\t\t\tlet mutableProperty = MutableProperty(initialPropertyValue)\n\t\t\t\tvar sentValue: String?\n\n\t\t\t\tmutableProperty.signal.observeNext { sentValue = $0 }\n\n\t\t\t\texpect(sentValue).to(beNil())\n\n\t\t\t\tmutableProperty.value = subsequentPropertyValue\n\t\t\t\texpect(sentValue) == subsequentPropertyValue\n\n\t\t\t\tmutableProperty.value = finalPropertyValue\n\t\t\t\texpect(sentValue) == finalPropertyValue\n\t\t\t}\n\n\t\t\tit(\"should yield a signal that emits subsequent changes to the value, even if the value actually remains unchanged\") {\n\t\t\t\tlet mutableProperty = MutableProperty(initialPropertyValue)\n\t\t\t\tvar count = 0\n\n\t\t\t\tmutableProperty.signal.observeNext { _ in count = count + 1 }\n\n\t\t\t\texpect(count) == 0\n\n\t\t\t\tmutableProperty.value = initialPropertyValue\n\t\t\t\texpect(count) == 1\n\n\t\t\t\tmutableProperty.value = initialPropertyValue\n\t\t\t\texpect(count) == 2\n\t\t\t}\n\n\t\t\tit(\"should complete its producer when deallocated\") {\n\t\t\t\tvar mutableProperty: MutableProperty? = MutableProperty(initialPropertyValue)\n\t\t\t\tvar producerCompleted = false\n\n\t\t\t\tmutableProperty!.producer.startWithCompleted { producerCompleted = true }\n\n\t\t\t\tmutableProperty = nil\n\t\t\t\texpect(producerCompleted) == true\n\t\t\t}\n\n\t\t\tit(\"should complete its signal when deallocated\") {\n\t\t\t\tvar mutableProperty: MutableProperty? = MutableProperty(initialPropertyValue)\n\t\t\t\tvar signalCompleted = false\n\n\t\t\t\tmutableProperty!.signal.observeCompleted { signalCompleted = true }\n\n\t\t\t\tmutableProperty = nil\n\t\t\t\texpect(signalCompleted) == true\n\t\t\t}\n\n\t\t\tit(\"should modify the value atomically\") {\n\t\t\t\tlet property = MutableProperty(initialPropertyValue)\n\n\t\t\t\texpect(property.modify({ _ in subsequentPropertyValue })) == initialPropertyValue\n\t\t\t\texpect(property.value) == subsequentPropertyValue\n\t\t\t}\n\n\t\t\tit(\"should modify the value atomically and subsquently send out a Next event with the new value\") {\n\t\t\t\tlet property = MutableProperty(initialPropertyValue)\n\t\t\t\tvar value: String?\n\n\t\t\t\tproperty.producer.startWithNext {\n\t\t\t\t\tvalue = $0\n\t\t\t\t}\n\n\t\t\t\texpect(value) == initialPropertyValue\n\t\t\t\texpect(property.modify({ _ in subsequentPropertyValue })) == initialPropertyValue\n\n\t\t\t\texpect(property.value) == subsequentPropertyValue\n\t\t\t\texpect(value) == subsequentPropertyValue\n\t\t\t}\n\n\t\t\tit(\"should swap the value atomically\") {\n\t\t\t\tlet property = MutableProperty(initialPropertyValue)\n\n\t\t\t\texpect(property.swap(subsequentPropertyValue)) == initialPropertyValue\n\t\t\t\texpect(property.value) == subsequentPropertyValue\n\t\t\t}\n\n\t\t\tit(\"should swap the value atomically and subsquently send out a Next event with the new value\") {\n\t\t\t\tlet property = MutableProperty(initialPropertyValue)\n\t\t\t\tvar value: String?\n\n\t\t\t\tproperty.producer.startWithNext {\n\t\t\t\t\tvalue = $0\n\t\t\t\t}\n\n\t\t\t\texpect(value) == initialPropertyValue\n\t\t\t\texpect(property.swap(subsequentPropertyValue)) == initialPropertyValue\n\n\t\t\t\texpect(property.value) == subsequentPropertyValue\n\t\t\t\texpect(value) == subsequentPropertyValue\n\t\t\t}\n\n\t\t\tit(\"should perform an action with the value\") {\n\t\t\t\tlet property = MutableProperty(initialPropertyValue)\n\n\t\t\t\tlet result: Bool = property.withValue { $0.isEmpty }\n\n\t\t\t\texpect(result) == false\n\t\t\t\texpect(property.value) == initialPropertyValue\n\t\t\t}\n\n\t\t\tit(\"should not deadlock on recursive value access\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet property = MutableProperty(0)\n\t\t\t\tvar value: Int?\n\n\t\t\t\tproperty <~ producer\n\t\t\t\tproperty.producer.startWithNext { _ in\n\t\t\t\t\tvalue = property.value\n\t\t\t\t}\n\n\t\t\t\tobserver.sendNext(10)\n\t\t\t\texpect(value) == 10\n\t\t\t}\n\n\t\t\tit(\"should not deadlock on recursive value access with a closure\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet property = MutableProperty(0)\n\t\t\t\tvar value: Int?\n\n\t\t\t\tproperty <~ producer\n\t\t\t\tproperty.producer.startWithNext { _ in\n\t\t\t\t\tvalue = property.withValue { $0 + 1 }\n\t\t\t\t}\n\n\t\t\t\tobserver.sendNext(10)\n\t\t\t\texpect(value) == 11\n\t\t\t}\n\n\t\t\tit(\"should not deadlock on recursive observation\") {\n\t\t\t\tlet property = MutableProperty(0)\n\n\t\t\t\tvar value: Int?\n\t\t\t\tproperty.producer.startWithNext { _ in\n\t\t\t\t\tproperty.producer.startWithNext { x in value = x }\n\t\t\t\t}\n\n\t\t\t\texpect(value) == 0\n\n\t\t\t\tproperty.value = 1\n\t\t\t\texpect(value) == 1\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"AnyProperty\") {\n\t\t\tdescribe(\"from a PropertyType\") {\n\t\t\t\tit(\"should pass through behaviors of the input property\") {\n\t\t\t\t\tlet constantProperty = ConstantProperty(initialPropertyValue)\n\t\t\t\t\tlet property = AnyProperty(constantProperty)\n\n\t\t\t\t\tvar sentValue: String?\n\t\t\t\t\tvar signalSentValue: String?\n\t\t\t\t\tvar producerCompleted = false\n\t\t\t\t\tvar signalInterrupted = false\n\n\t\t\t\t\tproperty.producer.start { event in\n\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\t\tsentValue = value\n\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\tproducerCompleted = true\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tproperty.signal.observe { event in\n\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\t\tsignalSentValue = value\n\t\t\t\t\t\tcase .Interrupted:\n\t\t\t\t\t\t\tsignalInterrupted = true\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(sentValue) == initialPropertyValue\n\t\t\t\t\texpect(signalSentValue).to(beNil())\n\t\t\t\t\texpect(producerCompleted) == true\n\t\t\t\t\texpect(signalInterrupted) == true\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tdescribe(\"from a value and SignalProducer\") {\n\t\t\t\tit(\"should initially take on the supplied value\") {\n\t\t\t\t\tlet property = AnyProperty(\n\t\t\t\t\t\tinitialValue: initialPropertyValue,\n\t\t\t\t\t\tproducer: SignalProducer.never)\n\t\t\t\t\t\n\t\t\t\t\texpect(property.value) == initialPropertyValue\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tit(\"should take on each value sent on the producer\") {\n\t\t\t\t\tlet property = AnyProperty(\n\t\t\t\t\t\tinitialValue: initialPropertyValue,\n\t\t\t\t\t\tproducer: SignalProducer(value: subsequentPropertyValue))\n\t\t\t\t\t\n\t\t\t\t\texpect(property.value) == subsequentPropertyValue\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tdescribe(\"from a value and Signal\") {\n\t\t\t\tit(\"should initially take on the supplied value, then values sent on the signal\") {\n\t\t\t\t\tlet (signal, observer) = Signal<String, NoError>.pipe()\n\n\t\t\t\t\tlet property = AnyProperty(\n\t\t\t\t\t\tinitialValue: initialPropertyValue,\n\t\t\t\t\t\tsignal: signal)\n\t\t\t\t\t\n\t\t\t\t\texpect(property.value) == initialPropertyValue\n\t\t\t\t\t\n\t\t\t\t\tobserver.sendNext(subsequentPropertyValue)\n\t\t\t\t\t\n\t\t\t\t\texpect(property.value) == subsequentPropertyValue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"DynamicProperty\") {\n\t\t\tvar object: ObservableObject!\n\t\t\tvar property: DynamicProperty!\n\n\t\t\tlet propertyValue: () -> Int? = {\n\t\t\t\tif let value: AnyObject = property?.value {\n\t\t\t\t\treturn value as? Int\n\t\t\t\t} else {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbeforeEach {\n\t\t\t\tobject = ObservableObject()\n\t\t\t\texpect(object.rac_value) == 0\n\n\t\t\t\tproperty = DynamicProperty(object: object, keyPath: \"rac_value\")\n\t\t\t}\n\n\t\t\tafterEach {\n\t\t\t\tobject = nil\n\t\t\t}\n\n\t\t\tit(\"should read the underlying object\") {\n\t\t\t\texpect(propertyValue()) == 0\n\n\t\t\t\tobject.rac_value = 1\n\t\t\t\texpect(propertyValue()) == 1\n\t\t\t}\n\n\t\t\tit(\"should write the underlying object\") {\n\t\t\t\tproperty.value = 1\n\t\t\t\texpect(object.rac_value) == 1\n\t\t\t\texpect(propertyValue()) == 1\n\t\t\t}\n\n\t\t\tit(\"should yield a producer that sends the current value and then the changes for the key path of the underlying object\") {\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tproperty.producer.startWithNext { value in\n\t\t\t\t\texpect(value).notTo(beNil())\n\t\t\t\t\tvalues.append(value as! Int)\n\t\t\t\t}\n\n\t\t\t\texpect(values) == [ 0 ]\n\n\t\t\t\tproperty.value = 1\n\t\t\t\texpect(values) == [ 0, 1 ]\n\n\t\t\t\tobject.rac_value = 2\n\t\t\t\texpect(values) == [ 0, 1, 2 ]\n\t\t\t}\n\n\t\t\tit(\"should yield a producer that sends the current value and then the changes for the key path of the underlying object, even if the value actually remains unchanged\") {\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tproperty.producer.startWithNext { value in\n\t\t\t\t\texpect(value).notTo(beNil())\n\t\t\t\t\tvalues.append(value as! Int)\n\t\t\t\t}\n\n\t\t\t\texpect(values) == [ 0 ]\n\n\t\t\t\tproperty.value = 0\n\t\t\t\texpect(values) == [ 0, 0 ]\n\n\t\t\t\tobject.rac_value = 0\n\t\t\t\texpect(values) == [ 0, 0, 0 ]\n\t\t\t}\n\n\t\t\tit(\"should yield a signal that emits subsequent values for the key path of the underlying object\") {\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tproperty.signal.observeNext { value in\n\t\t\t\t\texpect(value).notTo(beNil())\n\t\t\t\t\tvalues.append(value as! Int)\n\t\t\t\t}\n\n\t\t\t\texpect(values) == []\n\n\t\t\t\tproperty.value = 1\n\t\t\t\texpect(values) == [ 1 ]\n\n\t\t\t\tobject.rac_value = 2\n\t\t\t\texpect(values) == [ 1, 2 ]\n\t\t\t}\n\n\t\t\tit(\"should yield a signal that emits subsequent values for the key path of the underlying object, even if the value actually remains unchanged\") {\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tproperty.signal.observeNext { value in\n\t\t\t\t\texpect(value).notTo(beNil())\n\t\t\t\t\tvalues.append(value as! Int)\n\t\t\t\t}\n\n\t\t\t\texpect(values) == []\n\n\t\t\t\tproperty.value = 0\n\t\t\t\texpect(values) == [ 0 ]\n\n\t\t\t\tobject.rac_value = 0\n\t\t\t\texpect(values) == [ 0, 0 ]\n\t\t\t}\n\n\t\t\tit(\"should have a completed producer when the underlying object deallocates\") {\n\t\t\t\tvar completed = false\n\n\t\t\t\tproperty = {\n\t\t\t\t\t// Use a closure so this object has a shorter lifetime.\n\t\t\t\t\tlet object = ObservableObject()\n\t\t\t\t\tlet property = DynamicProperty(object: object, keyPath: \"rac_value\")\n\n\t\t\t\t\tproperty.producer.startWithCompleted {\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(completed) == false\n\t\t\t\t\texpect(property.value).notTo(beNil())\n\t\t\t\t\treturn property\n\t\t\t\t}()\n\n\t\t\t\texpect(completed).toEventually(beTruthy())\n\t\t\t\texpect(property.value).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should have a completed signal when the underlying object deallocates\") {\n\t\t\t\tvar completed = false\n\n\t\t\t\tproperty = {\n\t\t\t\t\t// Use a closure so this object has a shorter lifetime.\n\t\t\t\t\tlet object = ObservableObject()\n\t\t\t\t\tlet property = DynamicProperty(object: object, keyPath: \"rac_value\")\n\n\t\t\t\t\tproperty.signal.observeCompleted {\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(completed) == false\n\t\t\t\t\texpect(property.value).notTo(beNil())\n\t\t\t\t\treturn property\n\t\t\t\t}()\n\n\t\t\t\texpect(completed).toEventually(beTruthy())\n\t\t\t\texpect(property.value).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should retain property while DynamicProperty's underlying object is retained\"){\n\t\t\t\tweak var dynamicProperty: DynamicProperty? = property\n\t\t\t\t\n\t\t\t\tproperty = nil\n\t\t\t\texpect(dynamicProperty).toNot(beNil())\n\t\t\t\t\n\t\t\t\tobject = nil\n\t\t\t\texpect(dynamicProperty).to(beNil())\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"binding\") {\n\t\t\tdescribe(\"from a Signal\") {\n\t\t\t\tit(\"should update the property with values sent from the signal\") {\n\t\t\t\t\tlet (signal, observer) = Signal<String, NoError>.pipe()\n\n\t\t\t\t\tlet mutableProperty = MutableProperty(initialPropertyValue)\n\n\t\t\t\t\tmutableProperty <~ signal\n\n\t\t\t\t\t// Verify that the binding hasn't changed the property value:\n\t\t\t\t\texpect(mutableProperty.value) == initialPropertyValue\n\n\t\t\t\t\tobserver.sendNext(subsequentPropertyValue)\n\t\t\t\t\texpect(mutableProperty.value) == subsequentPropertyValue\n\t\t\t\t}\n\n\t\t\t\tit(\"should tear down the binding when disposed\") {\n\t\t\t\t\tlet (signal, observer) = Signal<String, NoError>.pipe()\n\n\t\t\t\t\tlet mutableProperty = MutableProperty(initialPropertyValue)\n\n\t\t\t\t\tlet bindingDisposable = mutableProperty <~ signal\n\t\t\t\t\tbindingDisposable.dispose()\n\n\t\t\t\t\tobserver.sendNext(subsequentPropertyValue)\n\t\t\t\t\texpect(mutableProperty.value) == initialPropertyValue\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tit(\"should tear down the binding when bound signal is completed\") {\n\t\t\t\t\tlet (signal, observer) = Signal<String, NoError>.pipe()\n\t\t\t\t\t\n\t\t\t\t\tlet mutableProperty = MutableProperty(initialPropertyValue)\n\t\t\t\t\t\n\t\t\t\t\tlet bindingDisposable = mutableProperty <~ signal\n\t\t\t\t\t\n\t\t\t\t\texpect(bindingDisposable.disposed) == false\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\texpect(bindingDisposable.disposed) == true\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tit(\"should tear down the binding when the property deallocates\") {\n\t\t\t\t\tlet (signal, _) = Signal<String, NoError>.pipe()\n\n\t\t\t\t\tvar mutableProperty: MutableProperty<String>? = MutableProperty(initialPropertyValue)\n\n\t\t\t\t\tlet bindingDisposable = mutableProperty! <~ signal\n\n\t\t\t\t\tmutableProperty = nil\n\t\t\t\t\texpect(bindingDisposable.disposed) == true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdescribe(\"from a SignalProducer\") {\n\t\t\t\tit(\"should start a signal and update the property with its values\") {\n\t\t\t\t\tlet signalValues = [initialPropertyValue, subsequentPropertyValue]\n\t\t\t\t\tlet signalProducer = SignalProducer<String, NoError>(values: signalValues)\n\n\t\t\t\t\tlet mutableProperty = MutableProperty(initialPropertyValue)\n\n\t\t\t\t\tmutableProperty <~ signalProducer\n\n\t\t\t\t\texpect(mutableProperty.value) == signalValues.last!\n\t\t\t\t}\n\n\t\t\t\tit(\"should tear down the binding when disposed\") {\n\t\t\t\t\tlet signalValues = [initialPropertyValue, subsequentPropertyValue]\n\t\t\t\t\tlet signalProducer = SignalProducer<String, NoError>(values: signalValues)\n\n\t\t\t\t\tlet mutableProperty = MutableProperty(initialPropertyValue)\n\t\t\t\t\tlet disposable = mutableProperty <~ signalProducer\n\n\t\t\t\t\tdisposable.dispose()\n\t\t\t\t\t// TODO: Assert binding was torn down?\n\t\t\t\t}\n\n\t\t\t\tit(\"should tear down the binding when bound signal is completed\") {\n\t\t\t\t\tlet (signalProducer, observer) = SignalProducer<String, NoError>.buffer(1)\n\t\t\t\t\t\n\t\t\t\t\tlet mutableProperty = MutableProperty(initialPropertyValue)\n\t\t\t\t\tmutableProperty <~ signalProducer\n\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t// TODO: Assert binding was torn down?\n\t\t\t\t}\n\n\t\t\t\tit(\"should tear down the binding when the property deallocates\") {\n\t\t\t\t\tlet signalValues = [initialPropertyValue, subsequentPropertyValue]\n\t\t\t\t\tlet signalProducer = SignalProducer<String, NoError>(values: signalValues)\n\n\t\t\t\t\tvar mutableProperty: MutableProperty<String>? = MutableProperty(initialPropertyValue)\n\t\t\t\t\tlet disposable = mutableProperty! <~ signalProducer\n\n\t\t\t\t\tmutableProperty = nil\n\t\t\t\t\texpect(disposable.disposed) == true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdescribe(\"from another property\") {\n\t\t\t\tit(\"should take the source property's current value\") {\n\t\t\t\t\tlet sourceProperty = ConstantProperty(initialPropertyValue)\n\n\t\t\t\t\tlet destinationProperty = MutableProperty(\"\")\n\n\t\t\t\t\tdestinationProperty <~ sourceProperty.producer\n\n\t\t\t\t\texpect(destinationProperty.value) == initialPropertyValue\n\t\t\t\t}\n\n\t\t\t\tit(\"should update with changes to the source property's value\") {\n\t\t\t\t\tlet sourceProperty = MutableProperty(initialPropertyValue)\n\n\t\t\t\t\tlet destinationProperty = MutableProperty(\"\")\n\n\t\t\t\t\tdestinationProperty <~ sourceProperty.producer\n\n\t\t\t\t\tsourceProperty.value = subsequentPropertyValue\n\t\t\t\t\texpect(destinationProperty.value) == subsequentPropertyValue\n\t\t\t\t}\n\n\t\t\t\tit(\"should tear down the binding when disposed\") {\n\t\t\t\t\tlet sourceProperty = MutableProperty(initialPropertyValue)\n\n\t\t\t\t\tlet destinationProperty = MutableProperty(\"\")\n\n\t\t\t\t\tlet bindingDisposable = destinationProperty <~ sourceProperty.producer\n\t\t\t\t\tbindingDisposable.dispose()\n\n\t\t\t\t\tsourceProperty.value = subsequentPropertyValue\n\n\t\t\t\t\texpect(destinationProperty.value) == initialPropertyValue\n\t\t\t\t}\n\n\t\t\t\tit(\"should tear down the binding when the source property deallocates\") {\n\t\t\t\t\tvar sourceProperty: MutableProperty<String>? = MutableProperty(initialPropertyValue)\n\n\t\t\t\t\tlet destinationProperty = MutableProperty(\"\")\n\t\t\t\t\tdestinationProperty <~ sourceProperty!.producer\n\n\t\t\t\t\tsourceProperty = nil\n\t\t\t\t\t// TODO: Assert binding was torn down?\n\t\t\t\t}\n\n\t\t\t\tit(\"should tear down the binding when the destination property deallocates\") {\n\t\t\t\t\tlet sourceProperty = MutableProperty(initialPropertyValue)\n\t\t\t\t\tvar destinationProperty: MutableProperty<String>? = MutableProperty(\"\")\n\n\t\t\t\t\tlet bindingDisposable = destinationProperty! <~ sourceProperty.producer\n\t\t\t\t\tdestinationProperty = nil\n\n\t\t\t\t\texpect(bindingDisposable.disposed) == true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nprivate class ObservableObject: NSObject {\n\tdynamic var rac_value: Int = 0\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SchedulerSpec.swift",
    "content": "//\n//  SchedulerSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2014-07-13.\n//  Copyright (c) 2014 GitHub. All rights reserved.\n//\n\nimport Foundation\nimport Nimble\nimport Quick\n@testable\nimport ReactiveCocoa\n\nclass SchedulerSpec: QuickSpec {\n\toverride func spec() {\n\t\tdescribe(\"ImmediateScheduler\") {\n\t\t\tit(\"should run enqueued actions immediately\") {\n\t\t\t\tvar didRun = false\n\t\t\t\tImmediateScheduler().schedule {\n\t\t\t\t\tdidRun = true\n\t\t\t\t}\n\n\t\t\t\texpect(didRun) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"UIScheduler\") {\n\t\t\tfunc dispatchSyncInBackground(action: () -> ()) {\n\t\t\t\tlet group = dispatch_group_create()\n\t\t\t\tdispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), action)\n\t\t\t\tdispatch_group_wait(group, DISPATCH_TIME_FOREVER)\n\t\t\t}\n\n\t\t\tit(\"should run actions immediately when on the main thread\") {\n\t\t\t\tlet scheduler = UIScheduler()\n\t\t\t\tvar values: [Int] = []\n\t\t\t\texpect(NSThread.isMainThread()) == true\n\n\t\t\t\tscheduler.schedule {\n\t\t\t\t\tvalues.append(0)\n\t\t\t\t}\n\n\t\t\t\texpect(values) == [ 0 ]\n\n\t\t\t\tscheduler.schedule {\n\t\t\t\t\tvalues.append(1)\n\t\t\t\t}\n\n\t\t\t\tscheduler.schedule {\n\t\t\t\t\tvalues.append(2)\n\t\t\t\t}\n\n\t\t\t\texpect(values) == [ 0, 1, 2 ]\n\t\t\t}\n\n\t\t\tit(\"should enqueue actions scheduled from the background\") {\n\t\t\t\tlet scheduler = UIScheduler()\n\t\t\t\tvar values: [Int] = []\n\n\t\t\t\tdispatchSyncInBackground {\n\t\t\t\t\tscheduler.schedule {\n\t\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t\t\tvalues.append(0)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\texpect(values) == []\n\t\t\t\texpect(values).toEventually(equal([ 0 ]))\n\n\t\t\t\tdispatchSyncInBackground {\n\t\t\t\t\tscheduler.schedule {\n\t\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t\t\tvalues.append(1)\n\t\t\t\t\t}\n\n\t\t\t\t\tscheduler.schedule {\n\t\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t\t\tvalues.append(2)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\texpect(values) == [ 0 ]\n\t\t\t\texpect(values).toEventually(equal([ 0, 1, 2 ]))\n\t\t\t}\n\n\t\t\tit(\"should run actions enqueued from the main thread after those from the background\") {\n\t\t\t\tlet scheduler = UIScheduler()\n\t\t\t\tvar values: [Int] = []\n\n\t\t\t\tdispatchSyncInBackground {\n\t\t\t\t\tscheduler.schedule {\n\t\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t\t\tvalues.append(0)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tscheduler.schedule {\n\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t\tvalues.append(1)\n\t\t\t\t}\n\n\t\t\t\tscheduler.schedule {\n\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t\tvalues.append(2)\n\t\t\t\t}\n\n\t\t\t\texpect(values) == []\n\t\t\t\texpect(values).toEventually(equal([ 0, 1, 2 ]))\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"QueueScheduler\") {\n\t\t\tit(\"should run enqueued actions on a global queue\") {\n\t\t\t\tvar didRun = false\n\t\t\t\tlet scheduler: QueueScheduler\n\t\t\t\tif #available(OSX 10.10, *) {\n\t\t\t\t\tscheduler = QueueScheduler(qos: QOS_CLASS_DEFAULT)\n\t\t\t\t} else {\n\t\t\t\t\tscheduler = QueueScheduler(queue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0))\n\t\t\t\t}\n\t\t\t\tscheduler.schedule {\n\t\t\t\t\tdidRun = true\n\t\t\t\t\texpect(NSThread.isMainThread()) == false\n\t\t\t\t}\n\n\t\t\t\texpect{didRun}.toEventually(beTruthy())\n\t\t\t}\n\n\t\t\tdescribe(\"on a given queue\") {\n\t\t\t\tvar scheduler: QueueScheduler!\n\n\t\t\t\tbeforeEach {\n\t\t\t\t\tif #available(OSX 10.10, *) {\n\t\t\t\t\t\tscheduler = QueueScheduler(qos: QOS_CLASS_DEFAULT)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscheduler = QueueScheduler(queue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0))\n\t\t\t\t\t}\n\t\t\t\t\tdispatch_suspend(scheduler.queue)\n\t\t\t\t}\n\n\t\t\t\tit(\"should run enqueued actions serially on the given queue\") {\n\t\t\t\t\tvar value = 0\n\n\t\t\t\t\tfor _ in 0..<5 {\n\t\t\t\t\t\tscheduler.schedule {\n\t\t\t\t\t\t\texpect(NSThread.isMainThread()) == false\n\t\t\t\t\t\t\tvalue++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(value) == 0\n\n\t\t\t\t\tdispatch_resume(scheduler.queue)\n\t\t\t\t\texpect{value}.toEventually(equal(5))\n\t\t\t\t}\n\n\t\t\t\tit(\"should run enqueued actions after a given date\") {\n\t\t\t\t\tvar didRun = false\n\t\t\t\t\tscheduler.scheduleAfter(NSDate()) {\n\t\t\t\t\t\tdidRun = true\n\t\t\t\t\t\texpect(NSThread.isMainThread()) == false\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(didRun) == false\n\n\t\t\t\t\tdispatch_resume(scheduler.queue)\n\t\t\t\t\texpect{didRun}.toEventually(beTruthy())\n\t\t\t\t}\n\n\t\t\t\tit(\"should repeatedly run actions after a given date\") {\n\t\t\t\t\tlet disposable = SerialDisposable()\n\n\t\t\t\t\tvar count = 0\n\t\t\t\t\tlet timesToRun = 3\n\n\t\t\t\t\tdisposable.innerDisposable = scheduler.scheduleAfter(NSDate(), repeatingEvery: 0.01, withLeeway: 0) {\n\t\t\t\t\t\texpect(NSThread.isMainThread()) == false\n\n\t\t\t\t\t\tif ++count == timesToRun {\n\t\t\t\t\t\t\tdisposable.dispose()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(count) == 0\n\n\t\t\t\t\tdispatch_resume(scheduler.queue)\n\t\t\t\t\texpect{count}.toEventually(equal(timesToRun))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"TestScheduler\") {\n\t\t\tvar scheduler: TestScheduler!\n\t\t\tvar startDate: NSDate!\n\n\t\t\t// How much dates are allowed to differ when they should be \"equal.\"\n\t\t\tlet dateComparisonDelta = 0.00001\n\n\t\t\tbeforeEach {\n\t\t\t\tstartDate = NSDate()\n\n\t\t\t\tscheduler = TestScheduler(startDate: startDate)\n\t\t\t\texpect(scheduler.currentDate) == startDate\n\t\t\t}\n\n\t\t\tit(\"should run immediately enqueued actions upon advancement\") {\n\t\t\t\tvar string = \"\"\n\n\t\t\t\tscheduler.schedule {\n\t\t\t\t\tstring += \"foo\"\n\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t}\n\n\t\t\t\tscheduler.schedule {\n\t\t\t\t\tstring += \"bar\"\n\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t}\n\n\t\t\t\texpect(string) == \"\"\n\n\t\t\t\tscheduler.advance()\n\t\t\t\texpect(scheduler.currentDate).to(beCloseTo(startDate))\n\n\t\t\t\texpect(string) == \"foobar\"\n\t\t\t}\n\n\t\t\tit(\"should run actions when advanced past the target date\") {\n\t\t\t\tvar string = \"\"\n\n\t\t\t\tscheduler.scheduleAfter(15) {\n\t\t\t\t\tstring += \"bar\"\n\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t}\n\n\t\t\t\tscheduler.scheduleAfter(5) {\n\t\t\t\t\tstring += \"foo\"\n\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t}\n\n\t\t\t\texpect(string) == \"\"\n\n\t\t\t\tscheduler.advanceByInterval(10)\n\t\t\t\texpect(scheduler.currentDate).to(beCloseTo(startDate.dateByAddingTimeInterval(10), within: dateComparisonDelta))\n\t\t\t\texpect(string) == \"foo\"\n\n\t\t\t\tscheduler.advanceByInterval(10)\n\t\t\t\texpect(scheduler.currentDate).to(beCloseTo(startDate.dateByAddingTimeInterval(20), within: dateComparisonDelta))\n\t\t\t\texpect(string) == \"foobar\"\n\t\t\t}\n\n\t\t\tit(\"should run all remaining actions in order\") {\n\t\t\t\tvar string = \"\"\n\n\t\t\t\tscheduler.scheduleAfter(15) {\n\t\t\t\t\tstring += \"bar\"\n\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t}\n\n\t\t\t\tscheduler.scheduleAfter(5) {\n\t\t\t\t\tstring += \"foo\"\n\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t}\n\n\t\t\t\tscheduler.schedule {\n\t\t\t\t\tstring += \"fuzzbuzz\"\n\t\t\t\t\texpect(NSThread.isMainThread()) == true\n\t\t\t\t}\n\n\t\t\t\texpect(string) == \"\"\n\n\t\t\t\tscheduler.run()\n\t\t\t\texpect(scheduler.currentDate) == NSDate.distantFuture()\n\t\t\t\texpect(string) == \"fuzzbuzzfoobar\"\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SignalLifetimeSpec.swift",
    "content": "//\n//  SignalLifetimeSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Vadim Yelagin on 2015-12-13.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\nimport Result\nimport Nimble\nimport Quick\nimport ReactiveCocoa\n\nclass SignalLifetimeSpec: QuickSpec {\n\toverride func spec() {\n\t\tdescribe(\"init\") {\n\t\t\tvar testScheduler: TestScheduler!\n\n\t\t\tbeforeEach {\n\t\t\t\ttestScheduler = TestScheduler()\n\t\t\t}\n\n\t\t\tit(\"should deallocate\") {\n\t\t\t\tweak var signal: Signal<AnyObject, NoError>? = Signal { _ in nil }\n\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should deallocate even if it has an observer\") {\n\t\t\t\tweak var signal: Signal<AnyObject, NoError>? = {\n\t\t\t\t\tlet signal: Signal<AnyObject, NoError> = Signal { _ in nil }\n\t\t\t\t\treturn signal\n\t\t\t\t}()\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should deallocate even if it has an observer with retained disposable\") {\n\t\t\t\tvar disposable: Disposable? = nil\n\t\t\t\tweak var signal: Signal<AnyObject, NoError>? = {\n\t\t\t\t\tlet signal: Signal<AnyObject, NoError> = Signal { _ in nil }\n\t\t\t\t\tdisposable = signal.observe(Observer())\n\t\t\t\t\treturn signal\n\t\t\t\t}()\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t\tdisposable?.dispose()\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should deallocate after erroring\") {\n\t\t\t\tweak var signal: Signal<AnyObject, TestError>? = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendFailed(TestError.Default)\n\t\t\t\t\t}\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\n\t\t\t\tvar errored = false\n\n\t\t\t\tsignal?.observeFailed { _ in errored = true }\n\n\t\t\t\texpect(errored) == false\n\t\t\t\texpect(signal).toNot(beNil())\n\n\t\t\t\ttestScheduler.run()\n\n\t\t\t\texpect(errored) == true\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should deallocate after completing\") {\n\t\t\t\tweak var signal: Signal<AnyObject, NoError>? = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t}\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\n\t\t\t\tvar completed = false\n\n\t\t\t\tsignal?.observeCompleted { completed = true }\n\n\t\t\t\texpect(completed) == false\n\t\t\t\texpect(signal).toNot(beNil())\n\n\t\t\t\ttestScheduler.run()\n\n\t\t\t\texpect(completed) == true\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should deallocate after interrupting\") {\n\t\t\t\tweak var signal: Signal<AnyObject, NoError>? = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendInterrupted()\n\t\t\t\t\t}\n\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\n\t\t\t\tvar interrupted = false\n\t\t\t\tsignal?.observeInterrupted {\n\t\t\t\t\tinterrupted = true\n\t\t\t\t}\n\n\t\t\t\texpect(interrupted) == false\n\t\t\t\texpect(signal).toNot(beNil())\n\n\t\t\t\ttestScheduler.run()\n\n\t\t\t\texpect(interrupted) == true\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"Signal.pipe\") {\n\t\t\tit(\"should deallocate\") {\n\t\t\t\tweak var signal = Signal<(), NoError>.pipe().0\n\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should deallocate after erroring\") {\n\t\t\t\tlet testScheduler = TestScheduler()\n\t\t\t\tweak var weakSignal: Signal<(), TestError>?\n\n\t\t\t\t// Use an inner closure to help ARC deallocate things as we\n\t\t\t\t// expect.\n\t\t\t\tlet test: () -> () = {\n\t\t\t\t\tlet (signal, observer) = Signal<(), TestError>.pipe()\n\t\t\t\t\tweakSignal = signal\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendFailed(TestError.Default)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttest()\n\n\t\t\t\texpect(weakSignal).toNot(beNil())\n\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(weakSignal).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should deallocate after completing\") {\n\t\t\t\tlet testScheduler = TestScheduler()\n\t\t\t\tweak var weakSignal: Signal<(), TestError>?\n\n\t\t\t\t// Use an inner closure to help ARC deallocate things as we\n\t\t\t\t// expect.\n\t\t\t\tlet test: () -> () = {\n\t\t\t\t\tlet (signal, observer) = Signal<(), TestError>.pipe()\n\t\t\t\t\tweakSignal = signal\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttest()\n\n\t\t\t\texpect(weakSignal).toNot(beNil())\n\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(weakSignal).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should deallocate after interrupting\") {\n\t\t\t\tlet testScheduler = TestScheduler()\n\t\t\t\tweak var weakSignal: Signal<(), NoError>?\n\n\t\t\t\tlet test: () -> () = {\n\t\t\t\t\tlet (signal, observer) = Signal<(), NoError>.pipe()\n\t\t\t\t\tweakSignal = signal\n\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendInterrupted()\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttest()\n\t\t\t\texpect(weakSignal).toNot(beNil())\n\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(weakSignal).to(beNil())\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"testTransform\") {\n\t\t\tit(\"should deallocate\") {\n\t\t\t\tweak var signal: Signal<AnyObject, NoError>? = Signal { _ in nil }.testTransform()\n\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should deallocate even if it has an observer\") {\n\t\t\t\tweak var signal: Signal<AnyObject, NoError>? = {\n\t\t\t\t\tlet signal: Signal<AnyObject, NoError> = Signal { _ in nil }.testTransform()\n\t\t\t\t\tsignal.observe(Observer())\n\t\t\t\t\treturn signal\n\t\t\t\t}()\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should deallocate even if it has an observer with retained disposable\") {\n\t\t\t\tvar disposable: Disposable? = nil\n\t\t\t\tweak var signal: Signal<AnyObject, NoError>? = {\n\t\t\t\t\tlet signal: Signal<AnyObject, NoError> = Signal { _ in nil }.testTransform()\n\t\t\t\t\tdisposable = signal.observe(Observer())\n\t\t\t\t\treturn signal\n\t\t\t\t}()\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t\tdisposable?.dispose()\n\t\t\t\texpect(signal).to(beNil())\n\t\t\t}\n\t\t}\n\t}\n}\n\nprivate extension SignalType {\n\tfunc testTransform() -> Signal<Value, Error> {\n\t\treturn Signal { observer in\n\t\t\treturn self.observe(observer.action)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SignalProducerLiftingSpec.swift",
    "content": "//\n//  SignalProducerLiftingSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Neil Pankey on 6/14/15.\n//  Copyright © 2015 GitHub. All rights reserved.\n//\n\nimport Result\nimport Nimble\nimport Quick\nimport ReactiveCocoa\n\nclass SignalProducerLiftingSpec: QuickSpec {\n\toverride func spec() {\n\t\tdescribe(\"map\") {\n\t\t\tit(\"should transform the values of the signal\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet mappedProducer = producer.map { String($0 + 1) }\n\n\t\t\t\tvar lastValue: String?\n\n\t\t\t\tmappedProducer.startWithNext {\n\t\t\t\t\tlastValue = $0\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(lastValue) == \"1\"\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == \"2\"\n\t\t\t}\n\t\t}\n\t\t\n\t\tdescribe(\"mapError\") {\n\t\t\tit(\"should transform the errors of the signal\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\tlet producerError = NSError(domain: \"com.reactivecocoa.errordomain\", code: 100, userInfo: nil)\n\t\t\t\tvar error: NSError?\n\n\t\t\t\tproducer\n\t\t\t\t\t.mapError { _ in producerError }\n\t\t\t\t\t.startWithFailed { error = $0 }\n\n\t\t\t\texpect(error).to(beNil())\n\n\t\t\t\tobserver.sendFailed(TestError.Default)\n\t\t\t\texpect(error) == producerError\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"filter\") {\n\t\t\tit(\"should omit values from the producer\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet mappedProducer = producer.filter { $0 % 2 == 0 }\n\n\t\t\t\tvar lastValue: Int?\n\n\t\t\t\tmappedProducer.startWithNext { lastValue = $0 }\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(lastValue) == 0\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 0\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"ignoreNil\") {\n\t\t\tit(\"should forward only non-nil values\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int?, NoError>.buffer(1)\n\t\t\t\tlet mappedProducer = producer.ignoreNil()\n\n\t\t\t\tvar lastValue: Int?\n\n\t\t\t\tmappedProducer.startWithNext { lastValue = $0 }\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(nil)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver.sendNext(nil)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"scan\") {\n\t\t\tit(\"should incrementally accumulate a value\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<String, NoError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.scan(\"\", +)\n\n\t\t\t\tvar lastValue: String?\n\n\t\t\t\tproducer.startWithNext { lastValue = $0 }\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(\"a\")\n\t\t\t\texpect(lastValue) == \"a\"\n\n\t\t\t\tobserver.sendNext(\"bb\")\n\t\t\t\texpect(lastValue) == \"abb\"\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"reduce\") {\n\t\t\tit(\"should accumulate one value\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.reduce(1, +)\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tvar completed = false\n\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\texpect(completed) == false\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\n\t\t\t\texpect(lastValue) == 4\n\t\t\t}\n\n\t\t\tit(\"should send the initial value if none are received\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.reduce(1, +)\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tvar completed = false\n\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendCompleted()\n\n\t\t\t\texpect(lastValue) == 1\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"skip\") {\n\t\t\tit(\"should skip initial values\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.skip(1)\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tproducer.startWithNext { lastValue = $0 }\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t}\n\n\t\t\tit(\"should not skip any values when 0\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.skip(0)\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tproducer.startWithNext { lastValue = $0 }\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"skipRepeats\") {\n\t\t\tit(\"should skip duplicate Equatable values\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<Bool, NoError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.skipRepeats()\n\n\t\t\t\tvar values: [Bool] = []\n\t\t\t\tproducer.startWithNext { values.append($0) }\n\n\t\t\t\texpect(values) == []\n\n\t\t\t\tobserver.sendNext(true)\n\t\t\t\texpect(values) == [ true ]\n\n\t\t\t\tobserver.sendNext(true)\n\t\t\t\texpect(values) == [ true ]\n\n\t\t\t\tobserver.sendNext(false)\n\t\t\t\texpect(values) == [ true, false ]\n\n\t\t\t\tobserver.sendNext(true)\n\t\t\t\texpect(values) == [ true, false, true ]\n\t\t\t}\n\n\t\t\tit(\"should skip values according to a predicate\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<String, NoError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.skipRepeats { $0.characters.count == $1.characters.count }\n\n\t\t\t\tvar values: [String] = []\n\t\t\t\tproducer.startWithNext { values.append($0) }\n\n\t\t\t\texpect(values) == []\n\n\t\t\t\tobserver.sendNext(\"a\")\n\t\t\t\texpect(values) == [ \"a\" ]\n\n\t\t\t\tobserver.sendNext(\"b\")\n\t\t\t\texpect(values) == [ \"a\" ]\n\n\t\t\t\tobserver.sendNext(\"cc\")\n\t\t\t\texpect(values) == [ \"a\", \"cc\" ]\n\n\t\t\t\tobserver.sendNext(\"d\")\n\t\t\t\texpect(values) == [ \"a\", \"cc\", \"d\" ]\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"skipWhile\") {\n\t\t\tvar producer: SignalProducer<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\n\t\t\tvar lastValue: Int?\n\n\t\t\tbeforeEach {\n\t\t\t\tlet (baseProducer, incomingObserver) = SignalProducer<Int, NoError>.buffer(1)\n\n\t\t\t\tproducer = baseProducer.skipWhile { $0 < 2 }\n\t\t\t\tobserver = incomingObserver\n\t\t\t\tlastValue = nil\n\n\t\t\t\tproducer.startWithNext { lastValue = $0 }\n\t\t\t}\n\n\t\t\tit(\"should skip while the predicate is true\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(lastValue) == 0\n\t\t\t}\n\n\t\t\tit(\"should not skip any values when the predicate starts false\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(3)\n\t\t\t\texpect(lastValue) == 3\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\t\t\t}\n\t\t}\n\t\t\n\t\tdescribe(\"skipUntil\") {\n\t\t\tvar producer: SignalProducer<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar triggerObserver: Signal<(), NoError>.Observer!\n\t\t\t\n\t\t\tvar lastValue: Int? = nil\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlet (baseProducer, baseIncomingObserver) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet (triggerSignal, incomingTriggerObserver) = SignalProducer<(), NoError>.buffer(1)\n\t\t\t\t\n\t\t\t\tproducer = baseProducer.skipUntil(triggerSignal)\n\t\t\t\tobserver = baseIncomingObserver\n\t\t\t\ttriggerObserver = incomingTriggerObserver\n\t\t\t\t\n\t\t\t\tlastValue = nil\n\t\t\t\t\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should skip values until the trigger fires\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\ttriggerObserver.sendNext(())\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(lastValue) == 0\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should skip values until the trigger completes\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\ttriggerObserver.sendCompleted()\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(lastValue) == 0\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"take\") {\n\t\t\tit(\"should take initial values\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.take(2)\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tvar completed = false\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should complete immediately after taking given number of values\") {\n\t\t\t\tlet numbers = [ 1, 2, 4, 4, 5 ]\n\t\t\t\tlet testScheduler = TestScheduler()\n\t\t\t\t\n\t\t\t\tlet producer: SignalProducer<Int, NoError> = SignalProducer { observer, _ in\n\t\t\t\t\t// workaround `Class declaration cannot close over value 'observer' defined in outer scope`\n\t\t\t\t\tlet observer = observer\n\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tfor number in numbers {\n\t\t\t\t\t\t\tobserver.sendNext(number)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar completed = false\n\t\t\t\t\n\t\t\t\tproducer\n\t\t\t\t\t.take(numbers.count)\n\t\t\t\t\t.startWithCompleted { completed = true }\n\t\t\t\t\n\t\t\t\texpect(completed) == false\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should interrupt when 0\") {\n\t\t\t\tlet numbers = [ 1, 2, 4, 4, 5 ]\n\t\t\t\tlet testScheduler = TestScheduler()\n\n\t\t\t\tlet producer: SignalProducer<Int, NoError> = SignalProducer { observer, _ in\n\t\t\t\t\t// workaround `Class declaration cannot close over value 'observer' defined in outer scope`\n\t\t\t\t\tlet observer = observer\n\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tfor number in numbers {\n\t\t\t\t\t\t\tobserver.sendNext(number)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tvar interrupted = false\n\n\t\t\t\tproducer\n\t\t\t\t.take(0)\n\t\t\t\t.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(number):\n\t\t\t\t\t\tresult.append(number)\n\t\t\t\t\tcase .Interrupted:\n\t\t\t\t\t\tinterrupted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(interrupted) == true\n\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"collect\") {\n\t\t\tit(\"should collect all values\") {\n\t\t\t\tlet (original, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet producer = original.collect()\n\t\t\t\tlet expectedResult = [ 1, 2, 3 ]\n\n\t\t\t\tvar result: [Int]?\n\n\t\t\t\tproducer.startWithNext { value in\n\t\t\t\t\texpect(result).to(beNil())\n\t\t\t\t\tresult = value\n\t\t\t\t}\n\n\t\t\t\tfor number in expectedResult {\n\t\t\t\t\tobserver.sendNext(number)\n\t\t\t\t}\n\n\t\t\t\texpect(result).to(beNil())\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(result) == expectedResult\n\t\t\t}\n\n\t\t\tit(\"should complete with an empty array if there are no values\") {\n\t\t\t\tlet (original, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet producer = original.collect()\n\n\t\t\t\tvar result: [Int]?\n\n\t\t\t\tproducer.startWithNext { result = $0 }\n\n\t\t\t\texpect(result).to(beNil())\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(result) == []\n\t\t\t}\n\n\t\t\tit(\"should forward errors\") {\n\t\t\t\tlet (original, observer) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\tlet producer = original.collect()\n\n\t\t\t\tvar error: TestError?\n\n\t\t\t\tproducer.startWithFailed { error = $0 }\n\n\t\t\t\texpect(error).to(beNil())\n\t\t\t\tobserver.sendFailed(.Default)\n\t\t\t\texpect(error) == TestError.Default\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"takeUntil\") {\n\t\t\tvar producer: SignalProducer<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar triggerObserver: Signal<(), NoError>.Observer!\n\n\t\t\tvar lastValue: Int? = nil\n\t\t\tvar completed: Bool = false\n\n\t\t\tbeforeEach {\n\t\t\t\tlet (baseProducer, baseIncomingObserver) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet (triggerSignal, incomingTriggerObserver) = SignalProducer<(), NoError>.buffer(1)\n\n\t\t\t\tproducer = baseProducer.takeUntil(triggerSignal)\n\t\t\t\tobserver = baseIncomingObserver\n\t\t\t\ttriggerObserver = incomingTriggerObserver\n\n\t\t\t\tlastValue = nil\n\t\t\t\tcompleted = false\n\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tit(\"should take values until the trigger fires\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\n\t\t\t\texpect(completed) == false\n\t\t\t\ttriggerObserver.sendNext(())\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should take values until the trigger completes\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t\t\n\t\t\t\texpect(completed) == false\n\t\t\t\ttriggerObserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should complete if the trigger fires immediately\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\texpect(completed) == false\n\n\t\t\t\ttriggerObserver.sendNext(())\n\n\t\t\t\texpect(completed) == true\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"takeUntilReplacement\") {\n\t\t\tvar producer: SignalProducer<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar replacementObserver: Signal<Int, NoError>.Observer!\n\n\t\t\tvar lastValue: Int? = nil\n\t\t\tvar completed: Bool = false\n\n\t\t\tbeforeEach {\n\t\t\t\tlet (baseProducer, incomingObserver) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet (replacementSignal, incomingReplacementObserver) = SignalProducer<Int, NoError>.buffer(1)\n\n\t\t\t\tproducer = baseProducer.takeUntilReplacement(replacementSignal)\n\t\t\t\tobserver = incomingObserver\n\t\t\t\treplacementObserver = incomingReplacementObserver\n\n\t\t\t\tlastValue = nil\n\t\t\t\tcompleted = false\n\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tit(\"should take values from the original then the replacement\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\n\t\t\t\treplacementObserver.sendNext(3)\n\n\t\t\t\texpect(lastValue) == 3\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendNext(4)\n\n\t\t\t\texpect(lastValue) == 3\n\t\t\t\texpect(completed) == false\n\n\t\t\t\treplacementObserver.sendNext(5)\n\t\t\t\texpect(lastValue) == 5\n\n\t\t\t\texpect(completed) == false\n\t\t\t\treplacementObserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"takeWhile\") {\n\t\t\tvar producer: SignalProducer<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\n\t\t\tbeforeEach {\n\t\t\t\tlet (baseProducer, incomingObserver) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tproducer = baseProducer.takeWhile { $0 <= 4 }\n\t\t\t\tobserver = incomingObserver\n\t\t\t}\n\n\t\t\tit(\"should take while the predicate is true\") {\n\t\t\t\tvar latestValue: Int!\n\t\t\t\tvar completed = false\n\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlatestValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor value in -1...4 {\n\t\t\t\t\tobserver.sendNext(value)\n\t\t\t\t\texpect(latestValue) == value\n\t\t\t\t\texpect(completed) == false\n\t\t\t\t}\n\n\t\t\t\tobserver.sendNext(5)\n\t\t\t\texpect(latestValue) == 4\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should complete if the predicate starts false\") {\n\t\t\t\tvar latestValue: Int?\n\t\t\t\tvar completed = false\n\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlatestValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tobserver.sendNext(5)\n\t\t\t\texpect(latestValue).to(beNil())\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"observeOn\") {\n\t\t\tit(\"should send events on the given scheduler\") {\n\t\t\t\tlet testScheduler = TestScheduler()\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\n\t\t\t\tvar result: [Int] = []\n\n\t\t\t\tproducer\n\t\t\t\t\t.observeOn(testScheduler)\n\t\t\t\t\t.startWithNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t\t\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(result) == [ 1, 2 ]\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"delay\") {\n\t\t\tit(\"should send events on the given scheduler after the interval\") {\n\t\t\t\tlet testScheduler = TestScheduler()\n\t\t\t\tlet producer: SignalProducer<Int, NoError> = SignalProducer { observer, _ in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendNext(1)\n\t\t\t\t\t}\n\t\t\t\t\ttestScheduler.scheduleAfter(5, action: {\n\t\t\t\t\t\tobserver.sendNext(2)\n\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tvar completed = false\n\t\t\t\t\n\t\t\t\tproducer\n\t\t\t\t\t.delay(10, onScheduler: testScheduler)\n\t\t\t\t\t.start { event in\n\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\tcase let .Next(number):\n\t\t\t\t\t\t\tresult.append(number)\n\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttestScheduler.advanceByInterval(4) // send initial value\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t\t\n\t\t\t\ttestScheduler.advanceByInterval(10) // send second value and receive first\n\t\t\t\texpect(result) == [ 1 ]\n\t\t\t\texpect(completed) == false\n\t\t\t\t\n\t\t\t\ttestScheduler.advanceByInterval(10) // send second value and receive first\n\t\t\t\texpect(result) == [ 1, 2 ]\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should schedule errors immediately\") {\n\t\t\t\tlet testScheduler = TestScheduler()\n\t\t\t\tlet producer: SignalProducer<Int, TestError> = SignalProducer { observer, _ in\n\t\t\t\t\t// workaround `Class declaration cannot close over value 'observer' defined in outer scope`\n\t\t\t\t\tlet observer = observer\n\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendFailed(TestError.Default)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar errored = false\n\t\t\t\t\n\t\t\t\tproducer\n\t\t\t\t\t.delay(10, onScheduler: testScheduler)\n\t\t\t\t\t.startWithFailed { _ in errored = true }\n\t\t\t\t\n\t\t\t\ttestScheduler.advance()\n\t\t\t\texpect(errored) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"throttle\") {\n\t\t\tvar scheduler: TestScheduler!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar producer: SignalProducer<Int, NoError>!\n\n\t\t\tbeforeEach {\n\t\t\t\tscheduler = TestScheduler()\n\n\t\t\t\tlet (baseProducer, baseObserver) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tobserver = baseObserver\n\n\t\t\t\tproducer = baseProducer.throttle(1, onScheduler: scheduler)\n\t\t\t}\n\n\t\t\tit(\"should send values on the given scheduler at no less than the interval\") {\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tproducer.startWithNext { value in\n\t\t\t\t\tvalues.append(value)\n\t\t\t\t}\n\n\t\t\t\texpect(values) == []\n\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(values) == []\n\n\t\t\t\tscheduler.advance()\n\t\t\t\texpect(values) == [ 0 ]\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(values) == [ 0 ]\n\n\t\t\t\tscheduler.advanceByInterval(1.5)\n\t\t\t\texpect(values) == [ 0, 2 ]\n\n\t\t\t\tscheduler.advanceByInterval(3)\n\t\t\t\texpect(values) == [ 0, 2 ]\n\n\t\t\t\tobserver.sendNext(3)\n\t\t\t\texpect(values) == [ 0, 2 ]\n\n\t\t\t\tscheduler.advance()\n\t\t\t\texpect(values) == [ 0, 2, 3 ]\n\n\t\t\t\tobserver.sendNext(4)\n\t\t\t\tobserver.sendNext(5)\n\t\t\t\tscheduler.advance()\n\t\t\t\texpect(values) == [ 0, 2, 3 ]\n\n\t\t\t\tscheduler.run()\n\t\t\t\texpect(values) == [ 0, 2, 3, 5 ]\n\t\t\t}\n\n\t\t\tit(\"should schedule completion immediately\") {\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tvar completed = false\n\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tvalues.append(value)\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\tscheduler.advance()\n\t\t\t\texpect(values) == [ 0 ]\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tscheduler.run()\n\t\t\t\texpect(values) == [ 0 ]\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"sampleOn\") {\n\t\t\tvar sampledProducer: SignalProducer<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar samplerObserver: Signal<(), NoError>.Observer!\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlet (producer, incomingObserver) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet (sampler, incomingSamplerObserver) = SignalProducer<(), NoError>.buffer(1)\n\t\t\t\tsampledProducer = producer.sampleOn(sampler)\n\t\t\t\tobserver = incomingObserver\n\t\t\t\tsamplerObserver = incomingSamplerObserver\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should forward the latest value when the sampler fires\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tsampledProducer.startWithNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\tsamplerObserver.sendNext(())\n\t\t\t\texpect(result) == [ 2 ]\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should do nothing if sampler fires before signal receives value\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tsampledProducer.startWithNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tsamplerObserver.sendNext(())\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should send lates value multiple times when sampler fires multiple times\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tsampledProducer.startWithNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tsamplerObserver.sendNext(())\n\t\t\t\tsamplerObserver.sendNext(())\n\t\t\t\texpect(result) == [ 1, 1 ]\n\t\t\t}\n\n\t\t\tit(\"should complete when both inputs have completed\") {\n\t\t\t\tvar completed = false\n\t\t\t\tsampledProducer.startWithCompleted { completed = true }\n\t\t\t\t\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(completed) == false\n\t\t\t\t\n\t\t\t\tsamplerObserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should emit an initial value if the sampler is a synchronous SignalProducer\") {\n\t\t\t\tlet producer = SignalProducer<Int, NoError>(values: [1])\n\t\t\t\tlet sampler = SignalProducer<(), NoError>(value: ())\n\t\t\t\t\n\t\t\t\tlet result = producer.sampleOn(sampler)\n\t\t\t\t\n\t\t\t\tvar valueReceived: Int?\n\t\t\t\tresult.startWithNext { valueReceived = $0 }\n\t\t\t\t\n\t\t\t\texpect(valueReceived) == 1\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"combineLatestWith\") {\n\t\t\tvar combinedProducer: SignalProducer<(Int, Double), NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar otherObserver: Signal<Double, NoError>.Observer!\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlet (producer, incomingObserver) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet (otherSignal, incomingOtherObserver) = SignalProducer<Double, NoError>.buffer(1)\n\t\t\t\tcombinedProducer = producer.combineLatestWith(otherSignal)\n\t\t\t\tobserver = incomingObserver\n\t\t\t\totherObserver = incomingOtherObserver\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should forward the latest values from both inputs\") {\n\t\t\t\tvar latest: (Int, Double)?\n\t\t\t\tcombinedProducer.startWithNext { latest = $0 }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(latest).to(beNil())\n\t\t\t\t\n\t\t\t\t// is there a better way to test tuples?\n\t\t\t\totherObserver.sendNext(1.5)\n\t\t\t\texpect(latest?.0) == 1\n\t\t\t\texpect(latest?.1) == 1.5\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(latest?.0) == 2\n\t\t\t\texpect(latest?.1) == 1.5\n\t\t\t}\n\n\t\t\tit(\"should complete when both inputs have completed\") {\n\t\t\t\tvar completed = false\n\t\t\t\tcombinedProducer.startWithCompleted { completed = true }\n\t\t\t\t\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(completed) == false\n\t\t\t\t\n\t\t\t\totherObserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"zipWith\") {\n\t\t\tvar leftObserver: Signal<Int, NoError>.Observer!\n\t\t\tvar rightObserver: Signal<String, NoError>.Observer!\n\t\t\tvar zipped: SignalProducer<(Int, String), NoError>!\n\n\t\t\tbeforeEach {\n\t\t\t\tlet (leftProducer, incomingLeftObserver) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet (rightProducer, incomingRightObserver) = SignalProducer<String, NoError>.buffer(1)\n\n\t\t\t\tleftObserver = incomingLeftObserver\n\t\t\t\trightObserver = incomingRightObserver\n\t\t\t\tzipped = leftProducer.zipWith(rightProducer)\n\t\t\t}\n\n\t\t\tit(\"should combine pairs\") {\n\t\t\t\tvar result: [String] = []\n\t\t\t\tzipped.startWithNext { (left, right) in result.append(\"\\(left)\\(right)\") }\n\n\t\t\t\tleftObserver.sendNext(1)\n\t\t\t\tleftObserver.sendNext(2)\n\t\t\t\texpect(result) == []\n\n\t\t\t\trightObserver.sendNext(\"foo\")\n\t\t\t\texpect(result) == [ \"1foo\" ]\n\n\t\t\t\tleftObserver.sendNext(3)\n\t\t\t\trightObserver.sendNext(\"bar\")\n\t\t\t\texpect(result) == [ \"1foo\", \"2bar\" ]\n\n\t\t\t\trightObserver.sendNext(\"buzz\")\n\t\t\t\texpect(result) == [ \"1foo\", \"2bar\", \"3buzz\" ]\n\n\t\t\t\trightObserver.sendNext(\"fuzz\")\n\t\t\t\texpect(result) == [ \"1foo\", \"2bar\", \"3buzz\" ]\n\n\t\t\t\tleftObserver.sendNext(4)\n\t\t\t\texpect(result) == [ \"1foo\", \"2bar\", \"3buzz\", \"4fuzz\" ]\n\t\t\t}\n\n\t\t\tit(\"should complete when the shorter signal has completed\") {\n\t\t\t\tvar result: [String] = []\n\t\t\t\tvar completed = false\n\n\t\t\t\tzipped.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(left, right):\n\t\t\t\t\t\tresult.append(\"\\(left)\\(right)\")\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tleftObserver.sendNext(0)\n\t\t\t\tleftObserver.sendCompleted()\n\t\t\t\texpect(completed) == false\n\t\t\t\texpect(result) == []\n\n\t\t\t\trightObserver.sendNext(\"foo\")\n\t\t\t\texpect(completed) == true\n\t\t\t\texpect(result) == [ \"0foo\" ]\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"materialize\") {\n\t\t\tit(\"should reify events from the signal\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\tvar latestEvent: Event<Int, TestError>?\n\t\t\t\tproducer\n\t\t\t\t\t.materialize()\n\t\t\t\t\t.startWithNext { latestEvent = $0 }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\t\n\t\t\t\texpect(latestEvent).toNot(beNil())\n\t\t\t\tif let latestEvent = latestEvent {\n\t\t\t\t\tswitch latestEvent {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\texpect(value) == 2\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tfail()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tobserver.sendFailed(TestError.Default)\n\t\t\t\tif let latestEvent = latestEvent {\n\t\t\t\t\tswitch latestEvent {\n\t\t\t\t\tcase .Failed(_):\n\t\t\t\t\t\t()\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tfail()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"dematerialize\") {\n\t\t\ttypealias IntEvent = Event<Int, TestError>\n\t\t\tvar observer: Signal<IntEvent, NoError>.Observer!\n\t\t\tvar dematerialized: SignalProducer<Int, TestError>!\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlet (producer, incomingObserver) = SignalProducer<IntEvent, NoError>.buffer(1)\n\t\t\t\tobserver = incomingObserver\n\t\t\t\tdematerialized = producer.dematerialize()\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should send values for Next events\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tdematerialized.startWithNext { result.append($0) }\n\t\t\t\t\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(.Next(2))\n\t\t\t\texpect(result) == [ 2 ]\n\t\t\t\t\n\t\t\t\tobserver.sendNext(.Next(4))\n\t\t\t\texpect(result) == [ 2, 4 ]\n\t\t\t}\n\n\t\t\tit(\"should error out for Error events\") {\n\t\t\t\tvar errored = false\n\t\t\t\tdematerialized.startWithFailed { _ in errored = true }\n\t\t\t\t\n\t\t\t\texpect(errored) == false\n\t\t\t\t\n\t\t\t\tobserver.sendNext(.Failed(TestError.Default))\n\t\t\t\texpect(errored) == true\n\t\t\t}\n\n\t\t\tit(\"should complete early for Completed events\") {\n\t\t\t\tvar completed = false\n\t\t\t\tdematerialized.startWithCompleted { completed = true }\n\t\t\t\t\n\t\t\t\texpect(completed) == false\n\t\t\t\tobserver.sendNext(IntEvent.Completed)\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"takeLast\") {\n\t\t\tvar observer: Signal<Int, TestError>.Observer!\n\t\t\tvar lastThree: SignalProducer<Int, TestError>!\n\t\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlet (producer, incomingObserver) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\tobserver = incomingObserver\n\t\t\t\tlastThree = producer.takeLast(3)\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should send the last N values upon completion\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tlastThree.startWithNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\tobserver.sendNext(3)\n\t\t\t\tobserver.sendNext(4)\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t\t\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(result) == [ 2, 3, 4 ]\n\t\t\t}\n\n\t\t\tit(\"should send less than N values if not enough were received\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tlastThree.startWithNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(result) == [ 1, 2 ]\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should send nothing when errors\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tvar errored = false\n\t\t\t\tlastThree.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tresult.append(value)\n\t\t\t\t\tcase .Failed(_):\n\t\t\t\t\t\terrored = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\tobserver.sendNext(3)\n\t\t\t\texpect(errored) == false\n\t\t\t\t\n\t\t\t\tobserver.sendFailed(TestError.Default)\n\t\t\t\texpect(errored) == true\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"timeoutWithError\") {\n\t\t\tvar testScheduler: TestScheduler!\n\t\t\tvar producer: SignalProducer<Int, TestError>!\n\t\t\tvar observer: Signal<Int, TestError>.Observer!\n\n\t\t\tbeforeEach {\n\t\t\t\ttestScheduler = TestScheduler()\n\t\t\t\tlet (baseProducer, incomingObserver) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\tproducer = baseProducer.timeoutWithError(TestError.Default, afterInterval: 2, onScheduler: testScheduler)\n\t\t\t\tobserver = incomingObserver\n\t\t\t}\n\n\t\t\tit(\"should complete if within the interval\") {\n\t\t\t\tvar completed = false\n\t\t\t\tvar errored = false\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tcase .Failed(_):\n\t\t\t\t\t\terrored = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttestScheduler.scheduleAfter(1) {\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t}\n\n\t\t\t\texpect(completed) == false\n\t\t\t\texpect(errored) == false\n\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(completed) == true\n\t\t\t\texpect(errored) == false\n\t\t\t}\n\n\t\t\tit(\"should error if not completed before the interval has elapsed\") {\n\t\t\t\tvar completed = false\n\t\t\t\tvar errored = false\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tcase .Failed(_):\n\t\t\t\t\t\terrored = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttestScheduler.scheduleAfter(3) {\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t}\n\n\t\t\t\texpect(completed) == false\n\t\t\t\texpect(errored) == false\n\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(completed) == false\n\t\t\t\texpect(errored) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"attempt\") {\n\t\t\tit(\"should forward original values upon success\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.attempt { _ in\n\t\t\t\t\treturn .Success()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar current: Int?\n\t\t\t\tproducer.startWithNext { value in\n\t\t\t\t\tcurrent = value\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor value in 1...5 {\n\t\t\t\t\tobserver.sendNext(value)\n\t\t\t\t\texpect(current) == value\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should error if an attempt fails\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.attempt { _ in\n\t\t\t\t\treturn .Failure(.Default)\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar error: TestError?\n\t\t\t\tproducer.startWithFailed { err in\n\t\t\t\t\terror = err\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tobserver.sendNext(42)\n\t\t\t\texpect(error) == TestError.Default\n\t\t\t}\n\t\t}\n\t\t\n\t\tdescribe(\"attemptMap\") {\n\t\t\tit(\"should forward mapped values upon success\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.attemptMap { num -> Result<Bool, TestError> in\n\t\t\t\t\treturn .Success(num % 2 == 0)\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar even: Bool?\n\t\t\t\tproducer.startWithNext { value in\n\t\t\t\t\teven = value\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(even) == false\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(even) == true\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should error if a mapping fails\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\tlet producer = baseProducer.attemptMap { _ -> Result<Bool, TestError> in\n\t\t\t\t\treturn .Failure(.Default)\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar error: TestError?\n\t\t\t\tproducer.startWithFailed { err in\n\t\t\t\t\terror = err\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tobserver.sendNext(42)\n\t\t\t\texpect(error) == TestError.Default\n\t\t\t}\n\t\t}\n\t\t\n\t\tdescribe(\"combinePrevious\") {\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tlet initialValue: Int = 0\n\t\t\tvar latestValues: (Int, Int)?\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlatestValues = nil\n\t\t\t\t\n\t\t\t\tlet (signal, baseObserver) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tobserver = baseObserver\n\t\t\t\tsignal.combinePrevious(initialValue).startWithNext { latestValues = $0 }\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should forward the latest value with previous value\") {\n\t\t\t\texpect(latestValues).to(beNil())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(latestValues?.0) == initialValue\n\t\t\t\texpect(latestValues?.1) == 1\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(latestValues?.0) == 1\n\t\t\t\texpect(latestValues?.1) == 2\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SignalProducerNimbleMatchers.swift",
    "content": "//\n//  SignalProducerNimbleMatchers.swift\n//  ReactiveCocoa\n//\n//  Created by Javier Soto on 1/25/15.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\nimport Foundation\n\nimport ReactiveCocoa\nimport Nimble\n\npublic func sendValue<T: Equatable, E: Equatable>(value: T?, sendError: E?, complete: Bool) -> NonNilMatcherFunc<SignalProducer<T, E>> {\n\treturn sendValues(value.map { [$0] } ?? [], sendError: sendError, complete: complete)\n}\n\npublic func sendValues<T: Equatable, E: Equatable>(values: [T], sendError maybeSendError: E?, complete: Bool) -> NonNilMatcherFunc<SignalProducer<T, E>> {\n\treturn NonNilMatcherFunc { actualExpression, failureMessage in\n\t\tprecondition(maybeSendError == nil || !complete, \"Signals can't both send an error and complete\")\n\n\t\tfailureMessage.postfixMessage = \"Send values \\(values). Send error \\(maybeSendError). Complete: \\(complete)\"\n\t\tlet maybeProducer = try actualExpression.evaluate()\n\n\t\tif let signalProducer = maybeProducer {\n\t\t\tvar sentValues: [T] = []\n\t\t\tvar sentError: E?\n\t\t\tvar signalCompleted = false\n\n\t\t\tsignalProducer.start { event in\n\t\t\t\tswitch event {\n\t\t\t\tcase let .Next(value):\n\t\t\t\t\tsentValues.append(value)\n\t\t\t\tcase .Completed:\n\t\t\t\t\tsignalCompleted = true\n\t\t\t\tcase let .Failed(error):\n\t\t\t\t\tsentError = error\n\t\t\t\tdefault:\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif sentValues != values {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tif sentError != maybeSendError {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn signalCompleted == complete\n\t\t}\n\t\telse {\n\t\t\treturn false\n\t\t}\n\t}\n}"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SignalProducerSpec.swift",
    "content": "//\n//  SignalProducerSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2015-01-23.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\nimport Foundation\n\nimport Result\nimport Nimble\nimport Quick\nimport ReactiveCocoa\n\nclass SignalProducerSpec: QuickSpec {\n\toverride func spec() {\n\t\tdescribe(\"init\") {\n\t\t\tit(\"should run the handler once per start()\") {\n\t\t\t\tvar handlerCalledTimes = 0\n\t\t\t\tlet signalProducer = SignalProducer<String, NSError>() { observer, disposable in\n\t\t\t\t\thandlerCalledTimes++\n\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tsignalProducer.start()\n\t\t\t\tsignalProducer.start()\n\n\t\t\t\texpect(handlerCalledTimes) == 2\n\t\t\t}\n\n\t\t\tit(\"should release signal observers when given disposable is disposed\") {\n\t\t\t\tvar disposable: Disposable!\n\n\t\t\t\tlet producer = SignalProducer<Int, NoError> { observer, innerDisposable in\n\t\t\t\t\tdisposable = innerDisposable\n\n\t\t\t\t\tinnerDisposable.addDisposable {\n\t\t\t\t\t\t// This is necessary to keep the observer long enough to\n\t\t\t\t\t\t// even test the memory management.\n\t\t\t\t\t\tobserver.sendNext(0)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tweak var objectRetainedByObserver: NSObject?\n\t\t\t\tproducer.startWithSignal { signal, _ in\n\t\t\t\t\tlet object = NSObject()\n\t\t\t\t\tobjectRetainedByObserver = object\n\t\t\t\t\tsignal.observeNext { _ in object }\n\t\t\t\t}\n\n\t\t\t\texpect(objectRetainedByObserver).toNot(beNil())\n\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(objectRetainedByObserver).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should dispose of added disposables upon completion\") {\n\t\t\t\tlet addedDisposable = SimpleDisposable()\n\t\t\t\tvar observer: Signal<(), NoError>.Observer!\n\n\t\t\t\tlet producer = SignalProducer<(), NoError>() { incomingObserver, disposable in\n\t\t\t\t\tdisposable.addDisposable(addedDisposable)\n\t\t\t\t\tobserver = incomingObserver\n\t\t\t\t}\n\n\t\t\t\tproducer.start()\n\t\t\t\texpect(addedDisposable.disposed) == false\n\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(addedDisposable.disposed) == true\n\t\t\t}\n\n\t\t\tit(\"should dispose of added disposables upon error\") {\n\t\t\t\tlet addedDisposable = SimpleDisposable()\n\t\t\t\tvar observer: Signal<(), TestError>.Observer!\n\n\t\t\t\tlet producer = SignalProducer<(), TestError>() { incomingObserver, disposable in\n\t\t\t\t\tdisposable.addDisposable(addedDisposable)\n\t\t\t\t\tobserver = incomingObserver\n\t\t\t\t}\n\n\t\t\t\tproducer.start()\n\t\t\t\texpect(addedDisposable.disposed) == false\n\n\t\t\t\tobserver.sendFailed(.Default)\n\t\t\t\texpect(addedDisposable.disposed) == true\n\t\t\t}\n\n\t\t\tit(\"should dispose of added disposables upon interruption\") {\n\t\t\t\tlet addedDisposable = SimpleDisposable()\n\t\t\t\tvar observer: Signal<(), NoError>.Observer!\n\n\t\t\t\tlet producer = SignalProducer<(), NoError>() { incomingObserver, disposable in\n\t\t\t\t\tdisposable.addDisposable(addedDisposable)\n\t\t\t\t\tobserver = incomingObserver\n\t\t\t\t}\n\n\t\t\t\tproducer.start()\n\t\t\t\texpect(addedDisposable.disposed) == false\n\n\t\t\t\tobserver.sendInterrupted()\n\t\t\t\texpect(addedDisposable.disposed) == true\n\t\t\t}\n\n\t\t\tit(\"should dispose of added disposables upon start() disposal\") {\n\t\t\t\tlet addedDisposable = SimpleDisposable()\n\n\t\t\t\tlet producer = SignalProducer<(), TestError>() { _, disposable in\n\t\t\t\t\tdisposable.addDisposable(addedDisposable)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tlet startDisposable = producer.start()\n\t\t\t\texpect(addedDisposable.disposed) == false\n\n\t\t\t\tstartDisposable.dispose()\n\t\t\t\texpect(addedDisposable.disposed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"init(signal:)\") {\n\t\t\tvar signal: Signal<Int, TestError>!\n\t\t\tvar observer: Signal<Int, TestError>.Observer!\n\n\t\t\tbeforeEach {\n\t\t\t\t// Cannot directly assign due to compiler crash on Xcode 7.0.1\n\t\t\t\tlet (signalTemp, observerTemp) = Signal<Int, TestError>.pipe()\n\t\t\t\tsignal = signalTemp\n\t\t\t\tobserver = observerTemp\n\t\t\t}\n\n\t\t\tit(\"should emit values then complete\") {\n\t\t\t\tlet producer = SignalProducer<Int, TestError>(signal: signal)\n\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tvar error: TestError?\n\t\t\t\tvar completed = false\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tvalues.append(value)\n\t\t\t\t\tcase let .Failed(err):\n\t\t\t\t\t\terror = err\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(values) == []\n\t\t\t\texpect(error).to(beNil())\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(values) == [ 1 ]\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\tobserver.sendNext(3)\n\t\t\t\texpect(values) == [ 1, 2, 3 ]\n\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should emit error\") {\n\t\t\t\tlet producer = SignalProducer<Int, TestError>(signal: signal)\n\n\t\t\t\tvar error: TestError?\n\t\t\t\tlet sentError = TestError.Default\n\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Failed(err):\n\t\t\t\t\t\terror = err\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(error).to(beNil())\n\n\t\t\t\tobserver.sendFailed(sentError)\n\t\t\t\texpect(error) == sentError\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"init(value:)\") {\n\t\t\tit(\"should immediately send the value then complete\") {\n\t\t\t\tlet producerValue = \"StringValue\"\n\t\t\t\tlet signalProducer = SignalProducer<String, NSError>(value: producerValue)\n\n\t\t\t\texpect(signalProducer).to(sendValue(producerValue, sendError: nil, complete: true))\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"init(error:)\") {\n\t\t\tit(\"should immediately send the error\") {\n\t\t\t\tlet producerError = NSError(domain: \"com.reactivecocoa.errordomain\", code: 4815, userInfo: nil)\n\t\t\t\tlet signalProducer = SignalProducer<Int, NSError>(error: producerError)\n\n\t\t\t\texpect(signalProducer).to(sendValue(nil, sendError: producerError, complete: false))\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"init(result:)\") {\n\t\t\tit(\"should immediately send the value then complete\") {\n\t\t\t\tlet producerValue = \"StringValue\"\n\t\t\t\tlet producerResult = .Success(producerValue) as Result<String, NSError>\n\t\t\t\tlet signalProducer = SignalProducer(result: producerResult)\n\n\t\t\t\texpect(signalProducer).to(sendValue(producerValue, sendError: nil, complete: true))\n\t\t\t}\n\n\t\t\tit(\"should immediately send the error\") {\n\t\t\t\tlet producerError = NSError(domain: \"com.reactivecocoa.errordomain\", code: 4815, userInfo: nil)\n\t\t\t\tlet producerResult = .Failure(producerError) as Result<String, NSError>\n\t\t\t\tlet signalProducer = SignalProducer(result: producerResult)\n\n\t\t\t\texpect(signalProducer).to(sendValue(nil, sendError: producerError, complete: false))\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"init(values:)\") {\n\t\t\tit(\"should immediately send the sequence of values\") {\n\t\t\t\tlet sequenceValues = [1, 2, 3]\n\t\t\t\tlet signalProducer = SignalProducer<Int, NSError>(values: sequenceValues)\n\n\t\t\t\texpect(signalProducer).to(sendValues(sequenceValues, sendError: nil, complete: true))\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"SignalProducer.empty\") {\n\t\t\tit(\"should immediately complete\") {\n\t\t\t\tlet signalProducer = SignalProducer<Int, NSError>.empty\n\n\t\t\t\texpect(signalProducer).to(sendValue(nil, sendError: nil, complete: true))\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"SignalProducer.never\") {\n\t\t\tit(\"should not send any events\") {\n\t\t\t\tlet signalProducer = SignalProducer<Int, NSError>.never\n\n\t\t\t\texpect(signalProducer).to(sendValue(nil, sendError: nil, complete: false))\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"SignalProducer.buffer\") {\n\t\t\tit(\"should replay buffered events when started, then forward events as added\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NSError>.buffer(Int.max)\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\tobserver.sendNext(3)\n\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tvar completed = false\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tvalues.append(value)\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(values) == [1, 2, 3]\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendNext(4)\n\t\t\t\tobserver.sendNext(5)\n\n\t\t\t\texpect(values) == [1, 2, 3, 4, 5]\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendCompleted()\n\n\t\t\t\texpect(values) == [1, 2, 3, 4, 5]\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should drop earliest events to maintain the capacity\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, TestError>.buffer(1)\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tvar error: TestError?\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tvalues.append(value)\n\t\t\t\t\tcase let .Failed(err):\n\t\t\t\t\t\terror = err\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\texpect(values) == [2]\n\t\t\t\texpect(error).to(beNil())\n\n\t\t\t\tobserver.sendNext(3)\n\t\t\t\tobserver.sendNext(4)\n\n\t\t\t\texpect(values) == [2, 3, 4]\n\t\t\t\texpect(error).to(beNil())\n\n\t\t\t\tobserver.sendFailed(.Default)\n\n\t\t\t\texpect(values) == [2, 3, 4]\n\t\t\t\texpect(error) == TestError.Default\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should always replay termination event\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, TestError>.buffer(0)\n\t\t\t\tvar completed = false\n\t\t\t\t\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\n\t\t\t\tproducer.startWithCompleted {\n\t\t\t\t\tcompleted = true\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should replay values after being terminated\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\tvar value: Int?\n\t\t\t\tvar completed = false\n\t\t\t\t\n\t\t\t\tobserver.sendNext(123)\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(val):\n\t\t\t\t\t\tvalue = val\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\texpect(value) == 123\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should not deadlock when started while sending\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(Int.max)\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\tobserver.sendNext(3)\n\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tproducer.startWithCompleted {\n\t\t\t\t\tvalues = []\n\n\t\t\t\t\tproducer.startWithNext { value in\n\t\t\t\t\t\tvalues.append(value)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(values) == [ 1, 2, 3 ]\n\t\t\t}\n\n\t\t\tit(\"should buffer values before sending recursively to new observers\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(Int.max)\n\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tvar lastBufferedValues: [Int] = []\n\n\t\t\t\tproducer.startWithNext { newValue in\n\t\t\t\t\tvalues.append(newValue)\n\n\t\t\t\t\tvar bufferedValues: [Int] = []\n\t\t\t\t\t\n\t\t\t\t\tproducer.startWithNext { bufferedValue in\n\t\t\t\t\t\tbufferedValues.append(bufferedValue)\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(bufferedValues) == values\n\t\t\t\t\tlastBufferedValues = bufferedValues\n\t\t\t\t}\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(values) == [ 1 ]\n\t\t\t\texpect(lastBufferedValues) == values\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(values) == [ 1, 2 ]\n\t\t\t\texpect(lastBufferedValues) == values\n\n\t\t\t\tobserver.sendNext(3)\n\t\t\t\texpect(values) == [ 1, 2, 3 ]\n\t\t\t\texpect(lastBufferedValues) == values\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"trailing closure\") {\n\t\t\tit(\"receives next values\") {\n\t\t\t\tvar values = [Int]()\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tobserver.sendNext(1)\n\n\t\t\t\tproducer.startWithNext { next in\n\t\t\t\t\tvalues.append(next)\n\t\t\t\t}\n\n\t\t\t\texpect(values) == [1]\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"SignalProducer.attempt\") {\n\t\t\tit(\"should run the operation once per start()\") {\n\t\t\t\tvar operationRunTimes = 0\n\t\t\t\tlet operation: () -> Result<String, NSError> = {\n\t\t\t\t\toperationRunTimes++\n\n\t\t\t\t\treturn .Success(\"OperationValue\")\n\t\t\t\t}\n\n\t\t\t\tSignalProducer.attempt(operation).start()\n\t\t\t\tSignalProducer.attempt(operation).start()\n\n\t\t\t\texpect(operationRunTimes) == 2\n\t\t\t}\n\n\t\t\tit(\"should send the value then complete\") {\n\t\t\t\tlet operationReturnValue = \"OperationValue\"\n\t\t\t\tlet operation: () -> Result<String, NSError> = {\n\t\t\t\t\treturn .Success(operationReturnValue)\n\t\t\t\t}\n\n\t\t\t\tlet signalProducer = SignalProducer.attempt(operation)\n\n\t\t\t\texpect(signalProducer).to(sendValue(operationReturnValue, sendError: nil, complete: true))\n\t\t\t}\n\n\t\t\tit(\"should send the error\") {\n\t\t\t\tlet operationError = NSError(domain: \"com.reactivecocoa.errordomain\", code: 4815, userInfo: nil)\n\t\t\t\tlet operation: () -> Result<String, NSError> = {\n\t\t\t\t\treturn .Failure(operationError)\n\t\t\t\t}\n\n\t\t\t\tlet signalProducer = SignalProducer.attempt(operation)\n\n\t\t\t\texpect(signalProducer).to(sendValue(nil, sendError: operationError, complete: false))\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"startWithSignal\") {\n\t\t\tit(\"should invoke the closure before any effects or events\") {\n\t\t\t\tvar started = false\n\t\t\t\tvar value: Int?\n\n\t\t\t\tSignalProducer<Int, NoError>(value: 42)\n\t\t\t\t\t.on(started: {\n\t\t\t\t\t\tstarted = true\n\t\t\t\t\t}, next: {\n\t\t\t\t\t\tvalue = $0\n\t\t\t\t\t})\n\t\t\t\t\t.startWithSignal { _ in\n\t\t\t\t\t\texpect(started) == false\n\t\t\t\t\t\texpect(value).to(beNil())\n\t\t\t\t\t}\n\n\t\t\t\texpect(started) == true\n\t\t\t\texpect(value) == 42\n\t\t\t}\n\n\t\t\tit(\"should dispose of added disposables if disposed\") {\n\t\t\t\tlet addedDisposable = SimpleDisposable()\n\t\t\t\tvar disposable: Disposable!\n\n\t\t\t\tlet producer = SignalProducer<Int, NoError>() { _, disposable in\n\t\t\t\t\tdisposable.addDisposable(addedDisposable)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tproducer.startWithSignal { _, innerDisposable in\n\t\t\t\t\tdisposable = innerDisposable\n\t\t\t\t}\n\n\t\t\t\texpect(addedDisposable.disposed) == false\n\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(addedDisposable.disposed) == true\n\t\t\t}\n\n\t\t\tit(\"should send interrupted if disposed\") {\n\t\t\t\tvar interrupted = false\n\t\t\t\tvar disposable: Disposable!\n\n\t\t\t\tSignalProducer<Int, NoError>(value: 42)\n\t\t\t\t\t.startOn(TestScheduler())\n\t\t\t\t\t.startWithSignal { signal, innerDisposable in\n\t\t\t\t\t\tsignal.observeInterrupted {\n\t\t\t\t\t\t\tinterrupted = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisposable = innerDisposable\n\t\t\t\t\t}\n\n\t\t\t\texpect(interrupted) == false\n\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(interrupted) == true\n\t\t\t}\n\n\t\t\tit(\"should release signal observers if disposed\") {\n\t\t\t\tweak var objectRetainedByObserver: NSObject?\n\t\t\t\tvar disposable: Disposable!\n\n\t\t\t\tlet producer = SignalProducer<Int, NoError>.never\n\t\t\t\tproducer.startWithSignal { signal, innerDisposable in\n\t\t\t\t\tlet object = NSObject()\n\t\t\t\t\tobjectRetainedByObserver = object\n\t\t\t\t\tsignal.observeNext { _ in object.description }\n\t\t\t\t\tdisposable = innerDisposable\n\t\t\t\t}\n\n\t\t\t\texpect(objectRetainedByObserver).toNot(beNil())\n\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(objectRetainedByObserver).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should not trigger effects if disposed before closure return\") {\n\t\t\t\tvar started = false\n\t\t\t\tvar value: Int?\n\n\t\t\t\tSignalProducer<Int, NoError>(value: 42)\n\t\t\t\t\t.on(started: {\n\t\t\t\t\t\tstarted = true\n\t\t\t\t\t}, next: {\n\t\t\t\t\t\tvalue = $0\n\t\t\t\t\t})\n\t\t\t\t\t.startWithSignal { _, disposable in\n\t\t\t\t\t\texpect(started) == false\n\t\t\t\t\t\texpect(value).to(beNil())\n\n\t\t\t\t\t\tdisposable.dispose()\n\t\t\t\t\t}\n\n\t\t\t\texpect(started) == false\n\t\t\t\texpect(value).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should send interrupted if disposed before closure return\") {\n\t\t\t\tvar interrupted = false\n\n\t\t\t\tSignalProducer<Int, NoError>(value: 42)\n\t\t\t\t\t.startWithSignal { signal, disposable in\n\t\t\t\t\t\texpect(interrupted) == false\n\n\t\t\t\t\t\tsignal.observeInterrupted {\n\t\t\t\t\t\t\tinterrupted = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisposable.dispose()\n\t\t\t\t\t}\n\n\t\t\t\texpect(interrupted) == true\n\t\t\t}\n\n\t\t\tit(\"should dispose of added disposables upon completion\") {\n\t\t\t\tlet addedDisposable = SimpleDisposable()\n\t\t\t\tvar observer: Signal<Int, TestError>.Observer!\n\n\t\t\t\tlet producer = SignalProducer<Int, TestError>() { incomingObserver, disposable in\n\t\t\t\t\tdisposable.addDisposable(addedDisposable)\n\t\t\t\t\tobserver = incomingObserver\n\t\t\t\t}\n\n\t\t\t\tproducer.startWithSignal { _ in }\n\t\t\t\texpect(addedDisposable.disposed) == false\n\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(addedDisposable.disposed) == true\n\t\t\t}\n\n\t\t\tit(\"should dispose of added disposables upon error\") {\n\t\t\t\tlet addedDisposable = SimpleDisposable()\n\t\t\t\tvar observer: Signal<Int, TestError>.Observer!\n\n\t\t\t\tlet producer = SignalProducer<Int, TestError>() { incomingObserver, disposable in\n\t\t\t\t\tdisposable.addDisposable(addedDisposable)\n\t\t\t\t\tobserver = incomingObserver\n\t\t\t\t}\n\n\t\t\t\tproducer.startWithSignal { _ in }\n\t\t\t\texpect(addedDisposable.disposed) == false\n\n\t\t\t\tobserver.sendFailed(.Default)\n\t\t\t\texpect(addedDisposable.disposed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"start\") {\n\t\t\tit(\"should immediately begin sending events\") {\n\t\t\t\tlet producer = SignalProducer<Int, NoError>(values: [1, 2])\n\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tvar completed = false\n\t\t\t\tproducer.start { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tvalues.append(value)\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(values) == [1, 2]\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should send interrupted if disposed\") {\n\t\t\t\tlet producer = SignalProducer<(), NoError>.never\n\n\t\t\t\tvar interrupted = false\n\t\t\t\tlet disposable = producer.startWithInterrupted {\n\t\t\t\t\tinterrupted = true\n\t\t\t\t}\n\n\t\t\t\texpect(interrupted) == false\n\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(interrupted) == true\n\t\t\t}\n\n\t\t\tit(\"should release observer when disposed\") {\n\t\t\t\tweak var objectRetainedByObserver: NSObject?\n\t\t\t\tvar disposable: Disposable!\n\t\t\t\tlet test: () -> () = {\n\t\t\t\t\tlet producer = SignalProducer<Int, NoError>.never\n\t\t\t\t\tlet object = NSObject()\n\t\t\t\t\tobjectRetainedByObserver = object\n\t\t\t\t\tdisposable = producer.startWithNext { _ in object }\n\t\t\t\t}\n\n\t\t\t\ttest()\n\t\t\t\texpect(objectRetainedByObserver).toNot(beNil())\n\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(objectRetainedByObserver).to(beNil())\n\t\t\t}\n\n\t\t\tdescribe(\"trailing closure\") {\n\t\t\t\tit(\"receives next values\") {\n\t\t\t\t\tvar values = [Int]()\n\t\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\n\t\t\t\t\tproducer.startWithNext { next in\n\t\t\t\t\t\tvalues.append(next)\n\t\t\t\t\t}\n\n\t\t\t\t\tobserver.sendNext(1)\n\t\t\t\t\tobserver.sendNext(2)\n\t\t\t\t\tobserver.sendNext(3)\n\n\t\t\t\t\tobserver.sendCompleted()\n\n\t\t\t\t\texpect(values) == [1, 2, 3]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"lift\") {\n\t\t\tdescribe(\"over unary operators\") {\n\t\t\t\tit(\"should invoke transformation once per started signal\") {\n\t\t\t\t\tlet baseProducer = SignalProducer<Int, NoError>(values: [1, 2])\n\n\t\t\t\t\tvar counter = 0\n\t\t\t\t\tlet transform = { (signal: Signal<Int, NoError>) -> Signal<Int, NoError> in\n\t\t\t\t\t\tcounter += 1\n\t\t\t\t\t\treturn signal\n\t\t\t\t\t}\n\n\t\t\t\t\tlet producer = baseProducer.lift(transform)\n\t\t\t\t\texpect(counter) == 0\n\n\t\t\t\t\tproducer.start()\n\t\t\t\t\texpect(counter) == 1\n\n\t\t\t\t\tproducer.start()\n\t\t\t\t\texpect(counter) == 2\n\t\t\t\t}\n\n\t\t\t\tit(\"should not miss any events\") {\n\t\t\t\t\tlet baseProducer = SignalProducer<Int, NoError>(values: [1, 2, 3, 4])\n\n\t\t\t\t\tlet producer = baseProducer.lift { signal in\n\t\t\t\t\t\treturn signal.map { $0 * $0 }\n\t\t\t\t\t}\n\t\t\t\t\tlet result = producer.collect().single()\n\n\t\t\t\t\texpect(result?.value) == [1, 4, 9, 16]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdescribe(\"over binary operators\") {\n\t\t\t\tit(\"should invoke transformation once per started signal\") {\n\t\t\t\t\tlet baseProducer = SignalProducer<Int, NoError>(values: [1, 2])\n\t\t\t\t\tlet otherProducer = SignalProducer<Int, NoError>(values: [3, 4])\n\n\t\t\t\t\tvar counter = 0\n\t\t\t\t\tlet transform = { (signal: Signal<Int, NoError>) -> Signal<Int, NoError> -> Signal<(Int, Int), NoError> in\n\t\t\t\t\t\treturn { otherSignal in\n\t\t\t\t\t\t\tcounter += 1\n\t\t\t\t\t\t\treturn zip(signal, otherSignal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet producer = baseProducer.lift(transform)(otherProducer)\n\t\t\t\t\texpect(counter) == 0\n\n\t\t\t\t\tproducer.start()\n\t\t\t\t\texpect(counter) == 1\n\n\t\t\t\t\tproducer.start()\n\t\t\t\t\texpect(counter) == 2\n\t\t\t\t}\n\n\t\t\t\tit(\"should not miss any events\") {\n\t\t\t\t\tlet baseProducer = SignalProducer<Int, NoError>(values: [1, 2, 3])\n\t\t\t\t\tlet otherProducer = SignalProducer<Int, NoError>(values: [4, 5, 6])\n\n\t\t\t\t\tlet transform = { (signal: Signal<Int, NoError>) -> Signal<Int, NoError> -> Signal<Int, NoError> in\n\t\t\t\t\t\treturn { otherSignal in\n\t\t\t\t\t\t\treturn zip(signal, otherSignal).map { first, second in first + second }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet producer = baseProducer.lift(transform)(otherProducer)\n\t\t\t\t\tlet result = producer.collect().single()\n\n\t\t\t\t\texpect(result?.value) == [5, 7, 9]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdescribe(\"over binary operators with signal\") {\n\t\t\t\tit(\"should invoke transformation once per started signal\") {\n\t\t\t\t\tlet baseProducer = SignalProducer<Int, NoError>(values: [1, 2])\n\t\t\t\t\tlet (otherSignal, otherSignalObserver) = Signal<Int, NoError>.pipe()\n\n\t\t\t\t\tvar counter = 0\n\t\t\t\t\tlet transform = { (signal: Signal<Int, NoError>) -> Signal<Int, NoError> -> Signal<(Int, Int), NoError> in\n\t\t\t\t\t\treturn { otherSignal in\n\t\t\t\t\t\t\tcounter += 1\n\t\t\t\t\t\t\treturn zip(signal, otherSignal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet producer = baseProducer.lift(transform)(otherSignal)\n\t\t\t\t\texpect(counter) == 0\n\n\t\t\t\t\tproducer.start()\n\t\t\t\t\totherSignalObserver.sendNext(1)\n\t\t\t\t\texpect(counter) == 1\n\n\t\t\t\t\tproducer.start()\n\t\t\t\t\totherSignalObserver.sendNext(2)\n\t\t\t\t\texpect(counter) == 2\n\t\t\t\t}\n\n\t\t\t\tit(\"should not miss any events\") {\n\t\t\t\t\tlet baseProducer = SignalProducer<Int, NoError>(values: [ 1, 2, 3 ])\n\t\t\t\t\tlet (otherSignal, otherSignalObserver) = Signal<Int, NoError>.pipe()\n\n\t\t\t\t\tlet transform = { (signal: Signal<Int, NoError>) -> Signal<Int, NoError> -> Signal<Int, NoError> in\n\t\t\t\t\t\treturn { otherSignal in\n\t\t\t\t\t\t\treturn zip(signal, otherSignal).map(+)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet producer = baseProducer.lift(transform)(otherSignal)\n\t\t\t\t\tvar result: [Int] = []\n\t\t\t\t\tvar completed: Bool = false\n\n\t\t\t\t\tproducer.start { event in\n\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\tcase .Next(let value): result.append(value)\n\t\t\t\t\t\tcase .Completed: completed = true\n\t\t\t\t\t\tdefault: break\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\totherSignalObserver.sendNext(4)\n\t\t\t\t\texpect(result) == [ 5 ]\n\n\t\t\t\t\totherSignalObserver.sendNext(5)\n\t\t\t\t\texpect(result) == [ 5, 7 ]\n\n\t\t\t\t\totherSignalObserver.sendNext(6)\n\t\t\t\t\texpect(result) == [ 5, 7, 9 ]\n\t\t\t\t\texpect(completed) == true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tdescribe(\"sequence operators\") {\n\t\t\tvar producerA: SignalProducer<Int, NoError>!\n\t\t\tvar producerB: SignalProducer<Int, NoError>!\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tproducerA = SignalProducer<Int, NoError>(values: [ 1, 2 ])\n\t\t\t\tproducerB = SignalProducer<Int, NoError>(values: [ 3, 4 ])\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should combine the events to one array\") {\n\t\t\t\tlet producer = combineLatest([producerA, producerB])\n\t\t\t\tlet result = producer.collect().single()\n\t\t\t\t\n\t\t\t\texpect(result?.value) == [[1, 4], [2, 4]]\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should zip the events to one array\") {\n\t\t\t\tlet producer = zip([producerA, producerB])\n\t\t\t\tlet result = producer.collect().single()\n\t\t\t\t\n\t\t\t\texpect(result?.value) == [[1, 3], [2, 4]]\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"timer\") {\n\t\t\tit(\"should send the current date at the given interval\") {\n\t\t\t\tlet scheduler = TestScheduler()\n\t\t\t\tlet producer = timer(1, onScheduler: scheduler, withLeeway: 0)\n\n\t\t\t\tvar dates: [NSDate] = []\n\t\t\t\tproducer.startWithNext { dates.append($0) }\n\n\t\t\t\tscheduler.advanceByInterval(0.9)\n\t\t\t\texpect(dates) == []\n\n\t\t\t\tscheduler.advanceByInterval(1)\n\t\t\t\tlet firstTick = scheduler.currentDate\n\t\t\t\texpect(dates) == [firstTick]\n\n\t\t\t\tscheduler.advance()\n\t\t\t\texpect(dates) == [firstTick]\n\n\t\t\t\tscheduler.advanceByInterval(0.2)\n\t\t\t\tlet secondTick = scheduler.currentDate\n\t\t\t\texpect(dates) == [firstTick, secondTick]\n\n\t\t\t\tscheduler.advanceByInterval(1)\n\t\t\t\texpect(dates) == [firstTick, secondTick, scheduler.currentDate]\n\t\t\t}\n\n\t\t\tit(\"should release the signal when disposed\") {\n\t\t\t\tlet scheduler = TestScheduler()\n\t\t\t\tlet producer = timer(1, onScheduler: scheduler, withLeeway: 0)\n\n\t\t\t\tweak var weakSignal: Signal<NSDate, NoError>?\n\t\t\t\tproducer.startWithSignal { signal, disposable in\n\t\t\t\t\tweakSignal = signal\n\t\t\t\t\tscheduler.schedule {\n\t\t\t\t\t\tdisposable.dispose()\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(weakSignal).toNot(beNil())\n\n\t\t\t\tscheduler.run()\n\t\t\t\texpect(weakSignal).to(beNil())\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"on\") {\n\t\t\tit(\"should attach event handlers to each started signal\") {\n\t\t\t\tlet (baseProducer, observer) = SignalProducer<Int, TestError>.buffer(1)\n\n\t\t\t\tvar started = 0\n\t\t\t\tvar event = 0\n\t\t\t\tvar next = 0\n\t\t\t\tvar completed = 0\n\t\t\t\tvar terminated = 0\n\n\t\t\t\tlet producer = baseProducer\n\t\t\t\t\t.on(started: { () -> () in\n\t\t\t\t\t\tstarted += 1\n\t\t\t\t\t}, event: { (e: Event<Int, TestError>) -> () in\n\t\t\t\t\t\tevent += 1\n\t\t\t\t\t}, next: { (n: Int) -> () in\n\t\t\t\t\t\tnext += 1\n\t\t\t\t\t}, completed: { () -> () in\n\t\t\t\t\t\tcompleted += 1\n\t\t\t\t\t}, terminated: { () -> () in\n\t\t\t\t\t\tterminated += 1\n\t\t\t\t\t})\n\n\t\t\t\tproducer.start()\n\t\t\t\texpect(started) == 1\n\n\t\t\t\tproducer.start()\n\t\t\t\texpect(started) == 2\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(event) == 2\n\t\t\t\texpect(next) == 2\n\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(event) == 4\n\t\t\t\texpect(completed) == 2\n\t\t\t\texpect(terminated) == 2\n\t\t\t}\n\n\t\t\tit(\"should attach event handlers for disposal\") {\n\t\t\t\tlet (baseProducer, _) = SignalProducer<Int, TestError>.buffer(1)\n\n\t\t\t\tvar disposed: Bool = false\n\n\t\t\t\tlet producer = baseProducer\n\t\t\t\t\t.on(disposed: { disposed = true })\n\n\t\t\t\tlet disposable = producer.start()\n\n\t\t\t\texpect(disposed) == false\n\t\t\t\tdisposable.dispose()\n\t\t\t\texpect(disposed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"startOn\") {\n\t\t\tit(\"should invoke effects on the given scheduler\") {\n\t\t\t\tlet scheduler = TestScheduler()\n\t\t\t\tvar invoked = false\n\n\t\t\t\tlet producer = SignalProducer<Int, NoError>() { _ in\n\t\t\t\t\tinvoked = true\n\t\t\t\t}\n\n\t\t\t\tproducer.startOn(scheduler).start()\n\t\t\t\texpect(invoked) == false\n\n\t\t\t\tscheduler.advance()\n\t\t\t\texpect(invoked) == true\n\t\t\t}\n\n\t\t\tit(\"should forward events on their original scheduler\") {\n\t\t\t\tlet startScheduler = TestScheduler()\n\t\t\t\tlet testScheduler = TestScheduler()\n\n\t\t\t\tlet producer = timer(2, onScheduler: testScheduler, withLeeway: 0)\n\n\t\t\t\tvar next: NSDate?\n\t\t\t\tproducer.startOn(startScheduler).startWithNext { next = $0 }\n\n\t\t\t\tstartScheduler.advanceByInterval(2)\n\t\t\t\texpect(next).to(beNil())\n\n\t\t\t\ttestScheduler.advanceByInterval(1)\n\t\t\t\texpect(next).to(beNil())\n\n\t\t\t\ttestScheduler.advanceByInterval(1)\n\t\t\t\texpect(next) == testScheduler.currentDate\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"flatMapError\") {\n\t\t\tit(\"should invoke the handler and start new producer for an error\") {\n\t\t\t\tlet (baseProducer, baseObserver) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\tbaseObserver.sendNext(1)\n\t\t\t\tbaseObserver.sendFailed(.Default)\n\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tvar completed = false\n\n\t\t\t\tbaseProducer\n\t\t\t\t\t.flatMapError { (error: TestError) -> SignalProducer<Int, TestError> in\n\t\t\t\t\t\texpect(error) == TestError.Default\n\t\t\t\t\t\texpect(values) == [1]\n\n\t\t\t\t\t\tlet (innerProducer, innerObserver) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\t\t\tinnerObserver.sendNext(2)\n\t\t\t\t\t\tinnerObserver.sendCompleted()\n\t\t\t\t\t\treturn innerProducer\n\t\t\t\t\t}\n\t\t\t\t\t.start { event in\n\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\t\tvalues.append(value)\n\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\texpect(values) == [1, 2]\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should interrupt the replaced producer on disposal\") {\n\t\t\t\tlet (baseProducer, baseObserver) = SignalProducer<Int, TestError>.buffer(1)\n\n\t\t\t\tvar (disposed, interrupted) = (false, false)\n\t\t\t\tlet disposable = baseProducer\n\t\t\t\t\t.flatMapError { (error: TestError) -> SignalProducer<Int, TestError> in\n\t\t\t\t\t\treturn SignalProducer<Int, TestError> { _, disposable in\n\t\t\t\t\t\t\tdisposable += ActionDisposable { disposed = true }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t.startWithInterrupted { interrupted = true }\n\n\t\t\t\tbaseObserver.sendFailed(.Default)\n\t\t\t\tdisposable.dispose()\n\n\t\t\t\texpect(interrupted) == true\n\t\t\t\texpect(disposed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"flatten\") {\n\t\t\tdescribe(\"FlattenStrategy.Concat\") {\n\t\t\t\tdescribe(\"sequencing\") {\n\t\t\t\t\tvar completePrevious: (Void -> Void)!\n\t\t\t\t\tvar sendSubsequent: (Void -> Void)!\n\t\t\t\t\tvar completeOuter: (Void -> Void)!\n\n\t\t\t\t\tvar subsequentStarted = false\n\n\t\t\t\t\tbeforeEach {\n\t\t\t\t\t\tlet (outerProducer, outerObserver) = SignalProducer<SignalProducer<Int, NoError>, NoError>.buffer(1)\n\t\t\t\t\t\tlet (previousProducer, previousObserver) = SignalProducer<Int, NoError>.buffer(1)\n\n\t\t\t\t\t\tsubsequentStarted = false\n\t\t\t\t\t\tlet subsequentProducer = SignalProducer<Int, NoError> { _ in\n\t\t\t\t\t\t\tsubsequentStarted = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcompletePrevious = { previousObserver.sendCompleted() }\n\t\t\t\t\t\tsendSubsequent = { outerObserver.sendNext(subsequentProducer) }\n\t\t\t\t\t\tcompleteOuter = { outerObserver.sendCompleted() }\n\n\t\t\t\t\t\touterProducer.flatten(.Concat).start()\n\t\t\t\t\t\touterObserver.sendNext(previousProducer)\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should immediately start subsequent inner producer if previous inner producer has already completed\") {\n\t\t\t\t\t\tcompletePrevious()\n\t\t\t\t\t\tsendSubsequent()\n\t\t\t\t\t\texpect(subsequentStarted) == true\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext(\"with queued producers\") {\n\t\t\t\t\t\tbeforeEach {\n\t\t\t\t\t\t\t// Place the subsequent producer into `concat`'s queue.\n\t\t\t\t\t\t\tsendSubsequent()\n\t\t\t\t\t\t\texpect(subsequentStarted) == false\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tit(\"should start subsequent inner producer upon completion of previous inner producer\") {\n\t\t\t\t\t\t\tcompletePrevious()\n\t\t\t\t\t\t\texpect(subsequentStarted) == true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tit(\"should start subsequent inner producer upon completion of previous inner producer and completion of outer producer\") {\n\t\t\t\t\t\t\tcompleteOuter()\n\t\t\t\t\t\t\tcompletePrevious()\n\t\t\t\t\t\t\texpect(subsequentStarted) == true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tit(\"should forward an error from an inner producer\") {\n\t\t\t\t\tlet errorProducer = SignalProducer<Int, TestError>(error: TestError.Default)\n\t\t\t\t\tlet outerProducer = SignalProducer<SignalProducer<Int, TestError>, TestError>(value: errorProducer)\n\n\t\t\t\t\tvar error: TestError?\n\t\t\t\t\t(outerProducer.flatten(.Concat)).startWithFailed { e in\n\t\t\t\t\t\terror = e\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(error) == TestError.Default\n\t\t\t\t}\n\n\t\t\t\tit(\"should forward an error from the outer producer\") {\n\t\t\t\t\tlet (outerProducer, outerObserver) = SignalProducer<SignalProducer<Int, TestError>, TestError>.buffer(1)\n\n\t\t\t\t\tvar error: TestError?\n\t\t\t\t\touterProducer.flatten(.Concat).startWithFailed { e in\n\t\t\t\t\t\terror = e\n\t\t\t\t\t}\n\n\t\t\t\t\touterObserver.sendFailed(TestError.Default)\n\t\t\t\t\texpect(error) == TestError.Default\n\t\t\t\t}\n\n\t\t\t\tdescribe(\"completion\") {\n\t\t\t\t\tvar completeOuter: (Void -> Void)!\n\t\t\t\t\tvar completeInner: (Void -> Void)!\n\n\t\t\t\t\tvar completed = false\n\n\t\t\t\t\tbeforeEach {\n\t\t\t\t\t\tlet (outerProducer, outerObserver) = SignalProducer<SignalProducer<Int, NoError>, NoError>.buffer(1)\n\t\t\t\t\t\tlet (innerProducer, innerObserver) = SignalProducer<Int, NoError>.buffer(1)\n\n\t\t\t\t\t\tcompleteOuter = { outerObserver.sendCompleted() }\n\t\t\t\t\t\tcompleteInner = { innerObserver.sendCompleted() }\n\n\t\t\t\t\t\tcompleted = false\n\t\t\t\t\t\touterProducer.flatten(.Concat).startWithCompleted {\n\t\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\touterObserver.sendNext(innerProducer)\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should complete when inner producers complete, then outer producer completes\") {\n\t\t\t\t\t\tcompleteInner()\n\t\t\t\t\t\texpect(completed) == false\n\n\t\t\t\t\t\tcompleteOuter()\n\t\t\t\t\t\texpect(completed) == true\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should complete when outer producers completes, then inner producers complete\") {\n\t\t\t\t\t\tcompleteOuter()\n\t\t\t\t\t\texpect(completed) == false\n\n\t\t\t\t\t\tcompleteInner()\n\t\t\t\t\t\texpect(completed) == true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdescribe(\"FlattenStrategy.Merge\") {\n\t\t\t\tdescribe(\"behavior\") {\n\t\t\t\t\tvar completeA: (Void -> Void)!\n\t\t\t\t\tvar sendA: (Void -> Void)!\n\t\t\t\t\tvar completeB: (Void -> Void)!\n\t\t\t\t\tvar sendB: (Void -> Void)!\n\n\t\t\t\t\tvar outerCompleted = false\n\n\t\t\t\t\tvar recv = [Int]()\n\n\t\t\t\t\tbeforeEach {\n\t\t\t\t\t\tlet (outerProducer, outerObserver) = SignalProducer<SignalProducer<Int, NoError>, NoError>.buffer(Int.max)\n\t\t\t\t\t\tlet (producerA, observerA) = SignalProducer<Int, NoError>.buffer(Int.max)\n\t\t\t\t\t\tlet (producerB, observerB) = SignalProducer<Int, NoError>.buffer(Int.max)\n\n\t\t\t\t\t\tcompleteA = { observerA.sendCompleted() }\n\t\t\t\t\t\tcompleteB = { observerB.sendCompleted() }\n\n\t\t\t\t\t\tvar a = 0\n\t\t\t\t\t\tsendA = { observerA.sendNext(a++) }\n\n\t\t\t\t\t\tvar b = 100\n\t\t\t\t\t\tsendB = { observerB.sendNext(b++) }\n\n\t\t\t\t\t\touterObserver.sendNext(producerA)\n\t\t\t\t\t\touterObserver.sendNext(producerB)\n\n\t\t\t\t\t\touterProducer.flatten(.Merge).start { event in\n\t\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\t\tcase let .Next(i):\n\t\t\t\t\t\t\t\trecv.append(i)\n\t\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\t\touterCompleted = true\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\touterObserver.sendCompleted()\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should forward values from any inner signals\") {\n\t\t\t\t\t\tsendA()\n\t\t\t\t\t\tsendA()\n\t\t\t\t\t\tsendB()\n\t\t\t\t\t\tsendA()\n\t\t\t\t\t\tsendB()\n\t\t\t\t\t\texpect(recv) == [0, 1, 100, 2, 101]\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should complete when all signals have completed\") {\n\t\t\t\t\t\tcompleteA()\n\t\t\t\t\t\texpect(outerCompleted) == false\n\t\t\t\t\t\tcompleteB()\n\t\t\t\t\t\texpect(outerCompleted) == true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdescribe(\"error handling\") {\n\t\t\t\t\tit(\"should forward an error from an inner signal\") {\n\t\t\t\t\t\tlet errorProducer = SignalProducer<Int, TestError>(error: TestError.Default)\n\t\t\t\t\t\tlet outerProducer = SignalProducer<SignalProducer<Int, TestError>, TestError>(value: errorProducer)\n\n\t\t\t\t\t\tvar error: TestError?\n\t\t\t\t\t\touterProducer.flatten(.Merge).startWithFailed { e in\n\t\t\t\t\t\t\terror = e\n\t\t\t\t\t\t}\n\t\t\t\t\t\texpect(error) == TestError.Default\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should forward an error from the outer signal\") {\n\t\t\t\t\t\tlet (outerProducer, outerObserver) = SignalProducer<SignalProducer<Int, TestError>, TestError>.buffer(1)\n\n\t\t\t\t\t\tvar error: TestError?\n\t\t\t\t\t\touterProducer.flatten(.Merge).startWithFailed { e in\n\t\t\t\t\t\t\terror = e\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\touterObserver.sendFailed(TestError.Default)\n\t\t\t\t\t\texpect(error) == TestError.Default\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdescribe(\"FlattenStrategy.Latest\") {\n\t\t\t\tit(\"should forward values from the latest inner signal\") {\n\t\t\t\t\tlet (outer, outerObserver) = SignalProducer<SignalProducer<Int, TestError>, TestError>.buffer(1)\n\t\t\t\t\tlet (firstInner, firstInnerObserver) = SignalProducer<Int, TestError>.buffer(1)\n\t\t\t\t\tlet (secondInner, secondInnerObserver) = SignalProducer<Int, TestError>.buffer(1)\n\n\t\t\t\t\tvar receivedValues: [Int] = []\n\t\t\t\t\tvar errored = false\n\t\t\t\t\tvar completed = false\n\n\t\t\t\t\touter.flatten(.Latest).start { event in\n\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\t\treceivedValues.append(value)\n\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t\tcase .Failed(_):\n\t\t\t\t\t\t\terrored = true\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfirstInnerObserver.sendNext(1)\n\t\t\t\t\tsecondInnerObserver.sendNext(2)\n\t\t\t\t\touterObserver.sendNext(SignalProducer(value: 0))\n\t\t\t\t\touterObserver.sendNext(firstInner)\n\t\t\t\t\touterObserver.sendNext(secondInner)\n\t\t\t\t\touterObserver.sendCompleted()\n\n\t\t\t\t\texpect(receivedValues) == [ 0, 1, 2 ]\n\t\t\t\t\texpect(errored) == false\n\t\t\t\t\texpect(completed) == false\n\n\t\t\t\t\tfirstInnerObserver.sendNext(3)\n\t\t\t\t\tfirstInnerObserver.sendCompleted()\n\t\t\t\t\tsecondInnerObserver.sendNext(4)\n\t\t\t\t\tsecondInnerObserver.sendCompleted()\n\n\t\t\t\t\texpect(receivedValues) == [ 0, 1, 2, 4 ]\n\t\t\t\t\texpect(errored) == false\n\t\t\t\t\texpect(completed) == true\n\t\t\t\t}\n\n\t\t\t\tit(\"should forward an error from an inner signal\") {\n\t\t\t\t\tlet inner = SignalProducer<Int, TestError>(error: .Default)\n\t\t\t\t\tlet outer = SignalProducer<SignalProducer<Int, TestError>, TestError>(value: inner)\n\n\t\t\t\t\tlet result = outer.flatten(.Latest).first()\n\t\t\t\t\texpect(result?.error) == TestError.Default\n\t\t\t\t}\n\n\t\t\t\tit(\"should forward an error from the outer signal\") {\n\t\t\t\t\tlet outer = SignalProducer<SignalProducer<Int, TestError>, TestError>(error: .Default)\n\n\t\t\t\t\tlet result = outer.flatten(.Latest).first()\n\t\t\t\t\texpect(result?.error) == TestError.Default\n\t\t\t\t}\n\n\t\t\t\tit(\"should complete when the original and latest signals have completed\") {\n\t\t\t\t\tlet inner = SignalProducer<Int, TestError>.empty\n\t\t\t\t\tlet outer = SignalProducer<SignalProducer<Int, TestError>, TestError>(value: inner)\n\n\t\t\t\t\tvar completed = false\n\t\t\t\t\touter.flatten(.Latest).startWithCompleted {\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(completed) == true\n\t\t\t\t}\n\n\t\t\t\tit(\"should complete when the outer signal completes before sending any signals\") {\n\t\t\t\t\tlet outer = SignalProducer<SignalProducer<Int, TestError>, TestError>.empty\n\n\t\t\t\t\tvar completed = false\n\t\t\t\t\touter.flatten(.Latest).startWithCompleted {\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t}\n\n\t\t\t\t\texpect(completed) == true\n\t\t\t\t}\n\n\t\t\t\tit(\"should not deadlock\") {\n\t\t\t\t\tlet producer = SignalProducer<Int, NoError>(value: 1)\n\t\t\t\t\t\t.flatMap(.Latest) { _ in SignalProducer(value: 10) }\n\n\t\t\t\t\tlet result = producer.take(1).last()\n\t\t\t\t\texpect(result?.value) == 10\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdescribe(\"interruption\") {\n\t\t\t\tvar innerObserver: Signal<(), NoError>.Observer!\n\t\t\t\tvar outerObserver: Signal<SignalProducer<(), NoError>, NoError>.Observer!\n\t\t\t\tvar execute: (FlattenStrategy -> Void)!\n\n\t\t\t\tvar interrupted = false\n\t\t\t\tvar completed = false\n\n\t\t\t\tbeforeEach {\n\t\t\t\t\tlet (innerProducer, incomingInnerObserver) = SignalProducer<(), NoError>.buffer(1)\n\t\t\t\t\tlet (outerProducer, incomingOuterObserver) = SignalProducer<SignalProducer<(), NoError>, NoError>.buffer(1)\n\n\t\t\t\t\tinnerObserver = incomingInnerObserver\n\t\t\t\t\touterObserver = incomingOuterObserver\n\n\t\t\t\t\texecute = { strategy in\n\t\t\t\t\t\tinterrupted = false\n\t\t\t\t\t\tcompleted = false\n\n\t\t\t\t\t\touterProducer\n\t\t\t\t\t\t\t.flatten(strategy)\n\t\t\t\t\t\t\t.start { event in\n\t\t\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\t\t\tcase .Interrupted:\n\t\t\t\t\t\t\t\t\tinterrupted = true\n\t\t\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tincomingOuterObserver.sendNext(innerProducer)\n\t\t\t\t}\n\n\t\t\t\tdescribe(\"Concat\") {\n\t\t\t\t\tit(\"should drop interrupted from an inner producer\") {\n\t\t\t\t\t\texecute(.Concat)\n\n\t\t\t\t\t\tinnerObserver.sendInterrupted()\n\t\t\t\t\t\texpect(interrupted) == false\n\t\t\t\t\t\texpect(completed) == false\n\n\t\t\t\t\t\touterObserver.sendCompleted()\n\t\t\t\t\t\texpect(completed) == true\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should forward interrupted from the outer producer\") {\n\t\t\t\t\t\texecute(.Concat)\n\t\t\t\t\t\touterObserver.sendInterrupted()\n\t\t\t\t\t\texpect(interrupted) == true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdescribe(\"Latest\") {\n\t\t\t\t\tit(\"should drop interrupted from an inner producer\") {\n\t\t\t\t\t\texecute(.Latest)\n\n\t\t\t\t\t\tinnerObserver.sendInterrupted()\n\t\t\t\t\t\texpect(interrupted) == false\n\t\t\t\t\t\texpect(completed) == false\n\n\t\t\t\t\t\touterObserver.sendCompleted()\n\t\t\t\t\t\texpect(completed) == true\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should forward interrupted from the outer producer\") {\n\t\t\t\t\t\texecute(.Latest)\n\t\t\t\t\t\touterObserver.sendInterrupted()\n\t\t\t\t\t\texpect(interrupted) == true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdescribe(\"Merge\") {\n\t\t\t\t\tit(\"should drop interrupted from an inner producer\") {\n\t\t\t\t\t\texecute(.Merge)\n\n\t\t\t\t\t\tinnerObserver.sendInterrupted()\n\t\t\t\t\t\texpect(interrupted) == false\n\t\t\t\t\t\texpect(completed) == false\n\n\t\t\t\t\t\touterObserver.sendCompleted()\n\t\t\t\t\t\texpect(completed) == true\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should forward interrupted from the outer producer\") {\n\t\t\t\t\t\texecute(.Merge)\n\t\t\t\t\t\touterObserver.sendInterrupted()\n\t\t\t\t\t\texpect(interrupted) == true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdescribe(\"disposal\") {\n\t\t\t\tvar completeOuter: (Void -> Void)!\n\t\t\t\tvar disposeOuter: (Void -> Void)!\n\t\t\t\tvar execute: (FlattenStrategy -> Void)!\n\n\t\t\t\tvar innerDisposable = SimpleDisposable()\n\t\t\t\tvar interrupted = false\n\n\t\t\t\tbeforeEach {\n\t\t\t\t\texecute = { strategy in\n\t\t\t\t\t\tlet (outerProducer, outerObserver) = SignalProducer<SignalProducer<Int, NoError>, NoError>.buffer(1)\n\n\t\t\t\t\t\tinnerDisposable = SimpleDisposable()\n\t\t\t\t\t\tlet innerProducer = SignalProducer<Int, NoError> { $1.addDisposable(innerDisposable) }\n\t\t\t\t\t\t\n\t\t\t\t\t\tinterrupted = false\n\t\t\t\t\t\tlet outerDisposable = outerProducer.flatten(strategy).startWithInterrupted {\n\t\t\t\t\t\t\tinterrupted = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcompleteOuter = outerObserver.sendCompleted\n\t\t\t\t\t\tdisposeOuter = outerDisposable.dispose\n\n\t\t\t\t\t\touterObserver.sendNext(innerProducer)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tdescribe(\"Concat\") {\n\t\t\t\t\tit(\"should cancel inner work when disposed before the outer producer completes\") {\n\t\t\t\t\t\texecute(.Concat)\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == false\n\t\t\t\t\t\texpect(interrupted) == false\n\t\t\t\t\t\tdisposeOuter()\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == true\n\t\t\t\t\t\texpect(interrupted) == true\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should cancel inner work when disposed after the outer producer completes\") {\n\t\t\t\t\t\texecute(.Concat)\n\n\t\t\t\t\t\tcompleteOuter()\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == false\n\t\t\t\t\t\texpect(interrupted) == false\n\t\t\t\t\t\tdisposeOuter()\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == true\n\t\t\t\t\t\texpect(interrupted) == true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdescribe(\"Latest\") {\n\t\t\t\t\tit(\"should cancel inner work when disposed before the outer producer completes\") {\n\t\t\t\t\t\texecute(.Latest)\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == false\n\t\t\t\t\t\texpect(interrupted) == false\n\t\t\t\t\t\tdisposeOuter()\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == true\n\t\t\t\t\t\texpect(interrupted) == true\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should cancel inner work when disposed after the outer producer completes\") {\n\t\t\t\t\t\texecute(.Latest)\n\n\t\t\t\t\t\tcompleteOuter()\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == false\n\t\t\t\t\t\texpect(interrupted) == false\n\t\t\t\t\t\tdisposeOuter()\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == true\n\t\t\t\t\t\texpect(interrupted) == true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdescribe(\"Merge\") {\n\t\t\t\t\tit(\"should cancel inner work when disposed before the outer producer completes\") {\n\t\t\t\t\t\texecute(.Merge)\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == false\n\t\t\t\t\t\texpect(interrupted) == false\n\t\t\t\t\t\tdisposeOuter()\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == true\n\t\t\t\t\t\texpect(interrupted) == true\n\t\t\t\t\t}\n\n\t\t\t\t\tit(\"should cancel inner work when disposed after the outer producer completes\") {\n\t\t\t\t\t\texecute(.Merge)\n\n\t\t\t\t\t\tcompleteOuter()\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == false\n\t\t\t\t\t\texpect(interrupted) == false\n\t\t\t\t\t\tdisposeOuter()\n\n\t\t\t\t\t\texpect(innerDisposable.disposed) == true\n\t\t\t\t\t\texpect(interrupted) == true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"times\") {\n\t\t\tit(\"should start a signal N times upon completion\") {\n\t\t\t\tlet original = SignalProducer<Int, NoError>(values: [ 1, 2, 3 ])\n\t\t\t\tlet producer = original.times(3)\n\n\t\t\t\tlet result = producer.collect().single()\n\t\t\t\texpect(result?.value) == [ 1, 2, 3, 1, 2, 3, 1, 2, 3 ]\n\t\t\t}\n\n\t\t\tit(\"should produce an equivalent signal producer if count is 1\") {\n\t\t\t\tlet original = SignalProducer<Int, NoError>(value: 1)\n\t\t\t\tlet producer = original.times(1)\n\n\t\t\t\tlet result = producer.collect().single()\n\t\t\t\texpect(result?.value) == [ 1 ]\n\t\t\t}\n\n\t\t\tit(\"should produce an empty signal if count is 0\") {\n\t\t\t\tlet original = SignalProducer<Int, NoError>(value: 1)\n\t\t\t\tlet producer = original.times(0)\n\n\t\t\t\tlet result = producer.first()\n\t\t\t\texpect(result).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should not repeat upon error\") {\n\t\t\t\tlet results: [Result<Int, TestError>] = [\n\t\t\t\t\t.Success(1),\n\t\t\t\t\t.Success(2),\n\t\t\t\t\t.Failure(.Default)\n\t\t\t\t]\n\n\t\t\t\tlet original = SignalProducer.attemptWithResults(results)\n\t\t\t\tlet producer = original.times(3)\n\n\t\t\t\tlet events = producer\n\t\t\t\t\t.materialize()\n\t\t\t\t\t.collect()\n\t\t\t\t\t.single()\n\t\t\t\tlet result = events?.value\n\n\t\t\t\tlet expectedEvents: [Event<Int, TestError>] = [\n\t\t\t\t\t.Next(1),\n\t\t\t\t\t.Next(2),\n\t\t\t\t\t.Failed(.Default)\n\t\t\t\t]\n\n\t\t\t\t// TODO: if let result = result where result.count == expectedEvents.count\n\t\t\t\tif result?.count != expectedEvents.count {\n\t\t\t\t\tfail(\"Invalid result: \\(result)\")\n\t\t\t\t} else {\n\t\t\t\t\t// Can't test for equality because Array<T> is not Equatable,\n\t\t\t\t\t// and neither is Event<Value, Error>.\n\t\t\t\t\texpect(result![0] == expectedEvents[0]) == true\n\t\t\t\t\texpect(result![1] == expectedEvents[1]) == true\n\t\t\t\t\texpect(result![2] == expectedEvents[2]) == true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tit(\"should evaluate lazily\") {\n\t\t\t\tlet original = SignalProducer<Int, NoError>(value: 1)\n\t\t\t\tlet producer = original.times(Int.max)\n\n\t\t\t\tlet result = producer.take(1).single()\n\t\t\t\texpect(result?.value) == 1\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"retry\") {\n\t\t\tit(\"should start a signal N times upon error\") {\n\t\t\t\tlet results: [Result<Int, TestError>] = [\n\t\t\t\t\t.Failure(.Error1),\n\t\t\t\t\t.Failure(.Error2),\n\t\t\t\t\t.Success(1)\n\t\t\t\t]\n\n\t\t\t\tlet original = SignalProducer.attemptWithResults(results)\n\t\t\t\tlet producer = original.retry(2)\n\n\t\t\t\tlet result = producer.single()\n\n\t\t\t\texpect(result?.value) == 1\n\t\t\t}\n\n\t\t\tit(\"should forward errors that occur after all retries\") {\n\t\t\t\tlet results: [Result<Int, TestError>] = [\n\t\t\t\t\t.Failure(.Default),\n\t\t\t\t\t.Failure(.Error1),\n\t\t\t\t\t.Failure(.Error2),\n\t\t\t\t]\n\n\t\t\t\tlet original = SignalProducer.attemptWithResults(results)\n\t\t\t\tlet producer = original.retry(2)\n\n\t\t\t\tlet result = producer.single()\n\n\t\t\t\texpect(result?.error) == TestError.Error2\n\t\t\t}\n\n\t\t\tit(\"should not retry upon completion\") {\n\t\t\t\tlet results: [Result<Int, TestError>] = [\n\t\t\t\t\t.Success(1),\n\t\t\t\t\t.Success(2),\n\t\t\t\t\t.Success(3)\n\t\t\t\t]\n\n\t\t\t\tlet original = SignalProducer.attemptWithResults(results)\n\t\t\t\tlet producer = original.retry(2)\n\n\t\t\t\tlet result = producer.single()\n\t\t\t\texpect(result?.value) == 1\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"then\") {\n\t\t\tit(\"should start the subsequent producer after the completion of the original\") {\n\t\t\t\tlet (original, observer) = SignalProducer<Int, NoError>.buffer(1)\n\n\t\t\t\tvar subsequentStarted = false\n\t\t\t\tlet subsequent = SignalProducer<Int, NoError> { observer, _ in\n\t\t\t\t\tsubsequentStarted = true\n\t\t\t\t}\n\n\t\t\t\tlet producer = original.then(subsequent)\n\t\t\t\tproducer.start()\n\t\t\t\texpect(subsequentStarted) == false\n\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(subsequentStarted) == true\n\t\t\t}\n\n\t\t\tit(\"should forward errors from the original producer\") {\n\t\t\t\tlet original = SignalProducer<Int, TestError>(error: .Default)\n\t\t\t\tlet subsequent = SignalProducer<Int, TestError>.empty\n\n\t\t\t\tlet result = original.then(subsequent).first()\n\t\t\t\texpect(result?.error) == TestError.Default\n\t\t\t}\n\n\t\t\tit(\"should forward errors from the subsequent producer\") {\n\t\t\t\tlet original = SignalProducer<Int, TestError>.empty\n\t\t\t\tlet subsequent = SignalProducer<Int, TestError>(error: .Default)\n\n\t\t\t\tlet result = original.then(subsequent).first()\n\t\t\t\texpect(result?.error) == TestError.Default\n\t\t\t}\n\n\t\t\tit(\"should complete when both inputs have completed\") {\n\t\t\t\tlet (original, originalObserver) = SignalProducer<Int, NoError>.buffer(1)\n\t\t\t\tlet (subsequent, subsequentObserver) = SignalProducer<String, NoError>.buffer(1)\n\n\t\t\t\tlet producer = original.then(subsequent)\n\n\t\t\t\tvar completed = false\n\t\t\t\tproducer.startWithCompleted {\n\t\t\t\t\tcompleted = true\n\t\t\t\t}\n\n\t\t\t\toriginalObserver.sendCompleted()\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tsubsequentObserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"first\") {\n\t\t\tit(\"should start a signal then block on the first value\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\n\t\t\t\tvar result: Result<Int, NoError>?\n\n\t\t\t\tlet group = dispatch_group_create()\n\t\t\t\tdispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {\n\t\t\t\t\tresult = producer.first()\n\t\t\t\t}\n\t\t\t\texpect(result).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tdispatch_group_wait(group, DISPATCH_TIME_FOREVER)\n\t\t\t\texpect(result?.value) == 1\n\t\t\t}\n\n\t\t\tit(\"should return a nil result if no values are sent before completion\") {\n\t\t\t\tlet result = SignalProducer<Int, NoError>.empty.first()\n\t\t\t\texpect(result).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should return the first value if more than one value is sent\") {\n\t\t\t\tlet result = SignalProducer<Int, NoError>(values: [ 1, 2 ]).first()\n\t\t\t\texpect(result?.value) == 1\n\t\t\t}\n\n\t\t\tit(\"should return an error if one occurs before the first value\") {\n\t\t\t\tlet result = SignalProducer<Int, TestError>(error: .Default).first()\n\t\t\t\texpect(result?.error) == TestError.Default\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"single\") {\n\t\t\tit(\"should start a signal then block until completion\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\n\t\t\t\tvar result: Result<Int, NoError>?\n\n\t\t\t\tlet group = dispatch_group_create()\n\t\t\t\tdispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {\n\t\t\t\t\tresult = producer.single()\n\t\t\t\t}\n\t\t\t\texpect(result).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(result).to(beNil())\n\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\tdispatch_group_wait(group, DISPATCH_TIME_FOREVER)\n\t\t\t\texpect(result?.value) == 1\n\t\t\t}\n\n\t\t\tit(\"should return a nil result if no values are sent before completion\") {\n\t\t\t\tlet result = SignalProducer<Int, NoError>.empty.single()\n\t\t\t\texpect(result).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should return a nil result if more than one value is sent before completion\") {\n\t\t\t\tlet result = SignalProducer<Int, NoError>(values: [ 1, 2 ]).single()\n\t\t\t\texpect(result).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should return an error if one occurs\") {\n\t\t\t\tlet result = SignalProducer<Int, TestError>(error: .Default).single()\n\t\t\t\texpect(result?.error) == TestError.Default\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"last\") {\n\t\t\tit(\"should start a signal then block until completion\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\n\t\t\t\tvar result: Result<Int, NoError>?\n\n\t\t\t\tlet group = dispatch_group_create()\n\t\t\t\tdispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {\n\t\t\t\t\tresult = producer.last()\n\t\t\t\t}\n\t\t\t\texpect(result).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(result).to(beNil())\n\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\tdispatch_group_wait(group, DISPATCH_TIME_FOREVER)\n\t\t\t\texpect(result?.value) == 2\n\t\t\t}\n\n\t\t\tit(\"should return a nil result if no values are sent before completion\") {\n\t\t\t\tlet result = SignalProducer<Int, NoError>.empty.last()\n\t\t\t\texpect(result).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should return the last value if more than one value is sent\") {\n\t\t\t\tlet result = SignalProducer<Int, NoError>(values: [ 1, 2 ]).last()\n\t\t\t\texpect(result?.value) == 2\n\t\t\t}\n\n\t\t\tit(\"should return an error if one occurs\") {\n\t\t\t\tlet result = SignalProducer<Int, TestError>(error: .Default).last()\n\t\t\t\texpect(result?.error) == TestError.Default\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"wait\") {\n\t\t\tit(\"should start a signal then block until completion\") {\n\t\t\t\tlet (producer, observer) = SignalProducer<Int, NoError>.buffer(1)\n\n\t\t\t\tvar result: Result<(), NoError>?\n\n\t\t\t\tlet group = dispatch_group_create()\n\t\t\t\tdispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {\n\t\t\t\t\tresult = producer.wait()\n\t\t\t\t}\n\t\t\t\texpect(result).to(beNil())\n\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\tdispatch_group_wait(group, DISPATCH_TIME_FOREVER)\n\t\t\t\texpect(result?.value).toNot(beNil())\n\t\t\t}\n\n\t\t\tit(\"should return an error if one occurs\") {\n\t\t\t\tlet result = SignalProducer<Int, TestError>(error: .Default).wait()\n\t\t\t\texpect(result.error) == TestError.Default\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"observeOn\") {\n\t\t\tit(\"should immediately cancel upstream producer's work when disposed\") {\n\t\t\t\tvar upstreamDisposable: Disposable!\n\t\t\t\tlet producer = SignalProducer<(), NoError>{ _, innerDisposable in\n\t\t\t\t\tupstreamDisposable = innerDisposable\n\t\t\t\t}\n\n\t\t\t\tvar downstreamDisposable: Disposable!\n\t\t\t\tproducer\n\t\t\t\t\t.observeOn(TestScheduler())\n\t\t\t\t\t.startWithSignal { signal, innerDisposable in\n\t\t\t\t\t\tdownstreamDisposable = innerDisposable\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\texpect(upstreamDisposable.disposed) == false\n\t\t\t\t\n\t\t\t\tdownstreamDisposable.dispose()\n\t\t\t\texpect(upstreamDisposable.disposed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"take\") {\n\t\t\tit(\"Should not start concat'ed producer if the first one sends a value when using take(1)\") {\n\t\t\t\tlet scheduler: QueueScheduler\n\t\t\t\tif #available(OSX 10.10, *) {\n\t\t\t\t\tscheduler = QueueScheduler()\n\t\t\t\t} else {\n\t\t\t\t\tscheduler = QueueScheduler(queue: dispatch_get_main_queue())\n\t\t\t\t}\n\n\t\t\t\t// Delaying producer1 from sending a value to test whether producer2 is started in the mean-time.\n\t\t\t\tlet producer1 = SignalProducer<Int, NoError>() { handler, _ in\n\t\t\t\t\thandler.sendNext(1)\n\t\t\t\t\thandler.sendCompleted()\n\t\t\t\t}.startOn(scheduler)\n\n\t\t\t\tvar started = false\n\t\t\t\tlet producer2 = SignalProducer<Int, NoError>() { handler, _ in\n\t\t\t\t\tstarted = true\n\t\t\t\t\thandler.sendNext(2)\n\t\t\t\t\thandler.sendCompleted()\n\t\t\t\t}\n\n\t\t\t\tlet result = producer1.concat(producer2).take(1).collect().first()\n\n\t\t\t\texpect(result?.value) == [1]\n\t\t\t\texpect(started) == false\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"replayLazily\") {\n\t\t\tvar producer: SignalProducer<Int, TestError>!\n\t\t\tvar observer: SignalProducer<Int, TestError>.ProducedSignal.Observer!\n\n\t\t\tvar replayedProducer: SignalProducer<Int, TestError>!\n\n\t\t\tbeforeEach {\n\t\t\t\tlet (producerTemp, observerTemp) = SignalProducer<Int, TestError>.buffer(0)\n\t\t\t\tproducer = producerTemp\n\t\t\t\tobserver = observerTemp\n\n\t\t\t\treplayedProducer = producer.replayLazily(2)\n\t\t\t}\n\n\t\t\tcontext(\"subscribing to underlying producer\") {\n\t\t\t\tit(\"emits new values\") {\n\t\t\t\t\tvar last: Int?\n\n\t\t\t\t\treplayedProducer.startWithNext { last = $0 }\n\t\t\t\t\texpect(last).to(beNil())\n\n\t\t\t\t\tobserver.sendNext(1)\n\t\t\t\t\texpect(last) == 1\n\n\t\t\t\t\tobserver.sendNext(2)\n\t\t\t\t\texpect(last) == 2\n\t\t\t\t}\n\n\t\t\t\tit(\"emits errors\") {\n\t\t\t\t\tvar error: TestError?\n\n\t\t\t\t\treplayedProducer.startWithFailed { error = $0 }\n\t\t\t\t\texpect(error).to(beNil())\n\n\t\t\t\t\tobserver.sendFailed(.Default)\n\t\t\t\t\texpect(error) == TestError.Default\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext(\"buffers past values\") {\n\t\t\t\tit(\"emits last value upon subscription\") {\n\t\t\t\t\tlet disposable = replayedProducer\n\t\t\t\t\t\t.start()\n\n\t\t\t\t\tobserver.sendNext(1)\n\t\t\t\t\tdisposable.dispose()\n\n\t\t\t\t\tvar last: Int?\n\n\t\t\t\t\treplayedProducer\n\t\t\t\t\t\t.startWithNext { last = $0 }\n\t\t\t\t\texpect(last) == 1\n\t\t\t\t}\n\n\t\t\t\tit(\"emits previous failure upon subscription\") {\n\t\t\t\t\tlet disposable = replayedProducer\n\t\t\t\t\t\t.start()\n\n\t\t\t\t\tobserver.sendFailed(.Default)\n\t\t\t\t\tdisposable.dispose()\n\n\t\t\t\t\tvar error: TestError?\n\n\t\t\t\t\treplayedProducer\n\t\t\t\t\t\t.startWithFailed { error = $0 }\n\t\t\t\t\texpect(error) == TestError.Default\n\t\t\t\t}\n\n\t\t\t\tit(\"emits last n values upon subscription\") {\n\t\t\t\t\tvar disposable = replayedProducer\n\t\t\t\t\t\t.start()\n\n\t\t\t\t\tobserver.sendNext(1)\n\t\t\t\t\tobserver.sendNext(2)\n\t\t\t\t\tobserver.sendNext(3)\n\t\t\t\t\tobserver.sendNext(4)\n\t\t\t\t\tdisposable.dispose()\n\n\t\t\t\t\tvar values: [Int] = []\n\n\t\t\t\t\tdisposable = replayedProducer\n\t\t\t\t\t\t.startWithNext { values.append($0) }\n\t\t\t\t\texpect(values) == [ 3, 4 ]\n\n\t\t\t\t\tobserver.sendNext(5)\n\t\t\t\t\texpect(values) == [ 3, 4, 5 ]\n\n\t\t\t\t\tdisposable.dispose()\n\t\t\t\t\tvalues = []\n\n\t\t\t\t\treplayedProducer\n\t\t\t\t\t\t.startWithNext { values.append($0) }\n\t\t\t\t\texpect(values) == [ 4, 5 ]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext(\"starting underying producer\") {\n\t\t\t\tit(\"starts lazily\") {\n\t\t\t\t\tvar started = false\n\n\t\t\t\t\tlet producer = SignalProducer<Int, NoError>(value: 0)\n\t\t\t\t\t\t.on(started: { started = true })\n\t\t\t\t\texpect(started) == false\n\n\t\t\t\t\tlet replayedProducer = producer\n\t\t\t\t\t\t.replayLazily(1)\n\t\t\t\t\texpect(started) == false\n\n\t\t\t\t\treplayedProducer.start()\n\t\t\t\t\texpect(started) == true\n\t\t\t\t}\n\n\t\t\t\tit(\"shares a single subscription\") {\n\t\t\t\t\tvar startedTimes = 0\n\n\t\t\t\t\tlet producer = SignalProducer<Int, NoError>.never\n\t\t\t\t\t\t.on(started: { startedTimes++ })\n\t\t\t\t\texpect(startedTimes) == 0\n\n\t\t\t\t\tlet replayedProducer = producer\n\t\t\t\t\t\t.replayLazily(1)\n\t\t\t\t\texpect(startedTimes) == 0\n\n\t\t\t\t\treplayedProducer.start()\n\t\t\t\t\texpect(startedTimes) == 1\n\n\t\t\t\t\treplayedProducer.start()\n\t\t\t\t\texpect(startedTimes) == 1\n\t\t\t\t}\n\n\t\t\t\tit(\"does not start multiple times when subscribing multiple times\") {\n\t\t\t\t\tvar startedTimes = 0\n\n\t\t\t\t\tlet producer = SignalProducer<Int, NoError>(value: 0)\n\t\t\t\t\t\t.on(started: { startedTimes++ })\n\n\t\t\t\t\tlet replayedProducer = producer\n\t\t\t\t\t\t.replayLazily(1)\n\n\t\t\t\t\texpect(startedTimes) == 0\n\t\t\t\t\treplayedProducer.start().dispose()\n\t\t\t\t\texpect(startedTimes) == 1\n\t\t\t\t\treplayedProducer.start().dispose()\n\t\t\t\t\texpect(startedTimes) == 1\n\t\t\t\t}\n\n\t\t\t\tit(\"does not start again if it finished\") {\n\t\t\t\t\tvar startedTimes = 0\n\n\t\t\t\t\tlet producer = SignalProducer<Int, NoError>.empty\n\t\t\t\t\t\t.on(started: { startedTimes++ })\n\t\t\t\t\texpect(startedTimes) == 0\n\n\t\t\t\t\tlet replayedProducer = producer\n\t\t\t\t\t\t.replayLazily(1)\n\t\t\t\t\texpect(startedTimes) == 0\n\n\t\t\t\t\treplayedProducer.start()\n\t\t\t\t\texpect(startedTimes) == 1\n\n\t\t\t\t\treplayedProducer.start()\n\t\t\t\t\texpect(startedTimes) == 1\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext(\"lifetime\") {\n\t\t\t\tit(\"does not dispose underlying subscription if the replayed producer is still in memory\") {\n\t\t\t\t\tvar disposed = false\n\n\t\t\t\t\tlet producer = SignalProducer<Int, NoError>.never\n\t\t\t\t\t\t.on(disposed: { disposed = true })\n\n\t\t\t\t\tlet replayedProducer = producer\n\t\t\t\t\t\t.replayLazily(1)\n\n\t\t\t\t\texpect(disposed) == false\n\t\t\t\t\tlet disposable = replayedProducer.start()\n\t\t\t\t\texpect(disposed) == false\n\n\t\t\t\t\tdisposable.dispose()\n\t\t\t\t\texpect(disposed) == false\n\t\t\t\t}\n\n\t\t\t\tit(\"disposes underlying producer when the producer is deallocated\") {\n\t\t\t\t\tvar disposed = false\n\n\t\t\t\t\tlet producer = SignalProducer<Int, NoError>.never\n\t\t\t\t\t\t.on(disposed: { disposed = true })\n\n\t\t\t\t\tvar replayedProducer = ImplicitlyUnwrappedOptional(producer.replayLazily(1))\n\n\t\t\t\t\texpect(disposed) == false\n\t\t\t\t\tlet disposable = replayedProducer.start()\n\t\t\t\t\texpect(disposed) == false\n\n\t\t\t\t\tdisposable.dispose()\n\t\t\t\t\texpect(disposed) == false\n\n\t\t\t\t\treplayedProducer = nil\n\t\t\t\t\texpect(disposed) == true\n\t\t\t\t}\n\n\t\t\t\tit(\"does not leak buffered values\") {\n\t\t\t\t\tfinal class Value {\n\t\t\t\t\t\tprivate let deinitBlock: () -> ()\n\n\t\t\t\t\t\tinit(deinitBlock: () -> ()) {\n\t\t\t\t\t\t\tself.deinitBlock = deinitBlock\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdeinit {\n\t\t\t\t\t\t\tself.deinitBlock()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar deinitValues = 0\n\n\t\t\t\t\tvar producer: SignalProducer<Value, NoError>! = SignalProducer(value: Value { deinitValues++ })\n\t\t\t\t\texpect(deinitValues) == 0\n\n\t\t\t\t\tvar replayedProducer: SignalProducer<Value, NoError>! = producer\n\t\t\t\t\t\t.replayLazily(1)\n\t\t\t\t\t\n\t\t\t\t\tlet disposable = replayedProducer\n\t\t\t\t\t\t.start()\n\t\t\t\t\t\n\t\t\t\t\tdisposable.dispose()\n\t\t\t\t\texpect(deinitValues) == 0\n\t\t\t\t\t\n\t\t\t\t\tproducer = nil\n\t\t\t\t\texpect(deinitValues) == 0\n\t\t\t\t\t\n\t\t\t\t\treplayedProducer = nil\n\t\t\t\t\texpect(deinitValues) == 1\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nextension SignalProducer {\n\t/// Creates a producer that can be started as many times as elements in `results`.\n\t/// Each signal will immediately send either a value or an error.\n\tprivate static func attemptWithResults<C: CollectionType where C.Generator.Element == Result<Value, Error>, C.Index.Distance == Int>(results: C) -> SignalProducer<Value, Error> {\n\t\tlet resultCount = results.count\n\t\tvar operationIndex = 0\n\n\t\tprecondition(resultCount > 0)\n\n\t\tlet operation: () -> Result<Value, Error> = {\n\t\t\tif operationIndex < resultCount {\n\t\t\t\treturn results[results.startIndex.advancedBy(operationIndex++)]\n\t\t\t} else {\n\t\t\t\tfail(\"Operation started too many times\")\n\n\t\t\t\treturn results[results.startIndex.advancedBy(0)]\n\t\t\t}\n\t\t}\n\n\t\treturn SignalProducer.attempt(operation)\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/SignalSpec.swift",
    "content": "//\n//  SignalSpec.swift\n//  ReactiveCocoa\n//\n//  Created by Justin Spahr-Summers on 2015-01-23.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\nimport Result\nimport Nimble\nimport Quick\nimport ReactiveCocoa\n\nclass SignalSpec: QuickSpec {\n\toverride func spec() {\n\t\tdescribe(\"init\") {\n\t\t\tvar testScheduler: TestScheduler!\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\ttestScheduler = TestScheduler()\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should run the generator immediately\") {\n\t\t\t\tvar didRunGenerator = false\n\t\t\t\tSignal<AnyObject, NoError> { observer in\n\t\t\t\t\tdidRunGenerator = true\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\texpect(didRunGenerator) == true\n\t\t\t}\n\n\t\t\tit(\"should forward events to observers\") {\n\t\t\t\tlet numbers = [ 1, 2, 5 ]\n\t\t\t\t\n\t\t\t\tlet signal: Signal<Int, NoError> = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tfor number in numbers {\n\t\t\t\t\t\t\tobserver.sendNext(number)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t}\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar fromSignal: [Int] = []\n\t\t\t\tvar completed = false\n\t\t\t\t\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(number):\n\t\t\t\t\t\tfromSignal.append(number)\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\texpect(completed) == false\n\t\t\t\texpect(fromSignal).to(beEmpty())\n\t\t\t\t\n\t\t\t\ttestScheduler.run()\n\t\t\t\t\n\t\t\t\texpect(completed) == true\n\t\t\t\texpect(fromSignal) == numbers\n\t\t\t}\n\n\t\t\tit(\"should dispose of returned disposable upon error\") {\n\t\t\t\tlet disposable = SimpleDisposable()\n\t\t\t\t\n\t\t\t\tlet signal: Signal<AnyObject, TestError> = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendFailed(TestError.Default)\n\t\t\t\t\t}\n\t\t\t\t\treturn disposable\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar errored = false\n\t\t\t\t\n\t\t\t\tsignal.observeFailed { _ in errored = true }\n\t\t\t\t\n\t\t\t\texpect(errored) == false\n\t\t\t\texpect(disposable.disposed) == false\n\t\t\t\t\n\t\t\t\ttestScheduler.run()\n\t\t\t\t\n\t\t\t\texpect(errored) == true\n\t\t\t\texpect(disposable.disposed) == true\n\t\t\t}\n\n\t\t\tit(\"should dispose of returned disposable upon completion\") {\n\t\t\t\tlet disposable = SimpleDisposable()\n\t\t\t\t\n\t\t\t\tlet signal: Signal<AnyObject, NoError> = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t}\n\t\t\t\t\treturn disposable\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar completed = false\n\t\t\t\t\n\t\t\t\tsignal.observeCompleted { completed = true }\n\t\t\t\t\n\t\t\t\texpect(completed) == false\n\t\t\t\texpect(disposable.disposed) == false\n\t\t\t\t\n\t\t\t\ttestScheduler.run()\n\t\t\t\t\n\t\t\t\texpect(completed) == true\n\t\t\t\texpect(disposable.disposed) == true\n\t\t\t}\n\n\t\t\tit(\"should dispose of returned disposable upon interrupted\") {\n\t\t\t\tlet disposable = SimpleDisposable()\n\n\t\t\t\tlet signal: Signal<AnyObject, NoError> = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendInterrupted()\n\t\t\t\t\t}\n\t\t\t\t\treturn disposable\n\t\t\t\t}\n\n\t\t\t\tvar interrupted = false\n\t\t\t\tsignal.observeInterrupted {\n\t\t\t\t\tinterrupted = true\n\t\t\t\t}\n\n\t\t\t\texpect(interrupted) == false\n\t\t\t\texpect(disposable.disposed) == false\n\n\t\t\t\ttestScheduler.run()\n\n\t\t\t\texpect(interrupted) == true\n\t\t\t\texpect(disposable.disposed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"Signal.empty\") {\n\t\t\tit(\"should interrupt its observers without emitting any value\") {\n\t\t\t\tlet signal = Signal<(), NoError>.empty\n\n\t\t\t\tvar hasUnexpectedEventsEmitted = false\n\t\t\t\tvar signalInterrupted = false\n\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase .Next, .Failed, .Completed:\n\t\t\t\t\t\thasUnexpectedEventsEmitted = false\n\t\t\t\t\tcase .Interrupted:\n\t\t\t\t\t\tsignalInterrupted = true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(hasUnexpectedEventsEmitted) == false\n\t\t\t\texpect(signalInterrupted) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"Signal.pipe\") {\n\t\t\tit(\"should forward events to observers\") {\n\t\t\t\tlet (signal, observer) = Signal<Int, NoError>.pipe()\n\t\t\t\t\n\t\t\t\tvar fromSignal: [Int] = []\n\t\t\t\tvar completed = false\n\t\t\t\t\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(number):\n\t\t\t\t\t\tfromSignal.append(number)\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\texpect(fromSignal).to(beEmpty())\n\t\t\t\texpect(completed) == false\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(fromSignal) == [ 1 ]\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(fromSignal) == [ 1, 2 ]\n\t\t\t\t\n\t\t\t\texpect(completed) == false\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tcontext(\"memory\") {\n\t\t\t\tit(\"should not crash allocating memory with a few observers\") {\n\t\t\t\t\tlet (signal, _) = Signal<Int, NoError>.pipe()\n\n\t\t\t\t\tfor _ in 0..<50 {\n\t\t\t\t\t\tautoreleasepool {\n\t\t\t\t\t\t\tlet disposable = signal.observe { _ in }\n\n\t\t\t\t\t\t\tdisposable!.dispose()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"observe\") {\n\t\t\tvar testScheduler: TestScheduler!\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\ttestScheduler = TestScheduler()\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should stop forwarding events when disposed\") {\n\t\t\t\tlet disposable = SimpleDisposable()\n\t\t\t\t\n\t\t\t\tlet signal: Signal<Int, NoError> = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tfor number in [ 1, 2 ] {\n\t\t\t\t\t\t\tobserver.sendNext(number)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t\tobserver.sendNext(4)\n\t\t\t\t\t}\n\t\t\t\t\treturn disposable\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar fromSignal: [Int] = []\n\t\t\t\tsignal.observeNext { number in\n\t\t\t\t\tfromSignal.append(number)\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\texpect(disposable.disposed) == false\n\t\t\t\texpect(fromSignal).to(beEmpty())\n\t\t\t\t\n\t\t\t\ttestScheduler.run()\n\t\t\t\t\n\t\t\t\texpect(disposable.disposed) == true\n\t\t\t\texpect(fromSignal) == [ 1, 2 ]\n\t\t\t}\n\n\t\t\tit(\"should not trigger side effects\") {\n\t\t\t\tvar runCount = 0\n\t\t\t\tlet signal: Signal<(), NoError> = Signal { observer in\n\t\t\t\t\trunCount += 1\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\texpect(runCount) == 1\n\t\t\t\t\n\t\t\t\tsignal.observe(Observer<(), NoError>())\n\t\t\t\texpect(runCount) == 1\n\t\t\t}\n\n\t\t\tit(\"should release observer after termination\") {\n\t\t\t\tweak var testStr: NSMutableString?\n\t\t\t\tlet (signal, observer) = Signal<Int, NoError>.pipe()\n\n\t\t\t\tlet test: () -> () = {\n\t\t\t\t\tlet innerStr: NSMutableString = NSMutableString()\n\t\t\t\t\tsignal.observeNext { value in\n\t\t\t\t\t\tinnerStr.appendString(\"\\(value)\")\n\t\t\t\t\t}\n\t\t\t\t\ttestStr = innerStr\n\t\t\t\t}\n\t\t\t\ttest()\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(testStr) == \"1\"\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(testStr) == \"12\"\n\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(testStr).to(beNil())\n\t\t\t}\n\n\t\t\tit(\"should release observer after interruption\") {\n\t\t\t\tweak var testStr: NSMutableString?\n\t\t\t\tlet (signal, observer) = Signal<Int, NoError>.pipe()\n\n\t\t\t\tlet test: () -> () = {\n\t\t\t\t\tlet innerStr: NSMutableString = NSMutableString()\n\t\t\t\t\tsignal.observeNext { value in\n\t\t\t\t\t\tinnerStr.appendString(\"\\(value)\")\n\t\t\t\t\t}\n\n\t\t\t\t\ttestStr = innerStr\n\t\t\t\t}\n\n\t\t\t\ttest()\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(testStr) == \"1\"\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(testStr) == \"12\"\n\n\t\t\t\tobserver.sendInterrupted()\n\t\t\t\texpect(testStr).to(beNil())\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"trailing closure\") {\n\t\t\tit(\"receives next values\") {\n\t\t\t\tvar values = [Int]()\n\t\t\t\tlet (signal, observer) = Signal<Int, NoError>.pipe()\n\n\t\t\t\tsignal.observeNext { next in\n\t\t\t\t\tvalues.append(next)\n\t\t\t\t}\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(values) == [1]\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"map\") {\n\t\t\tit(\"should transform the values of the signal\") {\n\t\t\t\tlet (signal, observer) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet mappedSignal = signal.map { String($0 + 1) }\n\n\t\t\t\tvar lastValue: String?\n\n\t\t\t\tmappedSignal.observeNext {\n\t\t\t\t\tlastValue = $0\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(lastValue) == \"1\"\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == \"2\"\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\t\tdescribe(\"mapError\") {\n\t\t\tit(\"should transform the errors of the signal\") {\n\t\t\t\tlet (signal, observer) = Signal<Int, TestError>.pipe()\n\t\t\t\tlet producerError = NSError(domain: \"com.reactivecocoa.errordomain\", code: 100, userInfo: nil)\n\t\t\t\tvar error: NSError?\n\n\t\t\t\tsignal\n\t\t\t\t\t.mapError { _ in producerError }\n\t\t\t\t\t.observeFailed { err in error = err }\n\n\t\t\t\texpect(error).to(beNil())\n\n\t\t\t\tobserver.sendFailed(TestError.Default)\n\t\t\t\texpect(error) == producerError\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"filter\") {\n\t\t\tit(\"should omit values from the signal\") {\n\t\t\t\tlet (signal, observer) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet mappedSignal = signal.filter { $0 % 2 == 0 }\n\n\t\t\t\tvar lastValue: Int?\n\n\t\t\t\tmappedSignal.observeNext { lastValue = $0 }\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(lastValue) == 0\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 0\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"Signal.merge\") {\n\t\t\tit(\"should emit values from all signals\") {\n\t\t\t\tlet (signal1, observer1) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (signal2, observer2) = Signal<Int, NoError>.pipe()\n\n\t\t\t\tlet mergedSignals = Signal.merge([signal1, signal2])\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tmergedSignals.observeNext { lastValue = $0 }\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver1.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver2.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\n\t\t\t\tobserver1.sendNext(3)\n\t\t\t\texpect(lastValue) == 3\n\t\t\t}\n\n\t\t\tit(\"should not stop when one signal completes\") {\n\t\t\t\tlet (signal1, observer1) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (signal2, observer2) = Signal<Int, NoError>.pipe()\n\n\t\t\t\tlet mergedSignals = Signal.merge([signal1, signal2])\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tmergedSignals.observeNext { lastValue = $0 }\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver1.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver1.sendCompleted()\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver2.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t}\n\n\t\t\tit(\"should complete when all signals complete\") {\n\t\t\t\tlet (signal1, observer1) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (signal2, observer2) = Signal<Int, NoError>.pipe()\n\n\t\t\t\tlet mergedSignals = Signal.merge([signal1, signal2])\n\n\t\t\t\tvar completed = false\n\t\t\t\tmergedSignals.observeCompleted { completed = true }\n\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver1.sendNext(1)\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver1.sendCompleted()\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver2.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"ignoreNil\") {\n\t\t\tit(\"should forward only non-nil values\") {\n\t\t\t\tlet (signal, observer) = Signal<Int?, NoError>.pipe()\n\t\t\t\tlet mappedSignal = signal.ignoreNil()\n\n\t\t\t\tvar lastValue: Int?\n\n\t\t\t\tmappedSignal.observeNext { lastValue = $0 }\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(nil)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver.sendNext(nil)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"scan\") {\n\t\t\tit(\"should incrementally accumulate a value\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<String, NoError>.pipe()\n\t\t\t\tlet signal = baseSignal.scan(\"\", +)\n\n\t\t\t\tvar lastValue: String?\n\n\t\t\t\tsignal.observeNext { lastValue = $0 }\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(\"a\")\n\t\t\t\texpect(lastValue) == \"a\"\n\n\t\t\t\tobserver.sendNext(\"bb\")\n\t\t\t\texpect(lastValue) == \"abb\"\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"reduce\") {\n\t\t\tit(\"should accumulate one value\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet signal = baseSignal.reduce(1, +)\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tvar completed = false\n\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\texpect(completed) == false\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\n\t\t\t\texpect(lastValue) == 4\n\t\t\t}\n\n\t\t\tit(\"should send the initial value if none are received\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet signal = baseSignal.reduce(1, +)\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tvar completed = false\n\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendCompleted()\n\n\t\t\t\texpect(lastValue) == 1\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"skip\") {\n\t\t\tit(\"should skip initial values\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet signal = baseSignal.skip(1)\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tsignal.observeNext { lastValue = $0 }\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t}\n\n\t\t\tit(\"should not skip any values when 0\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet signal = baseSignal.skip(0)\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tsignal.observeNext { lastValue = $0 }\n\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"skipRepeats\") {\n\t\t\tit(\"should skip duplicate Equatable values\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<Bool, NoError>.pipe()\n\t\t\t\tlet signal = baseSignal.skipRepeats()\n\n\t\t\t\tvar values: [Bool] = []\n\t\t\t\tsignal.observeNext { values.append($0) }\n\n\t\t\t\texpect(values) == []\n\n\t\t\t\tobserver.sendNext(true)\n\t\t\t\texpect(values) == [ true ]\n\n\t\t\t\tobserver.sendNext(true)\n\t\t\t\texpect(values) == [ true ]\n\n\t\t\t\tobserver.sendNext(false)\n\t\t\t\texpect(values) == [ true, false ]\n\n\t\t\t\tobserver.sendNext(true)\n\t\t\t\texpect(values) == [ true, false, true ]\n\t\t\t}\n\n\t\t\tit(\"should skip values according to a predicate\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<String, NoError>.pipe()\n\t\t\t\tlet signal = baseSignal.skipRepeats { $0.characters.count == $1.characters.count }\n\n\t\t\t\tvar values: [String] = []\n\t\t\t\tsignal.observeNext { values.append($0) }\n\n\t\t\t\texpect(values) == []\n\n\t\t\t\tobserver.sendNext(\"a\")\n\t\t\t\texpect(values) == [ \"a\" ]\n\n\t\t\t\tobserver.sendNext(\"b\")\n\t\t\t\texpect(values) == [ \"a\" ]\n\n\t\t\t\tobserver.sendNext(\"cc\")\n\t\t\t\texpect(values) == [ \"a\", \"cc\" ]\n\n\t\t\t\tobserver.sendNext(\"d\")\n\t\t\t\texpect(values) == [ \"a\", \"cc\", \"d\" ]\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"skipWhile\") {\n\t\t\tvar signal: Signal<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\n\t\t\tvar lastValue: Int?\n\n\t\t\tbeforeEach {\n\t\t\t\tlet (baseSignal, incomingObserver) = Signal<Int, NoError>.pipe()\n\n\t\t\t\tsignal = baseSignal.skipWhile { $0 < 2 }\n\t\t\t\tobserver = incomingObserver\n\t\t\t\tlastValue = nil\n\n\t\t\t\tsignal.observeNext { lastValue = $0 }\n\t\t\t}\n\n\t\t\tit(\"should skip while the predicate is true\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(lastValue) == 0\n\t\t\t}\n\n\t\t\tit(\"should not skip any values when the predicate starts false\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(3)\n\t\t\t\texpect(lastValue) == 3\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\t\t\t}\n\t\t}\n\t\t\n\t\tdescribe(\"skipUntil\") {\n\t\t\tvar signal: Signal<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar triggerObserver: Signal<(), NoError>.Observer!\n\t\t\t\n\t\t\tvar lastValue: Int? = nil\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlet (baseSignal, incomingObserver) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (triggerSignal, incomingTriggerObserver) = Signal<(), NoError>.pipe()\n\t\t\t\t\n\t\t\t\tsignal = baseSignal.skipUntil(triggerSignal)\n\t\t\t\tobserver = incomingObserver\n\t\t\t\ttriggerObserver = incomingTriggerObserver\n\t\t\t\t\n\t\t\t\tlastValue = nil\n\t\t\t\t\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should skip values until the trigger fires\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\ttriggerObserver.sendNext(())\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(lastValue) == 0\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should skip values until the trigger completes\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\ttriggerObserver.sendCompleted()\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(lastValue) == 0\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"take\") {\n\t\t\tit(\"should take initial values\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet signal = baseSignal.take(2)\n\n\t\t\t\tvar lastValue: Int?\n\t\t\t\tvar completed = false\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should complete immediately after taking given number of values\") {\n\t\t\t\tlet numbers = [ 1, 2, 4, 4, 5 ]\n\t\t\t\tlet testScheduler = TestScheduler()\n\t\t\t\t\n\t\t\t\tvar signal: Signal<Int, NoError> = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tfor number in numbers {\n\t\t\t\t\t\t\tobserver.sendNext(number)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar completed = false\n\t\t\t\t\n\t\t\t\tsignal = signal.take(numbers.count)\n\t\t\t\tsignal.observeCompleted { completed = true }\n\t\t\t\t\n\t\t\t\texpect(completed) == false\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should interrupt when 0\") {\n\t\t\t\tlet numbers = [ 1, 2, 4, 4, 5 ]\n\t\t\t\tlet testScheduler = TestScheduler()\n\n\t\t\t\tlet signal: Signal<Int, NoError> = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tfor number in numbers {\n\t\t\t\t\t\t\tobserver.sendNext(number)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tvar interrupted = false\n\n\t\t\t\tsignal\n\t\t\t\t.take(0)\n\t\t\t\t.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(number):\n\t\t\t\t\t\tresult.append(number)\n\t\t\t\t\tcase .Interrupted:\n\t\t\t\t\t\tinterrupted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(interrupted) == true\n\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"collect\") {\n\t\t\tit(\"should collect all values\") {\n\t\t\t\tlet (original, observer) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet signal = original.collect()\n\t\t\t\tlet expectedResult = [ 1, 2, 3 ]\n\n\t\t\t\tvar result: [Int]?\n\n\t\t\t\tsignal.observeNext { value in\n\t\t\t\t\texpect(result).to(beNil())\n\t\t\t\t\tresult = value\n\t\t\t\t}\n\n\t\t\t\tfor number in expectedResult {\n\t\t\t\t\tobserver.sendNext(number)\n\t\t\t\t}\n\n\t\t\t\texpect(result).to(beNil())\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(result) == expectedResult\n\t\t\t}\n\n\t\t\tit(\"should complete with an empty array if there are no values\") {\n\t\t\t\tlet (original, observer) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet signal = original.collect()\n\n\t\t\t\tvar result: [Int]?\n\n\t\t\t\tsignal.observeNext { result = $0 }\n\n\t\t\t\texpect(result).to(beNil())\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(result) == []\n\t\t\t}\n\n\t\t\tit(\"should forward errors\") {\n\t\t\t\tlet (original, observer) = Signal<Int, TestError>.pipe()\n\t\t\t\tlet signal = original.collect()\n\n\t\t\t\tvar error: TestError?\n\n\t\t\t\tsignal.observeFailed { error = $0 }\n\n\t\t\t\texpect(error).to(beNil())\n\t\t\t\tobserver.sendFailed(.Default)\n\t\t\t\texpect(error) == TestError.Default\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"takeUntil\") {\n\t\t\tvar signal: Signal<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar triggerObserver: Signal<(), NoError>.Observer!\n\n\t\t\tvar lastValue: Int? = nil\n\t\t\tvar completed: Bool = false\n\n\t\t\tbeforeEach {\n\t\t\t\tlet (baseSignal, incomingObserver) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (triggerSignal, incomingTriggerObserver) = Signal<(), NoError>.pipe()\n\n\t\t\t\tsignal = baseSignal.takeUntil(triggerSignal)\n\t\t\t\tobserver = incomingObserver\n\t\t\t\ttriggerObserver = incomingTriggerObserver\n\n\t\t\t\tlastValue = nil\n\t\t\t\tcompleted = false\n\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tit(\"should take values until the trigger fires\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\n\t\t\t\texpect(completed) == false\n\t\t\t\ttriggerObserver.sendNext(())\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should take values until the trigger completes\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\t\t\t\t\n\t\t\t\texpect(completed) == false\n\t\t\t\ttriggerObserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should complete if the trigger fires immediately\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\texpect(completed) == false\n\n\t\t\t\ttriggerObserver.sendNext(())\n\n\t\t\t\texpect(completed) == true\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"takeUntilReplacement\") {\n\t\t\tvar signal: Signal<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar replacementObserver: Signal<Int, NoError>.Observer!\n\n\t\t\tvar lastValue: Int? = nil\n\t\t\tvar completed: Bool = false\n\n\t\t\tbeforeEach {\n\t\t\t\tlet (baseSignal, incomingObserver) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (replacementSignal, incomingReplacementObserver) = Signal<Int, NoError>.pipe()\n\n\t\t\t\tsignal = baseSignal.takeUntilReplacement(replacementSignal)\n\t\t\t\tobserver = incomingObserver\n\t\t\t\treplacementObserver = incomingReplacementObserver\n\n\t\t\t\tlastValue = nil\n\t\t\t\tcompleted = false\n\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlastValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tit(\"should take values from the original then the replacement\") {\n\t\t\t\texpect(lastValue).to(beNil())\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(lastValue) == 1\n\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(lastValue) == 2\n\n\t\t\t\treplacementObserver.sendNext(3)\n\n\t\t\t\texpect(lastValue) == 3\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tobserver.sendNext(4)\n\n\t\t\t\texpect(lastValue) == 3\n\t\t\t\texpect(completed) == false\n\n\t\t\t\treplacementObserver.sendNext(5)\n\t\t\t\texpect(lastValue) == 5\n\n\t\t\t\texpect(completed) == false\n\t\t\t\treplacementObserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"takeWhile\") {\n\t\t\tvar signal: Signal<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\n\t\t\tbeforeEach {\n\t\t\t\tlet (baseSignal, incomingObserver) = Signal<Int, NoError>.pipe()\n\t\t\t\tsignal = baseSignal.takeWhile { $0 <= 4 }\n\t\t\t\tobserver = incomingObserver\n\t\t\t}\n\n\t\t\tit(\"should take while the predicate is true\") {\n\t\t\t\tvar latestValue: Int!\n\t\t\t\tvar completed = false\n\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlatestValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor value in -1...4 {\n\t\t\t\t\tobserver.sendNext(value)\n\t\t\t\t\texpect(latestValue) == value\n\t\t\t\t\texpect(completed) == false\n\t\t\t\t}\n\n\t\t\t\tobserver.sendNext(5)\n\t\t\t\texpect(latestValue) == 4\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should complete if the predicate starts false\") {\n\t\t\t\tvar latestValue: Int?\n\t\t\t\tvar completed = false\n\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tlatestValue = value\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tobserver.sendNext(5)\n\t\t\t\texpect(latestValue).to(beNil())\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"observeOn\") {\n\t\t\tit(\"should send events on the given scheduler\") {\n\t\t\t\tlet testScheduler = TestScheduler()\n\t\t\t\tlet (signal, observer) = Signal<Int, NoError>.pipe()\n\t\t\t\t\n\t\t\t\tvar result: [Int] = []\n\t\t\t\t\n\t\t\t\tsignal\n\t\t\t\t\t.observeOn(testScheduler)\n\t\t\t\t\t.observeNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t\t\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(result) == [ 1, 2 ]\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"delay\") {\n\t\t\tit(\"should send events on the given scheduler after the interval\") {\n\t\t\t\tlet testScheduler = TestScheduler()\n\t\t\t\tlet signal: Signal<Int, NoError> = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendNext(1)\n\t\t\t\t\t}\n\t\t\t\t\ttestScheduler.scheduleAfter(5, action: {\n\t\t\t\t\t\tobserver.sendNext(2)\n\t\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t\t})\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tvar completed = false\n\t\t\t\t\n\t\t\t\tsignal\n\t\t\t\t\t.delay(10, onScheduler: testScheduler)\n\t\t\t\t\t.observe { event in\n\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\tcase let .Next(number):\n\t\t\t\t\t\t\tresult.append(number)\n\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttestScheduler.advanceByInterval(4) // send initial value\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t\t\n\t\t\t\ttestScheduler.advanceByInterval(10) // send second value and receive first\n\t\t\t\texpect(result) == [ 1 ]\n\t\t\t\texpect(completed) == false\n\t\t\t\t\n\t\t\t\ttestScheduler.advanceByInterval(10) // send second value and receive first\n\t\t\t\texpect(result) == [ 1, 2 ]\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\n\t\t\tit(\"should schedule errors immediately\") {\n\t\t\t\tlet testScheduler = TestScheduler()\n\t\t\t\tlet signal: Signal<Int, TestError> = Signal { observer in\n\t\t\t\t\ttestScheduler.schedule {\n\t\t\t\t\t\tobserver.sendFailed(TestError.Default)\n\t\t\t\t\t}\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar errored = false\n\t\t\t\t\n\t\t\t\tsignal\n\t\t\t\t\t.delay(10, onScheduler: testScheduler)\n\t\t\t\t\t.observeFailed { _ in errored = true }\n\t\t\t\t\n\t\t\t\ttestScheduler.advance()\n\t\t\t\texpect(errored) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"throttle\") {\n\t\t\tvar scheduler: TestScheduler!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar signal: Signal<Int, NoError>!\n\n\t\t\tbeforeEach {\n\t\t\t\tscheduler = TestScheduler()\n\n\t\t\t\tlet (baseSignal, baseObserver) = Signal<Int, NoError>.pipe()\n\t\t\t\tobserver = baseObserver\n\n\t\t\t\tsignal = baseSignal.throttle(1, onScheduler: scheduler)\n\t\t\t\texpect(signal).notTo(beNil())\n\t\t\t}\n\n\t\t\tit(\"should send values on the given scheduler at no less than the interval\") {\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tsignal.observeNext { value in\n\t\t\t\t\tvalues.append(value)\n\t\t\t\t}\n\n\t\t\t\texpect(values) == []\n\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\texpect(values) == []\n\n\t\t\t\tscheduler.advance()\n\t\t\t\texpect(values) == [ 0 ]\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(values) == [ 0 ]\n\n\t\t\t\tscheduler.advanceByInterval(1.5)\n\t\t\t\texpect(values) == [ 0, 2 ]\n\n\t\t\t\tscheduler.advanceByInterval(3)\n\t\t\t\texpect(values) == [ 0, 2 ]\n\n\t\t\t\tobserver.sendNext(3)\n\t\t\t\texpect(values) == [ 0, 2 ]\n\n\t\t\t\tscheduler.advance()\n\t\t\t\texpect(values) == [ 0, 2, 3 ]\n\n\t\t\t\tobserver.sendNext(4)\n\t\t\t\tobserver.sendNext(5)\n\t\t\t\tscheduler.advance()\n\t\t\t\texpect(values) == [ 0, 2, 3 ]\n\n\t\t\t\tscheduler.run()\n\t\t\t\texpect(values) == [ 0, 2, 3, 5 ]\n\t\t\t}\n\n\t\t\tit(\"should schedule completion immediately\") {\n\t\t\t\tvar values: [Int] = []\n\t\t\t\tvar completed = false\n\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tvalues.append(value)\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tobserver.sendNext(0)\n\t\t\t\tscheduler.advance()\n\t\t\t\texpect(values) == [ 0 ]\n\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tscheduler.run()\n\t\t\t\texpect(values) == [ 0 ]\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"sampleOn\") {\n\t\t\tvar sampledSignal: Signal<Int, NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar samplerObserver: Signal<(), NoError>.Observer!\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlet (signal, incomingObserver) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (sampler, incomingSamplerObserver) = Signal<(), NoError>.pipe()\n\t\t\t\tsampledSignal = signal.sampleOn(sampler)\n\t\t\t\tobserver = incomingObserver\n\t\t\t\tsamplerObserver = incomingSamplerObserver\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should forward the latest value when the sampler fires\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tsampledSignal.observeNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\tsamplerObserver.sendNext(())\n\t\t\t\texpect(result) == [ 2 ]\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should do nothing if sampler fires before signal receives value\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tsampledSignal.observeNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tsamplerObserver.sendNext(())\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should send lates value multiple times when sampler fires multiple times\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tsampledSignal.observeNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tsamplerObserver.sendNext(())\n\t\t\t\tsamplerObserver.sendNext(())\n\t\t\t\texpect(result) == [ 1, 1 ]\n\t\t\t}\n\n\t\t\tit(\"should complete when both inputs have completed\") {\n\t\t\t\tvar completed = false\n\t\t\t\tsampledSignal.observeCompleted { completed = true }\n\t\t\t\t\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(completed) == false\n\t\t\t\t\n\t\t\t\tsamplerObserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"combineLatestWith\") {\n\t\t\tvar combinedSignal: Signal<(Int, Double), NoError>!\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tvar otherObserver: Signal<Double, NoError>.Observer!\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlet (signal, incomingObserver) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (otherSignal, incomingOtherObserver) = Signal<Double, NoError>.pipe()\n\t\t\t\tcombinedSignal = signal.combineLatestWith(otherSignal)\n\t\t\t\tobserver = incomingObserver\n\t\t\t\totherObserver = incomingOtherObserver\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should forward the latest values from both inputs\") {\n\t\t\t\tvar latest: (Int, Double)?\n\t\t\t\tcombinedSignal.observeNext { latest = $0 }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(latest).to(beNil())\n\t\t\t\t\n\t\t\t\t// is there a better way to test tuples?\n\t\t\t\totherObserver.sendNext(1.5)\n\t\t\t\texpect(latest?.0) == 1\n\t\t\t\texpect(latest?.1) == 1.5\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(latest?.0) == 2\n\t\t\t\texpect(latest?.1) == 1.5\n\t\t\t}\n\n\t\t\tit(\"should complete when both inputs have completed\") {\n\t\t\t\tvar completed = false\n\t\t\t\tcombinedSignal.observeCompleted { completed = true }\n\t\t\t\t\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(completed) == false\n\t\t\t\t\n\t\t\t\totherObserver.sendCompleted()\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"zipWith\") {\n\t\t\tvar leftObserver: Signal<Int, NoError>.Observer!\n\t\t\tvar rightObserver: Signal<String, NoError>.Observer!\n\t\t\tvar zipped: Signal<(Int, String), NoError>!\n\n\t\t\tbeforeEach {\n\t\t\t\tlet (leftSignal, incomingLeftObserver) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (rightSignal, incomingRightObserver) = Signal<String, NoError>.pipe()\n\n\t\t\t\tleftObserver = incomingLeftObserver\n\t\t\t\trightObserver = incomingRightObserver\n\t\t\t\tzipped = leftSignal.zipWith(rightSignal)\n\t\t\t}\n\n\t\t\tit(\"should combine pairs\") {\n\t\t\t\tvar result: [String] = []\n\t\t\t\tzipped.observeNext { (left, right) in result.append(\"\\(left)\\(right)\") }\n\n\t\t\t\tleftObserver.sendNext(1)\n\t\t\t\tleftObserver.sendNext(2)\n\t\t\t\texpect(result) == []\n\n\t\t\t\trightObserver.sendNext(\"foo\")\n\t\t\t\texpect(result) == [ \"1foo\" ]\n\n\t\t\t\tleftObserver.sendNext(3)\n\t\t\t\trightObserver.sendNext(\"bar\")\n\t\t\t\texpect(result) == [ \"1foo\", \"2bar\" ]\n\n\t\t\t\trightObserver.sendNext(\"buzz\")\n\t\t\t\texpect(result) == [ \"1foo\", \"2bar\", \"3buzz\" ]\n\n\t\t\t\trightObserver.sendNext(\"fuzz\")\n\t\t\t\texpect(result) == [ \"1foo\", \"2bar\", \"3buzz\" ]\n\n\t\t\t\tleftObserver.sendNext(4)\n\t\t\t\texpect(result) == [ \"1foo\", \"2bar\", \"3buzz\", \"4fuzz\" ]\n\t\t\t}\n\n\t\t\tit(\"should complete when the shorter signal has completed\") {\n\t\t\t\tvar result: [String] = []\n\t\t\t\tvar completed = false\n\n\t\t\t\tzipped.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(left, right):\n\t\t\t\t\t\tresult.append(\"\\(left)\\(right)\")\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(completed) == false\n\n\t\t\t\tleftObserver.sendNext(0)\n\t\t\t\tleftObserver.sendCompleted()\n\t\t\t\texpect(completed) == false\n\t\t\t\texpect(result) == []\n\n\t\t\t\trightObserver.sendNext(\"foo\")\n\t\t\t\texpect(completed) == true\n\t\t\t\texpect(result) == [ \"0foo\" ]\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"materialize\") {\n\t\t\tit(\"should reify events from the signal\") {\n\t\t\t\tlet (signal, observer) = Signal<Int, TestError>.pipe()\n\t\t\t\tvar latestEvent: Event<Int, TestError>?\n\t\t\t\tsignal\n\t\t\t\t\t.materialize()\n\t\t\t\t\t.observeNext { latestEvent = $0 }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\t\n\t\t\t\texpect(latestEvent).toNot(beNil())\n\t\t\t\tif let latestEvent = latestEvent {\n\t\t\t\t\tswitch latestEvent {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\texpect(value) == 2\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tfail()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tobserver.sendFailed(TestError.Default)\n\t\t\t\tif let latestEvent = latestEvent {\n\t\t\t\t\tswitch latestEvent {\n\t\t\t\t\tcase .Failed:\n\t\t\t\t\t\t()\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tfail()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"dematerialize\") {\n\t\t\ttypealias IntEvent = Event<Int, TestError>\n\t\t\tvar observer: Signal<IntEvent, NoError>.Observer!\n\t\t\tvar dematerialized: Signal<Int, TestError>!\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlet (signal, incomingObserver) = Signal<IntEvent, NoError>.pipe()\n\t\t\t\tobserver = incomingObserver\n\t\t\t\tdematerialized = signal.dematerialize()\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should send values for Next events\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tdematerialized.observeNext { result.append($0) }\n\t\t\t\t\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(.Next(2))\n\t\t\t\texpect(result) == [ 2 ]\n\t\t\t\t\n\t\t\t\tobserver.sendNext(.Next(4))\n\t\t\t\texpect(result) == [ 2, 4 ]\n\t\t\t}\n\n\t\t\tit(\"should error out for Error events\") {\n\t\t\t\tvar errored = false\n\t\t\t\tdematerialized.observeFailed { _ in errored = true }\n\t\t\t\t\n\t\t\t\texpect(errored) == false\n\t\t\t\t\n\t\t\t\tobserver.sendNext(.Failed(TestError.Default))\n\t\t\t\texpect(errored) == true\n\t\t\t}\n\n\t\t\tit(\"should complete early for Completed events\") {\n\t\t\t\tvar completed = false\n\t\t\t\tdematerialized.observeCompleted { completed = true }\n\t\t\t\t\n\t\t\t\texpect(completed) == false\n\t\t\t\tobserver.sendNext(IntEvent.Completed)\n\t\t\t\texpect(completed) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"takeLast\") {\n\t\t\tvar observer: Signal<Int, TestError>.Observer!\n\t\t\tvar lastThree: Signal<Int, TestError>!\n\t\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlet (signal, incomingObserver) = Signal<Int, TestError>.pipe()\n\t\t\t\tobserver = incomingObserver\n\t\t\t\tlastThree = signal.takeLast(3)\n\t\t\t}\n\n\t\t\tit(\"should send the last N values upon completion\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tlastThree.observeNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\tobserver.sendNext(3)\n\t\t\t\tobserver.sendNext(4)\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t\t\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(result) == [ 2, 3, 4 ]\n\t\t\t}\n\n\t\t\tit(\"should send less than N values if not enough were received\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tlastThree.observeNext { result.append($0) }\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\tobserver.sendCompleted()\n\t\t\t\texpect(result) == [ 1, 2 ]\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should send nothing when errors\") {\n\t\t\t\tvar result: [Int] = []\n\t\t\t\tvar errored = false\n\t\t\t\tlastThree.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\tresult.append(value)\n\t\t\t\t\tcase .Failed:\n\t\t\t\t\t\terrored = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\tobserver.sendNext(3)\n\t\t\t\texpect(errored) == false\n\t\t\t\t\n\t\t\t\tobserver.sendFailed(TestError.Default)\n\t\t\t\texpect(errored) == true\n\t\t\t\texpect(result).to(beEmpty())\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"timeoutWithError\") {\n\t\t\tvar testScheduler: TestScheduler!\n\t\t\tvar signal: Signal<Int, TestError>!\n\t\t\tvar observer: Signal<Int, TestError>.Observer!\n\n\t\t\tbeforeEach {\n\t\t\t\ttestScheduler = TestScheduler()\n\t\t\t\tlet (baseSignal, incomingObserver) = Signal<Int, TestError>.pipe()\n\t\t\t\tsignal = baseSignal.timeoutWithError(TestError.Default, afterInterval: 2, onScheduler: testScheduler)\n\t\t\t\tobserver = incomingObserver\n\t\t\t}\n\n\t\t\tit(\"should complete if within the interval\") {\n\t\t\t\tvar completed = false\n\t\t\t\tvar errored = false\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tcase .Failed:\n\t\t\t\t\t\terrored = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttestScheduler.scheduleAfter(1) {\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t}\n\n\t\t\t\texpect(completed) == false\n\t\t\t\texpect(errored) == false\n\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(completed) == true\n\t\t\t\texpect(errored) == false\n\t\t\t}\n\n\t\t\tit(\"should error if not completed before the interval has elapsed\") {\n\t\t\t\tvar completed = false\n\t\t\t\tvar errored = false\n\t\t\t\tsignal.observe { event in\n\t\t\t\t\tswitch event {\n\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\tcompleted = true\n\t\t\t\t\tcase .Failed:\n\t\t\t\t\t\terrored = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttestScheduler.scheduleAfter(3) {\n\t\t\t\t\tobserver.sendCompleted()\n\t\t\t\t}\n\n\t\t\t\texpect(completed) == false\n\t\t\t\texpect(errored) == false\n\n\t\t\t\ttestScheduler.run()\n\t\t\t\texpect(completed) == false\n\t\t\t\texpect(errored) == true\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"attempt\") {\n\t\t\tit(\"should forward original values upon success\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<Int, TestError>.pipe()\n\t\t\t\tlet signal = baseSignal.attempt { _ in\n\t\t\t\t\treturn .Success()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar current: Int?\n\t\t\t\tsignal.observeNext { value in\n\t\t\t\t\tcurrent = value\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor value in 1...5 {\n\t\t\t\t\tobserver.sendNext(value)\n\t\t\t\t\texpect(current) == value\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should error if an attempt fails\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<Int, TestError>.pipe()\n\t\t\t\tlet signal = baseSignal.attempt { _ in\n\t\t\t\t\treturn .Failure(.Default)\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar error: TestError?\n\t\t\t\tsignal.observeFailed { err in\n\t\t\t\t\terror = err\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tobserver.sendNext(42)\n\t\t\t\texpect(error) == TestError.Default\n\t\t\t}\n\t\t}\n\t\t\n\t\tdescribe(\"attemptMap\") {\n\t\t\tit(\"should forward mapped values upon success\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<Int, TestError>.pipe()\n\t\t\t\tlet signal = baseSignal.attemptMap { num -> Result<Bool, TestError> in\n\t\t\t\t\treturn .Success(num % 2 == 0)\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar even: Bool?\n\t\t\t\tsignal.observeNext { value in\n\t\t\t\t\teven = value\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(even) == false\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(even) == true\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should error if a mapping fails\") {\n\t\t\t\tlet (baseSignal, observer) = Signal<Int, TestError>.pipe()\n\t\t\t\tlet signal = baseSignal.attemptMap { _ -> Result<Bool, TestError> in\n\t\t\t\t\treturn .Failure(.Default)\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar error: TestError?\n\t\t\t\tsignal.observeFailed { err in\n\t\t\t\t\terror = err\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tobserver.sendNext(42)\n\t\t\t\texpect(error) == TestError.Default\n\t\t\t}\n\t\t}\n\t\t\n\t\tdescribe(\"combinePrevious\") {\n\t\t\tvar observer: Signal<Int, NoError>.Observer!\n\t\t\tlet initialValue: Int = 0\n\t\t\tvar latestValues: (Int, Int)?\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tlatestValues = nil\n\t\t\t\t\n\t\t\t\tlet (signal, baseObserver) = Signal<Int, NoError>.pipe()\n\t\t\t\tobserver = baseObserver\n\t\t\t\tsignal.combinePrevious(initialValue).observeNext { latestValues = $0 }\n\t\t\t}\n\t\t\t\n\t\t\tit(\"should forward the latest value with previous value\") {\n\t\t\t\texpect(latestValues).to(beNil())\n\t\t\t\t\n\t\t\t\tobserver.sendNext(1)\n\t\t\t\texpect(latestValues?.0) == initialValue\n\t\t\t\texpect(latestValues?.1) == 1\n\t\t\t\t\n\t\t\t\tobserver.sendNext(2)\n\t\t\t\texpect(latestValues?.0) == 1\n\t\t\t\texpect(latestValues?.1) == 2\n\t\t\t}\n\t\t}\n\n\t\tdescribe(\"combineLatest\") {\n\t\t\tvar signalA: Signal<Int, NoError>!\n\t\t\tvar signalB: Signal<Int, NoError>!\n\t\t\tvar signalC: Signal<Int, NoError>!\n\t\t\tvar observerA: Signal<Int, NoError>.Observer!\n\t\t\tvar observerB: Signal<Int, NoError>.Observer!\n\t\t\tvar observerC: Signal<Int, NoError>.Observer!\n\t\t\t\n\t\t\tvar combinedValues: [Int]?\n\t\t\tvar completed: Bool!\n\t\t\t\n\t\t\tbeforeEach {\n\t\t\t\tcombinedValues = nil\n\t\t\t\tcompleted = false\n\t\t\t\t\n\t\t\t\tlet (baseSignalA, baseObserverA) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (baseSignalB, baseObserverB) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (baseSignalC, baseObserverC) = Signal<Int, NoError>.pipe()\n\t\t\t\t\n\t\t\t\tsignalA = baseSignalA\n\t\t\t\tsignalB = baseSignalB\n\t\t\t\tsignalC = baseSignalC\n\t\t\t\t\n\t\t\t\tobserverA = baseObserverA\n\t\t\t\tobserverB = baseObserverB\n\t\t\t\tobserverC = baseObserverC\n\t\t\t}\n\t\t\t\n\t\t\tlet combineLatestExampleName = \"combineLatest examples\"\n\t\t\tsharedExamples(combineLatestExampleName) {\n\t\t\t\tit(\"should forward the latest values from all inputs\"){\n\t\t\t\t\texpect(combinedValues).to(beNil())\n\t\t\t\t\t\n\t\t\t\t\tobserverA.sendNext(0)\n\t\t\t\t\tobserverB.sendNext(1)\n\t\t\t\t\tobserverC.sendNext(2)\n\t\t\t\t\texpect(combinedValues) == [0, 1, 2]\n\t\t\t\t\t\n\t\t\t\t\tobserverA.sendNext(10)\n\t\t\t\t\texpect(combinedValues) == [10, 1, 2]\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tit(\"should not forward the latest values before all inputs\"){\n\t\t\t\t\texpect(combinedValues).to(beNil())\n\t\t\t\t\t\n\t\t\t\t\tobserverA.sendNext(0)\n\t\t\t\t\texpect(combinedValues).to(beNil())\n\t\t\t\t\t\n\t\t\t\t\tobserverB.sendNext(1)\n\t\t\t\t\texpect(combinedValues).to(beNil())\n\t\t\t\t\t\n\t\t\t\t\tobserverC.sendNext(2)\n\t\t\t\t\texpect(combinedValues) == [0, 1, 2]\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tit(\"should complete when all inputs have completed\"){\n\t\t\t\t\texpect(completed) == false\n\t\t\t\t\t\n\t\t\t\t\tobserverA.sendCompleted()\n\t\t\t\t\tobserverB.sendCompleted()\n\t\t\t\t\texpect(completed) == false\n\t\t\t\t\t\n\t\t\t\t\tobserverC.sendCompleted()\n\t\t\t\t\texpect(completed) == true\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tdescribe(\"tuple\") {\n\t\t\t\tbeforeEach {\n\t\t\t\t\tcombineLatest(signalA, signalB, signalC)\n\t\t\t\t\t\t.observe { event in\n\t\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\t\t\tcombinedValues = [value.0, value.1, value.2]\n\t\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\titBehavesLike(combineLatestExampleName)\n\t\t\t}\n\t\t\t\n\t\t\tdescribe(\"sequence\") {\n\t\t\t\tbeforeEach {\n\t\t\t\t\tcombineLatest([signalA, signalB, signalC])\n\t\t\t\t\t.observe { event in\n\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\tcase let .Next(values):\n\t\t\t\t\t\t\tcombinedValues = values\n\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\titBehavesLike(combineLatestExampleName)\n\t\t\t}\n\t\t}\n\t\t\n\t\tdescribe(\"zip\") {\n\t\t\tvar signalA: Signal<Int, NoError>!\n\t\t\tvar signalB: Signal<Int, NoError>!\n\t\t\tvar signalC: Signal<Int, NoError>!\n\t\t\tvar observerA: Signal<Int, NoError>.Observer!\n\t\t\tvar observerB: Signal<Int, NoError>.Observer!\n\t\t\tvar observerC: Signal<Int, NoError>.Observer!\n\n\t\t\tvar zippedValues: [Int]?\n\t\t\tvar completed: Bool!\n            \n\t\t\tbeforeEach {\n\t\t\t\tzippedValues = nil\n\t\t\t\tcompleted = false\n                \n\t\t\t\tlet (baseSignalA, baseObserverA) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (baseSignalB, baseObserverB) = Signal<Int, NoError>.pipe()\n\t\t\t\tlet (baseSignalC, baseObserverC) = Signal<Int, NoError>.pipe()\n\t\t\t\t\n\t\t\t\tsignalA = baseSignalA\n\t\t\t\tsignalB = baseSignalB\n\t\t\t\tsignalC = baseSignalC\n\t\t\t\t\n\t\t\t\tobserverA = baseObserverA\n\t\t\t\tobserverB = baseObserverB\n\t\t\t\tobserverC = baseObserverC\n\t\t\t}\n\t\t\t\n\t\t\tlet zipExampleName = \"zip examples\"\n\t\t\tsharedExamples(zipExampleName) {\n\t\t\t\tit(\"should combine all set\"){\n\t\t\t\t\texpect(zippedValues).to(beNil())\n\t\t\t\t\t\n\t\t\t\t\tobserverA.sendNext(0)\n\t\t\t\t\texpect(zippedValues).to(beNil())\n\t\t\t\t\t\n\t\t\t\t\tobserverB.sendNext(1)\n\t\t\t\t\texpect(zippedValues).to(beNil())\n\t\t\t\t\t\n\t\t\t\t\tobserverC.sendNext(2)\n\t\t\t\t\texpect(zippedValues) == [0, 1, 2]\n\t\t\t\t\t\n\t\t\t\t\tobserverA.sendNext(10)\n\t\t\t\t\texpect(zippedValues) == [0, 1, 2]\n\t\t\t\t\t\n\t\t\t\t\tobserverA.sendNext(20)\n\t\t\t\t\texpect(zippedValues) == [0, 1, 2]\n\t\t\t\t\t\n\t\t\t\t\tobserverB.sendNext(11)\n\t\t\t\t\texpect(zippedValues) == [0, 1, 2]\n\t\t\t\t\t\n\t\t\t\t\tobserverC.sendNext(12)\n\t\t\t\t\texpect(zippedValues) == [10, 11, 12]\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tit(\"should complete when the shorter signal has completed\"){\n\t\t\t\t\texpect(completed) == false\n\t\t\t\t\t\n\t\t\t\t\tobserverB.sendNext(1)\n\t\t\t\t\tobserverC.sendNext(2)\n\t\t\t\t\tobserverB.sendCompleted()\n\t\t\t\t\tobserverC.sendCompleted()\n\t\t\t\t\texpect(completed) == false\n\t\t\t\t\t\n\t\t\t\t\tobserverA.sendNext(0)\n\t\t\t\t\texpect(completed) == true\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tdescribe(\"tuple\") {\n\t\t\t\tbeforeEach {\n\t\t\t\t\tzip(signalA, signalB, signalC)\n\t\t\t\t\t\t.observe { event in\n\t\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\t\tcase let .Next(value):\n\t\t\t\t\t\t\t\tzippedValues = [value.0, value.1, value.2]\n\t\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\titBehavesLike(zipExampleName)\n\t\t\t}\n\t\t\t\n\t\t\tdescribe(\"sequence\") {\n\t\t\t\tbeforeEach {\n\t\t\t\t\tzip([signalA, signalB, signalC])\n\t\t\t\t\t\t.observe { event in\n\t\t\t\t\t\t\tswitch event {\n\t\t\t\t\t\t\tcase let .Next(values):\n\t\t\t\t\t\t\t\tzippedValues = values\n\t\t\t\t\t\t\tcase .Completed:\n\t\t\t\t\t\t\t\tcompleted = true\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\titBehavesLike(zipExampleName)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/Swift/TestError.swift",
    "content": "//\n//  TestError.swift\n//  ReactiveCocoa\n//\n//  Created by Almas Sapargali on 1/26/15.\n//  Copyright (c) 2015 GitHub. All rights reserved.\n//\n\nenum TestError: Int {\n\tcase Default = 0\n\tcase Error1 = 1\n\tcase Error2 = 2\n}\n\nextension TestError: ErrorType {\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/ReactiveCocoaTests/test-data.json",
    "content": "[\n  { \"item\": 1 },\n  { \"item\": 2 },\n  { \"item\": 3 }\n]\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/script/LICENSE.md",
    "content": "**Copyright (c) 2013 Justin Spahr-Summers**\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject 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, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/script/README.md",
    "content": "# objc-build-scripts\n\nThis project is a collection of scripts created with two goals:\n\n 1. To standardize how Objective-C projects are bootstrapped after cloning\n 1. To easily build Objective-C projects on continuous integration servers\n\n## Scripts\n\nRight now, there are two important scripts: [`bootstrap`](#bootstrap) and\n[`cibuild`](#cibuild). Both are Bash scripts, to maximize compatibility and\neliminate pesky system configuration issues (like setting up a working Ruby\nenvironment).\n\nThe structure of the scripts on disk is meant to follow that of a typical Ruby\nproject:\n\n```\nscript/\n    bootstrap\n    cibuild\n```\n\n### bootstrap\n\nThis script is responsible for bootstrapping (initializing) your project after\nit's been checked out. Here, you should install or clone any dependencies that\nare required for a working build and development environment.\n\nBy default, the script will verify that [xctool][] is installed, then initialize\nand update submodules recursively. If any submodules contain `script/bootstrap`,\nthat will be run as well.\n\nTo check that other tools are installed, you can set the `REQUIRED_TOOLS`\nenvironment variable before running `script/bootstrap`, or edit it within the\nscript directly. Note that no installation is performed automatically, though\nthis can always be added within your specific project.\n\n### cibuild\n\nThis script is responsible for building the project, as you would want it built\nfor continuous integration. This is preferable to putting the logic on the CI\nserver itself, since it ensures that any changes are versioned along with the\nsource.\n\nBy default, the script will run [`bootstrap`](#bootstrap), look for any Xcode\nworkspace or project in the working directory, then build all targets/schemes\n(as found by `xcodebuild -list`) using [xctool][].\n\nYou can also specify the schemes to build by passing them into the script:\n\n```sh\nscript/cibuild ReactiveCocoa-Mac ReactiveCocoa-iOS\n```\n\nAs with the `bootstrap` script, there are several environment variables that can\nbe used to customize behavior. They can be set on the command line before\ninvoking the script, or the defaults changed within the script directly.\n\n## Getting Started\n\nTo add the scripts to your project, read the contents of this repository into\na `script` folder:\n\n```\n$ git remote add objc-build-scripts https://github.com/jspahrsummers/objc-build-scripts.git\n$ git fetch objc-build-scripts\n$ git read-tree --prefix=script/ -u objc-build-scripts/master\n```\n\nThen commit the changes, to incorporate the scripts into your own repository's\nhistory. You can also freely tweak the scripts for your specific project's\nneeds.\n\nTo merge in upstream changes later:\n\n```\n$ git fetch -p objc-build-scripts\n$ git merge --ff --squash -Xsubtree=script objc-build-scripts/master\n```\n\n[xctool]: https://github.com/facebook/xctool\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/script/bootstrap",
    "content": "#!/bin/bash\n\nexport SCRIPT_DIR=$(dirname \"$0\")\n\n##\n## Bootstrap Process\n##\n\nmain ()\n{\n    local submodules=$(git submodule status)\n    local result=$?\n\n    if [ \"$result\" -ne \"0\" ]\n    then\n        exit $result\n    fi\n\n    if [ -n \"$submodules\" ]\n    then\n        echo \"*** Updating submodules...\"\n        update_submodules\n    fi\n}\n\nbootstrap_submodule ()\n{\n    local bootstrap=\"script/bootstrap\"\n\n    if [ -e \"$bootstrap\" ]\n    then\n        echo \"*** Bootstrapping $name...\"\n        \"$bootstrap\" >/dev/null\n    else\n        update_submodules\n    fi\n}\n\nupdate_submodules ()\n{\n    git submodule sync --quiet && git submodule update --init && git submodule foreach --quiet bootstrap_submodule\n}\n\nexport -f bootstrap_submodule\nexport -f update_submodules\n\nmain\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/script/cibuild",
    "content": "#!/bin/bash\n\nexport SCRIPT_DIR=$(dirname \"$0\")\n\n##\n## Configuration Variables\n##\n\nSCHEMES=\"$@\"\n\nconfig ()\n{\n    # The workspace to build.\n    #\n    # If not set and no workspace is found, the -workspace flag will not be passed\n    # to `xctool`.\n    #\n    # Only one of `XCWORKSPACE` and `XCODEPROJ` needs to be set. The former will\n    # take precedence.\n    : ${XCWORKSPACE=$(find_pattern \"*.xcworkspace\")}\n\n    # The project to build.\n    #\n    # If not set and no project is found, the -project flag will not be passed\n    # to `xctool`.\n    #\n    # Only one of `XCWORKSPACE` and `XCODEPROJ` needs to be set. The former will\n    # take precedence.\n    : ${XCODEPROJ=$(find_pattern \"*.xcodeproj\")}\n\n    # A bootstrap script to run before building.\n    #\n    # If this file does not exist, it is not considered an error.\n    : ${BOOTSTRAP=\"$SCRIPT_DIR/bootstrap\"}\n\n    # Extra options to pass to xctool.\n    : ${XCTOOL_OPTIONS=\"RUN_CLANG_STATIC_ANALYZER=NO\"}\n\n    # A whitespace-separated list of default schemes to build.\n    #\n    # Individual names can be quoted to avoid word splitting.\n    : ${SCHEMES:=$(xcodebuild -list -project \"$XCODEPROJ\" 2>/dev/null | awk -f \"$SCRIPT_DIR/schemes.awk\")}\n\n    # A whitespace-separated list of executables that must be present and locatable.\n    : ${REQUIRED_TOOLS=\"xctool\"}\n\n    export XCWORKSPACE\n    export XCODEPROJ\n    export BOOTSTRAP\n    export XCTOOL_OPTIONS\n    export SCHEMES\n    export REQUIRED_TOOLS\n}\n\n##\n## Build Process\n##\n\nmain ()\n{\n    config\n\n    if [ -n \"$REQUIRED_TOOLS\" ]\n    then\n        echo \"*** Checking dependencies...\"\n        check_deps\n    fi\n\n    if [ -f \"$BOOTSTRAP\" ]\n    then\n        echo \"*** Bootstrapping...\"\n        \"$BOOTSTRAP\" || exit $?\n    fi\n\n    echo \"*** The following schemes will be built:\"\n    echo \"$SCHEMES\" | xargs -n 1 echo \"  \"\n    echo\n\n    echo \"$SCHEMES\" | xargs -n 1 | (\n        local status=0\n\n        while read scheme\n        do\n            build_scheme \"$scheme\" || status=1\n        done\n\n        exit $status\n    )\n}\n\ncheck_deps ()\n{\n    for tool in $REQUIRED_TOOLS\n    do\n        which -s \"$tool\"\n        if [ \"$?\" -ne \"0\" ]\n        then\n            echo \"*** Error: $tool not found. Please install it and cibuild again.\"\n            exit 1\n        fi\n    done\n}\n\nfind_pattern ()\n{\n    ls -d $1 2>/dev/null | head -n 1\n}\n\nrun_xctool ()\n{\n    if [ -n \"$XCWORKSPACE\" ]\n    then\n        xctool -workspace \"$XCWORKSPACE\" $XCTOOL_OPTIONS \"$@\" 2>&1\n    elif [ -n \"$XCODEPROJ\" ]\n    then\n        xctool -project \"$XCODEPROJ\" $XCTOOL_OPTIONS \"$@\" 2>&1\n    else\n        echo \"*** No workspace or project file found.\"\n        exit 1\n    fi\n}\n\nparse_build ()\n{\n    awk -f \"$SCRIPT_DIR/xctool.awk\" 2>&1 >/dev/null\n}\n\nbuild_scheme ()\n{\n    local scheme=$1\n\n    echo \"*** Building and testing $scheme...\"\n    echo\n\n    local sdkflag=\n    local action=test\n\n    # Determine whether we can run unit tests for this target.\n    run_xctool -scheme \"$scheme\" run-tests | parse_build\n\n    local awkstatus=$?\n\n    if [ \"$awkstatus\" -eq \"1\" ]\n    then\n        # SDK not found, try for iphonesimulator.\n        sdkflag=\"-sdk iphonesimulator\"\n\n        # Determine whether the unit tests will run with iphonesimulator\n        run_xctool $sdkflag -scheme \"$scheme\" run-tests | parse_build\n\n        awkstatus=$?\n\n        if [ \"$awkstatus\" -ne \"0\" ]\n        then\n            # Unit tests will not run on iphonesimulator.\n            sdkflag=\"\"\n        fi\n    fi\n\n    if [ \"$awkstatus\" -ne \"0\" ]\n    then\n        # Unit tests aren't supported.\n        action=build\n    fi\n\n    run_xctool $sdkflag -scheme \"$scheme\" $action\n}\n\nexport -f build_scheme\nexport -f run_xctool\nexport -f parse_build\n\nmain\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/script/schemes.awk",
    "content": "BEGIN {\n    FS = \"\\n\";\n}\n\n/Schemes:/ {\n    while (getline && $0 != \"\") {\n        sub(/^ +/, \"\");\n        print \"'\" $0 \"'\";\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/script/targets.awk",
    "content": "BEGIN {\n    FS = \"\\n\";\n}\n\n/Targets:/ {\n    while (getline && $0 != \"\") {\n        if ($0 ~ /Tests/) continue;\n\n        sub(/^ +/, \"\");\n        print \"'\" $0 \"'\";\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/script/xcodebuild.awk",
    "content": "# Exit statuses:\n#\n# 0 - No errors found.\n# 1 - Build or test failure. Errors will be logged automatically.\n# 2 - Untestable target. Retry with the \"build\" action.\n\nBEGIN {\n    status = 0;\n}\n\n{\n    print;\n    fflush(stdout);\n}\n\n/is not valid for Testing/ {\n    exit 2;\n}\n\n/[0-9]+: (error|warning):/ {\n    errors = errors $0 \"\\n\";\n}\n\n/(TEST|BUILD) FAILED/ {\n    status = 1;\n}\n\nEND {\n    if (length(errors) > 0) {\n        print \"\\n*** All errors:\\n\" errors;\n    }\n\n    fflush(stdout);\n    exit status;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/ReactiveCocoa/script/xctool.awk",
    "content": "# Exit statuses:\n#\n# 0 - No errors found.\n# 1 - Wrong SDK. Retry with SDK `iphonesimulator`.\n# 2 - Missing target.\n\nBEGIN {\n    status = 0;\n}\n\n{\n    print;\n}\n\n/Testing with the '(.+)' SDK is not yet supported/ {\n    status = 1;\n}\n\n/does not contain a target named/ {\n    status = 2;\n}\n\nEND {\n    exit status;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/Result/.gitignore",
    "content": ".DS_Store\nxcuserdata\n*.xcuserdatad\n*.xccheckout\n*.mode*\n*.pbxuser\n\nCarthage/Build\n.build\n"
  },
  {
    "path": "Carthage/Checkouts/Result/.travis.yml",
    "content": "language: objective-c\nosx_image: xcode7.1\n\nscript:\n  - xcodebuild test -scheme Result-Mac\n  - xcodebuild test -scheme Result-iOS -sdk iphonesimulator\n  - xcodebuild test -scheme Result-tvOS -sdk appletvsimulator\n  - xcodebuild build -scheme Result-watchOS -sdk watchsimulator\n  - pod lib lint\n\nnotifications:\n  email: false\n"
  },
  {
    "path": "Carthage/Checkouts/Result/CONTRIBUTING.md",
    "content": "We love that you're interested in contributing to this project!\n\nTo make the process as painless as possible, we have just a couple of guidelines\nthat should make life easier for everyone involved.\n\n## Prefer Pull Requests\n\nIf you know exactly how to implement the feature being suggested or fix the bug\nbeing reported, please open a pull request instead of an issue. Pull requests are easier than\npatches or inline code blocks for discussing and merging the changes.\n\nIf you can't make the change yourself, please open an issue after making sure\nthat one isn't already logged.\n\n## Contributing Code\n\nFork this repository, make it awesomer (preferably in a branch named for the\ntopic), send a pull request!\n\nAll code contributions should match our [coding\nconventions](https://github.com/github/swift-style-guide).\n\nThanks for contributing! :boom::camel:\n"
  },
  {
    "path": "Carthage/Checkouts/Result/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Rob Rix\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."
  },
  {
    "path": "Carthage/Checkouts/Result/Package.swift",
    "content": "import PackageDescription\n\nlet package = Package(\n    name: \"Result\",\n    targets: [\n        Target(\n            name: \"Result\"\n        )\n    ]\n)\n"
  },
  {
    "path": "Carthage/Checkouts/Result/README.md",
    "content": "# Result\n\n[![Build Status](https://travis-ci.org/antitypical/Result.svg?branch=master)](https://travis-ci.org/antitypical/Result)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![CocoaPods](https://img.shields.io/cocoapods/v/Result.svg)](https://cocoapods.org/)\n[![Reference Status](https://www.versioneye.com/objective-c/result/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/result/references)\n\nThis is a Swift µframework providing `Result<Value, Error>`.\n\n`Result<Value, Error>` values are either successful (wrapping `Value`) or failed (wrapping `Error`). This is similar to Swift’s native `Optional` type: `Success` is like `Some`, and `Failure` is like `None` except with an associated `ErrorType` value. The addition of an associated `ErrorType` allows errors to be passed along for logging or displaying to the user.\n\nUsing this µframework instead of rolling your own `Result` type allows you to easily interface with other frameworks that also use `Result`.\n\n## Use\n\nUse `Result` whenever an operation has the possibility of failure. Consider the following example of a function that tries to extract a `String` for a given key from a JSON `Dictionary`.\n\n```swift\ntypealias JSONObject = [String:AnyObject]\n\nenum JSONError : ErrorType {\n    case NoSuchKey(String)\n    case TypeMismatch\n}\n\nfunc stringForKey(json: JSONObject, key: String) -> Result<String, JSONError> {\n    guard let value = json[key] else {\n        return .Failure(.NoSuchKey(key))\n    }\n    \n    if let value = value as? String {\n        return .Success(value)\n    }\n    else {\n        return .Failure(.TypeMismatch)\n    }\n}\n```\n\nThis function provides a more robust wrapper around the default subscripting provided by `Dictionary`. Rather than return `AnyObject?`, it returns a `Result` that either contains the `String` value for the given key, or an `ErrorType` detailing what went wrong.\n\nOne simple way to handle a `Result` is to deconstruct it using a `switch` statement.\n\n```swift\nswitch stringForKey(json, key: \"email\") {\n\ncase let .Success(email):\n    print(\"The email is \\(email)\")\n    \ncase let .Failure(JSONError.NoSuchKey(key)):\n    print(\"\\(key) is not a valid key\")\n    \ncase .Failure(JSONError.TypeMismatch):\n    print(\"Didn't have the right type\")\n}\n```\n\nUsing a `switch` statement allows powerful pattern matching, and ensures all possible results are covered. Swift 2.0 offers new ways to deconstruct enums like the `if-case` statement, but be wary as such methods do not ensure errors are handled.\n\nOther methods available for processing `Result` are detailed in the [API documentation](http://cocoadocs.org/docsets/Result/).\n\n## Result vs. Throws\n\nSwift 2.0 introduces error handling via throwing and catching `ErrorType`. `Result` accomplishes the same goal by encapsulating the result instead of hijacking control flow. The `Result` abstraction allows enables powerful functionality such as `map` and `flatMap`, making `Result` more composable than `throw`.\n\nSince dealing with APIs that throw is common, you can convert functions such functions into a `Result` by using the `materialize` method. Conversely, a `Result` can be used to throw an error by calling `dematerialize`. [Note: due to compiler issues, `materialize` is not currently available]\n\n## Higher Order Functions\n\n`map` and `flatMap` operate the same as `Optional.map` and `Optional.flatMap` except they apply to `Result`.\n\n`map` transforms a `Result` into a `Result` of a new type. It does this by taking a function that transforms the `Value` type into a new value. This transformation is only applied in the case of a `Success`. In the case of a `Failure`, the associated error is re-wrapped in the new `Result`.\n\n```swift\n// transforms a Result<Int, JSONError> to a Result<String, JSONError>\nlet idResult = intForKey(json, key:\"id\").map { id in String(id) }\n```\n\nHere, the final result is either the id as a `String`, or carries over the `.Failure` from the previous result.\n\n`flatMap` is similar to `map` in that in transforms the `Result` into another `Result`. However, the function passed into `flatMap` must return a `Result`.\n\nAn in depth discussion of `map` and `flatMap` is beyond the scope of this documentation. If you would like a deeper understanding, read about functors and monads. This article is a good place to [start](http://www.javiersoto.me/post/106875422394).\n\n## Integration\n\n1. Add this repository as a submodule and/or [add it to your Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile) if you’re using [carthage](https://github.com/Carthage/Carthage/) to manage your dependencies.\n2. Drag `Result.xcodeproj` into your project or workspace.\n3. Link your target against `Result.framework`.\n4. Application targets should ensure that the framework gets copied into their application bundle. (Framework targets should instead require the application linking them to include Result.)\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Result/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0.2</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2015 Rob Rix. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Result/Result.h",
    "content": "//  Copyright (c) 2015 Rob Rix. All rights reserved.\n\n/// Project version number for Result.\nextern double ResultVersionNumber;\n\n/// Project version string for Result.\nextern const unsigned char ResultVersionString[];\n\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Result/Result.swift",
    "content": "//  Copyright (c) 2015 Rob Rix. All rights reserved.\n\n/// An enum representing either a failure with an explanatory error, or a success with a result value.\npublic enum Result<T, Error: ErrorType>: ResultType, CustomStringConvertible, CustomDebugStringConvertible {\n\tcase Success(T)\n\tcase Failure(Error)\n\n\t// MARK: Constructors\n\n\t/// Constructs a success wrapping a `value`.\n\tpublic init(value: T) {\n\t\tself = .Success(value)\n\t}\n\n\t/// Constructs a failure wrapping an `error`.\n\tpublic init(error: Error) {\n\t\tself = .Failure(error)\n\t}\n\n\t/// Constructs a result from an Optional, failing with `Error` if `nil`.\n\tpublic init(_ value: T?, @autoclosure failWith: () -> Error) {\n\t\tself = value.map(Result.Success) ?? .Failure(failWith())\n\t}\n\n\t/// Constructs a result from a function that uses `throw`, failing with `Error` if throws.\n\tpublic init(@autoclosure _ f: () throws -> T) {\n\t\tself.init(attempt: f)\n\t}\n\n\t/// Constructs a result from a function that uses `throw`, failing with `Error` if throws.\n\tpublic init(@noescape attempt f: () throws -> T) {\n\t\tdo {\n\t\t\tself = .Success(try f())\n\t\t} catch {\n\t\t\tself = .Failure(error as! Error)\n\t\t}\n\t}\n\n\t// MARK: Deconstruction\n\n\t/// Returns the value from `Success` Results or `throw`s the error.\n\tpublic func dematerialize() throws -> T {\n\t\tswitch self {\n\t\tcase let .Success(value):\n\t\t\treturn value\n\t\tcase let .Failure(error):\n\t\t\tthrow error\n\t\t}\n\t}\n\n\t/// Case analysis for Result.\n\t///\n\t/// Returns the value produced by applying `ifFailure` to `Failure` Results, or `ifSuccess` to `Success` Results.\n\tpublic func analysis<Result>(@noescape ifSuccess ifSuccess: T -> Result, @noescape ifFailure: Error -> Result) -> Result {\n\t\tswitch self {\n\t\tcase let .Success(value):\n\t\t\treturn ifSuccess(value)\n\t\tcase let .Failure(value):\n\t\t\treturn ifFailure(value)\n\t\t}\n\t}\n\n\n\t// MARK: Higher-order functions\n\t\n\t/// Returns `self.value` if this result is a .Success, or the given value otherwise. Equivalent with `??`\n\tpublic func recover(@autoclosure value: () -> T) -> T {\n\t\treturn self.value ?? value()\n\t}\n\t\n\t/// Returns this result if it is a .Success, or the given result otherwise. Equivalent with `??`\n\tpublic func recoverWith(@autoclosure result: () -> Result<T,Error>) -> Result<T,Error> {\n\t\treturn analysis(\n\t\t\tifSuccess: { _ in self },\n\t\t\tifFailure: { _ in result() })\n\t}\n\n\t// MARK: Errors\n\n\t/// The domain for errors constructed by Result.\n\tpublic static var errorDomain: String { return \"com.antitypical.Result\" }\n\n\t/// The userInfo key for source functions in errors constructed by Result.\n\tpublic static var functionKey: String { return \"\\(errorDomain).function\" }\n\n\t/// The userInfo key for source file paths in errors constructed by Result.\n\tpublic static var fileKey: String { return \"\\(errorDomain).file\" }\n\n\t/// The userInfo key for source file line numbers in errors constructed by Result.\n\tpublic static var lineKey: String { return \"\\(errorDomain).line\" }\n\n\t/// Constructs an error.\n\tpublic static func error(message: String? = nil, function: String = __FUNCTION__, file: String = __FILE__, line: Int = __LINE__) -> NSError {\n\t\tvar userInfo: [String: AnyObject] = [\n\t\t\tfunctionKey: function,\n\t\t\tfileKey: file,\n\t\t\tlineKey: line,\n\t\t]\n\n\t\tif let message = message {\n\t\t\tuserInfo[NSLocalizedDescriptionKey] = message\n\t\t}\n\n\t\treturn NSError(domain: errorDomain, code: 0, userInfo: userInfo)\n\t}\n\n\n\t// MARK: CustomStringConvertible\n\n\tpublic var description: String {\n\t\treturn analysis(\n\t\t\tifSuccess: { \".Success(\\($0))\" },\n\t\t\tifFailure: { \".Failure(\\($0))\" })\n\t}\n\n\n\t// MARK: CustomDebugStringConvertible\n\n\tpublic var debugDescription: String {\n\t\treturn description\n\t}\n}\n\n\n/// Returns `true` if `left` and `right` are both `Success`es and their values are equal, or if `left` and `right` are both `Failure`s and their errors are equal.\npublic func == <T: Equatable, Error: Equatable> (left: Result<T, Error>, right: Result<T, Error>) -> Bool {\n\tif let left = left.value, right = right.value {\n\t\treturn left == right\n\t} else if let left = left.error, right = right.error {\n\t\treturn left == right\n\t}\n\treturn false\n}\n\n/// Returns `true` if `left` and `right` represent different cases, or if they represent the same case but different values.\npublic func != <T: Equatable, Error: Equatable> (left: Result<T, Error>, right: Result<T, Error>) -> Bool {\n\treturn !(left == right)\n}\n\n\n/// Returns the value of `left` if it is a `Success`, or `right` otherwise. Short-circuits.\npublic func ?? <T, Error> (left: Result<T, Error>, @autoclosure right: () -> T) -> T {\n\treturn left.recover(right())\n}\n\n/// Returns `left` if it is a `Success`es, or `right` otherwise. Short-circuits.\npublic func ?? <T, Error> (left: Result<T, Error>, @autoclosure right: () -> Result<T, Error>) -> Result<T, Error> {\n\treturn left.recoverWith(right())\n}\n\n// MARK: - Derive result from failable closure\n\npublic func materialize<T>(@noescape f: () throws -> T) -> Result<T, NSError> {\n\treturn materialize(try f())\n}\n\npublic func materialize<T>(@autoclosure f: () throws -> T) -> Result<T, NSError> {\n\tdo {\n\t\treturn .Success(try f())\n\t} catch {\n\t\treturn .Failure(error as NSError)\n\t}\n}\n\n// MARK: - Cocoa API conveniences\n\n/// Constructs a Result with the result of calling `try` with an error pointer.\n///\n/// This is convenient for wrapping Cocoa API which returns an object or `nil` + an error, by reference. e.g.:\n///\n///     Result.try { NSData(contentsOfURL: URL, options: .DataReadingMapped, error: $0) }\npublic func `try`<T>(function: String = __FUNCTION__, file: String = __FILE__, line: Int = __LINE__, `try`: NSErrorPointer -> T?) -> Result<T, NSError> {\n\tvar error: NSError?\n\treturn `try`(&error).map(Result.Success) ?? .Failure(error ?? Result<T, NSError>.error(function: function, file: file, line: line))\n}\n\n/// Constructs a Result with the result of calling `try` with an error pointer.\n///\n/// This is convenient for wrapping Cocoa API which returns a `Bool` + an error, by reference. e.g.:\n///\n///     Result.try { NSFileManager.defaultManager().removeItemAtURL(URL, error: $0) }\npublic func `try`(function: String = __FUNCTION__, file: String = __FILE__, line: Int = __LINE__, `try`: NSErrorPointer -> Bool) -> Result<(), NSError> {\n\tvar error: NSError?\n\treturn `try`(&error) ?\n\t\t.Success(())\n\t:\t.Failure(error ?? Result<(), NSError>.error(function: function, file: file, line: line))\n}\n\n\n// MARK: - Operators\n\ninfix operator >>- {\n\t// Left-associativity so that chaining works like you’d expect, and for consistency with Haskell, Runes, swiftz, etc.\n\tassociativity left\n\n\t// Higher precedence than function application, but lower than function composition.\n\tprecedence 100\n}\n\n/// Returns the result of applying `transform` to `Success`es’ values, or re-wrapping `Failure`’s errors.\n///\n/// This is a synonym for `flatMap`.\npublic func >>- <T, U, Error> (result: Result<T, Error>, @noescape transform: T -> Result<U, Error>) -> Result<U, Error> {\n\treturn result.flatMap(transform)\n}\n\n\n// MARK: - ErrorTypeConvertible conformance\n\n/// Make NSError conform to ErrorTypeConvertible\nextension NSError: ErrorTypeConvertible {\n\tpublic static func errorFromErrorType(error: ErrorType) -> NSError {\n\t\treturn error as NSError\n\t}\n}\n\n// MARK: -\n\n/// An “error” that is impossible to construct.\n///\n/// This can be used to describe `Result`s where failures will never\n/// be generated. For example, `Result<Int, NoError>` describes a result that\n/// contains an `Int`eger and is guaranteed never to be a `Failure`.\npublic enum NoError: ErrorType { }\n\nimport Foundation\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Result/ResultType.swift",
    "content": "//  Copyright (c) 2015 Rob Rix. All rights reserved.\n\n/// A type that can represent either failure with an error or success with a result value.\npublic protocol ResultType {\n\ttypealias Value\n\ttypealias Error: ErrorType\n\t\n\t/// Constructs a successful result wrapping a `value`.\n\tinit(value: Value)\n\n\t/// Constructs a failed result wrapping an `error`.\n\tinit(error: Error)\n\t\n\t/// Case analysis for ResultType.\n\t///\n\t/// Returns the value produced by appliying `ifFailure` to the error if self represents a failure, or `ifSuccess` to the result value if self represents a success.\n\tfunc analysis<U>(@noescape ifSuccess ifSuccess: Value -> U, @noescape ifFailure: Error -> U) -> U\n\n\t/// Returns the value if self represents a success, `nil` otherwise.\n\t///\n\t/// A default implementation is provided by a protocol extension. Conforming types may specialize it.\n\tvar value: Value? { get }\n\n\t/// Returns the error if self represents a failure, `nil` otherwise.\n\t///\n\t/// A default implementation is provided by a protocol extension. Conforming types may specialize it.\n\tvar error: Error? { get }\n}\n\npublic extension ResultType {\n\t\n\t/// Returns the value if self represents a success, `nil` otherwise.\n\tpublic var value: Value? {\n\t\treturn analysis(ifSuccess: { $0 }, ifFailure: { _ in nil })\n\t}\n\t\n\t/// Returns the error if self represents a failure, `nil` otherwise.\n\tpublic var error: Error? {\n\t\treturn analysis(ifSuccess: { _ in nil }, ifFailure: { $0 })\n\t}\n\n\t/// Returns a new Result by mapping `Success`es’ values using `transform`, or re-wrapping `Failure`s’ errors.\n\tpublic func map<U>(@noescape transform: Value -> U) -> Result<U, Error> {\n\t\treturn flatMap { .Success(transform($0)) }\n\t}\n\n\t/// Returns the result of applying `transform` to `Success`es’ values, or re-wrapping `Failure`’s errors.\n\tpublic func flatMap<U>(@noescape transform: Value -> Result<U, Error>) -> Result<U, Error> {\n\t\treturn analysis(\n\t\t\tifSuccess: transform,\n\t\t\tifFailure: Result<U, Error>.Failure)\n\t}\n\t\n\t/// Returns a new Result by mapping `Failure`'s values using `transform`, or re-wrapping `Success`es’ values.\n\tpublic func mapError<Error2>(@noescape transform: Error -> Error2) -> Result<Value, Error2> {\n\t\treturn flatMapError { .Failure(transform($0)) }\n\t}\n\t\n\t/// Returns the result of applying `transform` to `Failure`’s errors, or re-wrapping `Success`es’ values.\n\tpublic func flatMapError<Error2>(@noescape transform: Error -> Result<Value, Error2>) -> Result<Value, Error2> {\n\t\treturn analysis(\n\t\t\tifSuccess: Result<Value, Error2>.Success,\n\t\t\tifFailure: transform)\n\t}\n}\n\n/// Protocol used to constrain `tryMap` to `Result`s with compatible `Error`s.\npublic protocol ErrorTypeConvertible: ErrorType {\n\ttypealias ConvertibleType = Self\n\tstatic func errorFromErrorType(error: ErrorType) -> ConvertibleType\n}\n\npublic extension ResultType where Error: ErrorTypeConvertible {\n\n\t/// Returns the result of applying `transform` to `Success`es’ values, or wrapping thrown errors.\n\tpublic func tryMap<U>(@noescape transform: Value throws -> U) -> Result<U, Error> {\n\t\treturn flatMap { value in\n\t\t\tdo {\n\t\t\t\treturn .Success(try transform(value))\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\tlet convertedError = Error.errorFromErrorType(error) as! Error\n\t\t\t\t// Revisit this in a future version of Swift. https://twitter.com/jckarter/status/672931114944696321\n\t\t\t\treturn .Failure(convertedError)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// MARK: - Operators\n\ninfix operator &&& {\n\t/// Same associativity as &&.\n\tassociativity left\n\n\t/// Same precedence as &&.\n\tprecedence 120\n}\n\n/// Returns a Result with a tuple of `left` and `right` values if both are `Success`es, or re-wrapping the error of the earlier `Failure`.\npublic func &&& <L: ResultType, R: ResultType where L.Error == R.Error> (left: L, @autoclosure right: () -> R) -> Result<(L.Value, R.Value), L.Error> {\n\treturn left.flatMap { left in right().map { right in (left, right) } }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Result.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = 'Result'\n  s.version      = '1.0.2'\n  s.summary      = 'Swift type modelling the success/failure of arbitrary operations'\n\n  s.homepage     = 'https://github.com/antitypical/Result'\n  s.license      = { :type => 'MIT', :file => 'LICENSE' }\n  s.author       = { 'Rob Rix' => 'rob.rix@github.com' }\n  s.source       = { :git => 'https://github.com/antitypical/Result.git', :tag => s.version }\n  s.source_files  = 'Result/*.swift'\n  s.requires_arc = true\n  s.ios.deployment_target = '8.0'\n  s.osx.deployment_target = '10.9'\n  s.watchos.deployment_target = '2.0'\n  s.tvos.deployment_target = '9.0'\nend\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Result.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\t45AE89E61B3A6564007B99D7 /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; };\n\t\t57FCDE3E1BA280DC00130C48 /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; };\n\t\t57FCDE3F1BA280DC00130C48 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; };\n\t\t57FCDE421BA280DC00130C48 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t57FCDE4D1BA280E000130C48 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; };\n\t\t57FCDE561BA2814300130C48 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57FCDE471BA280DC00130C48 /* Result.framework */; };\n\t\tD035799B1B2B788F005D26AE /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; };\n\t\tD035799E1B2B788F005D26AE /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD03579A91B2B78A1005D26AE /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; };\n\t\tD03579B41B2B78C4005D26AE /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03579A31B2B788F005D26AE /* Result.framework */; };\n\t\tD454805D1A9572F5009D7229 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD45480681A9572F5009D7229 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D45480571A9572F5009D7229 /* Result.framework */; };\n\t\tD454806F1A9572F5009D7229 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; };\n\t\tD45480881A957362009D7229 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D454807D1A957361009D7229 /* Result.framework */; };\n\t\tD45480971A957465009D7229 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; };\n\t\tD45480981A957465009D7229 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45480961A957465009D7229 /* Result.swift */; };\n\t\tD45480991A9574B8009D7229 /* ResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D454806E1A9572F5009D7229 /* ResultTests.swift */; };\n\t\tD454809A1A9574BB009D7229 /* Result.h in Headers */ = {isa = PBXBuildFile; fileRef = D454805C1A9572F5009D7229 /* Result.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE93621461B35596200948F2A /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; };\n\t\tE93621471B35596200948F2A /* ResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93621451B35596200948F2A /* ResultType.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t57FCDE571BA2814A00130C48 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D454804E1A9572F5009D7229 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 57FCDE3C1BA280DC00130C48;\n\t\t\tremoteInfo = \"Result-tvOS\";\n\t\t};\n\t\tD03579B21B2B78BB005D26AE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D454804E1A9572F5009D7229 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D03579991B2B788F005D26AE;\n\t\t\tremoteInfo = \"Result-watchOS\";\n\t\t};\n\t\tD45480691A9572F5009D7229 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D454804E1A9572F5009D7229 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D45480561A9572F5009D7229;\n\t\t\tremoteInfo = Result;\n\t\t};\n\t\tD45480891A957362009D7229 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D454804E1A9572F5009D7229 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D454807C1A957361009D7229;\n\t\t\tremoteInfo = \"Result-iOS\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t57FCDE471BA280DC00130C48 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"Result-tvOSTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD03579A31B2B788F005D26AE /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"Result-watchOSTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD45480571A9572F5009D7229 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD454805B1A9572F5009D7229 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD454805C1A9572F5009D7229 /* Result.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Result.h; sourceTree = \"<group>\"; };\n\t\tD45480671A9572F5009D7229 /* Result-MacTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"Result-MacTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD454806D1A9572F5009D7229 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD454806E1A9572F5009D7229 /* ResultTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultTests.swift; sourceTree = \"<group>\"; };\n\t\tD454807D1A957361009D7229 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD45480871A957362009D7229 /* Result-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"Result-iOSTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD45480961A957465009D7229 /* Result.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Result.swift; sourceTree = \"<group>\"; };\n\t\tE93621451B35596200948F2A /* ResultType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResultType.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t57FCDE401BA280DC00130C48 /* 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\t\t57FCDE4E1BA280E000130C48 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57FCDE561BA2814300130C48 /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD035799C1B2B788F005D26AE /* 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\t\tD03579AA1B2B78A1005D26AE /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD03579B41B2B78C4005D26AE /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480531A9572F5009D7229 /* 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\t\tD45480641A9572F5009D7229 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD45480681A9572F5009D7229 /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480791A957361009D7229 /* 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\t\tD45480841A957362009D7229 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD45480881A957362009D7229 /* Result.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tD454804D1A9572F5009D7229 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD45480591A9572F5009D7229 /* Result */,\n\t\t\t\tD454806B1A9572F5009D7229 /* ResultTests */,\n\t\t\t\tD45480581A9572F5009D7229 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t\tusesTabs = 1;\n\t\t};\n\t\tD45480581A9572F5009D7229 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD45480571A9572F5009D7229 /* Result.framework */,\n\t\t\t\tD45480671A9572F5009D7229 /* Result-MacTests.xctest */,\n\t\t\t\tD454807D1A957361009D7229 /* Result.framework */,\n\t\t\t\tD45480871A957362009D7229 /* Result-iOSTests.xctest */,\n\t\t\t\tD03579A31B2B788F005D26AE /* Result.framework */,\n\t\t\t\tD03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */,\n\t\t\t\t57FCDE471BA280DC00130C48 /* Result.framework */,\n\t\t\t\t57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD45480591A9572F5009D7229 /* Result */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD454805C1A9572F5009D7229 /* Result.h */,\n\t\t\t\tD45480961A957465009D7229 /* Result.swift */,\n\t\t\t\tE93621451B35596200948F2A /* ResultType.swift */,\n\t\t\t\tD454805A1A9572F5009D7229 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = Result;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD454805A1A9572F5009D7229 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD454805B1A9572F5009D7229 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD454806B1A9572F5009D7229 /* ResultTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD454806E1A9572F5009D7229 /* ResultTests.swift */,\n\t\t\t\tD454806C1A9572F5009D7229 /* Supporting Files */,\n\t\t\t);\n\t\t\tname = ResultTests;\n\t\t\tpath = Tests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD454806C1A9572F5009D7229 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD454806D1A9572F5009D7229 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t57FCDE411BA280DC00130C48 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57FCDE421BA280DC00130C48 /* Result.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD035799D1B2B788F005D26AE /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD035799E1B2B788F005D26AE /* Result.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480541A9572F5009D7229 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD454805D1A9572F5009D7229 /* Result.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD454807A1A957361009D7229 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD454809A1A9574BB009D7229 /* Result.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t57FCDE3C1BA280DC00130C48 /* Result-tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 57FCDE441BA280DC00130C48 /* Build configuration list for PBXNativeTarget \"Result-tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t57FCDE3D1BA280DC00130C48 /* Sources */,\n\t\t\t\t57FCDE401BA280DC00130C48 /* Frameworks */,\n\t\t\t\t57FCDE411BA280DC00130C48 /* Headers */,\n\t\t\t\t57FCDE431BA280DC00130C48 /* 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 = \"Result-tvOS\";\n\t\t\tproductName = \"Result-iOS\";\n\t\t\tproductReference = 57FCDE471BA280DC00130C48 /* Result.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t57FCDE491BA280E000130C48 /* Result-tvOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 57FCDE511BA280E000130C48 /* Build configuration list for PBXNativeTarget \"Result-tvOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t57FCDE4C1BA280E000130C48 /* Sources */,\n\t\t\t\t57FCDE4E1BA280E000130C48 /* Frameworks */,\n\t\t\t\t57FCDE501BA280E000130C48 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t57FCDE581BA2814A00130C48 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Result-tvOSTests\";\n\t\t\tproductName = \"Result-iOSTests\";\n\t\t\tproductReference = 57FCDE541BA280E000130C48 /* Result-tvOSTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tD03579991B2B788F005D26AE /* Result-watchOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D03579A01B2B788F005D26AE /* Build configuration list for PBXNativeTarget \"Result-watchOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD035799A1B2B788F005D26AE /* Sources */,\n\t\t\t\tD035799C1B2B788F005D26AE /* Frameworks */,\n\t\t\t\tD035799D1B2B788F005D26AE /* Headers */,\n\t\t\t\tD035799F1B2B788F005D26AE /* 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 = \"Result-watchOS\";\n\t\t\tproductName = Result;\n\t\t\tproductReference = D03579A31B2B788F005D26AE /* Result.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tD03579A51B2B78A1005D26AE /* Result-watchOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D03579AD1B2B78A1005D26AE /* Build configuration list for PBXNativeTarget \"Result-watchOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD03579A81B2B78A1005D26AE /* Sources */,\n\t\t\t\tD03579AA1B2B78A1005D26AE /* Frameworks */,\n\t\t\t\tD03579AC1B2B78A1005D26AE /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD03579B31B2B78BB005D26AE /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Result-watchOSTests\";\n\t\t\tproductName = ResultTests;\n\t\t\tproductReference = D03579B01B2B78A1005D26AE /* Result-watchOSTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tD45480561A9572F5009D7229 /* Result-Mac */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D45480721A9572F5009D7229 /* Build configuration list for PBXNativeTarget \"Result-Mac\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD45480521A9572F5009D7229 /* Sources */,\n\t\t\t\tD45480531A9572F5009D7229 /* Frameworks */,\n\t\t\t\tD45480541A9572F5009D7229 /* Headers */,\n\t\t\t\tD45480551A9572F5009D7229 /* 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 = \"Result-Mac\";\n\t\t\tproductName = Result;\n\t\t\tproductReference = D45480571A9572F5009D7229 /* Result.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tD45480661A9572F5009D7229 /* Result-MacTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D45480751A9572F5009D7229 /* Build configuration list for PBXNativeTarget \"Result-MacTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD45480631A9572F5009D7229 /* Sources */,\n\t\t\t\tD45480641A9572F5009D7229 /* Frameworks */,\n\t\t\t\tD45480651A9572F5009D7229 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD454806A1A9572F5009D7229 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Result-MacTests\";\n\t\t\tproductName = ResultTests;\n\t\t\tproductReference = D45480671A9572F5009D7229 /* Result-MacTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tD454807C1A957361009D7229 /* Result-iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D45480941A957362009D7229 /* Build configuration list for PBXNativeTarget \"Result-iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD45480781A957361009D7229 /* Sources */,\n\t\t\t\tD45480791A957361009D7229 /* Frameworks */,\n\t\t\t\tD454807A1A957361009D7229 /* Headers */,\n\t\t\t\tD454807B1A957361009D7229 /* 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 = \"Result-iOS\";\n\t\t\tproductName = \"Result-iOS\";\n\t\t\tproductReference = D454807D1A957361009D7229 /* Result.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tD45480861A957362009D7229 /* Result-iOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D45480951A957362009D7229 /* Build configuration list for PBXNativeTarget \"Result-iOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD45480831A957362009D7229 /* Sources */,\n\t\t\t\tD45480841A957362009D7229 /* Frameworks */,\n\t\t\t\tD45480851A957362009D7229 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD454808A1A957362009D7229 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Result-iOSTests\";\n\t\t\tproductName = \"Result-iOSTests\";\n\t\t\tproductReference = D45480871A957362009D7229 /* Result-iOSTests.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\tD454804E1A9572F5009D7229 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0700;\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t\tORGANIZATIONNAME = \"Rob Rix\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tD45480561A9572F5009D7229 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.3;\n\t\t\t\t\t};\n\t\t\t\t\tD45480661A9572F5009D7229 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.3;\n\t\t\t\t\t};\n\t\t\t\t\tD454807C1A957361009D7229 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.3;\n\t\t\t\t\t};\n\t\t\t\t\tD45480861A957362009D7229 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.3;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = D45480511A9572F5009D7229 /* Build configuration list for PBXProject \"Result\" */;\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 = D454804D1A9572F5009D7229;\n\t\t\tproductRefGroup = D45480581A9572F5009D7229 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tD45480561A9572F5009D7229 /* Result-Mac */,\n\t\t\t\tD45480661A9572F5009D7229 /* Result-MacTests */,\n\t\t\t\tD454807C1A957361009D7229 /* Result-iOS */,\n\t\t\t\tD45480861A957362009D7229 /* Result-iOSTests */,\n\t\t\t\t57FCDE3C1BA280DC00130C48 /* Result-tvOS */,\n\t\t\t\t57FCDE491BA280E000130C48 /* Result-tvOSTests */,\n\t\t\t\tD03579991B2B788F005D26AE /* Result-watchOS */,\n\t\t\t\tD03579A51B2B78A1005D26AE /* Result-watchOSTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t57FCDE431BA280DC00130C48 /* 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\t\t57FCDE501BA280E000130C48 /* 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\t\tD035799F1B2B788F005D26AE /* 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\t\tD03579AC1B2B78A1005D26AE /* 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\t\tD45480551A9572F5009D7229 /* 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\t\tD45480651A9572F5009D7229 /* 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\t\tD454807B1A957361009D7229 /* 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\t\tD45480851A957362009D7229 /* 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\t57FCDE3D1BA280DC00130C48 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57FCDE3E1BA280DC00130C48 /* ResultType.swift in Sources */,\n\t\t\t\t57FCDE3F1BA280DC00130C48 /* Result.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t57FCDE4C1BA280E000130C48 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57FCDE4D1BA280E000130C48 /* ResultTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD035799A1B2B788F005D26AE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t45AE89E61B3A6564007B99D7 /* ResultType.swift in Sources */,\n\t\t\t\tD035799B1B2B788F005D26AE /* Result.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD03579A81B2B78A1005D26AE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD03579A91B2B78A1005D26AE /* ResultTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480521A9572F5009D7229 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE93621461B35596200948F2A /* ResultType.swift in Sources */,\n\t\t\t\tD45480971A957465009D7229 /* Result.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480631A9572F5009D7229 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD454806F1A9572F5009D7229 /* ResultTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480781A957361009D7229 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE93621471B35596200948F2A /* ResultType.swift in Sources */,\n\t\t\t\tD45480981A957465009D7229 /* Result.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD45480831A957362009D7229 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD45480991A9574B8009D7229 /* ResultTests.swift 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\t57FCDE581BA2814A00130C48 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 57FCDE3C1BA280DC00130C48 /* Result-tvOS */;\n\t\t\ttargetProxy = 57FCDE571BA2814A00130C48 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD03579B31B2B78BB005D26AE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D03579991B2B788F005D26AE /* Result-watchOS */;\n\t\t\ttargetProxy = D03579B21B2B78BB005D26AE /* PBXContainerItemProxy */;\n\t\t};\n\t\tD454806A1A9572F5009D7229 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D45480561A9572F5009D7229 /* Result-Mac */;\n\t\t\ttargetProxy = D45480691A9572F5009D7229 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD454808A1A957362009D7229 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D454807C1A957361009D7229 /* Result-iOS */;\n\t\t\ttargetProxy = D45480891A957362009D7229 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t57FCDE451BA280DC00130C48 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvsimulator*]\" = \"\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\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 = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t57FCDE461BA280DC00130C48 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvsimulator*]\" = \"\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t57FCDE521BA280E000130C48 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\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 = Tests/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\tSDKROOT = appletvos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t57FCDE531BA280E000130C48 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = Tests/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\tSDKROOT = appletvos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD03579A11B2B788F005D26AE /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchsimulator*]\" = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD03579A21B2B788F005D26AE /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchsimulator*]\" = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD03579AE1B2B78A1005D26AE /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\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 = Tests/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\tSDKROOT = watchos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD03579AF1B2B78A1005D26AE /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Tests/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\tSDKROOT = watchos;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD45480701A9572F5009D7229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\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\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.antitypical.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 2.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD45480711A9572F5009D7229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\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\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.antitypical.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 2.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD45480731A9572F5009D7229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tVALID_ARCHS = x86_64;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD45480741A9572F5009D7229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVALID_ARCHS = x86_64;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD45480761A9572F5009D7229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\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 = Tests/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};\n\t\t\tname = Debug;\n\t\t};\n\t\tD45480771A9572F5009D7229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Tests/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};\n\t\t\tname = Release;\n\t\t};\n\t\tD45480901A957362009D7229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphonesimulator*]\" = \"\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = YES;\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 = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD45480911A957362009D7229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphonesimulator*]\" = \"\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = YES;\n\t\t\t\tINFOPLIST_FILE = Result/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Result;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD45480921A957362009D7229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\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 = Tests/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\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD45480931A957362009D7229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = NO;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = Tests/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\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t57FCDE441BA280DC00130C48 /* Build configuration list for PBXNativeTarget \"Result-tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t57FCDE451BA280DC00130C48 /* Debug */,\n\t\t\t\t57FCDE461BA280DC00130C48 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t57FCDE511BA280E000130C48 /* Build configuration list for PBXNativeTarget \"Result-tvOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t57FCDE521BA280E000130C48 /* Debug */,\n\t\t\t\t57FCDE531BA280E000130C48 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD03579A01B2B788F005D26AE /* Build configuration list for PBXNativeTarget \"Result-watchOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD03579A11B2B788F005D26AE /* Debug */,\n\t\t\t\tD03579A21B2B788F005D26AE /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD03579AD1B2B78A1005D26AE /* Build configuration list for PBXNativeTarget \"Result-watchOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD03579AE1B2B78A1005D26AE /* Debug */,\n\t\t\t\tD03579AF1B2B78A1005D26AE /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD45480511A9572F5009D7229 /* Build configuration list for PBXProject \"Result\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD45480701A9572F5009D7229 /* Debug */,\n\t\t\t\tD45480711A9572F5009D7229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD45480721A9572F5009D7229 /* Build configuration list for PBXNativeTarget \"Result-Mac\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD45480731A9572F5009D7229 /* Debug */,\n\t\t\t\tD45480741A9572F5009D7229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD45480751A9572F5009D7229 /* Build configuration list for PBXNativeTarget \"Result-MacTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD45480761A9572F5009D7229 /* Debug */,\n\t\t\t\tD45480771A9572F5009D7229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD45480941A957362009D7229 /* Build configuration list for PBXNativeTarget \"Result-iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD45480901A957362009D7229 /* Debug */,\n\t\t\t\tD45480911A957362009D7229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD45480951A957362009D7229 /* Build configuration list for PBXNativeTarget \"Result-iOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD45480921A957362009D7229 /* Debug */,\n\t\t\t\tD45480931A957362009D7229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = D454804E1A9572F5009D7229 /* Project object */;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Result.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Result.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-Mac.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D45480561A9572F5009D7229\"\n               BuildableName = \"Result.framework\"\n               BlueprintName = \"Result-Mac\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D45480661A9572F5009D7229\"\n               BuildableName = \"Result-MacTests.xctest\"\n               BlueprintName = \"Result-MacTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D45480661A9572F5009D7229\"\n               BuildableName = \"Result-MacTests.xctest\"\n               BlueprintName = \"Result-MacTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D45480561A9572F5009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-Mac\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D45480561A9572F5009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-Mac\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D45480561A9572F5009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-Mac\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-iOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D454807C1A957361009D7229\"\n               BuildableName = \"Result.framework\"\n               BlueprintName = \"Result-iOS\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D45480861A957362009D7229\"\n               BuildableName = \"Result-iOSTests.xctest\"\n               BlueprintName = \"Result-iOSTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D45480861A957362009D7229\"\n               BuildableName = \"Result-iOSTests.xctest\"\n               BlueprintName = \"Result-iOSTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D454807C1A957361009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-iOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D454807C1A957361009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-iOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D454807C1A957361009D7229\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-iOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-tvOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"57FCDE3C1BA280DC00130C48\"\n               BuildableName = \"Result.framework\"\n               BlueprintName = \"Result-tvOS\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"57FCDE491BA280E000130C48\"\n               BuildableName = \"Result-tvOSTests.xctest\"\n               BlueprintName = \"Result-tvOSTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"57FCDE3C1BA280DC00130C48\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-tvOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"57FCDE3C1BA280DC00130C48\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-tvOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"57FCDE3C1BA280DC00130C48\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-tvOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Result.xcodeproj/xcshareddata/xcschemes/Result-watchOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D03579991B2B788F005D26AE\"\n               BuildableName = \"Result.framework\"\n               BlueprintName = \"Result-watchOS\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D03579A51B2B78A1005D26AE\"\n               BuildableName = \"Result-watchOSTests.xctest\"\n               BlueprintName = \"Result-watchOSTests\"\n               ReferencedContainer = \"container:Result.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D03579991B2B788F005D26AE\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-watchOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D03579991B2B788F005D26AE\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-watchOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D03579991B2B788F005D26AE\"\n            BuildableName = \"Result.framework\"\n            BlueprintName = \"Result-watchOS\"\n            ReferencedContainer = \"container:Result.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/Result/Tests/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/Result/Tests/ResultTests.swift",
    "content": "//  Copyright (c) 2015 Rob Rix. All rights reserved.\n\nfinal class ResultTests: XCTestCase {\n\tfunc testMapTransformsSuccesses() {\n\t\tXCTAssertEqual(success.map { $0.characters.count } ?? 0, 7)\n\t}\n\n\tfunc testMapRewrapsFailures() {\n\t\tXCTAssertEqual(failure.map { $0.characters.count } ?? 0, 0)\n\t}\n\n\tfunc testInitOptionalSuccess() {\n\t\tXCTAssert(Result(\"success\" as String?, failWith: error) == success)\n\t}\n\n\tfunc testInitOptionalFailure() {\n\t\tXCTAssert(Result(nil, failWith: error) == failure)\n\t}\n\n\n\t// MARK: Errors\n\n\tfunc testErrorsIncludeTheSourceFile() {\n\t\tlet file = __FILE__\n\t\tXCTAssert(Result<(), NSError>.error().file == file)\n\t}\n\n\tfunc testErrorsIncludeTheSourceLine() {\n\t\tlet (line, error) = (__LINE__, Result<(), NSError>.error())\n\t\tXCTAssertEqual(error.line ?? -1, line)\n\t}\n\n\tfunc testErrorsIncludeTheCallingFunction() {\n\t\tlet function = __FUNCTION__\n\t\tXCTAssert(Result<(), NSError>.error().function == function)\n\t}\n\n\t// MARK: Try - Catch\n\t\n\tfunc testTryCatchProducesSuccesses() {\n\t\tlet result: Result<String, NSError> = Result(try tryIsSuccess(\"success\"))\n\t\tXCTAssert(result == success)\n\t}\n\t\n\tfunc testTryCatchProducesFailures() {\n\t\tlet result: Result<String, NSError> = Result(try tryIsSuccess(nil))\n\t\tXCTAssert(result.error == error)\n\t}\n\n\tfunc testTryCatchWithFunctionProducesSuccesses() {\n\t\tlet function = { try tryIsSuccess(\"success\") }\n\n\t\tlet result: Result<String, NSError> = Result(attempt: function)\n\t\tXCTAssert(result == success)\n\t}\n\n\tfunc testTryCatchWithFunctionCatchProducesFailures() {\n\t\tlet function = { try tryIsSuccess(nil) }\n\n\t\tlet result: Result<String, NSError> = Result(attempt: function)\n\t\tXCTAssert(result.error == error)\n\t}\n\n\tfunc testMaterializeProducesSuccesses() {\n\t\tlet result1 = materialize(try tryIsSuccess(\"success\"))\n\t\tXCTAssert(result1 == success)\n\n\t\tlet result2 = materialize { try tryIsSuccess(\"success\") }\n\t\tXCTAssert(result2 == success)\n\t}\n\n\tfunc testMaterializeProducesFailures() {\n\t\tlet result1 = materialize(try tryIsSuccess(nil))\n\t\tXCTAssert(result1.error == error)\n\n\t\tlet result2 = materialize { try tryIsSuccess(nil) }\n\t\tXCTAssert(result2.error == error)\n\t}\n\n\t// MARK: Cocoa API idioms\n\n\tfunc testTryProducesFailuresForBooleanAPIWithErrorReturnedByReference() {\n\t\tlet result = `try` { attempt(true, succeed: false, error: $0) }\n\t\tXCTAssertFalse(result ?? false)\n\t\tXCTAssertNotNil(result.error)\n\t}\n\n\tfunc testTryProducesFailuresForOptionalWithErrorReturnedByReference() {\n\t\tlet result = `try` { attempt(1, succeed: false, error: $0) }\n\t\tXCTAssertEqual(result ?? 0, 0)\n\t\tXCTAssertNotNil(result.error)\n\t}\n\n\tfunc testTryProducesSuccessesForBooleanAPI() {\n\t\tlet result = `try` { attempt(true, succeed: true, error: $0) }\n\t\tXCTAssertTrue(result ?? false)\n\t\tXCTAssertNil(result.error)\n\t}\n\n\tfunc testTryProducesSuccessesForOptionalAPI() {\n\t\tlet result = `try` { attempt(1, succeed: true, error: $0) }\n\t\tXCTAssertEqual(result ?? 0, 1)\n\t\tXCTAssertNil(result.error)\n\t}\n\n\tfunc testTryMapProducesSuccess() {\n\t\tlet result = success.tryMap(tryIsSuccess)\n\t\tXCTAssert(result == success)\n\t}\n\n\tfunc testTryMapProducesFailure() {\n\t\tlet result = Result<String, NSError>.Success(\"fail\").tryMap(tryIsSuccess)\n\t\tXCTAssert(result == failure)\n\t}\n\n\t// MARK: Operators\n\n\tfunc testConjunctionOperator() {\n\t\tlet resultSuccess = success &&& success\n\t\tif let (x, y) = resultSuccess.value {\n\t\t\tXCTAssertTrue(x == \"success\" && y == \"success\")\n\t\t} else {\n\t\t\tXCTFail()\n\t\t}\n\n\t\tlet resultFailureBoth = failure &&& failure2\n\t\tXCTAssert(resultFailureBoth.error == error)\n\n\t\tlet resultFailureLeft = failure &&& success\n\t\tXCTAssert(resultFailureLeft.error == error)\n\n\t\tlet resultFailureRight = success &&& failure2\n\t\tXCTAssert(resultFailureRight.error == error2)\n\t}\n}\n\n\n// MARK: - Fixtures\n\nlet success = Result<String, NSError>.Success(\"success\")\nlet error = NSError(domain: \"com.antitypical.Result\", code: 1, userInfo: nil)\nlet error2 = NSError(domain: \"com.antitypical.Result\", code: 2, userInfo: nil)\nlet failure = Result<String, NSError>.Failure(error)\nlet failure2 = Result<String, NSError>.Failure(error2)\n\n\n// MARK: - Helpers\n\nfunc attempt<T>(value: T, succeed: Bool, error: NSErrorPointer) -> T? {\n\tif succeed {\n\t\treturn value\n\t} else {\n\t\terror.memory = Result<(), NSError>.error()\n\t\treturn nil\n\t}\n}\n\nfunc tryIsSuccess(text: String?) throws -> String {\n\tguard let text = text where text == \"success\" else {\n\t\tthrow error\n\t}\n\t\n\treturn text\n}\n\nextension NSError {\n\tvar function: String? {\n\t\treturn userInfo[Result<(), NSError>.functionKey as NSString] as? String\n\t}\n\t\n\tvar file: String? {\n\t\treturn userInfo[Result<(), NSError>.fileKey as NSString] as? String\n\t}\n\n\tvar line: Int? {\n\t\treturn userInfo[Result<(), NSError>.lineKey as NSString] as? Int\n\t}\n}\n\n\nimport Result\nimport XCTest\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/.gitignore",
    "content": "# 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\nnode_modules/\nSocketIO.xcodeproj/project.xcworkspace/xcuserdata/\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 MegaBits\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."
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/README.md",
    "content": "\n# SIOSocket\n\nSIOSocket is simple interface for communicating with [Socket.IO 1.0](http://socket.io) from iOS.\n\n__There is now a [first-party iOS client](http://socket.io/blog/socket-io-on-ios/) for Socket.IO!__ (Therefore, this library is no longer being actively developed.) Congrats to the Socket.IO team for a job well done.\n\n[![No Maintenance Intended](http://unmaintained.tech/badge.svg)](http://unmaintained.tech/)\n\n\n## How to use\n\nSIOSocket can be added as a CocodaPod, submodule, or standalone dependency to any iOS 7.0 (or greater) project.\n\n```ruby\npod 'SIOSocket', '~> 0.2.0'\n```\n\nthen...\n\n```objc\n#import <SIOSocket/SIOSocket.h>\n\n// ...\n[SIOSocket socketWithHost: @\"http://localhost:3000\" response: ^(SIOSocket *socket) {\n    self.socket = socket;\n}];\n```\n\nor, in Swift...\n\n```swift\n// ...\nSIOSocket.socketWithHost(\"http://localhost:3000\") { (socket: SIOSocket) in\n    self.socket = socket\n}\n```\n\nA full demo can be found over at [MegaBits/WorldPin](https://github.com/MegaBits/WorldPin)\n\n## Types\n\n#### `typedef NSArray SIOParameterArray`\n\nAn NSArray of these JSValue-valid objects:\n\n- NSNull       \n- NSString      \n- NSNumber      \n- NSDictionary    \n- NSArray       \n- NSData\n\n## Generators\n\n#### `+ (void)socketWithHost:response:`\n\nGenerates a new `SIOSocket` object, begins its connection to the given host, and returns it as the sole parameter of the response block.\n\nThe host reachable at the given URL string should be running a valid instance of a socket.io server.\n\n#### `+ (void)socketWithHost:reconnectAutomatically:attemptLimit:withDelay:maximumDelay:timeout:withTransports:response:`\n\n- `reconnectAutomatically` whether to reconnect automatically (`YES`)\n- `attemptLimit` number of times to attempt a reconnect (Infinite)\n- `reconnectionDelay` how long to wait before attempting a new\nreconnection (`1`)\n- `maximumDelay` maximum amount of time to wait between\nreconnections (`5`). Each attempt increases the reconnection by\nthe amount specified by `reconnectionDelay`.\n- `timeout` connection timeout before an `onReconnectionError` event is emitted (`20`)\n- `withTransports` specifies an array of transports for engine.io (default is 'polling', 'websocket').\n\n## Properties\n\n#### `void (^onConnect)()`\n\nCalled upon connecting.\n\n#### `void (^onDisconnect)()`\n\nCalled upon a disconnection.\n\n#### `void (^onError)(NSDictionary *errorInfo)`\n\nCalled upon a connection error.\n\n#### `void (^onReconnect)(NSInteger numberOfAttempts)`\n\nCalled upon a successful reconnection.\n\n#### `void (^onReconnectionAttempt)(NSInteger numberOfAttempts)`\n\nCalled upon an attempt to reconnect.\n\n#### `void (^onReconnectionError)(NSDictionary *errorInfo)`\n\nCalled upon a reconnection attempt error.\n\n## Responders\n\n#### `-(void)on:callback:`\n\nBinds the given `void (^)(SIOParameterArray *)` block, `function`, to the given `event`.\n\n`function` is called upon a firing of `event`.\n\n## Emitters\n\n#### `-(void)emit:args:`\n\nFires the given `event` with then given SIOParameterArray as arguments.\n\n## License\n\nMIT\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SIOSocket.podspec",
    "content": "Pod::Spec.new do |s|\n    s.name          = \"SIOSocket\"\n    s.version       = \"0.2.2\"\n    s.summary       = \"Realtime iOS application framework (client) http://socket.io\"\n    s.license       =  \"MIT\"\n    s.source        = { :tag => \"v0.2.2\", :git => \"https://github.com/MegaBits/SIOSocket.git\"}\n    s.platform      = :ios, \"7.0\"\n    s.source_files  = \"SocketIO/Source/*.{h,m}\"\n    s.requires_arc  = true\n    s.homepage      = \"https://github.com/MegaBits/SIOSocket\"\n    s.authors       = { \"Patrick Perini\" => \"pperini@megabitsapp.com\" }\nend"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIO/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>com.megabits.${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": "Carthage/Checkouts/SIOSocket/SocketIO/SocketIO.m",
    "content": "//\n//  SocketIO.m\n//  SocketIO\n//\n//  Created by Patrick Perini on 6/13/14.\n//\n//\n\n#import <XCTest/XCTest.h>\n#import \"SIOSocket.h\"\n\n@interface SocketIO : XCTestCase\n\n@end\n\n@implementation SocketIO\n\n- (void)testConnectToLocalhost {\n    XCTestExpectation *connectionExpectation = [self expectationWithDescription: @\"should connect to localhost\"];\n    [SIOSocket socketWithHost: @\"http://localhost:3000\" response: ^(SIOSocket *socket) {\n        XCTAssertNotNil(socket, @\"socket could not connect to localhost\");\n        [connectionExpectation fulfill];\n    }];\n\n    [self waitForExpectationsWithTimeout: 10 handler: nil];\n}\n\n- (void)testFalse {\n    XCTestExpectation *falseExpectation = [self expectationWithDescription: @\"should work with false\"];\n    [SIOSocket socketWithHost: @\"http://localhost:3000\" response: ^(SIOSocket *socket) {\n        XCTAssertNotNil(socket, @\"socket could not connect to localhost\");\n        [socket on: @\"false\" callback: ^(SIOParameterArray *args)\n        {\n            XCTAssertFalse([[args firstObject] boolValue], @\"response not false\");\n            [falseExpectation fulfill];\n        }];\n\n        [socket emit: @\"false\"];\n    }];\n\n    [self waitForExpectationsWithTimeout: 10 handler: nil];\n}\n\n- (void)testUTF8MultibyteCharacters\n{\n    XCTestExpectation *utf8MultibyteCharactersExpectation = [self expectationWithDescription: @\"should work with utf8 multibyte characters\"];\n    NSArray *correctStrings = @[\n        @\"てすと\",\n        @\"Я Б Г Д Ж Й\",\n        @\"Ä ä Ü ü ß\",\n        @\"utf8 — string\",\n        @\"utf8 — string\"\n    ];\n\n    [SIOSocket socketWithHost: @\"http://localhost:3000\" response: ^(SIOSocket *socket) {\n        XCTAssertNotNil(socket, @\"socket could not connect to localhost\");\n\n        __block NSInteger numberOfCorrectStrings = 0;\n        [socket on: @\"takeUtf8\" callback: ^(SIOParameterArray *args) {\n            NSString *string = [args firstObject];\n            XCTAssertEqualObjects(string, correctStrings[numberOfCorrectStrings], @\"%@ is not equal to %@\", string, correctStrings);\n            numberOfCorrectStrings++;\n\n            if (numberOfCorrectStrings == [correctStrings count]) {\n                [utf8MultibyteCharactersExpectation fulfill];\n            }\n        }];\n\n        [socket emit: @\"getUtf8\"];\n    }];\n\n    [self waitForExpectationsWithTimeout: 10 handler: nil];\n}\n\n- (void)testEmitDateAsString {\n    XCTestExpectation *stringExpectation = [self expectationWithDescription: @\"should emit date as a string\"];\n    [SIOSocket socketWithHost: @\"http://localhost:3000\" response: ^(SIOSocket *socket) {\n        XCTAssertNotNil(socket, @\"socket could not connect to localhost\");\n        [socket on: @\"takeDate\" callback: ^(SIOParameterArray *args) {\n            NSString *string = [args firstObject];\n            XCTAssert([string isKindOfClass: [NSString class]], @\"%@ is not a string\", string);\n            [stringExpectation fulfill];\n        }];\n\n        [socket emit: @\"getDate\"];\n    }];\n\n    [self waitForExpectationsWithTimeout: 10 handler: nil];\n}\n\n- (void)testEmitDateAsObject {\n    XCTestExpectation *stringExpectation = [self expectationWithDescription: @\"should emit date as a string\"];\n    [SIOSocket socketWithHost: @\"http://localhost:3000\" response: ^(SIOSocket *socket) {\n        XCTAssertNotNil(socket, @\"socket could not connect to localhost\");\n        [socket on: @\"takeDateObj\" callback: ^(SIOParameterArray *args) {\n            NSDictionary *dictionary = [args firstObject];\n            XCTAssert([dictionary isKindOfClass: [NSDictionary class]], @\"%@ is not a dictionary\", dictionary);\n            XCTAssert([[dictionary objectForKey: @\"date\"] isKindOfClass: [NSString class]], @\"%@['date'] is not a string\", dictionary);\n\n            [stringExpectation fulfill];\n        }];\n\n        [socket emit: @\"getDateObj\"];\n    }];\n\n    [self waitForExpectationsWithTimeout: 10 handler: nil];\n}\n\n- (void)testEmitMultiWord {\n    XCTestExpectation *stringExpectation = [self expectationWithDescription: @\"should emit multi word\"];\n    [SIOSocket socketWithHost: @\"http://localhost:3000\" response: ^(SIOSocket *socket) {\n         XCTAssertNotNil(socket, @\"socket could not connect to localhost\");\n         [socket on: @\"multi word\" callback: ^(SIOParameterArray *args) {\n             NSString *response = [args firstObject];\n             XCTAssert([response isEqualToString: @\"word\"], @\"%@ != 'word'\", response);\n             \n             [stringExpectation fulfill];\n         }];\n         \n         [socket emit: @\"multi word\"];\n     }];\n    \n    [self waitForExpectationsWithTimeout: 10 handler: nil];\n}\n\n- (void)testEmitMultiWordWithCharacters {\n    XCTestExpectation *stringExpectation = [self expectationWithDescription: @\"should emit multi word\"];\n    [SIOSocket socketWithHost: @\"http://localhost:3000\" response: ^(SIOSocket *socket) {\n        XCTAssertNotNil(socket, @\"socket could not connect to localhost\");\n        [socket on: @\"multi-word\" callback: ^(SIOParameterArray *args) {\n            NSString *response = [args firstObject];\n            XCTAssert([response isEqualToString: @\"word\"], @\"%@ != 'word'\", response);\n            \n            [stringExpectation fulfill];\n        }];\n        \n        [socket emit: @\"multi-word\"];\n    }];\n    \n    [self waitForExpectationsWithTimeout: 10 handler: nil];\n}\n\n- (void)testBinaryData {\n    XCTestExpectation *blobExpectation = [self expectationWithDescription: @\"should send binary data as Blob\"];\n    [SIOSocket socketWithHost: @\"http://localhost:3000\" response: ^(SIOSocket *socket) {\n        XCTAssertNotNil(socket, @\"socket could not conenct to localhost\");\n        [socket on: @\"back\" callback: ^(SIOParameterArray *args) {\n            [blobExpectation fulfill];\n        }];\n        \n        [socket emit: @\"blob\" args: @[[@\"hello world\" dataUsingEncoding: NSUTF8StringEncoding]]];\n    }];\n    \n    [self waitForExpectationsWithTimeout: 10 handler: nil];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIO/Source/SIOSocket.h",
    "content": "//\n//  Socket.h\n//  SocketIO\n//\n//  Created by Patrick Perini on 6/13/14.\n//\n//\n\n#import <Foundation/Foundation.h>\n\n// NSArray of these JSValue-valid objects:\ntypedef NSArray SIOParameterArray;\n// --------------------\n//        NSNull       \n//       NSString      \n//       NSNumber      \n//     NSDictionary    \n//       NSArray       \n//        NSData\n// --------------------\n\n@interface SIOSocket : NSObject\n\n// Generators\n+ (void)socketWithHost:(NSString *)hostURL response:(void(^)(SIOSocket *socket))response;\n+ (void)socketWithHost:(NSString *)hostURL reconnectAutomatically:(BOOL)reconnectAutomatically attemptLimit:(NSInteger)attempts withDelay:(NSTimeInterval)reconnectionDelay maximumDelay:(NSTimeInterval)maximumDelay timeout:(NSTimeInterval)timeout response:(void(^)(SIOSocket *socket))response;\n+ (void)socketWithHost:(NSString *)hostURL reconnectAutomatically:(BOOL)reconnectAutomatically attemptLimit:(NSInteger)attempts withDelay:(NSTimeInterval)reconnectionDelay maximumDelay:(NSTimeInterval)maximumDelay timeout:(NSTimeInterval)timeout withTransports:(NSArray *)transports response:(void(^)(SIOSocket *socket))response;\n\n// Event responders\n@property (nonatomic, copy) void (^onConnect)();\n@property (nonatomic, copy) void (^onConnectError)(NSDictionary *errorInfo);\n@property (nonatomic, copy) void (^onDisconnect)();\n@property (nonatomic, copy) void (^onError)(NSDictionary *errorInfo);\n\n@property (nonatomic, copy) void (^onReconnect)(NSInteger numberOfAttempts);\n@property (nonatomic, copy) void (^onReconnectionAttempt)(NSInteger numberOfAttempts);\n@property (nonatomic, copy) void (^onReconnectionError)(NSDictionary *errorInfo);\n\n- (void)on:(NSString *)event callback:(void (^)(SIOParameterArray *args))function;\n\n// Emitters\n- (void)emit:(NSString *)event;\n- (void)emit:(NSString *)event args:(SIOParameterArray *)args;\n\n- (void)close;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIO/Source/SIOSocket.m",
    "content": "//\n//  Socket.m\n//  SocketIO\n//\n//  Created by Patrick Perini on 6/13/14.\n//\n//\n\n#import \"SIOSocket.h\"\n#import <JavaScriptCore/JavaScriptCore.h>\n#import \"socket.io.js.h\"\n#import <CommonCrypto/CommonCrypto.h>\n\n#ifdef __IPHONE_8_0\n#import <WebKit/WebKit.h>\n#endif\n\nstatic NSString *SIOMD5(NSString *string) {\n    const char *cstr = [string UTF8String];\n    unsigned char result[16];\n    CC_MD5(cstr, (unsigned int)strlen(cstr), result);\n    \n    return [NSString stringWithFormat: @\"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\",\n        result[0], result[1], result[2], result[3],\n        result[4], result[5], result[6], result[7],\n        result[8], result[9], result[10], result[11],\n        result[12], result[13], result[14], result[15]\n    ];\n};\n\n@interface SIOSocket ()\n\n@property (nonatomic, strong) NSThread *thread;\n@property UIWebView *javascriptWebView;\n@property (readonly) JSContext *javascriptContext;\n\n@end\n\n@implementation SIOSocket\n\n// Generators\n+ (void)socketWithHost:(NSString *)hostURL response:(void (^)(SIOSocket *))response {\n    // Defaults documented with socket.io-client: https://github.com/Automattic/socket.io-client\n    return [self socketWithHost: hostURL\n         reconnectAutomatically: YES\n                   attemptLimit: -1\n                      withDelay: 1\n                   maximumDelay: 5\n                        timeout: 20\n                       response: response];\n}\n\n+ (void)socketWithHost:(NSString *)hostURL reconnectAutomatically:(BOOL)reconnectAutomatically attemptLimit:(NSInteger)attempts withDelay:(NSTimeInterval)reconnectionDelay maximumDelay:(NSTimeInterval)maximumDelay timeout:(NSTimeInterval)timeout response:(void (^)(SIOSocket *))response {\n    return [self socketWithHost: hostURL\n         reconnectAutomatically: YES\n                   attemptLimit: -1\n                      withDelay: 1\n                   maximumDelay: 5\n                        timeout: 20\n                 withTransports: @[ @\"polling\", @\"websocket\" ]\n                       response: response];\n}\n\n+ (void)socketWithHost:(NSString *)hostURL reconnectAutomatically:(BOOL)reconnectAutomatically attemptLimit:(NSInteger)attempts withDelay:(NSTimeInterval)reconnectionDelay maximumDelay:(NSTimeInterval)maximumDelay timeout:(NSTimeInterval)timeout withTransports:(NSArray*)transports response:(void (^)(SIOSocket *))response {\n    SIOSocket *socket = [[SIOSocket alloc] init];\n    if (!socket) {\n        dispatch_async(dispatch_get_main_queue(), ^{\n            response(nil);\n        });\n        return;\n    }\n\n    socket.javascriptWebView = [[UIWebView alloc] init];\n    [socket.javascriptContext setExceptionHandler: ^(JSContext *context, JSValue *errorValue) {\n        NSLog(@\"JSError: %@\", errorValue);\n        NSLog(@\"%@\", [NSThread callStackSymbols]);\n    }];\n\n    socket.javascriptContext[@\"window\"][@\"onload\"] = ^() {\n        socket.thread = [NSThread currentThread];\n        [socket.javascriptContext evaluateScript: socket_io_js];\n        [socket.javascriptContext evaluateScript: blob_factory_js];\n        \n        NSString *socketConstructor = socket_io_js_constructor(hostURL,\n            reconnectAutomatically,\n            attempts,\n            reconnectionDelay,\n            maximumDelay,\n            timeout,\n            transports\n        );\n\n        socket.javascriptContext[@\"objc_socket\"] = [socket.javascriptContext evaluateScript: socketConstructor];\n        if (![socket.javascriptContext[@\"objc_socket\"] toObject]) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                response(nil);\n            });\n        }\n\n        // Responders\n        __weak typeof(socket) weakSocket = socket;\n        socket.javascriptContext[@\"objc_onConnect\"] = ^() {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                if (weakSocket.onConnect)\n                    weakSocket.onConnect();\n            });\n        };\n        \n        socket.javascriptContext[@\"objc_onConnectError\"] = ^(NSDictionary *errorDictionary) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                if (weakSocket.onConnectError)\n                    weakSocket.onConnectError(errorDictionary);\n            });\n        };\n\n        socket.javascriptContext[@\"objc_onDisconnect\"] = ^() {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                if (weakSocket.onDisconnect)\n                    weakSocket.onDisconnect();\n            });\n        };\n\n        socket.javascriptContext[@\"objc_onError\"] = ^(NSDictionary *errorDictionary) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                if (weakSocket.onError)\n                    weakSocket.onError(errorDictionary);\n            });\n        };\n\n        socket.javascriptContext[@\"objc_onReconnect\"] = ^(NSInteger numberOfAttempts) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                if (weakSocket.onReconnect)\n                    weakSocket.onReconnect(numberOfAttempts);\n            });\n        };\n\n        socket.javascriptContext[@\"objc_onReconnectionAttempt\"] = ^(NSInteger numberOfAttempts) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                if (weakSocket.onReconnectionAttempt)\n                    weakSocket.onReconnectionAttempt(numberOfAttempts);\n            });\n        };\n\n        socket.javascriptContext[@\"objc_onReconnectionError\"] = ^(NSDictionary *errorDictionary) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                if (weakSocket.onReconnectionError)\n                    weakSocket.onReconnectionError(errorDictionary);\n            });\n        };\n\n        [socket.javascriptContext evaluateScript: @\"objc_socket.on('connect', objc_onConnect);\"];\n        [socket.javascriptContext evaluateScript: @\"objc_socket.on('error', objc_onError);\"];\n        [socket.javascriptContext evaluateScript: @\"objc_socket.on('disconnect', objc_onDisconnect);\"];\n        [socket.javascriptContext evaluateScript: @\"objc_socket.on('reconnect', objc_onReconnect);\"];\n        [socket.javascriptContext evaluateScript: @\"objc_socket.on('reconnecting', objc_onReconnectionAttempt);\"];\n        [socket.javascriptContext evaluateScript: @\"objc_socket.on('reconnect_error', objc_onReconnectionError);\"];\n\n        dispatch_async(dispatch_get_main_queue(), ^{\n            response(socket);\n        });\n    };\n        \n    [socket.javascriptWebView loadHTMLString: @\"<html/>\" baseURL: nil];\n}\n\n- (void)dealloc {\n    [self close];\n}\n\n// Accessors\n- (JSContext *)javascriptContext {\n    return [self.javascriptWebView valueForKeyPath: @\"documentView.webView.mainFrame.javaScriptContext\"];\n}\n\n// Event listeners\n- (void)on:(NSString *)event callback:(void (^)(SIOParameterArray *args))function {\n    NSString *eventID = SIOMD5(event);\n    self.javascriptContext[[NSString stringWithFormat: @\"objc_%@\", eventID]] = ^() {\n        NSMutableArray *arguments = [NSMutableArray array];\n        for (JSValue *object in [JSContext currentArguments]) {\n            if ([object toObject]) {\n                [arguments addObject: [object toObject]];\n            }\n        }\n        \n        dispatch_async(dispatch_get_main_queue(), ^{\n            function(arguments);\n        });\n    };\n    \n    NSString* script = [NSString stringWithFormat: @\"objc_socket.on('%@', objc_%@);\", event, eventID];\n    [self performSelector:@selector(evaluateScript:) onThread:_thread withObject:[script copy] waitUntilDone:NO];\n}\n\n// Emitters\n- (void)emit:(NSString *)event {\n    [self emit: event args: nil];\n}\n\n- (void)emit:(NSString *)event args:(SIOParameterArray *)args {\n    NSMutableArray *arguments = [NSMutableArray arrayWithObject: [NSString stringWithFormat: @\"'%@'\", event]];\n    for (id arg in args) {\n        if ([arg isKindOfClass: [NSNull class]]) {\n            [arguments addObject: @\"null\"];\n        }\n        else if ([arg isKindOfClass: [NSString class]]) {\n            [arguments addObject: [NSString stringWithFormat: @\"'%@'\", arg]];\n        }\n        else if ([arg isKindOfClass: [NSNumber class]]) {\n            [arguments addObject: [NSString stringWithFormat: @\"%@\", arg]];\n        }\n        else if ([arg isKindOfClass: [NSData class]]) {\n            NSString *dataString = [[NSString alloc] initWithData: arg encoding: NSUTF8StringEncoding];\n            [arguments addObject: [NSString stringWithFormat: @\"blob('%@')\", dataString]];\n        }\n        else if ([arg isKindOfClass: [NSArray class]] || [arg isKindOfClass: [NSDictionary class]]) {\n            if ([NSJSONSerialization isValidJSONObject:arg]) {\n                [arguments addObject: [[NSString alloc] initWithData: [NSJSONSerialization dataWithJSONObject: arg options: 0 error: nil] encoding: NSUTF8StringEncoding]];\n            } else {\n                NSLog(@\"SIOSocket serialization error at %@\", NSStringFromSelector(_cmd));\n            }\n        }\n    }\n\n    NSString* script = [NSString stringWithFormat: @\"objc_socket.emit(%@);\", [arguments componentsJoinedByString: @\", \"]];\n    [self performSelector:@selector(evaluateScript:) onThread:_thread withObject:[script copy] waitUntilDone:NO];\n}\n\n- (void)evaluateScript:(NSString *)script {\n    [self.javascriptContext evaluateScript:script];\n}\n\n- (void)close {\n    [self.javascriptWebView loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: @\"about:blank\"]]];\n    [self.javascriptWebView reload];\n    self.javascriptWebView = nil;\n}\n\n@end"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIO/Source/socket.io.js.h",
    "content": "//\n//  socket.io.js.h\n//  SocketIO\n//\n//  Created by Patrick Perini on 6/13/14.\n//\n//\n\n#import <Foundation/Foundation.h>\n#define MSEC_PER_SEC 1000\n\n/*!\n *  Complete socket.io-1.2.1.js, minified.\n */\nstatic NSString *const socket_io_js = @\"!function(e){if(\\\"object\\\"==typeof exports&&\\\"undefined\\\"!=typeof module)module.exports=e();else if(\\\"function\\\"==typeof define&&define.amd)define([],e);else{var f;\\\"undefined\\\"!=typeof window?f=window:\\\"undefined\\\"!=typeof global?f=global:\\\"undefined\\\"!=typeof self&&(f=self),f.io=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\\\"function\\\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\\\"Cannot find module '\\\"+o+\\\"'\\\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\\\"function\\\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){module.exports=_dereq_(\\\"./lib/\\\")},{\\\"./lib/\\\":2}],2:[function(_dereq_,module,exports){var url=_dereq_(\\\"./url\\\");var parser=_dereq_(\\\"socket.io-parser\\\");var Manager=_dereq_(\\\"./manager\\\");var debug=_dereq_(\\\"debug\\\")(\\\"socket.io-client\\\");module.exports=exports=lookup;var cache=exports.managers={};function lookup(uri,opts){if(typeof uri==\\\"object\\\"){opts=uri;uri=undefined}opts=opts||{};var parsed=url(uri);var source=parsed.source;var id=parsed.id;var io;if(opts.forceNew||opts[\\\"force new connection\\\"]||false===opts.multiplex){debug(\\\"ignoring socket cache for %s\\\",source);io=Manager(source,opts)}else{if(!cache[id]){debug(\\\"new io instance for %s\\\",source);cache[id]=Manager(source,opts)}io=cache[id]}return io.socket(parsed.path)}exports.protocol=parser.protocol;exports.connect=lookup;exports.Manager=_dereq_(\\\"./manager\\\");exports.Socket=_dereq_(\\\"./socket\\\")},{\\\"./manager\\\":3,\\\"./socket\\\":5,\\\"./url\\\":6,debug:9,\\\"socket.io-parser\\\":43}],3:[function(_dereq_,module,exports){var url=_dereq_(\\\"./url\\\");var eio=_dereq_(\\\"engine.io-client\\\");var Socket=_dereq_(\\\"./socket\\\");var Emitter=_dereq_(\\\"component-emitter\\\");var parser=_dereq_(\\\"socket.io-parser\\\");var on=_dereq_(\\\"./on\\\");var bind=_dereq_(\\\"component-bind\\\");var object=_dereq_(\\\"object-component\\\");var debug=_dereq_(\\\"debug\\\")(\\\"socket.io-client:manager\\\");var indexOf=_dereq_(\\\"indexof\\\");module.exports=Manager;function Manager(uri,opts){if(!(this instanceof Manager))return new Manager(uri,opts);if(uri&&\\\"object\\\"==typeof uri){opts=uri;uri=undefined}opts=opts||{};opts.path=opts.path||\\\"/socket.io\\\";this.nsps={};this.subs=[];this.opts=opts;this.reconnection(opts.reconnection!==false);this.reconnectionAttempts(opts.reconnectionAttempts||Infinity);this.reconnectionDelay(opts.reconnectionDelay||1e3);this.reconnectionDelayMax(opts.reconnectionDelayMax||5e3);this.timeout(null==opts.timeout?2e4:opts.timeout);this.readyState=\\\"closed\\\";this.uri=uri;this.connected=[];this.attempts=0;this.encoding=false;this.packetBuffer=[];this.encoder=new parser.Encoder;this.decoder=new parser.Decoder;this.autoConnect=opts.autoConnect!==false;if(this.autoConnect)this.open()}Manager.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var nsp in this.nsps){this.nsps[nsp].emit.apply(this.nsps[nsp],arguments)}};Emitter(Manager.prototype);Manager.prototype.reconnection=function(v){if(!arguments.length)return this._reconnection;this._reconnection=!!v;return this};Manager.prototype.reconnectionAttempts=function(v){if(!arguments.length)return this._reconnectionAttempts;this._reconnectionAttempts=v;return this};Manager.prototype.reconnectionDelay=function(v){if(!arguments.length)return this._reconnectionDelay;this._reconnectionDelay=v;return this};Manager.prototype.reconnectionDelayMax=function(v){if(!arguments.length)return this._reconnectionDelayMax;this._reconnectionDelayMax=v;return this};Manager.prototype.timeout=function(v){if(!arguments.length)return this._timeout;this._timeout=v;return this};Manager.prototype.maybeReconnectOnOpen=function(){if(!this.openReconnect&&!this.reconnecting&&this._reconnection&&this.attempts===0){this.openReconnect=true;this.reconnect()}};Manager.prototype.open=Manager.prototype.connect=function(fn){debug(\\\"readyState %s\\\",this.readyState);if(~this.readyState.indexOf(\\\"open\\\"))return this;debug(\\\"opening %s\\\",this.uri);this.engine=eio(this.uri,this.opts);var socket=this.engine;var self=this;this.readyState=\\\"opening\\\";this.skipReconnect=false;var openSub=on(socket,\\\"open\\\",function(){self.onopen();fn&&fn()});var errorSub=on(socket,\\\"error\\\",function(data){debug(\\\"connect_error\\\");self.cleanup();self.readyState=\\\"closed\\\";self.emitAll(\\\"connect_error\\\",data);if(fn){var err=new Error(\\\"Connection error\\\");err.data=data;fn(err)}self.maybeReconnectOnOpen()});if(false!==this._timeout){var timeout=this._timeout;debug(\\\"connect attempt will timeout after %d\\\",timeout);var timer=setTimeout(function(){debug(\\\"connect attempt timed out after %d\\\",timeout);openSub.destroy();socket.close();socket.emit(\\\"error\\\",\\\"timeout\\\");self.emitAll(\\\"connect_timeout\\\",timeout)},timeout);this.subs.push({destroy:function(){clearTimeout(timer)}})}this.subs.push(openSub);this.subs.push(errorSub);return this};Manager.prototype.onopen=function(){debug(\\\"open\\\");this.cleanup();this.readyState=\\\"open\\\";this.emit(\\\"open\\\");var socket=this.engine;this.subs.push(on(socket,\\\"data\\\",bind(this,\\\"ondata\\\")));this.subs.push(on(this.decoder,\\\"decoded\\\",bind(this,\\\"ondecoded\\\")));this.subs.push(on(socket,\\\"error\\\",bind(this,\\\"onerror\\\")));this.subs.push(on(socket,\\\"close\\\",bind(this,\\\"onclose\\\")))};Manager.prototype.ondata=function(data){this.decoder.add(data)};Manager.prototype.ondecoded=function(packet){this.emit(\\\"packet\\\",packet)};Manager.prototype.onerror=function(err){debug(\\\"error\\\",err);this.emitAll(\\\"error\\\",err)};Manager.prototype.socket=function(nsp){var socket=this.nsps[nsp];if(!socket){socket=new Socket(this,nsp);this.nsps[nsp]=socket;var self=this;socket.on(\\\"connect\\\",function(){if(!~indexOf(self.connected,socket)){self.connected.push(socket)}})}return socket};Manager.prototype.destroy=function(socket){var index=indexOf(this.connected,socket);if(~index)this.connected.splice(index,1);if(this.connected.length)return;this.close()};Manager.prototype.packet=function(packet){debug(\\\"writing packet %j\\\",packet);var self=this;if(!self.encoding){self.encoding=true;this.encoder.encode(packet,function(encodedPackets){for(var i=0;i<encodedPackets.length;i++){self.engine.write(encodedPackets[i])}self.encoding=false;self.processPacketQueue()})}else{self.packetBuffer.push(packet)}};Manager.prototype.processPacketQueue=function(){if(this.packetBuffer.length>0&&!this.encoding){var pack=this.packetBuffer.shift();this.packet(pack)}};Manager.prototype.cleanup=function(){var sub;while(sub=this.subs.shift())sub.destroy();this.packetBuffer=[];this.encoding=false;this.decoder.destroy()};Manager.prototype.close=Manager.prototype.disconnect=function(){this.skipReconnect=true;this.readyState=\\\"closed\\\";this.engine&&this.engine.close()};Manager.prototype.onclose=function(reason){debug(\\\"close\\\");this.cleanup();this.readyState=\\\"closed\\\";this.emit(\\\"close\\\",reason);if(this._reconnection&&!this.skipReconnect){this.reconnect()}};Manager.prototype.reconnect=function(){if(this.reconnecting||this.skipReconnect)return this;var self=this;this.attempts++;if(this.attempts>this._reconnectionAttempts){debug(\\\"reconnect failed\\\");this.emitAll(\\\"reconnect_failed\\\");this.reconnecting=false}else{var delay=this.attempts*this.reconnectionDelay();delay=Math.min(delay,this.reconnectionDelayMax());debug(\\\"will wait %dms before reconnect attempt\\\",delay);this.reconnecting=true;var timer=setTimeout(function(){if(self.skipReconnect)return;debug(\\\"attempting reconnect\\\");self.emitAll(\\\"reconnect_attempt\\\",self.attempts);self.emitAll(\\\"reconnecting\\\",self.attempts);if(self.skipReconnect)return;self.open(function(err){if(err){debug(\\\"reconnect attempt error\\\");self.reconnecting=false;self.reconnect();self.emitAll(\\\"reconnect_error\\\",err.data)}else{debug(\\\"reconnect success\\\");self.onreconnect()}})},delay);this.subs.push({destroy:function(){clearTimeout(timer)}})}};Manager.prototype.onreconnect=function(){var attempt=this.attempts;this.attempts=0;this.reconnecting=false;this.emitAll(\\\"reconnect\\\",attempt)}},{\\\"./on\\\":4,\\\"./socket\\\":5,\\\"./url\\\":6,\\\"component-bind\\\":7,\\\"component-emitter\\\":8,debug:9,\\\"engine.io-client\\\":10,indexof:39,\\\"object-component\\\":40,\\\"socket.io-parser\\\":43}],4:[function(_dereq_,module,exports){module.exports=on;function on(obj,ev,fn){obj.on(ev,fn);return{destroy:function(){obj.removeListener(ev,fn)}}}},{}],5:[function(_dereq_,module,exports){var parser=_dereq_(\\\"socket.io-parser\\\");var Emitter=_dereq_(\\\"component-emitter\\\");var toArray=_dereq_(\\\"to-array\\\");var on=_dereq_(\\\"./on\\\");var bind=_dereq_(\\\"component-bind\\\");var debug=_dereq_(\\\"debug\\\")(\\\"socket.io-client:socket\\\");var hasBin=_dereq_(\\\"has-binary\\\");module.exports=exports=Socket;var events={connect:1,connect_error:1,connect_timeout:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1};var emit=Emitter.prototype.emit;function Socket(io,nsp){this.io=io;this.nsp=nsp;this.json=this;this.ids=0;this.acks={};if(this.io.autoConnect)this.open();this.receiveBuffer=[];this.sendBuffer=[];this.connected=false;this.disconnected=true}Emitter(Socket.prototype);Socket.prototype.subEvents=function(){if(this.subs)return;var io=this.io;this.subs=[on(io,\\\"open\\\",bind(this,\\\"onopen\\\")),on(io,\\\"packet\\\",bind(this,\\\"onpacket\\\")),on(io,\\\"close\\\",bind(this,\\\"onclose\\\"))]};Socket.prototype.open=Socket.prototype.connect=function(){if(this.connected)return this;this.subEvents();this.io.open();if(\\\"open\\\"==this.io.readyState)this.onopen();return this};Socket.prototype.send=function(){var args=toArray(arguments);args.unshift(\\\"message\\\");this.emit.apply(this,args);return this};Socket.prototype.emit=function(ev){if(events.hasOwnProperty(ev)){emit.apply(this,arguments);return this}var args=toArray(arguments);var parserType=parser.EVENT;if(hasBin(args)){parserType=parser.BINARY_EVENT}var packet={type:parserType,data:args};if(\\\"function\\\"==typeof args[args.length-1]){debug(\\\"emitting packet with ack id %d\\\",this.ids);this.acks[this.ids]=args.pop();packet.id=this.ids++}if(this.connected){this.packet(packet)}else{this.sendBuffer.push(packet)}return this};Socket.prototype.packet=function(packet){packet.nsp=this.nsp;this.io.packet(packet)};Socket.prototype.onopen=function(){debug(\\\"transport is open - connecting\\\");if(\\\"/\\\"!=this.nsp){this.packet({type:parser.CONNECT})}};Socket.prototype.onclose=function(reason){debug(\\\"close (%s)\\\",reason);this.connected=false;this.disconnected=true;this.emit(\\\"disconnect\\\",reason)};Socket.prototype.onpacket=function(packet){if(packet.nsp!=this.nsp)return;switch(packet.type){case parser.CONNECT:this.onconnect();break;case parser.EVENT:this.onevent(packet);break;case parser.BINARY_EVENT:this.onevent(packet);break;case parser.ACK:this.onack(packet);break;case parser.BINARY_ACK:this.onack(packet);break;case parser.DISCONNECT:this.ondisconnect();break;case parser.ERROR:this.emit(\\\"error\\\",packet.data);break}};Socket.prototype.onevent=function(packet){var args=packet.data||[];debug(\\\"emitting event %j\\\",args);if(null!=packet.id){debug(\\\"attaching ack callback to event\\\");args.push(this.ack(packet.id))}if(this.connected){emit.apply(this,args)}else{this.receiveBuffer.push(args)}};Socket.prototype.ack=function(id){var self=this;var sent=false;return function(){if(sent)return;sent=true;var args=toArray(arguments);debug(\\\"sending ack %j\\\",args);var type=hasBin(args)?parser.BINARY_ACK:parser.ACK;self.packet({type:type,id:id,data:args})}};Socket.prototype.onack=function(packet){debug(\\\"calling ack %s with %j\\\",packet.id,packet.data);var fn=this.acks[packet.id];fn.apply(this,packet.data);delete this.acks[packet.id]};Socket.prototype.onconnect=function(){this.connected=true;this.disconnected=false;this.emit(\\\"connect\\\");this.emitBuffered()};Socket.prototype.emitBuffered=function(){var i;for(i=0;i<this.receiveBuffer.length;i++){emit.apply(this,this.receiveBuffer[i])}this.receiveBuffer=[];for(i=0;i<this.sendBuffer.length;i++){this.packet(this.sendBuffer[i])}this.sendBuffer=[]};Socket.prototype.ondisconnect=function(){debug(\\\"server disconnect (%s)\\\",this.nsp);this.destroy();this.onclose(\\\"io server disconnect\\\")};Socket.prototype.destroy=function(){if(this.subs){for(var i=0;i<this.subs.length;i++){this.subs[i].destroy()}this.subs=null}this.io.destroy(this)};Socket.prototype.close=Socket.prototype.disconnect=function(){if(this.connected){debug(\\\"performing disconnect (%s)\\\",this.nsp);this.packet({type:parser.DISCONNECT})}this.destroy();if(this.connected){this.onclose(\\\"io client disconnect\\\")}return this}},{\\\"./on\\\":4,\\\"component-bind\\\":7,\\\"component-emitter\\\":8,debug:9,\\\"has-binary\\\":35,\\\"socket.io-parser\\\":43,\\\"to-array\\\":47}],6:[function(_dereq_,module,exports){(function(global){var parseuri=_dereq_(\\\"parseuri\\\");var debug=_dereq_(\\\"debug\\\")(\\\"socket.io-client:url\\\");module.exports=url;function url(uri,loc){var obj=uri;var loc=loc||global.location;if(null==uri)uri=loc.protocol+\\\"//\\\"+loc.hostname;if(\\\"string\\\"==typeof uri){if(\\\"/\\\"==uri.charAt(0)){if(\\\"/\\\"==uri.charAt(1)){uri=loc.protocol+uri}else{uri=loc.hostname+uri}}if(!/^(https?|wss?):\\\\/\\\\//.test(uri)){debug(\\\"protocol-less url %s\\\",uri);if(\\\"undefined\\\"!=typeof loc){uri=loc.protocol+\\\"//\\\"+uri}else{uri=\\\"https://\\\"+uri}}debug(\\\"parse %s\\\",uri);obj=parseuri(uri)}if(!obj.port){if(/^(http|ws)$/.test(obj.protocol)){obj.port=\\\"80\\\"}else if(/^(http|ws)s$/.test(obj.protocol)){obj.port=\\\"443\\\"}}obj.path=obj.path||\\\"/\\\";obj.id=obj.protocol+\\\"://\\\"+obj.host+\\\":\\\"+obj.port;obj.href=obj.protocol+\\\"://\\\"+obj.host+(loc&&loc.port==obj.port?\\\"\\\":\\\":\\\"+obj.port);return obj}}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{debug:9,parseuri:41}],7:[function(_dereq_,module,exports){var slice=[].slice;module.exports=function(obj,fn){if(\\\"string\\\"==typeof fn)fn=obj[fn];if(\\\"function\\\"!=typeof fn)throw new Error(\\\"bind() requires a function\\\");var args=slice.call(arguments,2);return function(){return fn.apply(obj,args.concat(slice.call(arguments)))}}},{}],8:[function(_dereq_,module,exports){module.exports=Emitter;function Emitter(obj){if(obj)return mixin(obj)}function mixin(obj){for(var key in Emitter.prototype){obj[key]=Emitter.prototype[key]}return obj}Emitter.prototype.on=Emitter.prototype.addEventListener=function(event,fn){this._callbacks=this._callbacks||{};(this._callbacks[event]=this._callbacks[event]||[]).push(fn);return this};Emitter.prototype.once=function(event,fn){var self=this;this._callbacks=this._callbacks||{};function on(){self.off(event,on);fn.apply(this,arguments)}on.fn=fn;this.on(event,on);return this};Emitter.prototype.off=Emitter.prototype.removeListener=Emitter.prototype.removeAllListeners=Emitter.prototype.removeEventListener=function(event,fn){this._callbacks=this._callbacks||{};if(0==arguments.length){this._callbacks={};return this}var callbacks=this._callbacks[event];if(!callbacks)return this;if(1==arguments.length){delete this._callbacks[event];return this}var cb;for(var i=0;i<callbacks.length;i++){cb=callbacks[i];if(cb===fn||cb.fn===fn){callbacks.splice(i,1);break}}return this};Emitter.prototype.emit=function(event){this._callbacks=this._callbacks||{};var args=[].slice.call(arguments,1),callbacks=this._callbacks[event];if(callbacks){callbacks=callbacks.slice(0);for(var i=0,len=callbacks.length;i<len;++i){callbacks[i].apply(this,args)}}return this};Emitter.prototype.listeners=function(event){this._callbacks=this._callbacks||{};return this._callbacks[event]||[]};Emitter.prototype.hasListeners=function(event){return!!this.listeners(event).length}},{}],9:[function(_dereq_,module,exports){module.exports=debug;function debug(name){if(!debug.enabled(name))return function(){};return function(fmt){fmt=coerce(fmt);var curr=new Date;var ms=curr-(debug[name]||curr);debug[name]=curr;fmt=name+\\\" \\\"+fmt+\\\" +\\\"+debug.humanize(ms);window.console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}}debug.names=[];debug.skips=[];debug.enable=function(name){try{localStorage.debug=name}catch(e){}var split=(name||\\\"\\\").split(/[\\\\s,]+/),len=split.length;for(var i=0;i<len;i++){name=split[i].replace(\\\"*\\\",\\\".*?\\\");if(name[0]===\\\"-\\\"){debug.skips.push(new RegExp(\\\"^\\\"+name.substr(1)+\\\"$\\\"))}else{debug.names.push(new RegExp(\\\"^\\\"+name+\\\"$\\\"))}}};debug.disable=function(){debug.enable(\\\"\\\")};debug.humanize=function(ms){var sec=1e3,min=60*1e3,hour=60*min;if(ms>=hour)return(ms/hour).toFixed(1)+\\\"h\\\";if(ms>=min)return(ms/min).toFixed(1)+\\\"m\\\";if(ms>=sec)return(ms/sec|0)+\\\"s\\\";return ms+\\\"ms\\\"};debug.enabled=function(name){for(var i=0,len=debug.skips.length;i<len;i++){if(debug.skips[i].test(name)){return false}}for(var i=0,len=debug.names.length;i<len;i++){if(debug.names[i].test(name)){return true}}return false};function coerce(val){if(val instanceof Error)return val.stack||val.message;return val}try{if(window.localStorage)debug.enable(localStorage.debug)}catch(e){}},{}],10:[function(_dereq_,module,exports){module.exports=_dereq_(\\\"./lib/\\\")},{\\\"./lib/\\\":11}],11:[function(_dereq_,module,exports){module.exports=_dereq_(\\\"./socket\\\");module.exports.parser=_dereq_(\\\"engine.io-parser\\\")},{\\\"./socket\\\":12,\\\"engine.io-parser\\\":24}],12:[function(_dereq_,module,exports){(function(global){var transports=_dereq_(\\\"./transports\\\");var Emitter=_dereq_(\\\"component-emitter\\\");var debug=_dereq_(\\\"debug\\\")(\\\"engine.io-client:socket\\\");var index=_dereq_(\\\"indexof\\\");var parser=_dereq_(\\\"engine.io-parser\\\");var parseuri=_dereq_(\\\"parseuri\\\");var parsejson=_dereq_(\\\"parsejson\\\");var parseqs=_dereq_(\\\"parseqs\\\");module.exports=Socket;function noop(){}function Socket(uri,opts){if(!(this instanceof Socket))return new Socket(uri,opts);opts=opts||{};if(uri&&\\\"object\\\"==typeof uri){opts=uri;uri=null}if(uri){uri=parseuri(uri);opts.host=uri.host;opts.secure=uri.protocol==\\\"https\\\"||uri.protocol==\\\"wss\\\";opts.port=uri.port;if(uri.query)opts.query=uri.query}this.secure=null!=opts.secure?opts.secure:global.location&&\\\"https:\\\"==location.protocol;if(opts.host){var pieces=opts.host.split(\\\":\\\");opts.hostname=pieces.shift();if(pieces.length)opts.port=pieces.pop()}this.agent=opts.agent||false;this.hostname=opts.hostname||(global.location?location.hostname:\\\"localhost\\\");this.port=opts.port||(global.location&&location.port?location.port:this.secure?443:80);this.query=opts.query||{};if(\\\"string\\\"==typeof this.query)this.query=parseqs.decode(this.query);this.upgrade=false!==opts.upgrade;this.path=(opts.path||\\\"/engine.io\\\").replace(/\\\\/$/,\\\"\\\")+\\\"/\\\";this.forceJSONP=!!opts.forceJSONP;this.jsonp=false!==opts.jsonp;this.forceBase64=!!opts.forceBase64;this.enablesXDR=!!opts.enablesXDR;this.timestampParam=opts.timestampParam||\\\"t\\\";this.timestampRequests=opts.timestampRequests;this.transports=opts.transports||[\\\"polling\\\",\\\"websocket\\\"];this.readyState=\\\"\\\";this.writeBuffer=[];this.callbackBuffer=[];this.policyPort=opts.policyPort||843;this.rememberUpgrade=opts.rememberUpgrade||false;this.open();this.binaryType=null;this.onlyBinaryUpgrades=opts.onlyBinaryUpgrades}Socket.priorWebsocketSuccess=false;Emitter(Socket.prototype);Socket.protocol=parser.protocol;Socket.Socket=Socket;Socket.Transport=_dereq_(\\\"./transport\\\");Socket.transports=_dereq_(\\\"./transports\\\");Socket.parser=_dereq_(\\\"engine.io-parser\\\");Socket.prototype.createTransport=function(name){debug('creating transport \\\"%s\\\"',name);var query=clone(this.query);query.EIO=parser.protocol;query.transport=name;if(this.id)query.sid=this.id;var transport=new transports[name]({agent:this.agent,hostname:this.hostname,port:this.port,secure:this.secure,path:this.path,query:query,forceJSONP:this.forceJSONP,jsonp:this.jsonp,forceBase64:this.forceBase64,enablesXDR:this.enablesXDR,timestampRequests:this.timestampRequests,timestampParam:this.timestampParam,policyPort:this.policyPort,socket:this});return transport};function clone(obj){var o={};for(var i in obj){if(obj.hasOwnProperty(i)){o[i]=obj[i]}}return o}Socket.prototype.open=function(){var transport;if(this.rememberUpgrade&&Socket.priorWebsocketSuccess&&this.transports.indexOf(\\\"websocket\\\")!=-1){transport=\\\"websocket\\\"}else if(0==this.transports.length){var self=this;setTimeout(function(){self.emit(\\\"error\\\",\\\"No transports available\\\")},0);return}else{transport=this.transports[0]}this.readyState=\\\"opening\\\";var transport;try{transport=this.createTransport(transport)}catch(e){this.transports.shift();this.open();return}transport.open();this.setTransport(transport)};Socket.prototype.setTransport=function(transport){debug(\\\"setting transport %s\\\",transport.name);var self=this;if(this.transport){debug(\\\"clearing existing transport %s\\\",this.transport.name);this.transport.removeAllListeners()}this.transport=transport;transport.on(\\\"drain\\\",function(){self.onDrain()}).on(\\\"packet\\\",function(packet){self.onPacket(packet)}).on(\\\"error\\\",function(e){self.onError(e)}).on(\\\"close\\\",function(){self.onClose(\\\"transport close\\\")})};Socket.prototype.probe=function(name){debug('probing transport \\\"%s\\\"',name);var transport=this.createTransport(name,{probe:1}),failed=false,self=this;Socket.priorWebsocketSuccess=false;function onTransportOpen(){if(self.onlyBinaryUpgrades){var upgradeLosesBinary=!this.supportsBinary&&self.transport.supportsBinary;failed=failed||upgradeLosesBinary}if(failed)return;debug('probe transport \\\"%s\\\" opened',name);transport.send([{type:\\\"ping\\\",data:\\\"probe\\\"}]);transport.once(\\\"packet\\\",function(msg){if(failed)return;if(\\\"pong\\\"==msg.type&&\\\"probe\\\"==msg.data){debug('probe transport \\\"%s\\\" pong',name);self.upgrading=true;self.emit(\\\"upgrading\\\",transport);if(!transport)return;Socket.priorWebsocketSuccess=\\\"websocket\\\"==transport.name;debug('pausing current transport \\\"%s\\\"',self.transport.name);self.transport.pause(function(){if(failed)return;if(\\\"closed\\\"==self.readyState)return;debug(\\\"changing transport and sending upgrade packet\\\");cleanup();self.setTransport(transport);transport.send([{type:\\\"upgrade\\\"}]);self.emit(\\\"upgrade\\\",transport);transport=null;self.upgrading=false;self.flush()})}else{debug('probe transport \\\"%s\\\" failed',name);var err=new Error(\\\"probe error\\\");err.transport=transport.name;self.emit(\\\"upgradeError\\\",err)}})}function freezeTransport(){if(failed)return;failed=true;cleanup();transport.close();transport=null}function onerror(err){var error=new Error(\\\"probe error: \\\"+err);error.transport=transport.name;freezeTransport();debug('probe transport \\\"%s\\\" failed because of error: %s',name,err);self.emit(\\\"upgradeError\\\",error)}function onTransportClose(){onerror(\\\"transport closed\\\")}function onclose(){onerror(\\\"socket closed\\\")}function onupgrade(to){if(transport&&to.name!=transport.name){debug('\\\"%s\\\" works - aborting \\\"%s\\\"',to.name,transport.name);freezeTransport()}}function cleanup(){transport.removeListener(\\\"open\\\",onTransportOpen);transport.removeListener(\\\"error\\\",onerror);transport.removeListener(\\\"close\\\",onTransportClose);self.removeListener(\\\"close\\\",onclose);self.removeListener(\\\"upgrading\\\",onupgrade)}transport.once(\\\"open\\\",onTransportOpen);transport.once(\\\"error\\\",onerror);transport.once(\\\"close\\\",onTransportClose);this.once(\\\"close\\\",onclose);this.once(\\\"upgrading\\\",onupgrade);transport.open()};Socket.prototype.onOpen=function(){debug(\\\"socket open\\\");this.readyState=\\\"open\\\";Socket.priorWebsocketSuccess=\\\"websocket\\\"==this.transport.name;this.emit(\\\"open\\\");this.flush();if(\\\"open\\\"==this.readyState&&this.upgrade&&this.transport.pause){debug(\\\"starting upgrade probes\\\");for(var i=0,l=this.upgrades.length;i<l;i++){this.probe(this.upgrades[i])}}};Socket.prototype.onPacket=function(packet){if(\\\"opening\\\"==this.readyState||\\\"open\\\"==this.readyState){debug('socket receive: type \\\"%s\\\", data \\\"%s\\\"',packet.type,packet.data);this.emit(\\\"packet\\\",packet);this.emit(\\\"heartbeat\\\");switch(packet.type){case\\\"open\\\":this.onHandshake(parsejson(packet.data));break;case\\\"pong\\\":this.setPing();break;case\\\"error\\\":var err=new Error(\\\"server error\\\");err.code=packet.data;this.emit(\\\"error\\\",err);break;case\\\"message\\\":this.emit(\\\"data\\\",packet.data);this.emit(\\\"message\\\",packet.data);break}}else{debug('packet received with socket readyState \\\"%s\\\"',this.readyState)}};Socket.prototype.onHandshake=function(data){this.emit(\\\"handshake\\\",data);this.id=data.sid;this.transport.query.sid=data.sid;this.upgrades=this.filterUpgrades(data.upgrades);this.pingInterval=data.pingInterval;this.pingTimeout=data.pingTimeout;this.onOpen();if(\\\"closed\\\"==this.readyState)return;this.setPing();this.removeListener(\\\"heartbeat\\\",this.onHeartbeat);this.on(\\\"heartbeat\\\",this.onHeartbeat)};Socket.prototype.onHeartbeat=function(timeout){clearTimeout(this.pingTimeoutTimer);var self=this;self.pingTimeoutTimer=setTimeout(function(){if(\\\"closed\\\"==self.readyState)return;self.onClose(\\\"ping timeout\\\")},timeout||self.pingInterval+self.pingTimeout)};Socket.prototype.setPing=function(){var self=this;clearTimeout(self.pingIntervalTimer);self.pingIntervalTimer=setTimeout(function(){debug(\\\"writing ping packet - expecting pong within %sms\\\",self.pingTimeout);self.ping();self.onHeartbeat(self.pingTimeout)},self.pingInterval)};Socket.prototype.ping=function(){this.sendPacket(\\\"ping\\\")};Socket.prototype.onDrain=function(){for(var i=0;i<this.prevBufferLen;i++){if(this.callbackBuffer[i]){this.callbackBuffer[i]()}}this.writeBuffer.splice(0,this.prevBufferLen);this.callbackBuffer.splice(0,this.prevBufferLen);this.prevBufferLen=0;if(this.writeBuffer.length==0){this.emit(\\\"drain\\\")}else{this.flush()}};Socket.prototype.flush=function(){if(\\\"closed\\\"!=this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){debug(\\\"flushing %d packets in socket\\\",this.writeBuffer.length);this.transport.send(this.writeBuffer);this.prevBufferLen=this.writeBuffer.length;this.emit(\\\"flush\\\")}};Socket.prototype.write=Socket.prototype.send=function(msg,fn){this.sendPacket(\\\"message\\\",msg,fn);return this};Socket.prototype.sendPacket=function(type,data,fn){if(\\\"closing\\\"==this.readyState||\\\"closed\\\"==this.readyState){return}var packet={type:type,data:data};this.emit(\\\"packetCreate\\\",packet);this.writeBuffer.push(packet);this.callbackBuffer.push(fn);this.flush()};Socket.prototype.close=function(){if(\\\"opening\\\"==this.readyState||\\\"open\\\"==this.readyState){this.readyState=\\\"closing\\\";var self=this;function close(){self.onClose(\\\"forced close\\\");debug(\\\"socket closing - telling transport to close\\\");self.transport.close()}function cleanupAndClose(){self.removeListener(\\\"upgrade\\\",cleanupAndClose);self.removeListener(\\\"upgradeError\\\",cleanupAndClose);close()}function waitForUpgrade(){self.once(\\\"upgrade\\\",cleanupAndClose);self.once(\\\"upgradeError\\\",cleanupAndClose)}if(this.writeBuffer.length){this.once(\\\"drain\\\",function(){if(this.upgrading){waitForUpgrade()}else{close()}})}else if(this.upgrading){waitForUpgrade()}else{close()}}return this};Socket.prototype.onError=function(err){debug(\\\"socket error %j\\\",err);Socket.priorWebsocketSuccess=false;this.emit(\\\"error\\\",err);this.onClose(\\\"transport error\\\",err)};Socket.prototype.onClose=function(reason,desc){if(\\\"opening\\\"==this.readyState||\\\"open\\\"==this.readyState||\\\"closing\\\"==this.readyState){debug('socket close with reason: \\\"%s\\\"',reason);var self=this;clearTimeout(this.pingIntervalTimer);clearTimeout(this.pingTimeoutTimer);setTimeout(function(){self.writeBuffer=[];self.callbackBuffer=[];self.prevBufferLen=0},0);this.transport.removeAllListeners(\\\"close\\\");this.transport.close();this.transport.removeAllListeners();this.readyState=\\\"closed\\\";this.id=null;this.emit(\\\"close\\\",reason,desc)}};Socket.prototype.filterUpgrades=function(upgrades){var filteredUpgrades=[];for(var i=0,j=upgrades.length;i<j;i++){if(~index(this.transports,upgrades[i]))filteredUpgrades.push(upgrades[i])}return filteredUpgrades}}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{\\\"./transport\\\":13,\\\"./transports\\\":14,\\\"component-emitter\\\":8,debug:21,\\\"engine.io-parser\\\":24,indexof:39,parsejson:31,parseqs:32,parseuri:33}],13:[function(_dereq_,module,exports){var parser=_dereq_(\\\"engine.io-parser\\\");var Emitter=_dereq_(\\\"component-emitter\\\");module.exports=Transport;function Transport(opts){this.path=opts.path;this.hostname=opts.hostname;this.port=opts.port;this.secure=opts.secure;this.query=opts.query;this.timestampParam=opts.timestampParam;this.timestampRequests=opts.timestampRequests;this.readyState=\\\"\\\";this.agent=opts.agent||false;this.socket=opts.socket;this.enablesXDR=opts.enablesXDR}Emitter(Transport.prototype);Transport.timestamps=0;Transport.prototype.onError=function(msg,desc){var err=new Error(msg);err.type=\\\"TransportError\\\";err.description=desc;this.emit(\\\"error\\\",err);return this};Transport.prototype.open=function(){if(\\\"closed\\\"==this.readyState||\\\"\\\"==this.readyState){this.readyState=\\\"opening\\\";this.doOpen()}return this};Transport.prototype.close=function(){if(\\\"opening\\\"==this.readyState||\\\"open\\\"==this.readyState){this.doClose();this.onClose()}return this};Transport.prototype.send=function(packets){if(\\\"open\\\"==this.readyState){this.write(packets)}else{throw new Error(\\\"Transport not open\\\")}};Transport.prototype.onOpen=function(){this.readyState=\\\"open\\\";this.writable=true;this.emit(\\\"open\\\")};Transport.prototype.onData=function(data){var packet=parser.decodePacket(data,this.socket.binaryType);this.onPacket(packet)};Transport.prototype.onPacket=function(packet){this.emit(\\\"packet\\\",packet)};Transport.prototype.onClose=function(){this.readyState=\\\"closed\\\";this.emit(\\\"close\\\")}},{\\\"component-emitter\\\":8,\\\"engine.io-parser\\\":24}],14:[function(_dereq_,module,exports){(function(global){var XMLHttpRequest=_dereq_(\\\"xmlhttprequest\\\");var XHR=_dereq_(\\\"./polling-xhr\\\");var JSONP=_dereq_(\\\"./polling-jsonp\\\");var websocket=_dereq_(\\\"./websocket\\\");exports.polling=polling;exports.websocket=websocket;function polling(opts){var xhr;var xd=false;var xs=false;var jsonp=false!==opts.jsonp;if(global.location){var isSSL=\\\"https:\\\"==location.protocol;var port=location.port;if(!port){port=isSSL?443:80}xd=opts.hostname!=location.hostname||port!=opts.port;xs=opts.secure!=isSSL}opts.xdomain=xd;opts.xscheme=xs;xhr=new XMLHttpRequest(opts);if(\\\"open\\\"in xhr&&!opts.forceJSONP){return new XHR(opts)}else{if(!jsonp)throw new Error(\\\"JSONP disabled\\\");return new JSONP(opts)}}}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{\\\"./polling-jsonp\\\":15,\\\"./polling-xhr\\\":16,\\\"./websocket\\\":18,xmlhttprequest:19}],15:[function(_dereq_,module,exports){(function(global){var Polling=_dereq_(\\\"./polling\\\");var inherit=_dereq_(\\\"component-inherit\\\");module.exports=JSONPPolling;var rNewline=/\\\\n/g;var rEscapedNewline=/\\\\\\\\n/g;var callbacks;var index=0;function empty(){}function JSONPPolling(opts){Polling.call(this,opts);this.query=this.query||{};if(!callbacks){if(!global.___eio)global.___eio=[];callbacks=global.___eio}this.index=callbacks.length;var self=this;callbacks.push(function(msg){self.onData(msg)});this.query.j=this.index;if(global.document&&global.addEventListener){global.addEventListener(\\\"beforeunload\\\",function(){if(self.script)self.script.onerror=empty},false)}}inherit(JSONPPolling,Polling);JSONPPolling.prototype.supportsBinary=false;JSONPPolling.prototype.doClose=function(){if(this.script){this.script.parentNode.removeChild(this.script);this.script=null}if(this.form){this.form.parentNode.removeChild(this.form);this.form=null;this.iframe=null}Polling.prototype.doClose.call(this)};JSONPPolling.prototype.doPoll=function(){var self=this;var script=document.createElement(\\\"script\\\");if(this.script){this.script.parentNode.removeChild(this.script);this.script=null}script.async=true;script.src=this.uri();script.onerror=function(e){self.onError(\\\"jsonp poll error\\\",e)};var insertAt=document.getElementsByTagName(\\\"script\\\")[0];insertAt.parentNode.insertBefore(script,insertAt);this.script=script;var isUAgecko=\\\"undefined\\\"!=typeof navigator&&/gecko/i.test(navigator.userAgent);if(isUAgecko){setTimeout(function(){var iframe=document.createElement(\\\"iframe\\\");document.body.appendChild(iframe);document.body.removeChild(iframe)},100)}};JSONPPolling.prototype.doWrite=function(data,fn){var self=this;if(!this.form){var form=document.createElement(\\\"form\\\");var area=document.createElement(\\\"textarea\\\");var id=this.iframeId=\\\"eio_iframe_\\\"+this.index;var iframe;form.className=\\\"socketio\\\";form.style.position=\\\"absolute\\\";form.style.top=\\\"-1000px\\\";form.style.left=\\\"-1000px\\\";form.target=id;form.method=\\\"POST\\\";form.setAttribute(\\\"accept-charset\\\",\\\"utf-8\\\");area.name=\\\"d\\\";form.appendChild(area);document.body.appendChild(form);this.form=form;this.area=area}this.form.action=this.uri();function complete(){initIframe();fn()}function initIframe(){if(self.iframe){try{self.form.removeChild(self.iframe)}catch(e){self.onError(\\\"jsonp polling iframe removal error\\\",e)}}try{var html='<iframe src=\\\"javascript:0\\\" name=\\\"'+self.iframeId+'\\\">';iframe=document.createElement(html)}catch(e){iframe=document.createElement(\\\"iframe\\\");iframe.name=self.iframeId;iframe.src=\\\"javascript:0\\\"}iframe.id=self.iframeId;self.form.appendChild(iframe);self.iframe=iframe}initIframe();data=data.replace(rEscapedNewline,\\\"\\\\\\\\\\\\n\\\");this.area.value=data.replace(rNewline,\\\"\\\\\\\\n\\\");try{this.form.submit()}catch(e){}if(this.iframe.attachEvent){this.iframe.onreadystatechange=function(){if(self.iframe.readyState==\\\"complete\\\"){complete()}}}else{this.iframe.onload=complete}}}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{\\\"./polling\\\":17,\\\"component-inherit\\\":20}],16:[function(_dereq_,module,exports){(function(global){var XMLHttpRequest=_dereq_(\\\"xmlhttprequest\\\");var Polling=_dereq_(\\\"./polling\\\");var Emitter=_dereq_(\\\"component-emitter\\\");var inherit=_dereq_(\\\"component-inherit\\\");var debug=_dereq_(\\\"debug\\\")(\\\"engine.io-client:polling-xhr\\\");module.exports=XHR;module.exports.Request=Request;function empty(){}function XHR(opts){Polling.call(this,opts);if(global.location){var isSSL=\\\"https:\\\"==location.protocol;var port=location.port;if(!port){port=isSSL?443:80}this.xd=opts.hostname!=global.location.hostname||port!=opts.port;this.xs=opts.secure!=isSSL}}inherit(XHR,Polling);XHR.prototype.supportsBinary=true;XHR.prototype.request=function(opts){opts=opts||{};opts.uri=this.uri();opts.xd=this.xd;opts.xs=this.xs;opts.agent=this.agent||false;opts.supportsBinary=this.supportsBinary;opts.enablesXDR=this.enablesXDR;return new Request(opts)};XHR.prototype.doWrite=function(data,fn){var isBinary=typeof data!==\\\"string\\\"&&data!==undefined;var req=this.request({method:\\\"POST\\\",data:data,isBinary:isBinary});var self=this;req.on(\\\"success\\\",fn);req.on(\\\"error\\\",function(err){self.onError(\\\"xhr post error\\\",err)});this.sendXhr=req};XHR.prototype.doPoll=function(){debug(\\\"xhr poll\\\");var req=this.request();var self=this;req.on(\\\"data\\\",function(data){self.onData(data)});req.on(\\\"error\\\",function(err){self.onError(\\\"xhr poll error\\\",err)});this.pollXhr=req};function Request(opts){this.method=opts.method||\\\"GET\\\";this.uri=opts.uri;this.xd=!!opts.xd;this.xs=!!opts.xs;this.async=false!==opts.async;this.data=undefined!=opts.data?opts.data:null;this.agent=opts.agent;this.isBinary=opts.isBinary;this.supportsBinary=opts.supportsBinary;this.enablesXDR=opts.enablesXDR;this.create()}Emitter(Request.prototype);Request.prototype.create=function(){var xhr=this.xhr=new XMLHttpRequest({agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR});var self=this;try{debug(\\\"xhr open %s: %s\\\",this.method,this.uri);xhr.open(this.method,this.uri,this.async);if(this.supportsBinary){xhr.responseType=\\\"arraybuffer\\\"}if(\\\"POST\\\"==this.method){try{if(this.isBinary){xhr.setRequestHeader(\\\"Content-type\\\",\\\"application/octet-stream\\\")}else{xhr.setRequestHeader(\\\"Content-type\\\",\\\"text/plain;charset=UTF-8\\\")}}catch(e){}}if(\\\"withCredentials\\\"in xhr){xhr.withCredentials=true}if(this.hasXDR()){xhr.onload=function(){self.onLoad()};xhr.onerror=function(){self.onError(xhr.responseText)}}else{xhr.onreadystatechange=function(){if(4!=xhr.readyState)return;if(200==xhr.status||1223==xhr.status){self.onLoad()}else{setTimeout(function(){self.onError(xhr.status)},0)}}}debug(\\\"xhr data %s\\\",this.data);xhr.send(this.data)}catch(e){setTimeout(function(){self.onError(e)},0);return}if(global.document){this.index=Request.requestsCount++;Request.requests[this.index]=this}};Request.prototype.onSuccess=function(){this.emit(\\\"success\\\");this.cleanup()};Request.prototype.onData=function(data){this.emit(\\\"data\\\",data);this.onSuccess()};Request.prototype.onError=function(err){this.emit(\\\"error\\\",err);this.cleanup()};Request.prototype.cleanup=function(){if(\\\"undefined\\\"==typeof this.xhr||null===this.xhr){return}if(this.hasXDR()){this.xhr.onload=this.xhr.onerror=empty}else{this.xhr.onreadystatechange=empty}try{this.xhr.abort()}catch(e){}if(global.document){delete Request.requests[this.index]}this.xhr=null};Request.prototype.onLoad=function(){var data;try{var contentType;try{contentType=this.xhr.getResponseHeader(\\\"Content-Type\\\").split(\\\";\\\")[0]}catch(e){}if(contentType===\\\"application/octet-stream\\\"){data=this.xhr.response}else{if(!this.supportsBinary){data=this.xhr.responseText}else{data=\\\"ok\\\"}}}catch(e){this.onError(e)}if(null!=data){this.onData(data)}};Request.prototype.hasXDR=function(){return\\\"undefined\\\"!==typeof global.XDomainRequest&&!this.xs&&this.enablesXDR};Request.prototype.abort=function(){this.cleanup()};if(global.document){Request.requestsCount=0;Request.requests={};if(global.attachEvent){global.attachEvent(\\\"onunload\\\",unloadHandler)}else if(global.addEventListener){global.addEventListener(\\\"beforeunload\\\",unloadHandler,false)}}function unloadHandler(){for(var i in Request.requests){if(Request.requests.hasOwnProperty(i)){Request.requests[i].abort()}}}}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{\\\"./polling\\\":17,\\\"component-emitter\\\":8,\\\"component-inherit\\\":20,debug:21,xmlhttprequest:19}],17:[function(_dereq_,module,exports){var Transport=_dereq_(\\\"../transport\\\");var parseqs=_dereq_(\\\"parseqs\\\");var parser=_dereq_(\\\"engine.io-parser\\\");var inherit=_dereq_(\\\"component-inherit\\\");var debug=_dereq_(\\\"debug\\\")(\\\"engine.io-client:polling\\\");module.exports=Polling;var hasXHR2=function(){var XMLHttpRequest=_dereq_(\\\"xmlhttprequest\\\");var xhr=new XMLHttpRequest({xdomain:false});return null!=xhr.responseType}();function Polling(opts){var forceBase64=opts&&opts.forceBase64;if(!hasXHR2||forceBase64){this.supportsBinary=false}Transport.call(this,opts)}inherit(Polling,Transport);Polling.prototype.name=\\\"polling\\\";Polling.prototype.doOpen=function(){this.poll()};Polling.prototype.pause=function(onPause){var pending=0;var self=this;this.readyState=\\\"pausing\\\";function pause(){debug(\\\"paused\\\");self.readyState=\\\"paused\\\";onPause()}if(this.polling||!this.writable){var total=0;if(this.polling){debug(\\\"we are currently polling - waiting to pause\\\");total++;this.once(\\\"pollComplete\\\",function(){debug(\\\"pre-pause polling complete\\\");--total||pause()})}if(!this.writable){debug(\\\"we are currently writing - waiting to pause\\\");total++;this.once(\\\"drain\\\",function(){debug(\\\"pre-pause writing complete\\\");--total||pause()})}}else{pause()}};Polling.prototype.poll=function(){debug(\\\"polling\\\");this.polling=true;this.doPoll();this.emit(\\\"poll\\\")};Polling.prototype.onData=function(data){var self=this;debug(\\\"polling got data %s\\\",data);var callback=function(packet,index,total){if(\\\"opening\\\"==self.readyState){self.onOpen()}if(\\\"close\\\"==packet.type){self.onClose();return false}self.onPacket(packet)};parser.decodePayload(data,this.socket.binaryType,callback);if(\\\"closed\\\"!=this.readyState){this.polling=false;this.emit(\\\"pollComplete\\\");if(\\\"open\\\"==this.readyState){this.poll()}else{debug('ignoring poll - transport state \\\"%s\\\"',this.readyState)}}};Polling.prototype.doClose=function(){var self=this;function close(){debug(\\\"writing close packet\\\");self.write([{type:\\\"close\\\"}])}if(\\\"open\\\"==this.readyState){debug(\\\"transport open - closing\\\");close()}else{debug(\\\"transport not open - deferring close\\\");this.once(\\\"open\\\",close)}};Polling.prototype.write=function(packets){var self=this;this.writable=false;var callbackfn=function(){self.writable=true;self.emit(\\\"drain\\\")};var self=this;parser.encodePayload(packets,this.supportsBinary,function(data){self.doWrite(data,callbackfn)})};Polling.prototype.uri=function(){var query=this.query||{};var schema=this.secure?\\\"https\\\":\\\"http\\\";var port=\\\"\\\";if(false!==this.timestampRequests){query[this.timestampParam]=+new Date+\\\"-\\\"+Transport.timestamps++}if(!this.supportsBinary&&!query.sid){query.b64=1}query=parseqs.encode(query);if(this.port&&(\\\"https\\\"==schema&&this.port!=443||\\\"http\\\"==schema&&this.port!=80)){port=\\\":\\\"+this.port}if(query.length){query=\\\"?\\\"+query}return schema+\\\"://\\\"+this.hostname+port+this.path+query}},{\\\"../transport\\\":13,\\\"component-inherit\\\":20,debug:21,\\\"engine.io-parser\\\":24,parseqs:32,xmlhttprequest:19}],18:[function(_dereq_,module,exports){var Transport=_dereq_(\\\"../transport\\\");var parser=_dereq_(\\\"engine.io-parser\\\");var parseqs=_dereq_(\\\"parseqs\\\");var inherit=_dereq_(\\\"component-inherit\\\");var debug=_dereq_(\\\"debug\\\")(\\\"engine.io-client:websocket\\\");var WebSocket=_dereq_(\\\"ws\\\");module.exports=WS;function WS(opts){var forceBase64=opts&&opts.forceBase64;if(forceBase64){this.supportsBinary=false}Transport.call(this,opts)}inherit(WS,Transport);WS.prototype.name=\\\"websocket\\\";WS.prototype.supportsBinary=true;WS.prototype.doOpen=function(){if(!this.check()){return}var self=this;var uri=this.uri();var protocols=void 0;var opts={agent:this.agent};this.ws=new WebSocket(uri,protocols,opts);if(this.ws.binaryType===undefined){this.supportsBinary=false}this.ws.binaryType=\\\"arraybuffer\\\";this.addEventListeners()};WS.prototype.addEventListeners=function(){var self=this;this.ws.onopen=function(){self.onOpen()};this.ws.onclose=function(){self.onClose()};this.ws.onmessage=function(ev){self.onData(ev.data)};this.ws.onerror=function(e){self.onError(\\\"websocket error\\\",e)}};if(\\\"undefined\\\"!=typeof navigator&&/iPad|iPhone|iPod/i.test(navigator.userAgent)){WS.prototype.onData=function(data){var self=this;setTimeout(function(){Transport.prototype.onData.call(self,data)},0)}}WS.prototype.write=function(packets){var self=this;this.writable=false;for(var i=0,l=packets.length;i<l;i++){parser.encodePacket(packets[i],this.supportsBinary,function(data){try{self.ws.send(data)}catch(e){debug(\\\"websocket closed before onclose event\\\")}})}function ondrain(){self.writable=true;self.emit(\\\"drain\\\")}setTimeout(ondrain,0)};WS.prototype.onClose=function(){Transport.prototype.onClose.call(this)};WS.prototype.doClose=function(){if(typeof this.ws!==\\\"undefined\\\"){this.ws.close()}};WS.prototype.uri=function(){var query=this.query||{};var schema=this.secure?\\\"wss\\\":\\\"ws\\\";var port=\\\"\\\";if(this.port&&(\\\"wss\\\"==schema&&this.port!=443||\\\"ws\\\"==schema&&this.port!=80)){port=\\\":\\\"+this.port}if(this.timestampRequests){query[this.timestampParam]=+new Date}if(!this.supportsBinary){query.b64=1}query=parseqs.encode(query);if(query.length){query=\\\"?\\\"+query}return schema+\\\"://\\\"+this.hostname+port+this.path+query};WS.prototype.check=function(){return!!WebSocket&&!(\\\"__initialize\\\"in WebSocket&&this.name===WS.prototype.name)}},{\\\"../transport\\\":13,\\\"component-inherit\\\":20,debug:21,\\\"engine.io-parser\\\":24,parseqs:32,ws:34}],19:[function(_dereq_,module,exports){var hasCORS=_dereq_(\\\"has-cors\\\");module.exports=function(opts){var xdomain=opts.xdomain;var xscheme=opts.xscheme;var enablesXDR=opts.enablesXDR;try{if(\\\"undefined\\\"!=typeof XMLHttpRequest&&(!xdomain||hasCORS)){return new XMLHttpRequest}}catch(e){}try{if(\\\"undefined\\\"!=typeof XDomainRequest&&!xscheme&&enablesXDR){return new XDomainRequest}}catch(e){}if(!xdomain){try{return new ActiveXObject(\\\"Microsoft.XMLHTTP\\\")}catch(e){}}}},{\\\"has-cors\\\":37}],20:[function(_dereq_,module,exports){module.exports=function(a,b){var fn=function(){};fn.prototype=b.prototype;a.prototype=new fn;a.prototype.constructor=a}},{}],21:[function(_dereq_,module,exports){exports=module.exports=_dereq_(\\\"./debug\\\");exports.log=log;exports.formatArgs=formatArgs;exports.save=save;exports.load=load;exports.useColors=useColors;exports.colors=[\\\"lightseagreen\\\",\\\"forestgreen\\\",\\\"goldenrod\\\",\\\"dodgerblue\\\",\\\"darkorchid\\\",\\\"crimson\\\"];function useColors(){return\\\"WebkitAppearance\\\"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\\\\/(\\\\d+)/)&&parseInt(RegExp.$1,10)>=31}exports.formatters.j=function(v){return JSON.stringify(v)};function formatArgs(){var args=arguments;var useColors=this.useColors;args[0]=(useColors?\\\"%c\\\":\\\"\\\")+this.namespace+(useColors?\\\" %c\\\":\\\" \\\")+args[0]+(useColors?\\\"%c \\\":\\\" \\\")+\\\"+\\\"+exports.humanize(this.diff);if(!useColors)return args;var c=\\\"color: \\\"+this.color;args=[args[0],c,\\\"color: inherit\\\"].concat(Array.prototype.slice.call(args,1));var index=0;var lastC=0;args[0].replace(/%[a-z%]/g,function(match){if(\\\"%\\\"===match)return;index++;if(\\\"%c\\\"===match){lastC=index}});args.splice(lastC,0,c);return args}function log(){return\\\"object\\\"==typeof console&&\\\"function\\\"==typeof console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(namespaces){try{if(null==namespaces){localStorage.removeItem(\\\"debug\\\")}else{localStorage.debug=namespaces}}catch(e){}}function load(){var r;try{r=localStorage.debug}catch(e){}return r}exports.enable(load())},{\\\"./debug\\\":22}],22:[function(_dereq_,module,exports){exports=module.exports=debug;exports.coerce=coerce;exports.disable=disable;exports.enable=enable;exports.enabled=enabled;exports.humanize=_dereq_(\\\"ms\\\");exports.names=[];exports.skips=[];exports.formatters={};var prevColor=0;var prevTime;function selectColor(){return exports.colors[prevColor++%exports.colors.length]}function debug(namespace){function disabled(){}disabled.enabled=false;function enabled(){var self=enabled;var curr=+new Date;var ms=curr-(prevTime||curr);self.diff=ms;self.prev=prevTime;self.curr=curr;prevTime=curr;if(null==self.useColors)self.useColors=exports.useColors();if(null==self.color&&self.useColors)self.color=selectColor();var args=Array.prototype.slice.call(arguments);args[0]=exports.coerce(args[0]);if(\\\"string\\\"!==typeof args[0]){args=[\\\"%o\\\"].concat(args)}var index=0;args[0]=args[0].replace(/%([a-z%])/g,function(match,format){if(match===\\\"%\\\")return match;index++;var formatter=exports.formatters[format];if(\\\"function\\\"===typeof formatter){var val=args[index];match=formatter.call(self,val);args.splice(index,1);index--}return match});if(\\\"function\\\"===typeof exports.formatArgs){args=exports.formatArgs.apply(self,args)}var logFn=enabled.log||exports.log||console.log.bind(console);logFn.apply(self,args)}enabled.enabled=true;var fn=exports.enabled(namespace)?enabled:disabled;fn.namespace=namespace;return fn}function enable(namespaces){exports.save(namespaces);var split=(namespaces||\\\"\\\").split(/[\\\\s,]+/);var len=split.length;for(var i=0;i<len;i++){if(!split[i])continue;namespaces=split[i].replace(/\\\\*/g,\\\".*?\\\");if(namespaces[0]===\\\"-\\\"){exports.skips.push(new RegExp(\\\"^\\\"+namespaces.substr(1)+\\\"$\\\"))}else{exports.names.push(new RegExp(\\\"^\\\"+namespaces+\\\"$\\\"))}}}function disable(){exports.enable(\\\"\\\")}function enabled(name){var i,len;for(i=0,len=exports.skips.length;i<len;i++){if(exports.skips[i].test(name)){return false}}for(i=0,len=exports.names.length;i<len;i++){if(exports.names[i].test(name)){return true}}return false}function coerce(val){if(val instanceof Error)return val.stack||val.message;return val}},{ms:23}],23:[function(_dereq_,module,exports){var s=1e3;var m=s*60;var h=m*60;var d=h*24;var y=d*365.25;module.exports=function(val,options){options=options||{};if(\\\"string\\\"==typeof val)return parse(val);return options.long?long(val):short(val)};function parse(str){var match=/^((?:\\\\d+)?\\\\.?\\\\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(str);if(!match)return;var n=parseFloat(match[1]);var type=(match[2]||\\\"ms\\\").toLowerCase();switch(type){case\\\"years\\\":case\\\"year\\\":case\\\"y\\\":return n*y;case\\\"days\\\":case\\\"day\\\":case\\\"d\\\":return n*d;case\\\"hours\\\":case\\\"hour\\\":case\\\"h\\\":return n*h;case\\\"minutes\\\":case\\\"minute\\\":case\\\"m\\\":return n*m;case\\\"seconds\\\":case\\\"second\\\":case\\\"s\\\":return n*s;case\\\"ms\\\":return n}}function short(ms){if(ms>=d)return Math.round(ms/d)+\\\"d\\\";if(ms>=h)return Math.round(ms/h)+\\\"h\\\";if(ms>=m)return Math.round(ms/m)+\\\"m\\\";if(ms>=s)return Math.round(ms/s)+\\\"s\\\";return ms+\\\"ms\\\"}function long(ms){return plural(ms,d,\\\"day\\\")||plural(ms,h,\\\"hour\\\")||plural(ms,m,\\\"minute\\\")||plural(ms,s,\\\"second\\\")||ms+\\\" ms\\\"}function plural(ms,n,name){if(ms<n)return;if(ms<n*1.5)return Math.floor(ms/n)+\\\" \\\"+name;return Math.ceil(ms/n)+\\\" \\\"+name+\\\"s\\\"}},{}],24:[function(_dereq_,module,exports){(function(global){var keys=_dereq_(\\\"./keys\\\");var sliceBuffer=_dereq_(\\\"arraybuffer.slice\\\");var base64encoder=_dereq_(\\\"base64-arraybuffer\\\");var after=_dereq_(\\\"after\\\");var utf8=_dereq_(\\\"utf8\\\");var isAndroid=navigator.userAgent.match(/Android/i);exports.protocol=3;var packets=exports.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6};var packetslist=keys(packets);var err={type:\\\"error\\\",data:\\\"parser error\\\"};var Blob=_dereq_(\\\"blob\\\");exports.encodePacket=function(packet,supportsBinary,utf8encode,callback){if(\\\"function\\\"==typeof supportsBinary){callback=supportsBinary;supportsBinary=false}if(\\\"function\\\"==typeof utf8encode){callback=utf8encode;utf8encode=null}var data=packet.data===undefined?undefined:packet.data.buffer||packet.data;if(global.ArrayBuffer&&data instanceof ArrayBuffer){return encodeArrayBuffer(packet,supportsBinary,callback)}else if(Blob&&data instanceof global.Blob){return encodeBlob(packet,supportsBinary,callback)}var encoded=packets[packet.type];if(undefined!==packet.data){encoded+=utf8encode?utf8.encode(String(packet.data)):String(packet.data)}return callback(\\\"\\\"+encoded)};function encodeArrayBuffer(packet,supportsBinary,callback){if(!supportsBinary){return exports.encodeBase64Packet(packet,callback)}var data=packet.data;var contentArray=new Uint8Array(data);var resultBuffer=new Uint8Array(1+data.byteLength);resultBuffer[0]=packets[packet.type];for(var i=0;i<contentArray.length;i++){resultBuffer[i+1]=contentArray[i]}return callback(resultBuffer.buffer)}function encodeBlobAsArrayBuffer(packet,supportsBinary,callback){if(!supportsBinary){return exports.encodeBase64Packet(packet,callback)}var fr=new FileReader;fr.onload=function(){packet.data=fr.result;exports.encodePacket(packet,supportsBinary,true,callback)};return fr.readAsArrayBuffer(packet.data)}function encodeBlob(packet,supportsBinary,callback){if(!supportsBinary){return exports.encodeBase64Packet(packet,callback)}if(isAndroid){return encodeBlobAsArrayBuffer(packet,supportsBinary,callback)}var length=new Uint8Array(1);length[0]=packets[packet.type];var blob=new Blob([length.buffer,packet.data]);return callback(blob)}exports.encodeBase64Packet=function(packet,callback){var message=\\\"b\\\"+exports.packets[packet.type];if(Blob&&packet.data instanceof Blob){var fr=new FileReader;fr.onload=function(){var b64=fr.result.split(\\\",\\\")[1];callback(message+b64)};return fr.readAsDataURL(packet.data)}var b64data;try{b64data=String.fromCharCode.apply(null,new Uint8Array(packet.data))}catch(e){var typed=new Uint8Array(packet.data);var basic=new Array(typed.length);for(var i=0;i<typed.length;i++){basic[i]=typed[i]}b64data=String.fromCharCode.apply(null,basic)}message+=global.btoa(b64data);return callback(message)};exports.decodePacket=function(data,binaryType,utf8decode){if(typeof data==\\\"string\\\"||data===undefined){if(data.charAt(0)==\\\"b\\\"){return exports.decodeBase64Packet(data.substr(1),binaryType)}if(utf8decode){try{data=utf8.decode(data)}catch(e){return err}}var type=data.charAt(0);if(Number(type)!=type||!packetslist[type]){return err}if(data.length>1){return{type:packetslist[type],data:data.substring(1)}}else{return{type:packetslist[type]}}}var asArray=new Uint8Array(data);var type=asArray[0];var rest=sliceBuffer(data,1);if(Blob&&binaryType===\\\"blob\\\"){rest=new Blob([rest])}return{type:packetslist[type],data:rest}};exports.decodeBase64Packet=function(msg,binaryType){var type=packetslist[msg.charAt(0)];if(!global.ArrayBuffer){return{type:type,data:{base64:true,data:msg.substr(1)}}}var data=base64encoder.decode(msg.substr(1));if(binaryType===\\\"blob\\\"&&Blob){data=new Blob([data])}return{type:type,data:data}};exports.encodePayload=function(packets,supportsBinary,callback){if(typeof supportsBinary==\\\"function\\\"){callback=supportsBinary;supportsBinary=null}if(supportsBinary){if(Blob&&!isAndroid){return exports.encodePayloadAsBlob(packets,callback)}return exports.encodePayloadAsArrayBuffer(packets,callback)}if(!packets.length){return callback(\\\"0:\\\")}function setLengthHeader(message){return message.length+\\\":\\\"+message}function encodeOne(packet,doneCallback){exports.encodePacket(packet,supportsBinary,true,function(message){doneCallback(null,setLengthHeader(message))})}map(packets,encodeOne,function(err,results){return callback(results.join(\\\"\\\"))})};function map(ary,each,done){var result=new Array(ary.length);var next=after(ary.length,done);var eachWithIndex=function(i,el,cb){each(el,function(error,msg){result[i]=msg;cb(error,result)})};for(var i=0;i<ary.length;i++){eachWithIndex(i,ary[i],next)}}exports.decodePayload=function(data,binaryType,callback){if(typeof data!=\\\"string\\\"){return exports.decodePayloadAsBinary(data,binaryType,callback)}if(typeof binaryType===\\\"function\\\"){callback=binaryType;binaryType=null}var packet;if(data==\\\"\\\"){return callback(err,0,1)}var length=\\\"\\\",n,msg;for(var i=0,l=data.length;i<l;i++){var chr=data.charAt(i);if(\\\":\\\"!=chr){length+=chr}else{if(\\\"\\\"==length||length!=(n=Number(length))){return callback(err,0,1)}msg=data.substr(i+1,n);if(length!=msg.length){return callback(err,0,1)}if(msg.length){packet=exports.decodePacket(msg,binaryType,true);if(err.type==packet.type&&err.data==packet.data){return callback(err,0,1)}var ret=callback(packet,i+n,l);if(false===ret)return}i+=n;length=\\\"\\\"}}if(length!=\\\"\\\"){return callback(err,0,1)}};exports.encodePayloadAsArrayBuffer=function(packets,callback){if(!packets.length){return callback(new ArrayBuffer(0))}function encodeOne(packet,doneCallback){exports.encodePacket(packet,true,true,function(data){return doneCallback(null,data)})}map(packets,encodeOne,function(err,encodedPackets){var totalLength=encodedPackets.reduce(function(acc,p){var len;if(typeof p===\\\"string\\\"){len=p.length}else{len=p.byteLength}return acc+len.toString().length+len+2},0);var resultArray=new Uint8Array(totalLength);var bufferIndex=0;encodedPackets.forEach(function(p){var isString=typeof p===\\\"string\\\";var ab=p;if(isString){var view=new Uint8Array(p.length);for(var i=0;i<p.length;i++){view[i]=p.charCodeAt(i)}ab=view.buffer}if(isString){resultArray[bufferIndex++]=0}else{resultArray[bufferIndex++]=1}var lenStr=ab.byteLength.toString();for(var i=0;i<lenStr.length;i++){resultArray[bufferIndex++]=parseInt(lenStr[i])}resultArray[bufferIndex++]=255;var view=new Uint8Array(ab);for(var i=0;i<view.length;i++){resultArray[bufferIndex++]=view[i]}});return callback(resultArray.buffer)})};exports.encodePayloadAsBlob=function(packets,callback){function encodeOne(packet,doneCallback){exports.encodePacket(packet,true,true,function(encoded){var binaryIdentifier=new Uint8Array(1);binaryIdentifier[0]=1;if(typeof encoded===\\\"string\\\"){var view=new Uint8Array(encoded.length);for(var i=0;i<encoded.length;i++){view[i]=encoded.charCodeAt(i)}encoded=view.buffer;binaryIdentifier[0]=0}var len=encoded instanceof ArrayBuffer?encoded.byteLength:encoded.size;var lenStr=len.toString();var lengthAry=new Uint8Array(lenStr.length+1);for(var i=0;i<lenStr.length;i++){lengthAry[i]=parseInt(lenStr[i])}lengthAry[lenStr.length]=255;if(Blob){var blob=new Blob([binaryIdentifier.buffer,lengthAry.buffer,encoded]);doneCallback(null,blob)}})}map(packets,encodeOne,function(err,results){return callback(new Blob(results))})};exports.decodePayloadAsBinary=function(data,binaryType,callback){if(typeof binaryType===\\\"function\\\"){callback=binaryType;binaryType=null}var bufferTail=data;var buffers=[];var numberTooLong=false;while(bufferTail.byteLength>0){var tailArray=new Uint8Array(bufferTail);var isString=tailArray[0]===0;var msgLength=\\\"\\\";for(var i=1;;i++){if(tailArray[i]==255)break;if(msgLength.length>310){numberTooLong=true;break}msgLength+=tailArray[i]}if(numberTooLong)return callback(err,0,1);bufferTail=sliceBuffer(bufferTail,2+msgLength.length);msgLength=parseInt(msgLength);var msg=sliceBuffer(bufferTail,0,msgLength);if(isString){try{msg=String.fromCharCode.apply(null,new Uint8Array(msg))}catch(e){var typed=new Uint8Array(msg);msg=\\\"\\\";for(var i=0;i<typed.length;i++){msg+=String.fromCharCode(typed[i])}}}buffers.push(msg);bufferTail=sliceBuffer(bufferTail,msgLength)}var total=buffers.length;buffers.forEach(function(buffer,i){callback(exports.decodePacket(buffer,binaryType,true),i,total)})}}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{\\\"./keys\\\":25,after:26,\\\"arraybuffer.slice\\\":27,\\\"base64-arraybuffer\\\":28,blob:29,utf8:30}],25:[function(_dereq_,module,exports){module.exports=Object.keys||function keys(obj){var arr=[];var has=Object.prototype.hasOwnProperty;for(var i in obj){if(has.call(obj,i)){arr.push(i)}}return arr}},{}],26:[function(_dereq_,module,exports){module.exports=after;function after(count,callback,err_cb){var bail=false;err_cb=err_cb||noop;proxy.count=count;return count===0?callback():proxy;function proxy(err,result){if(proxy.count<=0){throw new Error(\\\"after called too many times\\\")}--proxy.count;if(err){bail=true;callback(err);callback=err_cb}else if(proxy.count===0&&!bail){callback(null,result)}}}function noop(){}},{}],27:[function(_dereq_,module,exports){module.exports=function(arraybuffer,start,end){var bytes=arraybuffer.byteLength;start=start||0;end=end||bytes;if(arraybuffer.slice){return arraybuffer.slice(start,end)}if(start<0){start+=bytes}if(end<0){end+=bytes}if(end>bytes){end=bytes}if(start>=bytes||start>=end||bytes===0){return new ArrayBuffer(0)}var abv=new Uint8Array(arraybuffer);var result=new Uint8Array(end-start);for(var i=start,ii=0;i<end;i++,ii++){result[ii]=abv[i]}return result.buffer}},{}],28:[function(_dereq_,module,exports){(function(chars){\\\"use strict\\\";exports.encode=function(arraybuffer){var bytes=new Uint8Array(arraybuffer),i,len=bytes.length,base64=\\\"\\\";for(i=0;i<len;i+=3){base64+=chars[bytes[i]>>2];base64+=chars[(bytes[i]&3)<<4|bytes[i+1]>>4];base64+=chars[(bytes[i+1]&15)<<2|bytes[i+2]>>6];base64+=chars[bytes[i+2]&63]}if(len%3===2){base64=base64.substring(0,base64.length-1)+\\\"=\\\"}else if(len%3===1){base64=base64.substring(0,base64.length-2)+\\\"==\\\"}return base64};exports.decode=function(base64){var bufferLength=base64.length*.75,len=base64.length,i,p=0,encoded1,encoded2,encoded3,encoded4;if(base64[base64.length-1]===\\\"=\\\"){bufferLength--;if(base64[base64.length-2]===\\\"=\\\"){bufferLength--}}var arraybuffer=new ArrayBuffer(bufferLength),bytes=new Uint8Array(arraybuffer);for(i=0;i<len;i+=4){encoded1=chars.indexOf(base64[i]);encoded2=chars.indexOf(base64[i+1]);encoded3=chars.indexOf(base64[i+2]);encoded4=chars.indexOf(base64[i+3]);bytes[p++]=encoded1<<2|encoded2>>4;bytes[p++]=(encoded2&15)<<4|encoded3>>2;bytes[p++]=(encoded3&3)<<6|encoded4&63}return arraybuffer}})(\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\\\")},{}],29:[function(_dereq_,module,exports){(function(global){var BlobBuilder=global.BlobBuilder||global.WebKitBlobBuilder||global.MSBlobBuilder||global.MozBlobBuilder;var blobSupported=function(){try{var b=new Blob([\\\"hi\\\"]);return b.size==2}catch(e){return false}}();var blobBuilderSupported=BlobBuilder&&BlobBuilder.prototype.append&&BlobBuilder.prototype.getBlob;function BlobBuilderConstructor(ary,options){options=options||{};var bb=new BlobBuilder;for(var i=0;i<ary.length;i++){bb.append(ary[i])}return options.type?bb.getBlob(options.type):bb.getBlob()}module.exports=function(){if(blobSupported){return global.Blob}else if(blobBuilderSupported){return BlobBuilderConstructor}else{return undefined}}()}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{}],30:[function(_dereq_,module,exports){(function(global){(function(root){var freeExports=typeof exports==\\\"object\\\"&&exports;var freeModule=typeof module==\\\"object\\\"&&module&&module.exports==freeExports&&module;var freeGlobal=typeof global==\\\"object\\\"&&global;if(freeGlobal.global===freeGlobal||freeGlobal.window===freeGlobal){root=freeGlobal}var stringFromCharCode=String.fromCharCode;function ucs2decode(string){var output=[];var counter=0;var length=string.length;var value;var extra;while(counter<length){value=string.charCodeAt(counter++);if(value>=55296&&value<=56319&&counter<length){extra=string.charCodeAt(counter++);if((extra&64512)==56320){output.push(((value&1023)<<10)+(extra&1023)+65536)}else{output.push(value);counter--}}else{output.push(value)}}return output}function ucs2encode(array){var length=array.length;var index=-1;var value;var output=\\\"\\\";while(++index<length){value=array[index];if(value>65535){value-=65536;output+=stringFromCharCode(value>>>10&1023|55296);value=56320|value&1023}output+=stringFromCharCode(value)}return output}function createByte(codePoint,shift){return stringFromCharCode(codePoint>>shift&63|128)}function encodeCodePoint(codePoint){if((codePoint&4294967168)==0){return stringFromCharCode(codePoint)}var symbol=\\\"\\\";if((codePoint&4294965248)==0){symbol=stringFromCharCode(codePoint>>6&31|192)}else if((codePoint&4294901760)==0){symbol=stringFromCharCode(codePoint>>12&15|224);symbol+=createByte(codePoint,6)}else if((codePoint&4292870144)==0){symbol=stringFromCharCode(codePoint>>18&7|240);symbol+=createByte(codePoint,12);symbol+=createByte(codePoint,6)}symbol+=stringFromCharCode(codePoint&63|128);return symbol}function utf8encode(string){var codePoints=ucs2decode(string);var length=codePoints.length;var index=-1;var codePoint;var byteString=\\\"\\\";while(++index<length){codePoint=codePoints[index];byteString+=encodeCodePoint(codePoint)}return byteString}function readContinuationByte(){if(byteIndex>=byteCount){throw Error(\\\"Invalid byte index\\\")}var continuationByte=byteArray[byteIndex]&255;byteIndex++;if((continuationByte&192)==128){return continuationByte&63}throw Error(\\\"Invalid continuation byte\\\")}function decodeSymbol(){var byte1;var byte2;var byte3;var byte4;var codePoint;if(byteIndex>byteCount){throw Error(\\\"Invalid byte index\\\")}if(byteIndex==byteCount){return false}byte1=byteArray[byteIndex]&255;byteIndex++;if((byte1&128)==0){return byte1}if((byte1&224)==192){var byte2=readContinuationByte();codePoint=(byte1&31)<<6|byte2;if(codePoint>=128){return codePoint}else{throw Error(\\\"Invalid continuation byte\\\")}}if((byte1&240)==224){byte2=readContinuationByte();byte3=readContinuationByte();codePoint=(byte1&15)<<12|byte2<<6|byte3;if(codePoint>=2048){return codePoint}else{throw Error(\\\"Invalid continuation byte\\\")}}if((byte1&248)==240){byte2=readContinuationByte();byte3=readContinuationByte();byte4=readContinuationByte();codePoint=(byte1&15)<<18|byte2<<12|byte3<<6|byte4;if(codePoint>=65536&&codePoint<=1114111){return codePoint}}throw Error(\\\"Invalid UTF-8 detected\\\")}var byteArray;var byteCount;var byteIndex;function utf8decode(byteString){byteArray=ucs2decode(byteString);byteCount=byteArray.length;byteIndex=0;var codePoints=[];var tmp;while((tmp=decodeSymbol())!==false){codePoints.push(tmp)}return ucs2encode(codePoints)}var utf8={version:\\\"2.0.0\\\",encode:utf8encode,decode:utf8decode};if(typeof define==\\\"function\\\"&&typeof define.amd==\\\"object\\\"&&define.amd){define(function(){return utf8})}else if(freeExports&&!freeExports.nodeType){if(freeModule){freeModule.exports=utf8}else{var object={};var hasOwnProperty=object.hasOwnProperty;for(var key in utf8){hasOwnProperty.call(utf8,key)&&(freeExports[key]=utf8[key])}}}else{root.utf8=utf8}})(this)}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{}],31:[function(_dereq_,module,exports){(function(global){var rvalidchars=/^[\\\\],:{}\\\\s]*$/;var rvalidescape=/\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;var rvalidtokens=/\\\"[^\\\"\\\\\\\\\\\\n\\\\r]*\\\"|true|false|null|-?\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d+)?/g;var rvalidbraces=/(?:^|:|,)(?:\\\\s*\\\\[)+/g;var rtrimLeft=/^\\\\s+/;var rtrimRight=/\\\\s+$/;module.exports=function parsejson(data){if(\\\"string\\\"!=typeof data||!data){return null}data=data.replace(rtrimLeft,\\\"\\\").replace(rtrimRight,\\\"\\\");if(global.JSON&&JSON.parse){return JSON.parse(data)}if(rvalidchars.test(data.replace(rvalidescape,\\\"@\\\").replace(rvalidtokens,\\\"]\\\").replace(rvalidbraces,\\\"\\\"))){return new Function(\\\"return \\\"+data)()}}}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{}],32:[function(_dereq_,module,exports){exports.encode=function(obj){var str=\\\"\\\";for(var i in obj){if(obj.hasOwnProperty(i)){if(str.length)str+=\\\"&\\\";str+=encodeURIComponent(i)+\\\"=\\\"+encodeURIComponent(obj[i])}}return str};exports.decode=function(qs){var qry={};var pairs=qs.split(\\\"&\\\");for(var i=0,l=pairs.length;i<l;i++){var pair=pairs[i].split(\\\"=\\\");qry[decodeURIComponent(pair[0])]=decodeURIComponent(pair[1])}return qry}},{}],33:[function(_dereq_,module,exports){var re=/^(?:(?![^:@]+:[^:@\\\\/]*@)(http|https|ws|wss):\\\\/\\\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\\\/?#]*)(?::(\\\\d*))?)(((\\\\/(?:[^?#](?![^?#\\\\/]*\\\\.[^?#\\\\/.]+(?:[?#]|$)))*\\\\/?)?([^?#\\\\/]*))(?:\\\\?([^#]*))?(?:#(.*))?)/;var parts=[\\\"source\\\",\\\"protocol\\\",\\\"authority\\\",\\\"userInfo\\\",\\\"user\\\",\\\"password\\\",\\\"host\\\",\\\"port\\\",\\\"relative\\\",\\\"path\\\",\\\"directory\\\",\\\"file\\\",\\\"query\\\",\\\"anchor\\\"];module.exports=function parseuri(str){var src=str,b=str.indexOf(\\\"[\\\"),e=str.indexOf(\\\"]\\\");if(b!=-1&&e!=-1){str=str.substring(0,b)+str.substring(b,e).replace(/:/g,\\\";\\\")+str.substring(e,str.length)}var m=re.exec(str||\\\"\\\"),uri={},i=14;while(i--){uri[parts[i]]=m[i]||\\\"\\\"}if(b!=-1&&e!=-1){uri.source=src;uri.host=uri.host.substring(1,uri.host.length-1).replace(/;/g,\\\":\\\");uri.authority=uri.authority.replace(\\\"[\\\",\\\"\\\").replace(\\\"]\\\",\\\"\\\").replace(/;/g,\\\":\\\");uri.ipv6uri=true}return uri}},{}],34:[function(_dereq_,module,exports){var global=function(){return this}();var WebSocket=global.WebSocket||global.MozWebSocket;module.exports=WebSocket?ws:null;function ws(uri,protocols,opts){var instance;if(protocols){instance=new WebSocket(uri,protocols)}else{instance=new WebSocket(uri)}return instance}if(WebSocket)ws.prototype=WebSocket.prototype},{}],35:[function(_dereq_,module,exports){(function(global){var isArray=_dereq_(\\\"isarray\\\");module.exports=hasBinary;function hasBinary(data){function _hasBinary(obj){if(!obj)return false;if(global.Buffer&&global.Buffer.isBuffer(obj)||global.ArrayBuffer&&obj instanceof ArrayBuffer||global.Blob&&obj instanceof Blob||global.File&&obj instanceof File){return true}if(isArray(obj)){for(var i=0;i<obj.length;i++){if(_hasBinary(obj[i])){return true}}}else if(obj&&\\\"object\\\"==typeof obj){if(obj.toJSON){obj=obj.toJSON()}for(var key in obj){if(obj.hasOwnProperty(key)&&_hasBinary(obj[key])){return true}}}return false}return _hasBinary(data)}}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{isarray:36}],36:[function(_dereq_,module,exports){module.exports=Array.isArray||function(arr){return Object.prototype.toString.call(arr)==\\\"[object Array]\\\"}},{}],37:[function(_dereq_,module,exports){var global=_dereq_(\\\"global\\\");try{module.exports=\\\"XMLHttpRequest\\\"in global&&\\\"withCredentials\\\"in new global.XMLHttpRequest}catch(err){module.exports=false}},{global:38}],38:[function(_dereq_,module,exports){module.exports=function(){return this}()},{}],39:[function(_dereq_,module,exports){var indexOf=[].indexOf;module.exports=function(arr,obj){if(indexOf)return arr.indexOf(obj);for(var i=0;i<arr.length;++i){if(arr[i]===obj)return i}return-1}},{}],40:[function(_dereq_,module,exports){var has=Object.prototype.hasOwnProperty;exports.keys=Object.keys||function(obj){var keys=[];for(var key in obj){if(has.call(obj,key)){keys.push(key)}}return keys};exports.values=function(obj){var vals=[];for(var key in obj){if(has.call(obj,key)){vals.push(obj[key])}}return vals};exports.merge=function(a,b){for(var key in b){if(has.call(b,key)){a[key]=b[key]}}return a};exports.length=function(obj){return exports.keys(obj).length};exports.isEmpty=function(obj){return 0==exports.length(obj)}},{}],41:[function(_dereq_,module,exports){var re=/^(?:(?![^:@]+:[^:@\\\\/]*@)(http|https|ws|wss):\\\\/\\\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\\\/?#]*)(?::(\\\\d*))?)(((\\\\/(?:[^?#](?![^?#\\\\/]*\\\\.[^?#\\\\/.]+(?:[?#]|$)))*\\\\/?)?([^?#\\\\/]*))(?:\\\\?([^#]*))?(?:#(.*))?)/;var parts=[\\\"source\\\",\\\"protocol\\\",\\\"authority\\\",\\\"userInfo\\\",\\\"user\\\",\\\"password\\\",\\\"host\\\",\\\"port\\\",\\\"relative\\\",\\\"path\\\",\\\"directory\\\",\\\"file\\\",\\\"query\\\",\\\"anchor\\\"];module.exports=function parseuri(str){var m=re.exec(str||\\\"\\\"),uri={},i=14;while(i--){uri[parts[i]]=m[i]||\\\"\\\"}return uri}},{}],42:[function(_dereq_,module,exports){(function(global){var isArray=_dereq_(\\\"isarray\\\");var isBuf=_dereq_(\\\"./is-buffer\\\");exports.deconstructPacket=function(packet){var buffers=[];var packetData=packet.data;function _deconstructPacket(data){if(!data)return data;if(isBuf(data)){var placeholder={_placeholder:true,num:buffers.length};buffers.push(data);return placeholder}else if(isArray(data)){var newData=new Array(data.length);for(var i=0;i<data.length;i++){newData[i]=_deconstructPacket(data[i])}return newData}else if(\\\"object\\\"==typeof data&&!(data instanceof Date)){var newData={};for(var key in data){newData[key]=_deconstructPacket(data[key])}return newData}return data}var pack=packet;pack.data=_deconstructPacket(packetData);pack.attachments=buffers.length;return{packet:pack,buffers:buffers}};exports.reconstructPacket=function(packet,buffers){var curPlaceHolder=0;function _reconstructPacket(data){if(data&&data._placeholder){var buf=buffers[data.num];return buf}else if(isArray(data)){for(var i=0;i<data.length;i++){data[i]=_reconstructPacket(data[i])}return data}else if(data&&\\\"object\\\"==typeof data){for(var key in data){data[key]=_reconstructPacket(data[key])}return data}return data}packet.data=_reconstructPacket(packet.data);packet.attachments=undefined;return packet};exports.removeBlobs=function(data,callback){function _removeBlobs(obj,curKey,containingObject){if(!obj)return obj;if(global.Blob&&obj instanceof Blob||global.File&&obj instanceof File){pendingBlobs++;var fileReader=new FileReader;fileReader.onload=function(){if(containingObject){containingObject[curKey]=this.result}else{bloblessData=this.result}if(!--pendingBlobs){callback(bloblessData)}};fileReader.readAsArrayBuffer(obj)}else if(isArray(obj)){for(var i=0;i<obj.length;i++){_removeBlobs(obj[i],i,obj)}}else if(obj&&\\\"object\\\"==typeof obj&&!isBuf(obj)){for(var key in obj){_removeBlobs(obj[key],key,obj)}}}var pendingBlobs=0;var bloblessData=data;_removeBlobs(bloblessData);if(!pendingBlobs){callback(bloblessData)}}}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{\\\"./is-buffer\\\":44,isarray:45}],43:[function(_dereq_,module,exports){var debug=_dereq_(\\\"debug\\\")(\\\"socket.io-parser\\\");var json=_dereq_(\\\"json3\\\");var isArray=_dereq_(\\\"isarray\\\");var Emitter=_dereq_(\\\"component-emitter\\\");var binary=_dereq_(\\\"./binary\\\");var isBuf=_dereq_(\\\"./is-buffer\\\");exports.protocol=4;exports.types=[\\\"CONNECT\\\",\\\"DISCONNECT\\\",\\\"EVENT\\\",\\\"BINARY_EVENT\\\",\\\"ACK\\\",\\\"BINARY_ACK\\\",\\\"ERROR\\\"];exports.CONNECT=0;exports.DISCONNECT=1;exports.EVENT=2;exports.ACK=3;exports.ERROR=4;exports.BINARY_EVENT=5;exports.BINARY_ACK=6;exports.Encoder=Encoder;exports.Decoder=Decoder;function Encoder(){}Encoder.prototype.encode=function(obj,callback){debug(\\\"encoding packet %j\\\",obj);if(exports.BINARY_EVENT==obj.type||exports.BINARY_ACK==obj.type){encodeAsBinary(obj,callback)}else{var encoding=encodeAsString(obj);callback([encoding])}};function encodeAsString(obj){var str=\\\"\\\";var nsp=false;str+=obj.type;if(exports.BINARY_EVENT==obj.type||exports.BINARY_ACK==obj.type){str+=obj.attachments;str+=\\\"-\\\"}if(obj.nsp&&\\\"/\\\"!=obj.nsp){nsp=true;str+=obj.nsp}if(null!=obj.id){if(nsp){str+=\\\",\\\";nsp=false}str+=obj.id}if(null!=obj.data){if(nsp)str+=\\\",\\\";str+=json.stringify(obj.data)}debug(\\\"encoded %j as %s\\\",obj,str);return str}function encodeAsBinary(obj,callback){function writeEncoding(bloblessData){var deconstruction=binary.deconstructPacket(bloblessData);var pack=encodeAsString(deconstruction.packet);var buffers=deconstruction.buffers;buffers.unshift(pack);callback(buffers)}binary.removeBlobs(obj,writeEncoding)}function Decoder(){this.reconstructor=null}Emitter(Decoder.prototype);Decoder.prototype.add=function(obj){var packet;if(\\\"string\\\"==typeof obj){packet=decodeString(obj);if(exports.BINARY_EVENT==packet.type||exports.BINARY_ACK==packet.type){this.reconstructor=new BinaryReconstructor(packet);if(this.reconstructor.reconPack.attachments==0){this.emit(\\\"decoded\\\",packet)}}else{this.emit(\\\"decoded\\\",packet)}}else if(isBuf(obj)||obj.base64){if(!this.reconstructor){throw new Error(\\\"got binary data when not reconstructing a packet\\\")}else{packet=this.reconstructor.takeBinaryData(obj);if(packet){this.reconstructor=null;this.emit(\\\"decoded\\\",packet)}}}else{throw new Error(\\\"Unknown type: \\\"+obj)}};function decodeString(str){var p={};var i=0;p.type=Number(str.charAt(0));if(null==exports.types[p.type])return error();if(exports.BINARY_EVENT==p.type||exports.BINARY_ACK==p.type){p.attachments=\\\"\\\";while(str.charAt(++i)!=\\\"-\\\"){p.attachments+=str.charAt(i)}p.attachments=Number(p.attachments)}if(\\\"/\\\"==str.charAt(i+1)){p.nsp=\\\"\\\";while(++i){var c=str.charAt(i);if(\\\",\\\"==c)break;p.nsp+=c;if(i+1==str.length)break}}else{p.nsp=\\\"/\\\"}var next=str.charAt(i+1);if(\\\"\\\"!=next&&Number(next)==next){p.id=\\\"\\\";while(++i){var c=str.charAt(i);if(null==c||Number(c)!=c){--i;break}p.id+=str.charAt(i);if(i+1==str.length)break}p.id=Number(p.id)}if(str.charAt(++i)){try{p.data=json.parse(str.substr(i))}catch(e){return error()}}debug(\\\"decoded %s as %j\\\",str,p);return p}Decoder.prototype.destroy=function(){if(this.reconstructor){this.reconstructor.finishedReconstruction()}};function BinaryReconstructor(packet){this.reconPack=packet;this.buffers=[]}BinaryReconstructor.prototype.takeBinaryData=function(binData){this.buffers.push(binData);if(this.buffers.length==this.reconPack.attachments){var packet=binary.reconstructPacket(this.reconPack,this.buffers);this.finishedReconstruction();return packet}return null};BinaryReconstructor.prototype.finishedReconstruction=function(){this.reconPack=null;this.buffers=[]};function error(data){return{type:exports.ERROR,data:\\\"parser error\\\"}}},{\\\"./binary\\\":42,\\\"./is-buffer\\\":44,\\\"component-emitter\\\":8,debug:9,isarray:45,json3:46}],44:[function(_dereq_,module,exports){(function(global){module.exports=isBuf;function isBuf(obj){return global.Buffer&&global.Buffer.isBuffer(obj)||global.ArrayBuffer&&obj instanceof ArrayBuffer}}).call(this,typeof self!==\\\"undefined\\\"?self:typeof window!==\\\"undefined\\\"?window:{})},{}],45:[function(_dereq_,module,exports){module.exports=_dereq_(36)},{}],46:[function(_dereq_,module,exports){(function(window){var getClass={}.toString,isProperty,forEach,undef;var isLoader=typeof define===\\\"function\\\"&&define.amd;var nativeJSON=typeof JSON==\\\"object\\\"&&JSON;var JSON3=typeof exports==\\\"object\\\"&&exports&&!exports.nodeType&&exports;if(JSON3&&nativeJSON){JSON3.stringify=nativeJSON.stringify;JSON3.parse=nativeJSON.parse}else{JSON3=window.JSON=nativeJSON||{}}var isExtended=new Date(-0xc782b5b800cec);try{isExtended=isExtended.getUTCFullYear()==-109252&&isExtended.getUTCMonth()===0&&isExtended.getUTCDate()===1&&isExtended.getUTCHours()==10&&isExtended.getUTCMinutes()==37&&isExtended.getUTCSeconds()==6&&isExtended.getUTCMilliseconds()==708}catch(exception){}function has(name){if(has[name]!==undef){return has[name]}var isSupported;if(name==\\\"bug-string-char-index\\\"){isSupported=\\\"a\\\"[0]!=\\\"a\\\"}else if(name==\\\"json\\\"){isSupported=has(\\\"json-stringify\\\")&&has(\\\"json-parse\\\")}else{var value,serialized='{\\\"a\\\":[1,true,false,null,\\\"\\\\\\\\u0000\\\\\\\\b\\\\\\\\n\\\\\\\\f\\\\\\\\r\\\\\\\\t\\\"]}';if(name==\\\"json-stringify\\\"){var stringify=JSON3.stringify,stringifySupported=typeof stringify==\\\"function\\\"&&isExtended;if(stringifySupported){(value=function(){return 1}).toJSON=value;try{stringifySupported=stringify(0)===\\\"0\\\"&&stringify(new Number)===\\\"0\\\"&&stringify(new String)=='\\\"\\\"'&&stringify(getClass)===undef&&stringify(undef)===undef&&stringify()===undef&&stringify(value)===\\\"1\\\"&&stringify([value])==\\\"[1]\\\"&&stringify([undef])==\\\"[null]\\\"&&stringify(null)==\\\"null\\\"&&stringify([undef,getClass,null])==\\\"[null,null,null]\\\"&&stringify({a:[value,true,false,null,\\\"\\\\x00\\\\b\\\\n\\\\f\\\\r\t\\\"]})==serialized&&stringify(null,value)===\\\"1\\\"&&stringify([1,2],null,1)==\\\"[\\\\n 1,\\\\n 2\\\\n]\\\"&&stringify(new Date(-864e13))=='\\\"-271821-04-20T00:00:00.000Z\\\"'&&stringify(new Date(864e13))=='\\\"+275760-09-13T00:00:00.000Z\\\"'&&stringify(new Date(-621987552e5))=='\\\"-000001-01-01T00:00:00.000Z\\\"'&&stringify(new Date(-1))=='\\\"1969-12-31T23:59:59.999Z\\\"'}catch(exception){stringifySupported=false}}isSupported=stringifySupported}if(name==\\\"json-parse\\\"){var parse=JSON3.parse;if(typeof parse==\\\"function\\\"){try{if(parse(\\\"0\\\")===0&&!parse(false)){value=parse(serialized);var parseSupported=value[\\\"a\\\"].length==5&&value[\\\"a\\\"][0]===1;if(parseSupported){try{parseSupported=!parse('\\\"\t\\\"')}catch(exception){}if(parseSupported){try{parseSupported=parse(\\\"01\\\")!==1}catch(exception){}}if(parseSupported){try{parseSupported=parse(\\\"1.\\\")!==1}catch(exception){}}}}}catch(exception){parseSupported=false}}isSupported=parseSupported}}return has[name]=!!isSupported}if(!has(\\\"json\\\")){var functionClass=\\\"[object Function]\\\";var dateClass=\\\"[object Date]\\\";var numberClass=\\\"[object Number]\\\";var stringClass=\\\"[object String]\\\";var arrayClass=\\\"[object Array]\\\";var booleanClass=\\\"[object Boolean]\\\";var charIndexBuggy=has(\\\"bug-string-char-index\\\");if(!isExtended){var floor=Math.floor;var Months=[0,31,59,90,120,151,181,212,243,273,304,334];var getDay=function(year,month){return Months[month]+365*(year-1970)+floor((year-1969+(month=+(month>1)))/4)-floor((year-1901+month)/100)+floor((year-1601+month)/400)}}if(!(isProperty={}.hasOwnProperty)){isProperty=function(property){var members={},constructor;if((members.__proto__=null,members.__proto__={toString:1},members).toString!=getClass){isProperty=function(property){var original=this.__proto__,result=property in(this.__proto__=null,this);this.__proto__=original;return result}}else{constructor=members.constructor;isProperty=function(property){var parent=(this.constructor||constructor).prototype;return property in this&&!(property in parent&&this[property]===parent[property])}}members=null;return isProperty.call(this,property)}}var PrimitiveTypes={\\\"boolean\\\":1,number:1,string:1,undefined:1};var isHostType=function(object,property){var type=typeof object[property];return type==\\\"object\\\"?!!object[property]:!PrimitiveTypes[type]};forEach=function(object,callback){var size=0,Properties,members,property;(Properties=function(){this.valueOf=0}).prototype.valueOf=0;members=new Properties;for(property in members){if(isProperty.call(members,property)){size++}}Properties=members=null;if(!size){members=[\\\"valueOf\\\",\\\"toString\\\",\\\"toLocaleString\\\",\\\"propertyIsEnumerable\\\",\\\"isPrototypeOf\\\",\\\"hasOwnProperty\\\",\\\"constructor\\\"];forEach=function(object,callback){var isFunction=getClass.call(object)==functionClass,property,length;var hasProperty=!isFunction&&typeof object.constructor!=\\\"function\\\"&&isHostType(object,\\\"hasOwnProperty\\\")?object.hasOwnProperty:isProperty;for(property in object){if(!(isFunction&&property==\\\"prototype\\\")&&hasProperty.call(object,property)){callback(property)}}for(length=members.length;property=members[--length];hasProperty.call(object,property)&&callback(property));}}else if(size==2){forEach=function(object,callback){var members={},isFunction=getClass.call(object)==functionClass,property;for(property in object){if(!(isFunction&&property==\\\"prototype\\\")&&!isProperty.call(members,property)&&(members[property]=1)&&isProperty.call(object,property)){callback(property)}}}}else{forEach=function(object,callback){var isFunction=getClass.call(object)==functionClass,property,isConstructor;for(property in object){if(!(isFunction&&property==\\\"prototype\\\")&&isProperty.call(object,property)&&!(isConstructor=property===\\\"constructor\\\")){callback(property)}}if(isConstructor||isProperty.call(object,property=\\\"constructor\\\")){callback(property)}}}return forEach(object,callback)};if(!has(\\\"json-stringify\\\")){var Escapes={92:\\\"\\\\\\\\\\\\\\\\\\\",34:'\\\\\\\\\\\"',8:\\\"\\\\\\\\b\\\",12:\\\"\\\\\\\\f\\\",10:\\\"\\\\\\\\n\\\",13:\\\"\\\\\\\\r\\\",9:\\\"\\\\\\\\t\\\"};var leadingZeroes=\\\"000000\\\";var toPaddedString=function(width,value){return(leadingZeroes+(value||0)).slice(-width)};var unicodePrefix=\\\"\\\\\\\\u00\\\";var quote=function(value){var result='\\\"',index=0,length=value.length,isLarge=length>10&&charIndexBuggy,symbols;if(isLarge){symbols=value.split(\\\"\\\")}for(;index<length;index++){var charCode=value.charCodeAt(index);switch(charCode){case 8:case 9:case 10:case 12:case 13:case 34:case 92:result+=Escapes[charCode];break;default:if(charCode<32){result+=unicodePrefix+toPaddedString(2,charCode.toString(16));break}result+=isLarge?symbols[index]:charIndexBuggy?value.charAt(index):value[index]}}return result+'\\\"'};var serialize=function(property,object,callback,properties,whitespace,indentation,stack){var value,className,year,month,date,time,hours,minutes,seconds,milliseconds,results,element,index,length,prefix,result;try{value=object[property]}catch(exception){}if(typeof value==\\\"object\\\"&&value){className=getClass.call(value);if(className==dateClass&&!isProperty.call(value,\\\"toJSON\\\")){if(value>-1/0&&value<1/0){if(getDay){date=floor(value/864e5);for(year=floor(date/365.2425)+1970-1;getDay(year+1,0)<=date;year++);for(month=floor((date-getDay(year,0))/30.42);getDay(year,month+1)<=date;month++);date=1+date-getDay(year,month);time=(value%864e5+864e5)%864e5;hours=floor(time/36e5)%24;minutes=floor(time/6e4)%60;seconds=floor(time/1e3)%60;milliseconds=time%1e3}else{year=value.getUTCFullYear();month=value.getUTCMonth();date=value.getUTCDate();hours=value.getUTCHours();minutes=value.getUTCMinutes();seconds=value.getUTCSeconds();milliseconds=value.getUTCMilliseconds()}value=(year<=0||year>=1e4?(year<0?\\\"-\\\":\\\"+\\\")+toPaddedString(6,year<0?-year:year):toPaddedString(4,year))+\\\"-\\\"+toPaddedString(2,month+1)+\\\"-\\\"+toPaddedString(2,date)+\\\"T\\\"+toPaddedString(2,hours)+\\\":\\\"+toPaddedString(2,minutes)+\\\":\\\"+toPaddedString(2,seconds)+\\\".\\\"+toPaddedString(3,milliseconds)+\\\"Z\\\"}else{value=null}}else if(typeof value.toJSON==\\\"function\\\"&&(className!=numberClass&&className!=stringClass&&className!=arrayClass||isProperty.call(value,\\\"toJSON\\\"))){value=value.toJSON(property)}}if(callback){value=callback.call(object,property,value)}if(value===null){return\\\"null\\\"}className=getClass.call(value);if(className==booleanClass){return\\\"\\\"+value}else if(className==numberClass){return value>-1/0&&value<1/0?\\\"\\\"+value:\\\"null\\\"}else if(className==stringClass){return quote(\\\"\\\"+value)}if(typeof value==\\\"object\\\"){for(length=stack.length;length--;){if(stack[length]===value){throw TypeError()}}stack.push(value);results=[];prefix=indentation;indentation+=whitespace;if(className==arrayClass){for(index=0,length=value.length;index<length;index++){element=serialize(index,value,callback,properties,whitespace,indentation,stack);results.push(element===undef?\\\"null\\\":element)}result=results.length?whitespace?\\\"[\\\\n\\\"+indentation+results.join(\\\",\\\\n\\\"+indentation)+\\\"\\\\n\\\"+prefix+\\\"]\\\":\\\"[\\\"+results.join(\\\",\\\")+\\\"]\\\":\\\"[]\\\"}else{forEach(properties||value,function(property){var element=serialize(property,value,callback,properties,whitespace,indentation,stack);if(element!==undef){results.push(quote(property)+\\\":\\\"+(whitespace?\\\" \\\":\\\"\\\")+element)}});result=results.length?whitespace?\\\"{\\\\n\\\"+indentation+results.join(\\\",\\\\n\\\"+indentation)+\\\"\\\\n\\\"+prefix+\\\"}\\\":\\\"{\\\"+results.join(\\\",\\\")+\\\"}\\\":\\\"{}\\\"}stack.pop();return result}};JSON3.stringify=function(source,filter,width){var whitespace,callback,properties,className;if(typeof filter==\\\"function\\\"||typeof filter==\\\"object\\\"&&filter){if((className=getClass.call(filter))==functionClass){callback=filter}else if(className==arrayClass){properties={};for(var index=0,length=filter.length,value;index<length;value=filter[index++],(className=getClass.call(value),className==stringClass||className==numberClass)&&(properties[value]=1));}}if(width){if((className=getClass.call(width))==numberClass){if((width-=width%1)>0){for(whitespace=\\\"\\\",width>10&&(width=10);whitespace.length<width;whitespace+=\\\" \\\");}}else if(className==stringClass){whitespace=width.length<=10?width:width.slice(0,10)}}return serialize(\\\"\\\",(value={},value[\\\"\\\"]=source,value),callback,properties,whitespace,\\\"\\\",[])}}if(!has(\\\"json-parse\\\")){var fromCharCode=String.fromCharCode;var Unescapes={92:\\\"\\\\\\\\\\\",34:'\\\"',47:\\\"/\\\",98:\\\"\\\\b\\\",116:\\\"\t\\\",110:\\\"\\\\n\\\",102:\\\"\\\\f\\\",114:\\\"\\\\r\\\"};var Index,Source;var abort=function(){Index=Source=null;throw SyntaxError()};var lex=function(){var source=Source,length=source.length,value,begin,position,isSigned,charCode;while(Index<length){charCode=source.charCodeAt(Index);switch(charCode){case 9:case 10:case 13:case 32:Index++;break;case 123:case 125:case 91:case 93:case 58:case 44:value=charIndexBuggy?source.charAt(Index):source[Index];Index++;return value;case 34:for(value=\\\"@\\\",Index++;Index<length;){charCode=source.charCodeAt(Index);if(charCode<32){abort()}else if(charCode==92){charCode=source.charCodeAt(++Index);switch(charCode){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:value+=Unescapes[charCode];Index++;break;case 117:begin=++Index;for(position=Index+4;Index<position;Index++){charCode=source.charCodeAt(Index);if(!(charCode>=48&&charCode<=57||charCode>=97&&charCode<=102||charCode>=65&&charCode<=70)){abort()}}value+=fromCharCode(\\\"0x\\\"+source.slice(begin,Index));break;default:abort()}}else{if(charCode==34){break}charCode=source.charCodeAt(Index);begin=Index;while(charCode>=32&&charCode!=92&&charCode!=34){charCode=source.charCodeAt(++Index)}value+=source.slice(begin,Index)}}if(source.charCodeAt(Index)==34){Index++;return value}abort();default:begin=Index;if(charCode==45){isSigned=true;charCode=source.charCodeAt(++Index)}if(charCode>=48&&charCode<=57){if(charCode==48&&(charCode=source.charCodeAt(Index+1),charCode>=48&&charCode<=57)){abort()}isSigned=false;for(;Index<length&&(charCode=source.charCodeAt(Index),charCode>=48&&charCode<=57);Index++);if(source.charCodeAt(Index)==46){position=++Index;for(;position<length&&(charCode=source.charCodeAt(position),charCode>=48&&charCode<=57);position++);if(position==Index){abort()}Index=position}charCode=source.charCodeAt(Index);if(charCode==101||charCode==69){charCode=source.charCodeAt(++Index);if(charCode==43||charCode==45){Index++}for(position=Index;position<length&&(charCode=source.charCodeAt(position),charCode>=48&&charCode<=57);position++);if(position==Index){abort()}Index=position}return+source.slice(begin,Index)}if(isSigned){abort()}if(source.slice(Index,Index+4)==\\\"true\\\"){Index+=4;return true}else if(source.slice(Index,Index+5)==\\\"false\\\"){Index+=5;return false}else if(source.slice(Index,Index+4)==\\\"null\\\"){Index+=4;return null}abort()}}return\\\"$\\\"};var get=function(value){var results,hasMembers;if(value==\\\"$\\\"){abort()}if(typeof value==\\\"string\\\"){if((charIndexBuggy?value.charAt(0):value[0])==\\\"@\\\"){return value.slice(1)}if(value==\\\"[\\\"){results=[];for(;;hasMembers||(hasMembers=true)){value=lex();if(value==\\\"]\\\"){break}if(hasMembers){if(value==\\\",\\\"){value=lex();if(value==\\\"]\\\"){abort()}}else{abort()}}if(value==\\\",\\\"){abort()}results.push(get(value))}return results}else if(value==\\\"{\\\"){results={};for(;;hasMembers||(hasMembers=true)){value=lex();if(value==\\\"}\\\"){break}if(hasMembers){if(value==\\\",\\\"){value=lex();if(value==\\\"}\\\"){abort()}}else{abort()}}if(value==\\\",\\\"||typeof value!=\\\"string\\\"||(charIndexBuggy?value.charAt(0):value[0])!=\\\"@\\\"||lex()!=\\\":\\\"){abort()}results[value.slice(1)]=get(lex())}return results}abort()}return value};var update=function(source,property,callback){var element=walk(source,property,callback);if(element===undef){delete source[property]}else{source[property]=element}};var walk=function(source,property,callback){var value=source[property],length;if(typeof value==\\\"object\\\"&&value){if(getClass.call(value)==arrayClass){for(length=value.length;length--;){update(value,length,callback)}}else{forEach(value,function(property){update(value,property,callback)})}}return callback.call(source,property,value)};JSON3.parse=function(source,callback){var result,value;Index=0;Source=\\\"\\\"+source;result=get(lex());if(lex()!=\\\"$\\\"){abort()}Index=Source=null;return callback&&getClass.call(callback)==functionClass?walk((value={},value[\\\"\\\"]=result,value),\\\"\\\",callback):result}}}if(isLoader){define(function(){return JSON3})}})(this)},{}],47:[function(_dereq_,module,exports){module.exports=toArray;function toArray(list,index){var array=[];index=index||0;for(var i=index||0;i<list.length;i++){array[i-index]=list[i]}return array}},{}]},{},[1])(1)});\";\n/*!\n *  socket.io client constructor format.\n */\nstatic NSString *socket_io_js_constructor(NSString *hostURL, BOOL reconnection, NSInteger attemptLimit, NSTimeInterval reconnectionDelay, NSTimeInterval reconnectionDelayMax, NSTimeInterval timeout, NSArray *transports) {\n  NSString *constructorFormat = @\"io('%@', {  \\\n      'reconnection': %@,                     \\\n      'reconnectionAttempts': %@,             \\\n      'reconnectionDelay': %d,                \\\n      'reconnectionDelayMax': %d,             \\\n      'timeout': %d,                          \\\n      'transports': [ '%@' ]                  \\\n  });\";\n\n  return [NSString stringWithFormat: constructorFormat,\n      hostURL,\n      reconnection? @\"true\" : @\"false\",\n      (attemptLimit == -1)? @\"Infinity\" : @(attemptLimit),\n      (int)(reconnectionDelay * MSEC_PER_SEC),\n      (int)(reconnectionDelayMax * MSEC_PER_SEC),\n      (int)(timeout * MSEC_PER_SEC),\n      [transports componentsJoinedByString:@\"', '\"]\n  ];\n}\n\n/*!\n *  Javascript funtion to return a Blob from a UTF8-encoded string.\n */\nstatic NSString *const blob_factory_js = @\"function blob(dataString) {  \\\n    var blob = new Blob([dataString], {type: 'text/plain'});            \\\n    return blob;                                                        \\\n}\";\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIO.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\t733750D219B7A42800DEE6FC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 733750D119B7A42800DEE6FC /* main.m */; };\n\t\t733750D519B7A42800DEE6FC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 733750D419B7A42800DEE6FC /* AppDelegate.m */; };\n\t\t733750D819B7A42800DEE6FC /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 733750D719B7A42800DEE6FC /* ViewController.m */; };\n\t\t733750DB19B7A42800DEE6FC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 733750D919B7A42800DEE6FC /* Main.storyboard */; };\n\t\t733750DD19B7A42800DEE6FC /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 733750DC19B7A42800DEE6FC /* Images.xcassets */; };\n\t\t73DCADEE194B7ED700696409 /* SocketIO.m in Sources */ = {isa = PBXBuildFile; fileRef = 73DCADED194B7ED700696409 /* SocketIO.m */; };\n\t\t73DF8C35194F66AA00CAF960 /* SIOSocket.podspec in Resources */ = {isa = PBXBuildFile; fileRef = 73DF8C34194F66AA00CAF960 /* SIOSocket.podspec */; };\n\t\t73DF8C42194F738300CAF960 /* SIOSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 73DF8C40194F738300CAF960 /* SIOSocket.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t733750F019B7A44200DEE6FC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 73DCADDE194B7ECE00696409 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 733750CC19B7A42800DEE6FC;\n\t\t\tremoteInfo = SocketIOHost;\n\t\t};\n\t\t733750F219B7A44300DEE6FC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 73DCADDE194B7ECE00696409 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 733750CC19B7A42800DEE6FC;\n\t\t\tremoteInfo = SocketIOHost;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t733750CD19B7A42800DEE6FC /* SocketIOHost.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SocketIOHost.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t733750D019B7A42800DEE6FC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t733750D119B7A42800DEE6FC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t733750D319B7A42800DEE6FC /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t733750D419B7A42800DEE6FC /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t733750D619B7A42800DEE6FC /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\t733750D719B7A42800DEE6FC /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\t733750DA19B7A42800DEE6FC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t733750DC19B7A42800DEE6FC /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\t73DCADE8194B7ED700696409 /* SocketIO.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SocketIO.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t73DCADEC194B7ED700696409 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t73DCADED194B7ED700696409 /* SocketIO.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SocketIO.m; sourceTree = \"<group>\"; };\n\t\t73DF8C34194F66AA00CAF960 /* SIOSocket.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SIOSocket.podspec; sourceTree = \"<group>\"; };\n\t\t73DF8C38194F6EBB00CAF960 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = \"<group>\"; };\n\t\t73DF8C3F194F738300CAF960 /* SIOSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SIOSocket.h; sourceTree = \"<group>\"; };\n\t\t73DF8C40194F738300CAF960 /* SIOSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SIOSocket.m; sourceTree = \"<group>\"; };\n\t\t73DF8C41194F738300CAF960 /* socket.io.js.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = socket.io.js.h; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t733750CA19B7A42800DEE6FC /* 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\t\t73DCADE5194B7ED700696409 /* 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\t733750CE19B7A42800DEE6FC /* SocketIOHost */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t733750D319B7A42800DEE6FC /* AppDelegate.h */,\n\t\t\t\t733750D419B7A42800DEE6FC /* AppDelegate.m */,\n\t\t\t\t733750D619B7A42800DEE6FC /* ViewController.h */,\n\t\t\t\t733750D719B7A42800DEE6FC /* ViewController.m */,\n\t\t\t\t733750D919B7A42800DEE6FC /* Main.storyboard */,\n\t\t\t\t733750DC19B7A42800DEE6FC /* Images.xcassets */,\n\t\t\t\t733750CF19B7A42800DEE6FC /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = SocketIOHost;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t733750CF19B7A42800DEE6FC /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t733750D019B7A42800DEE6FC /* Info.plist */,\n\t\t\t\t733750D119B7A42800DEE6FC /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t73DCADDD194B7ECE00696409 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t73DF8C38194F6EBB00CAF960 /* README.md */,\n\t\t\t\t73DF8C34194F66AA00CAF960 /* SIOSocket.podspec */,\n\t\t\t\t73DF8C3E194F738300CAF960 /* Source */,\n\t\t\t\t73DCADEA194B7ED700696409 /* SocketIO */,\n\t\t\t\t733750CE19B7A42800DEE6FC /* SocketIOHost */,\n\t\t\t\t73DCADE9194B7ED700696409 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t73DCADE9194B7ED700696409 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t73DCADE8194B7ED700696409 /* SocketIO.xctest */,\n\t\t\t\t733750CD19B7A42800DEE6FC /* SocketIOHost.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t73DCADEA194B7ED700696409 /* SocketIO */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t73DCADED194B7ED700696409 /* SocketIO.m */,\n\t\t\t\t73DCADEB194B7ED700696409 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = SocketIO;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t73DCADEB194B7ED700696409 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t73DCADEC194B7ED700696409 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t73DF8C3E194F738300CAF960 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t73DF8C3F194F738300CAF960 /* SIOSocket.h */,\n\t\t\t\t73DF8C40194F738300CAF960 /* SIOSocket.m */,\n\t\t\t\t73DF8C41194F738300CAF960 /* socket.io.js.h */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tpath = SocketIO/Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t733750CC19B7A42800DEE6FC /* SocketIOHost */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 733750EA19B7A42800DEE6FC /* Build configuration list for PBXNativeTarget \"SocketIOHost\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t733750C919B7A42800DEE6FC /* Sources */,\n\t\t\t\t733750CA19B7A42800DEE6FC /* Frameworks */,\n\t\t\t\t733750CB19B7A42800DEE6FC /* 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 = SocketIOHost;\n\t\t\tproductName = SocketIOHost;\n\t\t\tproductReference = 733750CD19B7A42800DEE6FC /* SocketIOHost.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t73DCADE7194B7ED700696409 /* SocketIO */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 73DCADEF194B7ED700696409 /* Build configuration list for PBXNativeTarget \"SocketIO\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t73DCADE4194B7ED700696409 /* Sources */,\n\t\t\t\t73DCADE5194B7ED700696409 /* Frameworks */,\n\t\t\t\t73DCADE6194B7ED700696409 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t733750F119B7A44200DEE6FC /* PBXTargetDependency */,\n\t\t\t\t733750F319B7A44300DEE6FC /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = SocketIO;\n\t\t\tproductName = SocketIO;\n\t\t\tproductReference = 73DCADE8194B7ED700696409 /* SocketIO.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\t73DCADDE194B7ECE00696409 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0600;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t733750CC19B7A42800DEE6FC = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t};\n\t\t\t\t\t73DCADE7194B7ED700696409 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t\tTestTargetID = 733750CC19B7A42800DEE6FC;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 73DCADE1194B7ECE00696409 /* Build configuration list for PBXProject \"SocketIO\" */;\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 = 73DCADDD194B7ECE00696409;\n\t\t\tproductRefGroup = 73DCADE9194B7ED700696409 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t73DCADE7194B7ED700696409 /* SocketIO */,\n\t\t\t\t733750CC19B7A42800DEE6FC /* SocketIOHost */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t733750CB19B7A42800DEE6FC /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t733750DB19B7A42800DEE6FC /* Main.storyboard in Resources */,\n\t\t\t\t733750DD19B7A42800DEE6FC /* Images.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t73DCADE6194B7ED700696409 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t73DF8C35194F66AA00CAF960 /* SIOSocket.podspec in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t733750C919B7A42800DEE6FC /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t733750D819B7A42800DEE6FC /* ViewController.m in Sources */,\n\t\t\t\t733750D519B7A42800DEE6FC /* AppDelegate.m in Sources */,\n\t\t\t\t733750D219B7A42800DEE6FC /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t73DCADE4194B7ED700696409 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t73DF8C42194F738300CAF960 /* SIOSocket.m in Sources */,\n\t\t\t\t73DCADEE194B7ED700696409 /* SocketIO.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\t733750F119B7A44200DEE6FC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 733750CC19B7A42800DEE6FC /* SocketIOHost */;\n\t\t\ttargetProxy = 733750F019B7A44200DEE6FC /* PBXContainerItemProxy */;\n\t\t};\n\t\t733750F319B7A44300DEE6FC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 733750CC19B7A42800DEE6FC /* SocketIOHost */;\n\t\t\ttargetProxy = 733750F219B7A44300DEE6FC /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t733750D919B7A42800DEE6FC /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t733750DA19B7A42800DEE6FC /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t733750EB19B7A42800DEE6FC /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\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\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_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\tINFOPLIST_FILE = SocketIOHost/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t733750EC19B7A42800DEE6FC /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\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 = YES;\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_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\tINFOPLIST_FILE = SocketIOHost/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\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\t73DCADE2194B7ECE00696409 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t73DCADE3194B7ECE00696409 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t73DCADF0194B7ED700696409 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\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\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\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_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\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\tINFOPLIST_FILE = SocketIO/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"SocketIO-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/SocketIOHost.app/SocketIOHost\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t73DCADF1194B7ED700696409 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\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\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\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_C_LANGUAGE_STANDARD = gnu99;\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\tINFOPLIST_FILE = SocketIO/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"SocketIO-Bridging-Header.h\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/SocketIOHost.app/SocketIOHost\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t733750EA19B7A42800DEE6FC /* Build configuration list for PBXNativeTarget \"SocketIOHost\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t733750EB19B7A42800DEE6FC /* Debug */,\n\t\t\t\t733750EC19B7A42800DEE6FC /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t73DCADE1194B7ECE00696409 /* Build configuration list for PBXProject \"SocketIO\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t73DCADE2194B7ECE00696409 /* Debug */,\n\t\t\t\t73DCADE3194B7ECE00696409 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t73DCADEF194B7ED700696409 /* Build configuration list for PBXNativeTarget \"SocketIO\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t73DCADF0194B7ED700696409 /* Debug */,\n\t\t\t\t73DCADF1194B7ED700696409 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 73DCADDE194B7ECE00696409 /* Project object */;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIO.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:SocketIO.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIO.xcodeproj/xcshareddata/xcschemes/SocketIOFramework.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0610\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"027E31871A52BD9900802098\"\n               BuildableName = \"SocketIOFramework.framework\"\n               BlueprintName = \"SocketIOFramework\"\n               ReferencedContainer = \"container:SocketIO.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"027E31871A52BD9900802098\"\n            BuildableName = \"SocketIOFramework.framework\"\n            BlueprintName = \"SocketIOFramework\"\n            ReferencedContainer = \"container:SocketIO.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"027E31871A52BD9900802098\"\n            BuildableName = \"SocketIOFramework.framework\"\n            BlueprintName = \"SocketIOFramework\"\n            ReferencedContainer = \"container:SocketIO.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIO.xcodeproj/xcshareddata/xcschemes/SocketIOHost.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0610\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"733750CC19B7A42800DEE6FC\"\n               BuildableName = \"SocketIOHost.app\"\n               BlueprintName = \"SocketIOHost\"\n               ReferencedContainer = \"container:SocketIO.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"73DCADE7194B7ED700696409\"\n               BuildableName = \"SocketIO.xctest\"\n               BlueprintName = \"SocketIO\"\n               ReferencedContainer = \"container:SocketIO.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"027E31911A52BD9900802098\"\n               BuildableName = \"SocketIOFrameworkTests.xctest\"\n               BlueprintName = \"SocketIOFrameworkTests\"\n               ReferencedContainer = \"container:SocketIO.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"73DCADE7194B7ED700696409\"\n               BuildableName = \"SocketIO.xctest\"\n               BlueprintName = \"SocketIO\"\n               ReferencedContainer = \"container:SocketIO.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"027E31911A52BD9900802098\"\n               BuildableName = \"SocketIOFrameworkTests.xctest\"\n               BlueprintName = \"SocketIOFrameworkTests\"\n               ReferencedContainer = \"container:SocketIO.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"733750CC19B7A42800DEE6FC\"\n            BuildableName = \"SocketIOHost.app\"\n            BlueprintName = \"SocketIOHost\"\n            ReferencedContainer = \"container:SocketIO.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"733750CC19B7A42800DEE6FC\"\n            BuildableName = \"SocketIOHost.app\"\n            BlueprintName = \"SocketIOHost\"\n            ReferencedContainer = \"container:SocketIO.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"733750CC19B7A42800DEE6FC\"\n            BuildableName = \"SocketIOHost.app\"\n            BlueprintName = \"SocketIOHost\"\n            ReferencedContainer = \"container:SocketIO.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIOFramework/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>com.megabits.$(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>FMWK</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>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIOFramework/SocketIOFramework.h",
    "content": "//\n//  SocketIOFramework.h\n//  SocketIOFramework\n//\n//  Created by Agnes Vasarhelyi on 30/12/14.\n//\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for SocketIOFramework.\nFOUNDATION_EXPORT double SocketIOFrameworkVersionNumber;\n\n//! Project version string for SocketIOFramework.\nFOUNDATION_EXPORT const unsigned char SocketIOFrameworkVersionString[];\n\n#import <SocketIOFramework/SIOSocket.h>\n#import <SocketIOFramework/socket.io.js.h>\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIOHost/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  SocketIOHost\n//\n//  Created by Patrick Perini on 9/3/14.\n//\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n\n@end\n\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIOHost/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  SocketIOHost\n//\n//  Created by Patrick Perini on 9/3/14.\n//\n//\n\n#import \"AppDelegate.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    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}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIOHost/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=\"6162\" systemVersion=\"14A238h\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"vXZ-lx-hvc\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6160\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"ufC-wZ-h7g\">\n            <objects>\n                <viewController id=\"vXZ-lx-hvc\" customClass=\"ViewController\" customModuleProvider=\"\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"jyV-Pf-zRb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"2fi-mo-0CV\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"kh9-bI-dsS\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"x5A-6p-PRh\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIOHost/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\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIOHost/Images.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"retina4\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIOHost/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>com.megabits.$(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>UIMainStoryboardFile</key>\n\t<string>Main</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": "Carthage/Checkouts/SIOSocket/SocketIOHost/ViewController.h",
    "content": "//\n//  ViewController.h\n//  SocketIOHost\n//\n//  Created by Patrick Perini on 9/3/14.\n//\n//\n\n#import <UIKit/UIKit.h>\n\n@interface ViewController : UIViewController\n\n\n@end\n\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIOHost/ViewController.m",
    "content": "//\n//  ViewController.m\n//  SocketIOHost\n//\n//  Created by Patrick Perini on 9/3/14.\n//\n//\n\n#import \"ViewController.h\"\n\n@interface ViewController ()\n\n@end\n\n@implementation ViewController\n            \n- (void)viewDidLoad {\n    [super viewDidLoad];\n    // Do any additional setup after loading the view, typically from a nib.\n}\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/SIOSocket/SocketIOHost/main.m",
    "content": "//\n//  main.m\n//  SocketIOHost\n//\n//  Created by Patrick Perini on 9/3/14.\n//\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": "Carthage/Checkouts/SIOSocket/socket_tester/app.js",
    "content": "\n// this is a test server to support tests which make requests\n\nvar io = require('socket.io');\nvar server = io(3000);\nvar expect = require('expect.js');\n\nserver.on('connection', function(socket){\n  // simple test\n  socket.on('hi', function(){\n    socket.emit('hi');\n  });\n\n  // ack tests\n  socket.on('ack', function(){\n    socket.emit('ack', function(a, b){\n      if (a == 5 && b.test) {\n        socket.emit('got it');\n      }\n    });\n  });\n\n  socket.on('getAckDate', function(data, cb){\n    cb(new Date());\n  });\n\n  socket.on('getDate', function(){\n    socket.emit('takeDate', new Date());\n  });\n\n  socket.on('getDateObj', function(){\n    socket.emit('takeDateObj', { date: new Date() });\n  });\n\n  socket.on('getUtf8', function() {\n    socket.emit('takeUtf8', 'てすと');\n    socket.emit('takeUtf8', 'Я Б Г Д Ж Й');\n    socket.emit('takeUtf8', 'Ä ä Ü ü ß');\n    socket.emit('takeUtf8', 'utf8 — string');\n    socket.emit('takeUtf8', 'utf8 — string');\n  });\n\n  // false test\n  socket.on('false', function(){\n    socket.emit('false', false);\n  });\n\n  // binary test\n  socket.on('doge', function(){\n    buf = new Buffer('asdfasdf', 'utf8');\n    socket.emit('doge', buf);\n  });\n\n  // expect receiving binary to be buffer\n  socket.on('buffa', function(a){\n    if (Buffer.isBuffer(a)) socket.emit('buffack');\n  });\n\n  // expect receiving binary with mixed JSON\n  socket.on('jsonbuff', function(a) {\n    expect(a.hello).to.eql('lol');\n    expect(Buffer.isBuffer(a.message)).to.be(true);\n    expect(a.goodbye).to.eql('gotcha');\n    socket.emit('jsonbuff-ack');\n  });\n\n  // expect receiving buffers in order\n  var receivedAbuff1 = false;\n  socket.on('abuff1', function(a) {\n    expect(Buffer.isBuffer(a)).to.be(true);\n    receivedAbuff1 = true;\n  });\n  socket.on('abuff2', function(a) {\n    expect(receivedAbuff1).to.be(true);\n    socket.emit('abuff2-ack');\n  });\n\n  // expect sent blob to be buffer\n  socket.on('blob', function(a){\n    if (Buffer.isBuffer(a)) socket.emit('back');\n  });\n\n  // expect sent blob mixed with json to be buffer\n  socket.on('jsonblob', function(a) {\n    expect(a.hello).to.eql('lol');\n    expect(Buffer.isBuffer(a.message)).to.be(true);\n    expect(a.goodbye).to.eql('gotcha');\n    socket.emit('jsonblob-ack');\n  });\n\n  // expect blobs sent in order to arrive in correct order\n  var receivedblob1 = false;\n  var receivedblob2 = false;\n  socket.on('blob1', function(a) {\n    expect(Buffer.isBuffer(a)).to.be(true);\n    receivedblob1 = true;\n  });\n  socket.on('blob2', function(a) {\n    expect(receivedblob1).to.be(true);\n    expect(a).to.eql('second');\n    receivedblob2 = true;\n  });\n  socket.on('blob3', function(a) {\n    expect(Buffer.isBuffer(a)).to.be(true);\n    expect(receivedblob1).to.be(true);\n    expect(receivedblob2).to.be(true);\n    socket.emit('blob3-ack');\n  });\n\n  // emit buffer to base64 receiving browsers\n  socket.on('getbin', function() {\n    buf = new Buffer('asdfasdf', 'utf8');\n    socket.emit('takebin', buf);\n  });\n  \n  // emit multi words\n  socket.on('multi word', function() {\n    socket.emit('multi word', 'word');\n  });\n  \n  socket.on('multi-word', function() {\n    socket.emit('multi-word', 'word');\n  });\n});\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/.gitignore",
    "content": "# Xcode\n.DS_Store\n*/build/*\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\nprofile\n*.moved-aside\nDerivedData\n.idea/\n*.hmap\n*.xccheckout\n\n#CocoaPods\nPods\n\n#Carthage\nCarthage/Build\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/.travis.yml",
    "content": "language: objective-c\n\nosx_image: xcode7.1\nxcode_sdk: iphonesimulator9.0\n\nscript: 'sh scripts/ci.sh'\n\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/CHANGELOG.md",
    "content": "# Change Log\n\n## [Unreleased](https://github.com/SwiftyJSON/SwiftyJSON/tree/HEAD)\n\n[Full Changelog](https://github.com/SwiftyJSON/SwiftyJSON/compare/2.2.0...HEAD)\n\n**Closed issues:**\n\n- 156 compiler errors Mavericks + Xcode 6.2 [\\#220](https://github.com/SwiftyJSON/SwiftyJSON/issues/220)\n\n- 'AnyObject' is not convertible to 'String'; did you mean to use 'as!' to force downcast? [\\#218](https://github.com/SwiftyJSON/SwiftyJSON/issues/218)\n\n- pod -\\> SwiftyJSON \\(2.1.3\\) is out-of-date if we compare it to the version mentioned in README.md file. [\\#212](https://github.com/SwiftyJSON/SwiftyJSON/issues/212)\n\n- 无法获取到 2.2版本的 [\\#211](https://github.com/SwiftyJSON/SwiftyJSON/issues/211)\n\n- Publish Podspec for version 2.2.0 [\\#210](https://github.com/SwiftyJSON/SwiftyJSON/issues/210)\n\n- dropping elements? or am I doing something wrong? [\\#209](https://github.com/SwiftyJSON/SwiftyJSON/issues/209)\n\n- Not working with Swift 1.2 [\\#208](https://github.com/SwiftyJSON/SwiftyJSON/issues/208)\n\n- 在 Mac 项目里用 Carthage 无法编译 [\\#193](https://github.com/SwiftyJSON/SwiftyJSON/issues/193)\n\n- 使用中发现解析效率比较低 [\\#190](https://github.com/SwiftyJSON/SwiftyJSON/issues/190)\n\n- Looks like it will require a change of \"as\"es to \"as!\" for Swift 1.2... [\\#150](https://github.com/SwiftyJSON/SwiftyJSON/issues/150)\n\n- No response appeared [\\#118](https://github.com/SwiftyJSON/SwiftyJSON/issues/118)\n\n- Swift Optional Values from JSON [\\#116](https://github.com/SwiftyJSON/SwiftyJSON/issues/116)\n\n- It seems not easy to manipulate an array or dictionary? [\\#110](https://github.com/SwiftyJSON/SwiftyJSON/issues/110)\n\n**Merged pull requests:**\n\n- Fix for xcode 6.3..1 issue [\\#224](https://github.com/SwiftyJSON/SwiftyJSON/pull/224) ([datomnurdin](https://github.com/datomnurdin))\n\n- Update the first two examples snippets [\\#223](https://github.com/SwiftyJSON/SwiftyJSON/pull/223) ([kmikael](https://github.com/kmikael))\n\n- Allow .number to parse number from string instead of just numberValue [\\#219](https://github.com/SwiftyJSON/SwiftyJSON/pull/219) ([yonaskolb](https://github.com/yonaskolb))\n\n- Fixed spelling and grammar mistakes in README.md. Made some swift syntax... [\\#214](https://github.com/SwiftyJSON/SwiftyJSON/pull/214) ([pRizz](https://github.com/pRizz))\n\n## [2.2.0](https://github.com/SwiftyJSON/SwiftyJSON/tree/2.2.0) (2015-04-13)\n\n[Full Changelog](https://github.com/SwiftyJSON/SwiftyJSON/compare/2.1.3...2.2.0)\n\n**Closed issues:**\n\n- init doesn't set type correctly [\\#206](https://github.com/SwiftyJSON/SwiftyJSON/issues/206)\n\n- SwitfyJSON breaks with update to iOS 8.3 & Xcode 6.3 [\\#200](https://github.com/SwiftyJSON/SwiftyJSON/issues/200)\n\n- 'NSString?' is not convertible to 'String?' error with Swift 1.2 [\\#198](https://github.com/SwiftyJSON/SwiftyJSON/issues/198)\n\n- I can't install it by carthage [\\#181](https://github.com/SwiftyJSON/SwiftyJSON/issues/181)\n\n- Can't compare JSON to Float [\\#171](https://github.com/SwiftyJSON/SwiftyJSON/issues/171)\n\n- extend data to results [\\#160](https://github.com/SwiftyJSON/SwiftyJSON/issues/160)\n\n- Create JSON From String [\\#159](https://github.com/SwiftyJSON/SwiftyJSON/issues/159)\n\n- No Cocoapods support for iOS 7 [\\#151](https://github.com/SwiftyJSON/SwiftyJSON/issues/151)\n\n- Update to Swift 1.2 [\\#148](https://github.com/SwiftyJSON/SwiftyJSON/issues/148)\n\n- Url slashes ' / ' are being replaced with ' \\/ ' [\\#145](https://github.com/SwiftyJSON/SwiftyJSON/issues/145)\n\n- Issues when using carthage [\\#144](https://github.com/SwiftyJSON/SwiftyJSON/issues/144)\n\n- Can not convert \\[JSON\\] to JSON [\\#143](https://github.com/SwiftyJSON/SwiftyJSON/issues/143)\n\n- \\[!\\] Unable to find a specification for `SwiftyJSON \\(= 2.1.3\\)` [\\#141](https://github.com/SwiftyJSON/SwiftyJSON/issues/141)\n\n- Deployment target iOS 7 or iOS 8? [\\#131](https://github.com/SwiftyJSON/SwiftyJSON/issues/131)\n\n- Cocoapods support [\\#126](https://github.com/SwiftyJSON/SwiftyJSON/issues/126)\n\n**Merged pull requests:**\n\n- Only building tests for testing [\\#207](https://github.com/SwiftyJSON/SwiftyJSON/pull/207) ([spanage](https://github.com/spanage))\n\n- Added compatibility with Swift 1.2. [\\#204](https://github.com/SwiftyJSON/SwiftyJSON/pull/204) ([jankaltoun](https://github.com/jankaltoun))\n\n- Fix for issue \\#200 [\\#203](https://github.com/SwiftyJSON/SwiftyJSON/pull/203) ([chschu](https://github.com/chschu))\n\n- Updated to Swift 1.2 [\\#202](https://github.com/SwiftyJSON/SwiftyJSON/pull/202) ([scottdelly](https://github.com/scottdelly))\n\n- Updated to Swift 1.2 [\\#201](https://github.com/SwiftyJSON/SwiftyJSON/pull/201) ([scottdelly](https://github.com/scottdelly))\n\n- Update to Swift 1.2 [\\#199](https://github.com/SwiftyJSON/SwiftyJSON/pull/199) ([kimdv](https://github.com/kimdv))\n\n- Should not get subscript from AnyObject. [\\#196](https://github.com/SwiftyJSON/SwiftyJSON/pull/196) ([Candyroot](https://github.com/Candyroot))\n\n- Update for Swift 1.2 [\\#195](https://github.com/SwiftyJSON/SwiftyJSON/pull/195) ([justinmakaila](https://github.com/justinmakaila))\n\n- Update README.md [\\#194](https://github.com/SwiftyJSON/SwiftyJSON/pull/194) ([manijshrestha](https://github.com/manijshrestha))\n\n- Optimize the code to avoid useless casts to swift arrays. [\\#188](https://github.com/SwiftyJSON/SwiftyJSON/pull/188) ([mirion](https://github.com/mirion))\n\n- Fixed the buildable name in the OSX scheme [\\#187](https://github.com/SwiftyJSON/SwiftyJSON/pull/187) ([cnoon](https://github.com/cnoon))\n\n- Updated code signing identities for OSX target and tests [\\#186](https://github.com/SwiftyJSON/SwiftyJSON/pull/186) ([cnoon](https://github.com/cnoon))\n\n- Fix int overflow compile error [\\#178](https://github.com/SwiftyJSON/SwiftyJSON/pull/178) ([mono0926](https://github.com/mono0926))\n\n- Fixed a bug when accessing a value directly via a string subscript when the current object is a dictionary [\\#176](https://github.com/SwiftyJSON/SwiftyJSON/pull/176) ([JosephDuffy](https://github.com/JosephDuffy))\n\n- Better support for carthage users [\\#174](https://github.com/SwiftyJSON/SwiftyJSON/pull/174) ([rromanchuk](https://github.com/rromanchuk))\n\n- Fixes a 32bit/64bit issue. [\\#172](https://github.com/SwiftyJSON/SwiftyJSON/pull/172) ([enhorn](https://github.com/enhorn))\n\n- Update README for new Cocoapods [\\#170](https://github.com/SwiftyJSON/SwiftyJSON/pull/170) ([joelparkerhenderson](https://github.com/joelparkerhenderson))\n\n- Fixed a crash when entering json\\[\"NotExistPath\"\\] [\\#167](https://github.com/SwiftyJSON/SwiftyJSON/pull/167) ([ybeapps](https://github.com/ybeapps))\n\n- Adding Swift 1.2 support [\\#158](https://github.com/SwiftyJSON/SwiftyJSON/pull/158) ([Jasdev](https://github.com/Jasdev))\n\n- Fix issues with the OS X target and scheme [\\#156](https://github.com/SwiftyJSON/SwiftyJSON/pull/156) ([rastersize](https://github.com/rastersize))\n\n- Fix issues with the OS X target and scheme [\\#155](https://github.com/SwiftyJSON/SwiftyJSON/pull/155) ([rastersize](https://github.com/rastersize))\n\n- Remove SwiftJSON.xcodeproj/xcuserdata [\\#154](https://github.com/SwiftyJSON/SwiftyJSON/pull/154) ([rastersize](https://github.com/rastersize))\n\n- Change to not build test when building iOS framework target \\[Xcode 6.3 + external tools\\] [\\#153](https://github.com/SwiftyJSON/SwiftyJSON/pull/153) ([rastersize](https://github.com/rastersize))\n\n- Fix tests not building for 32-bit \\[Xcode 6.3\\] [\\#152](https://github.com/SwiftyJSON/SwiftyJSON/pull/152) ([rastersize](https://github.com/rastersize))\n\n- Swift 1.2 compatibility fixes [\\#149](https://github.com/SwiftyJSON/SwiftyJSON/pull/149) ([darrarski](https://github.com/darrarski))\n\n- \\[README.md\\] Setter for JSON array should use arrayObject not array  [\\#146](https://github.com/SwiftyJSON/SwiftyJSON/pull/146) ([lwu](https://github.com/lwu))\n\n- add missing ` in comments [\\#142](https://github.com/SwiftyJSON/SwiftyJSON/pull/142) ([zhxnlai](https://github.com/zhxnlai))\n\n- Fix README.md nested example [\\#139](https://github.com/SwiftyJSON/SwiftyJSON/pull/139) ([watsonbox](https://github.com/watsonbox))\n\n- Shared OSX Scheme. OSX target fixes. [\\#138](https://github.com/SwiftyJSON/SwiftyJSON/pull/138) ([haveahennessy](https://github.com/haveahennessy))\n\n- Casting to NSDictionary instead of \\[String : AnyObject\\] [\\#137](https://github.com/SwiftyJSON/SwiftyJSON/pull/137) ([clwkct](https://github.com/clwkct))\n\n- Update README.md [\\#136](https://github.com/SwiftyJSON/SwiftyJSON/pull/136) ([esbenvb](https://github.com/esbenvb))\n\n- Update README.md [\\#135](https://github.com/SwiftyJSON/SwiftyJSON/pull/135) ([esbenvb](https://github.com/esbenvb))\n\n- Fixed the broken Carthage OS X Support. [\\#134](https://github.com/SwiftyJSON/SwiftyJSON/pull/134) ([remaerd](https://github.com/remaerd))\n\n- Prefixed \"SequenceType\" extension with Module name [\\#124](https://github.com/SwiftyJSON/SwiftyJSON/pull/124) ([ravero](https://github.com/ravero))\n\n- Code cleaning [\\#123](https://github.com/SwiftyJSON/SwiftyJSON/pull/123) ([wiruzx](https://github.com/wiruzx))\n\n## [2.1.3](https://github.com/SwiftyJSON/SwiftyJSON/tree/2.1.3) (2015-01-10)\n\n[Full Changelog](https://github.com/SwiftyJSON/SwiftyJSON/compare/2.1.2...2.1.3)\n\n**Closed issues:**\n\n- Cannot install using Carthage [\\#122](https://github.com/SwiftyJSON/SwiftyJSON/issues/122)\n\n- Use of unresolved identifier 'dataFromNetworking' [\\#112](https://github.com/SwiftyJSON/SwiftyJSON/issues/112)\n\n- I can't parse out the string like \"{a:5}\" [\\#109](https://github.com/SwiftyJSON/SwiftyJSON/issues/109)\n\n- Cocoapods integration [\\#108](https://github.com/SwiftyJSON/SwiftyJSON/issues/108)\n\n- Compile Error In Loop Array [\\#107](https://github.com/SwiftyJSON/SwiftyJSON/issues/107)\n\n- Support for Carthage [\\#105](https://github.com/SwiftyJSON/SwiftyJSON/issues/105)\n\n**Merged pull requests:**\n\n- Minor grammar fixes to README [\\#128](https://github.com/SwiftyJSON/SwiftyJSON/pull/128) ([johngoren](https://github.com/johngoren))\n\n- Updated because podspec is now available... [\\#127](https://github.com/SwiftyJSON/SwiftyJSON/pull/127) ([johngoren](https://github.com/johngoren))\n\n- Fix access modificator of isEmpty property [\\#121](https://github.com/SwiftyJSON/SwiftyJSON/pull/121) ([wiruzx](https://github.com/wiruzx))\n\n- Make framework extension friendly [\\#119](https://github.com/SwiftyJSON/SwiftyJSON/pull/119) ([technomage](https://github.com/technomage))\n\n- add a new way to access Json [\\#117](https://github.com/SwiftyJSON/SwiftyJSON/pull/117) ([zhanghao111111111](https://github.com/zhanghao111111111))\n\n- fix the typos on the code snippets and the links in the TOC on README [\\#115](https://github.com/SwiftyJSON/SwiftyJSON/pull/115) ([floydpink](https://github.com/floydpink))\n\n- Use Mac' codesign identities for OSX targets [\\#114](https://github.com/SwiftyJSON/SwiftyJSON/pull/114) ([max-potapov](https://github.com/max-potapov))\n\n## [2.1.2](https://github.com/SwiftyJSON/SwiftyJSON/tree/2.1.2) (2014-12-13)\n\n[Full Changelog](https://github.com/SwiftyJSON/SwiftyJSON/compare/2.1.1...2.1.2)\n\n**Closed issues:**\n\n- Why can't we parse a rawString back to json object? [\\#101](https://github.com/SwiftyJSON/SwiftyJSON/issues/101)\n\n- Have a Piece of Code that might be of Value to SwiftyJSon [\\#97](https://github.com/SwiftyJSON/SwiftyJSON/issues/97)\n\n- build osx application \\(command line tool\\) with swiftyjson error [\\#96](https://github.com/SwiftyJSON/SwiftyJSON/issues/96)\n\n- 这个应该是bug吧，支持的不是很够 [\\#95](https://github.com/SwiftyJSON/SwiftyJSON/issues/95)\n\n- Length of an array [\\#90](https://github.com/SwiftyJSON/SwiftyJSON/issues/90)\n\n- Compilation error [\\#89](https://github.com/SwiftyJSON/SwiftyJSON/issues/89)\n\n- Can't set value [\\#88](https://github.com/SwiftyJSON/SwiftyJSON/issues/88)\n\n- Examples with AFHTTPSessionManager? [\\#86](https://github.com/SwiftyJSON/SwiftyJSON/issues/86)\n\n**Merged pull requests:**\n\n- Update README.md to add Carthage instructions [\\#113](https://github.com/SwiftyJSON/SwiftyJSON/pull/113) ([justinmakaila](https://github.com/justinmakaila))\n\n- Improve init performance for dictionaries and arrays [\\#111](https://github.com/SwiftyJSON/SwiftyJSON/pull/111) ([avorobjov](https://github.com/avorobjov))\n\n- Fix NSNumber != func [\\#106](https://github.com/SwiftyJSON/SwiftyJSON/pull/106) ([briankracoff](https://github.com/briankracoff))\n\n- Carthage Support [\\#104](https://github.com/SwiftyJSON/SwiftyJSON/pull/104) ([justinmakaila](https://github.com/justinmakaila))\n\n- Added read option for date strings [\\#103](https://github.com/SwiftyJSON/SwiftyJSON/pull/103) ([Dschee](https://github.com/Dschee))\n\n- Add Podspec \\(Correct mblsha podspec\\) [\\#100](https://github.com/SwiftyJSON/SwiftyJSON/pull/100) ([ValCapri](https://github.com/ValCapri))\n\n- Add podspec + make it work as a framework [\\#99](https://github.com/SwiftyJSON/SwiftyJSON/pull/99) ([mblsha](https://github.com/mblsha))\n\n- Adding new Feature: JsonMapper [\\#98](https://github.com/SwiftyJSON/SwiftyJSON/pull/98) ([Drogenix](https://github.com/Drogenix))\n\n- Change recommendation for Alamofire integration [\\#92](https://github.com/SwiftyJSON/SwiftyJSON/pull/92) ([JonathanPorta](https://github.com/JonathanPorta))\n\n## [2.1.1](https://github.com/SwiftyJSON/SwiftyJSON/tree/2.1.1) (2014-11-12)\n\n[Full Changelog](https://github.com/SwiftyJSON/SwiftyJSON/compare/2.1.0...2.1.1)\n\n**Closed issues:**\n\n- NSDictionary to json string to json object [\\#93](https://github.com/SwiftyJSON/SwiftyJSON/issues/93)\n\n- Error: use of unresolved identifier dataFromNetworking [\\#82](https://github.com/SwiftyJSON/SwiftyJSON/issues/82)\n\n- Type \\[SubscriptType\\] Does not conform to protocol 'StringLiteralConvertible' [\\#81](https://github.com/SwiftyJSON/SwiftyJSON/issues/81)\n\n- Doesn't conform literal protocols [\\#80](https://github.com/SwiftyJSON/SwiftyJSON/issues/80)\n\n- iOS 8.1 compatability [\\#79](https://github.com/SwiftyJSON/SwiftyJSON/issues/79)\n\n- Xcode 6.1 Compatibility [\\#78](https://github.com/SwiftyJSON/SwiftyJSON/issues/78)\n\n- Problem with xCode 6.1 [\\#76](https://github.com/SwiftyJSON/SwiftyJSON/issues/76)\n\n- Compilation errors [\\#75](https://github.com/SwiftyJSON/SwiftyJSON/issues/75)\n\n**Merged pull requests:**\n\n- Renamed type 'Unknow' to 'Unknown' [\\#94](https://github.com/SwiftyJSON/SwiftyJSON/pull/94) ([franklsf95](https://github.com/franklsf95))\n\n- Added OSX target. [\\#91](https://github.com/SwiftyJSON/SwiftyJSON/pull/91) ([carloslozano](https://github.com/carloslozano))\n\n- Add date ,dateValue [\\#87](https://github.com/SwiftyJSON/SwiftyJSON/pull/87) ([muukii0803](https://github.com/muukii0803))\n\n- Add parse JSON Date [\\#85](https://github.com/SwiftyJSON/SwiftyJSON/pull/85) ([ShineWu](https://github.com/ShineWu))\n\n- Update README.md [\\#84](https://github.com/SwiftyJSON/SwiftyJSON/pull/84) ([johngoren](https://github.com/johngoren))\n\n- Update README.md for typos [\\#83](https://github.com/SwiftyJSON/SwiftyJSON/pull/83) ([johngoren](https://github.com/johngoren))\n\n## [2.1.0](https://github.com/SwiftyJSON/SwiftyJSON/tree/2.1.0) (2014-10-19)\n\n[Full Changelog](https://github.com/SwiftyJSON/SwiftyJSON/compare/2.0.0...2.1.0)\n\n**Closed issues:**\n\n- 32bit test failures [\\#71](https://github.com/SwiftyJSON/SwiftyJSON/issues/71)\n\n- Trouble getting string representation [\\#70](https://github.com/SwiftyJSON/SwiftyJSON/issues/70)\n\n- JSON keep null [\\#69](https://github.com/SwiftyJSON/SwiftyJSON/issues/69)\n\n- Update .pbxproj to Deployment Target 8.0 [\\#66](https://github.com/SwiftyJSON/SwiftyJSON/issues/66)\n\n- Looping not working [\\#64](https://github.com/SwiftyJSON/SwiftyJSON/issues/64)\n\n**Merged pull requests:**\n\n- Get number from string in JSON.number [\\#74](https://github.com/SwiftyJSON/SwiftyJSON/pull/74) ([yonaskolb](https://github.com/yonaskolb))\n\n- Update SwiftyJSON.swift [\\#73](https://github.com/SwiftyJSON/SwiftyJSON/pull/73) ([MaddTheSane](https://github.com/MaddTheSane))\n\n- Generating Raw JSON Strings [\\#72](https://github.com/SwiftyJSON/SwiftyJSON/pull/72) ([lesmuc](https://github.com/lesmuc))\n\n- Making SourceKit not freak out about self.object.count being called [\\#68](https://github.com/SwiftyJSON/SwiftyJSON/pull/68) ([Noobish1](https://github.com/Noobish1))\n\n- Added support for Xcode 6.1 GM Seed 2. [\\#65](https://github.com/SwiftyJSON/SwiftyJSON/pull/65) ([rosskimes](https://github.com/rosskimes))\n\n## [2.0.0](https://github.com/SwiftyJSON/SwiftyJSON/tree/2.0.0) (2014-10-08)\n\n[Full Changelog](https://github.com/SwiftyJSON/SwiftyJSON/compare/1.1.0...2.0.0)\n\n**Closed issues:**\n\n- JSON to NSData [\\#62](https://github.com/SwiftyJSON/SwiftyJSON/issues/62)\n\n- Updating a json [\\#60](https://github.com/SwiftyJSON/SwiftyJSON/issues/60)\n\n**Merged pull requests:**\n\n- Update for new features \\[Issue \\#60\\] [\\#63](https://github.com/SwiftyJSON/SwiftyJSON/pull/63) ([tangplin](https://github.com/tangplin))\n\n## [1.1.0](https://github.com/SwiftyJSON/SwiftyJSON/tree/1.1.0) (2014-10-02)\n\n[Full Changelog](https://github.com/SwiftyJSON/SwiftyJSON/compare/1.0.0...1.1.0)\n\n**Closed issues:**\n\n- Long time to parse this json [\\#57](https://github.com/SwiftyJSON/SwiftyJSON/issues/57)\n\n**Merged pull requests:**\n\n- Merge develop [\\#59](https://github.com/SwiftyJSON/SwiftyJSON/pull/59) ([tangplin](https://github.com/tangplin))\n\n- Added SwiftyJSON lazy wrapping [\\#58](https://github.com/SwiftyJSON/SwiftyJSON/pull/58) ([k06a](https://github.com/k06a))\n\n## [1.0.0](https://github.com/SwiftyJSON/SwiftyJSON/tree/1.0.0) (2014-09-26)\n\n**Implemented enhancements:**\n\n- JNumber should be Number not double [\\#8](https://github.com/SwiftyJSON/SwiftyJSON/issues/8)\n\n- Separate implementations of protocols [\\#5](https://github.com/SwiftyJSON/SwiftyJSON/issues/5)\n\n**Fixed bugs:**\n\n- JNumber should be Number not double [\\#8](https://github.com/SwiftyJSON/SwiftyJSON/issues/8)\n\n- Fails to compile on Beta2 [\\#1](https://github.com/SwiftyJSON/SwiftyJSON/issues/1)\n\n**Closed issues:**\n\n- No such module \"SwiftyJSON\" [\\#49](https://github.com/SwiftyJSON/SwiftyJSON/issues/49)\n\n- how to transfer JSONValue object to Dictionary object?  [\\#48](https://github.com/SwiftyJSON/SwiftyJSON/issues/48)\n\n- JSONValue in @objc [\\#47](https://github.com/SwiftyJSON/SwiftyJSON/issues/47)\n\n- SwiftyJSON.swift:331:22: Use of undeclared type 'BooleanType' [\\#46](https://github.com/SwiftyJSON/SwiftyJSON/issues/46)\n\n- Problem converting JSONValue to AnyObject [\\#44](https://github.com/SwiftyJSON/SwiftyJSON/issues/44)\n\n- Can't use SwiftyJSON as part of a public API within a framework [\\#42](https://github.com/SwiftyJSON/SwiftyJSON/issues/42)\n\n- how to add JSONValue object into exist JSONValue [\\#40](https://github.com/SwiftyJSON/SwiftyJSON/issues/40)\n\n- Doesn't work in BETA 6 [\\#39](https://github.com/SwiftyJSON/SwiftyJSON/issues/39)\n\n- Can't access property [\\#38](https://github.com/SwiftyJSON/SwiftyJSON/issues/38)\n\n- Couldn't Compile and Run  [\\#37](https://github.com/SwiftyJSON/SwiftyJSON/issues/37)\n\n- Array index out of range [\\#35](https://github.com/SwiftyJSON/SwiftyJSON/issues/35)\n\n- Iterating through a JSON response [\\#32](https://github.com/SwiftyJSON/SwiftyJSON/issues/32)\n\n- NSNull in an array is discarded [\\#25](https://github.com/SwiftyJSON/SwiftyJSON/issues/25)\n\n- Updating Dictionary [\\#24](https://github.com/SwiftyJSON/SwiftyJSON/issues/24)\n\n- SourcekitService Terminated Issue [\\#22](https://github.com/SwiftyJSON/SwiftyJSON/issues/22)\n\n- Code does not compile in iOS 8 Beta 3. [\\#17](https://github.com/SwiftyJSON/SwiftyJSON/issues/17)\n\n- How to use .count [\\#14](https://github.com/SwiftyJSON/SwiftyJSON/issues/14)\n\n- Add to cocoapods [\\#12](https://github.com/SwiftyJSON/SwiftyJSON/issues/12)\n\n- String parsing [\\#9](https://github.com/SwiftyJSON/SwiftyJSON/issues/9)\n\n- Cocoapods integration [\\#4](https://github.com/SwiftyJSON/SwiftyJSON/issues/4)\n\n- How do I verify SwiftyJSON workS? [\\#2](https://github.com/SwiftyJSON/SwiftyJSON/issues/2)\n\n**Merged pull requests:**\n\n- Revert \"Added rawObject method for unwrapping JSONValue enum to objects\" [\\#56](https://github.com/SwiftyJSON/SwiftyJSON/pull/56) ([tangplin](https://github.com/tangplin))\n\n- set the default JSONReadingOptions to .AllowFragments [\\#55](https://github.com/SwiftyJSON/SwiftyJSON/pull/55) ([tangplin](https://github.com/tangplin))\n\n- Fix Unit Test [\\#54](https://github.com/SwiftyJSON/SwiftyJSON/pull/54) ([lingoer](https://github.com/lingoer))\n\n- Add NSError to Null type [\\#53](https://github.com/SwiftyJSON/SwiftyJSON/pull/53) ([lingoer](https://github.com/lingoer))\n\n- Refactor! [\\#51](https://github.com/SwiftyJSON/SwiftyJSON/pull/51) ([tangplin](https://github.com/tangplin))\n\n- Rename LISCENSE to LICENSE [\\#50](https://github.com/SwiftyJSON/SwiftyJSON/pull/50) ([fixe](https://github.com/fixe))\n\n- Added rawObject method for unwrapping JSONValue enum to objects [\\#45](https://github.com/SwiftyJSON/SwiftyJSON/pull/45) ([k06a](https://github.com/k06a))\n\n- made JSONValue public for usage in framework APIs [\\#43](https://github.com/SwiftyJSON/SwiftyJSON/pull/43) ([Dschee](https://github.com/Dschee))\n\n- Adding public/private modifiers so that SwiftyJSON can be used as a framework [\\#41](https://github.com/SwiftyJSON/SwiftyJSON/pull/41) ([jansabbe](https://github.com/jansabbe))\n\n- Rename LISCENSE to LICENSE [\\#36](https://github.com/SwiftyJSON/SwiftyJSON/pull/36) ([kriswallsmith](https://github.com/kriswallsmith))\n\n- Fix for Xcode 6 beta 5 changes [\\#34](https://github.com/SwiftyJSON/SwiftyJSON/pull/34) ([FahimF](https://github.com/FahimF))\n\n- Use BooleanType instead of LogicValue for Beta 5 [\\#33](https://github.com/SwiftyJSON/SwiftyJSON/pull/33) ([venables](https://github.com/venables))\n\n- Support for JSON as string [\\#31](https://github.com/SwiftyJSON/SwiftyJSON/pull/31) ([bsvingen](https://github.com/bsvingen))\n\n- Support building JSON messages in code. [\\#30](https://github.com/SwiftyJSON/SwiftyJSON/pull/30) ([johnno1962](https://github.com/johnno1962))\n\n- Update project to include access modifiers from Xcode beta 4. [\\#29](https://github.com/SwiftyJSON/SwiftyJSON/pull/29) ([Baltoli](https://github.com/Baltoli))\n\n- jsonvalue now conforms to sequence protocol for array values [\\#28](https://github.com/SwiftyJSON/SwiftyJSON/pull/28) ([NatashaTheRobot](https://github.com/NatashaTheRobot))\n\n- updated array and dictionary syntax for beta3 [\\#27](https://github.com/SwiftyJSON/SwiftyJSON/pull/27) ([NatashaTheRobot](https://github.com/NatashaTheRobot))\n\n- Update for Beta 4: exposing JSONValue with public [\\#26](https://github.com/SwiftyJSON/SwiftyJSON/pull/26) ([NachoSoto](https://github.com/NachoSoto))\n\n- SourceKitService Termination issue fix [\\#23](https://github.com/SwiftyJSON/SwiftyJSON/pull/23) ([ipraba](https://github.com/ipraba))\n\n- Add percent escaping to URL string [\\#21](https://github.com/SwiftyJSON/SwiftyJSON/pull/21) ([romanroibu](https://github.com/romanroibu))\n\n- Converting JSON objects to string is fixed [\\#20](https://github.com/SwiftyJSON/SwiftyJSON/pull/20) ([bkase](https://github.com/bkase))\n\n- JSONValue can be inited via string [\\#19](https://github.com/SwiftyJSON/SwiftyJSON/pull/19) ([bkase](https://github.com/bkase))\n\n- Updated to remove errors in Xcode Beta 3 [\\#18](https://github.com/SwiftyJSON/SwiftyJSON/pull/18) ([krishpop](https://github.com/krishpop))\n\n- add first and last in JSONValue, add string to double, int etc. [\\#16](https://github.com/SwiftyJSON/SwiftyJSON/pull/16) ([tangplin](https://github.com/tangplin))\n\n- add a \"url\" property to JSONValue [\\#15](https://github.com/SwiftyJSON/SwiftyJSON/pull/15) ([kyoh](https://github.com/kyoh))\n\n- Some typo fixes [\\#13](https://github.com/SwiftyJSON/SwiftyJSON/pull/13) ([gregbarbosa](https://github.com/gregbarbosa))\n\n- Separate protocols implementation, refactor prettyString composing [\\#6](https://github.com/SwiftyJSON/SwiftyJSON/pull/6) ([garnett](https://github.com/garnett))\n\n- Add project with both OSX/iOS module targets [\\#3](https://github.com/SwiftyJSON/SwiftyJSON/pull/3) ([garnett](https://github.com/garnett))\n\n\n\n\\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Example/AppDelegate.swift",
    "content": "//  SwiftyJSON.h\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport UIKit\nimport SwiftyJSON\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {\n        \n        let navigationController = self.window?.rootViewController as! UINavigationController\n        let viewController = navigationController.topViewController as! ViewController\n        \n        if let file = NSBundle(forClass:AppDelegate.self).pathForResource(\"SwiftyJSONTests\", ofType: \"json\") {\n            let data = NSData(contentsOfFile: file)!\n            let json = JSON(data:data)\n            viewController.json = json\n        } else {\n            viewController.json = JSON.null\n        }\n        \n        return true\n    }\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Example/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=\"6245\" systemVersion=\"13F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6238\"/>\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) 2014年 swiftyjson. 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=\"Example\" 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": "Carthage/Checkouts/SwiftyJSON/Example/Example/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=\"8121.17\" systemVersion=\"14D136\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"UBk-MQ-XCB\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"8101.14\"/>\n    </dependencies>\n    <customFonts key=\"customFonts\">\n        <mutableArray key=\"HelveticaNeue.ttc\">\n            <string>HelveticaNeue</string>\n        </mutableArray>\n    </customFonts>\n    <scenes>\n        <!--Navigation Controller-->\n        <scene sceneID=\"47d-Pt-u8a\">\n            <objects>\n                <navigationController id=\"UBk-MQ-XCB\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"lvE-eD-FyM\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"yoh-b6-vfD\" kind=\"relationship\" relationship=\"rootViewController\" id=\"o6q-xz-i46\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"haX-6x-iNc\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"91\" y=\"83\"/>\n        </scene>\n        <!--View Controller-->\n        <scene sceneID=\"DTx-dr-ptp\">\n            <objects>\n                <tableViewController id=\"yoh-b6-vfD\" customClass=\"ViewController\" customModule=\"Example\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" sectionIndexMinimumDisplayRowCount=\"9999\" rowHeight=\"44\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" id=\"NOM-19-CHr\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <prototypes>\n                            <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"disclosureIndicator\" hidesAccessoryWhenEditing=\"NO\" indentationLevel=\"1\" indentationWidth=\"0.0\" reuseIdentifier=\"JSONCell\" textLabel=\"hWf-y9-WjD\" detailTextLabel=\"52W-qf-qmY\" style=\"IBUITableViewCellStyleValue1\" id=\"OnB-ua-KwN\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"86\" width=\"600\" height=\"44\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"OnB-ua-KwN\" id=\"dt7-WG-Czg\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"567\" height=\"44\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\" \" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"hWf-y9-WjD\">\n                                            <rect key=\"frame\" x=\"15\" y=\"13\" width=\"4.5\" height=\"19.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                            <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                        <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\" \" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"52W-qf-qmY\">\n                                            <rect key=\"frame\" x=\"561\" y=\"15\" width=\"4\" height=\"16.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                            <fontDescription key=\"fontDescription\" name=\"HelveticaNeue\" family=\"Helvetica Neue\" pointSize=\"14\"/>\n                                            <color key=\"textColor\" red=\"0.55686274509803924\" green=\"0.55686274509803924\" blue=\"0.57647058823529407\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                </tableViewCellContentView>\n                                <connections>\n                                    <segue destination=\"UBk-MQ-XCB\" kind=\"showDetail\" id=\"sAK-oo-Wa8\"/>\n                                </connections>\n                            </tableViewCell>\n                        </prototypes>\n                        <sections/>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"yoh-b6-vfD\" id=\"Xly-yf-8xp\"/>\n                            <outlet property=\"delegate\" destination=\"yoh-b6-vfD\" id=\"Zq2-0k-TIX\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" id=\"cah-Bi-nki\">\n                        <nil key=\"title\"/>\n                    </navigationItem>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"eXg-Bd-TT0\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"775\" y=\"83\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Example/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      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Example/Images.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"retina4\",\n      \"filename\" : \"Default@2x.png\",\n      \"minimum-system-version\" : \"7.0\",\n      \"orientation\" : \"portrait\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Example/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</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\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Example/SwiftyJSONTests.json",
    "content": "[\n  {\n  \"coordinates\":null,\n  \"truncated\":false,\n  \"created_at\":\"Tue Aug 28 21:16:23 +0000 2012\",\n  \"favorited\":false,\n  \"id_str\":\"240558470661799936\",\n  \"in_reply_to_user_id_str\":null,\n  \"entities\":{\n  \"urls\":[\n  \n  ],\n  \"hashtags\":[\n  \n  ],\n  \"user_mentions\":[\n  \n  ]\n  },\n  \"text\":\"just another test\",\n  \"contributors\":null,\n  \"id\":240558470661799936,\n  \"retweet_count\":0,\n  \"in_reply_to_status_id_str\":null,\n  \"geo\":null,\n  \"retweeted\":false,\n  \"in_reply_to_user_id\":null,\n  \"place\":null,\n  \"source\":\"&lt;a href=\\\"//realitytechnicians.com\\\" rel=\\\"\\\"nofollow\\\"\\\"&gt;OAuth Dancer Reborn&lt;/a&gt;\",\n  \"user\":{\n  \"name\":\"OAuth Dancer\",\n  \"profile_sidebar_fill_color\":\"DDEEF6\",\n  \"profile_background_tile\":true,\n  \"profile_sidebar_border_color\":\"C0DEED\",\n  \"profile_image_url\":\"http://a0.twimg.com/profile_images/730275945/oauth-dancer_normal.jpg\",\n  \"created_at\":\"Wed Mar 03 19:37:35 +0000 2010\",\n  \"location\":\"San Francisco, CA\",\n  \"follow_request_sent\":false,\n  \"id_str\":\"119476949\",\n  \"is_translator\":false,\n  \"profile_link_color\":\"0084B4\",\n  \"entities\":{\n  \"url\":{\n  \"urls\":[\n          {\n          \"expanded_url\":null,\n          \"url\":\"http://bit.ly/oauth-dancer\",\n          \"indices\":[\n                     0,\n                     26\n                     ],\n          \"display_url\":null\n          }\n          ]\n  },\n  \"description\":null\n  },\n  \"default_profile\":false,\n  \"url\":\"http://bit.ly/oauth-dancer\",\n  \"contributors_enabled\":false,\n  \"favourites_count\":7,\n  \"utc_offset\":null,\n  \"profile_image_url_https\":\"https://si0.twimg.com/profile_images/730275945/oauth-dancer_normal.jpg\",\n  \"id\":119476949,\n  \"listed_count\":1,\n  \"profile_use_background_image\":true,\n  \"profile_text_color\":\"333333\",\n  \"followers_count\":28,\n  \"lang\":\"en\",\n  \"protected\":false,\n  \"geo_enabled\":true,\n  \"notifications\":false,\n  \"description\":\"\",\n  \"profile_background_color\":\"C0DEED\",\n  \"verified\":false,\n  \"time_zone\":null,\n  \"profile_background_image_url_https\":\"https://si0.twimg.com/profile_background_images/80151733/oauth-dance.png\",\n  \"statuses_count\":166,\n  \"profile_background_image_url\":\"http://a0.twimg.com/profile_background_images/80151733/oauth-dance.png\",\n  \"default_profile_image\":false,\n  \"friends_count\":14,\n  \"following\":false,\n  \"show_all_inline_media\":false,\n  \"screen_name\":\"oauth_dancer\"\n  },\n  \"in_reply_to_screen_name\":null,\n  \"in_reply_to_status_id\":null\n  },\n  {\n  \"coordinates\":{\n  \"coordinates\":[\n                 -122.25831,\n                 37.871609\n                 ],\n  \"type\":\"Point\"\n  },\n  \"truncated\":false,\n  \"created_at\":\"Tue Aug 28 21:08:15 +0000 2012\",\n  \"favorited\":false,\n  \"id_str\":\"240556426106372096\",\n  \"in_reply_to_user_id_str\":null,\n  \"entities\":{\n  \"urls\":[\n          {\n          \"expanded_url\":\"http://blogs.ischool.berkeley.edu/i290-abdt-s12/\",\n          \"url\":\"http://t.co/bfj7zkDJ\",\n          \"indices\":[\n                     79,\n                     99\n                     ],\n          \"display_url\":\"blogs.ischool.berkeley.edu/i290-abdt-s12/\"\n          }\n          ],\n  \"hashtags\":[\n  \n  ],\n  \"user_mentions\":[\n                   {\n                   \"name\":\"Cal\",\n                   \"id_str\":\"17445752\",\n                   \"id\":17445752,\n                   \"indices\":[\n                              60,\n                              64\n                              ],\n                   \"screen_name\":\"Cal\"\n                   },\n                   {\n                   \"name\":\"Othman Laraki\",\n                   \"id_str\":\"20495814\",\n                   \"id\":20495814,\n                   \"indices\":[\n                              70,\n                              77\n                              ],\n                   \"screen_name\":\"othman\"\n                   }\n                   ]\n  },\n  \"text\":\"lecturing at the \\\"analyzing big data with twitter\\\" class at @cal with @othman  http://t.co/bfj7zkDJ\",\n  \"contributors\":null,\n  \"id\":240556426106372096,\n  \"retweet_count\":3,\n  \"in_reply_to_status_id_str\":null,\n  \"geo\":{\n  \"coordinates\":[\n                 37.871609,\n                 -122.25831\n                 ],\n  \"type\":\"Point\"\n  },\n  \"retweeted\":false,\n  \"possibly_sensitive\":false,\n  \"in_reply_to_user_id\":null,\n  \"place\":{\n  \"name\":\"Berkeley\",\n  \"country_code\":\"US\",\n  \"country\":\"United States\",\n  \"attributes\":{\n  \n  },\n  \"url\":\"http://api.twitter.com/1/geo/id/5ef5b7f391e30aff.json\",\n  \"id\":\"5ef5b7f391e30aff\",\n  \"bounding_box\":{\n  \"coordinates\":[\n                 [\n                  [\n                   -122.367781,\n                   37.835727\n                   ],\n                  [\n                   -122.234185,\n                   37.835727\n                   ],\n                  [\n                   -122.234185,\n                   37.905824\n                   ],\n                  [\n                   -122.367781,\n                   37.905824\n                   ]\n                  ]\n                 ],\n  \"type\":\"Polygon\"\n  },\n  \"full_name\":\"Berkeley, CA\",\n  \"place_type\":\"city\"\n  },\n  \"source\":\"&lt;a href=\\\"//www.apple.com\\\"\\\" rel=\\\"\\\"nofollow\\\"\\\"&gt;Safari on iOS&lt;/a&gt;\",\n  \"user\":{\n  \"name\":\"Raffi Krikorian\",\n  \"profile_sidebar_fill_color\":\"DDEEF6\",\n  \"profile_background_tile\":false,\n  \"profile_sidebar_border_color\":\"C0DEED\",\n  \"profile_image_url\":\"http://a0.twimg.com/profile_images/1270234259/raffi-headshot-casual_normal.png\",\n  \"created_at\":\"Sun Aug 19 14:24:06 +0000 2007\",\n  \"location\":\"San Francisco, California\",\n  \"follow_request_sent\":false,\n  \"id_str\":\"8285392\",\n  \"is_translator\":false,\n  \"profile_link_color\":\"0084B4\",\n  \"entities\":{\n  \"url\":{\n  \"urls\":[\n          {\n          \"expanded_url\":\"http://about.me/raffi.krikorian\",\n          \"url\":\"http://t.co/eNmnM6q\",\n          \"indices\":[\n                     0,\n                     19\n                     ],\n          \"display_url\":\"about.me/raffi.krikorian\"\n          }\n          ]\n  },\n  \"description\":{\n  \"urls\":[\n  \n  ]\n  }\n  },\n  \"default_profile\":true,\n  \"url\":\"http://t.co/eNmnM6q\",\n  \"contributors_enabled\":false,\n  \"favourites_count\":724,\n  \"utc_offset\":-28800,\n  \"profile_image_url_https\":\"https://si0.twimg.com/profile_images/1270234259/raffi-headshot-casual_normal.png\",\n  \"id\":8285392,\n  \"listed_count\":619,\n  \"profile_use_background_image\":true,\n  \"profile_text_color\":\"333333\",\n  \"followers_count\":18752,\n  \"lang\":\"en\",\n  \"protected\":false,\n  \"geo_enabled\":true,\n  \"notifications\":false,\n  \"description\":\"Director of @twittereng's Platform Services. I break things.\",\n  \"profile_background_color\":\"C0DEED\",\n  \"verified\":false,\n  \"time_zone\":\"Pacific Time (US &amp; Canada)\",\n  \"profile_background_image_url_https\":\"https://si0.twimg.com/images/themes/theme1/bg.png\",\n  \"statuses_count\":5007,\n  \"profile_background_image_url\":\"http://a0.twimg.com/images/themes/theme1/bg.png\",\n  \"default_profile_image\":false,\n  \"friends_count\":701,\n  \"following\":true,\n  \"show_all_inline_media\":true,\n  \"screen_name\":\"raffi\"\n  },\n  \"in_reply_to_screen_name\":null,\n  \"in_reply_to_status_id\":null\n  },\n  {\n  \"coordinates\":null,\n  \"truncated\":false,\n  \"created_at\":\"Tue Aug 28 19:59:34 +0000 2012\",\n  \"favorited\":false,\n  \"id_str\":\"240539141056638977\",\n  \"in_reply_to_user_id_str\":null,\n  \"entities\":{\n  \"urls\":[\n  \n  ],\n  \"hashtags\":[\n  \n  ],\n  \"user_mentions\":[\n  \n  ]\n  },\n  \"text\":\"You'd be right more often if you thought you were wrong.\",\n  \"contributors\":null,\n  \"id\":240539141056638977,\n  \"retweet_count\":1,\n  \"in_reply_to_status_id_str\":null,\n  \"geo\":null,\n  \"retweeted\":false,\n  \"in_reply_to_user_id\":null,\n  \"place\":null,\n  \"source\":\"web\",\n  \"user\":{\n  \"name\":\"Taylor Singletary\",\n  \"profile_sidebar_fill_color\":\"FBFBFB\",\n  \"profile_background_tile\":true,\n  \"profile_sidebar_border_color\":\"000000\",\n  \"profile_image_url\":\"http://a0.twimg.com/profile_images/2546730059/f6a8zq58mg1hn0ha8vie_normal.jpeg\",\n  \"created_at\":\"Wed Mar 07 22:23:19 +0000 2007\",\n  \"location\":\"San Francisco, CA\",\n  \"follow_request_sent\":false,\n  \"id_str\":\"819797\",\n  \"is_translator\":false,\n  \"profile_link_color\":\"c71818\",\n  \"entities\":{\n  \"url\":{\n  \"urls\":[\n          {\n          \"expanded_url\":\"http://www.rebelmouse.com/episod/\",\n          \"url\":\"http://t.co/Lxw7upbN\",\n          \"indices\":[\n                     0,\n                     20\n                     ],\n          \"display_url\":\"rebelmouse.com/episod/\"\n          }\n          ]\n  },\n  \"description\":{\n  \"urls\":[\n  \n  ]\n  }\n  },\n  \"default_profile\":false,\n  \"url\":\"http://t.co/Lxw7upbN\",\n  \"contributors_enabled\":false,\n  \"favourites_count\":15990,\n  \"utc_offset\":-28800,\n  \"profile_image_url_https\":\"https://si0.twimg.com/profile_images/2546730059/f6a8zq58mg1hn0ha8vie_normal.jpeg\",\n  \"id\":819797,\n  \"listed_count\":340,\n  \"profile_use_background_image\":true,\n  \"profile_text_color\":\"D20909\",\n  \"followers_count\":7126,\n  \"lang\":\"en\",\n  \"protected\":false,\n  \"geo_enabled\":true,\n  \"notifications\":false,\n  \"description\":\"Reality Technician, Twitter API team, synthesizer enthusiast; a most excellent adventure in timelines. I know it's hard to believe in something you can't see.\",\n  \"profile_background_color\":\"000000\",\n  \"verified\":false,\n  \"time_zone\":\"Pacific Time (US &amp; Canada)\",\n  \"profile_background_image_url_https\":\"https://si0.twimg.com/profile_background_images/643655842/hzfv12wini4q60zzrthg.png\",\n  \"statuses_count\":18076,\n  \"profile_background_image_url\":\"http://a0.twimg.com/profile_background_images/643655842/hzfv12wini4q60zzrthg.png\",\n  \"default_profile_image\":false,\n  \"friends_count\":5444,\n  \"following\":true,\n  \"show_all_inline_media\":true,\n  \"screen_name\":\"episod\"\n  },\n  \"in_reply_to_screen_name\":null,\n  \"in_reply_to_status_id\":null\n  }\n  ]"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Example/ViewController.swift",
    "content": "//  SwiftyJSON.h\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport UIKit\nimport SwiftyJSON\n\nclass ViewController: UITableViewController {\n\n    var json: JSON = JSON.null\n    \n    // MARK: - Table view data source\n\n    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {\n        return 1\n    }\n\n    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        switch self.json.type {\n        case Type.Array, Type.Dictionary:\n            return self.json.count\n        default:\n            return 1\n        }\n    }\n\n    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCellWithIdentifier(\"JSONCell\", forIndexPath: indexPath) as UITableViewCell\n            \n        let row = indexPath.row\n        \n        switch self.json.type {\n        case .Array:\n            cell.textLabel?.text = \"\\(row)\"\n            cell.detailTextLabel?.text = self.json.arrayValue.description\n        case .Dictionary:\n            let key: AnyObject = Array(self.json.dictionaryValue.keys)[row]\n            let value = self.json[key as! String]\n            cell.textLabel?.text = \"\\(key)\"\n            cell.detailTextLabel?.text = value.description\n        default:\n            cell.textLabel?.text = \"\"\n            cell.detailTextLabel?.text = self.json.description\n        }\n        \n        return cell\n    }\n\n    // MARK: - Navigation\n\n    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {\n\n        var nextController: UIViewController?\n        switch UIDevice.currentDevice().systemVersion.compare(\"8.0.0\", options: NSStringCompareOptions.NumericSearch) {\n        case .OrderedSame, .OrderedDescending:\n            nextController = (segue.destinationViewController as! UINavigationController).topViewController\n        case .OrderedAscending:\n            nextController = segue.destinationViewController\n        }\n        \n        if let indexPath = self.tableView.indexPathForSelectedRow {\n            let row = indexPath.row\n            var nextJson: JSON = JSON.null\n            switch self.json.type {\n            case .Array:\n                nextJson = self.json[row]\n            case .Dictionary where row < self.json.dictionaryValue.count:\n                let key = Array(self.json.dictionaryValue.keys)[row]\n                if let value = self.json.dictionary?[key] {\n                    nextJson = value\n                }\n            default:\n                print(\"\")\n            }\n            (nextController as! ViewController).json = nextJson\n            print(nextJson)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Example.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\tA82A1C1F19D926B8009A653D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82A1C1E19D926B8009A653D /* AppDelegate.swift */; };\n\t\tA82A1C2419D926B8009A653D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A82A1C2219D926B8009A653D /* Main.storyboard */; };\n\t\tA82A1C2619D926B8009A653D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A82A1C2519D926B8009A653D /* Images.xcassets */; };\n\t\tA82A1C2919D926B8009A653D /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = A82A1C2719D926B8009A653D /* LaunchScreen.xib */; };\n\t\tA82A1C4019D94AE5009A653D /* SwiftyJSONTests.json in Resources */ = {isa = PBXBuildFile; fileRef = A82A1C3F19D94AE5009A653D /* SwiftyJSONTests.json */; };\n\t\tA82A1C5619D95606009A653D /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82A1C5519D95606009A653D /* ViewController.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t04294C581BE5A9DE00D0397E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = A82A1C4719D94E86009A653D /* SwiftyJSON.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = E4D7CCE81B9465A700EE7221;\n\t\t\tremoteInfo = \"SwiftyJSON watchOS\";\n\t\t};\n\t\t04294C5A1BE5A9DE00D0397E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = A82A1C4719D94E86009A653D /* SwiftyJSON.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 7236B4F61BAC14150020529B;\n\t\t\tremoteInfo = \"SwiftyJSON tvOS\";\n\t\t};\n\t\t04294C5C1BE5A9DE00D0397E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = A82A1C4719D94E86009A653D /* SwiftyJSON.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = A8580F741BCF5C5B00DA927B;\n\t\t\tremoteInfo = \"SwiftyJSON tvOS Tests\";\n\t\t};\n\t\tA8BF45AA1B871E100066C032 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = A82A1C4719D94E86009A653D /* SwiftyJSON.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 2E4FEFDB19575BE100351305;\n\t\t\tremoteInfo = \"SwiftyJSON iOS\";\n\t\t};\n\t\tA8BF45AC1B871E100066C032 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = A82A1C4719D94E86009A653D /* SwiftyJSON.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 2E4FEFE619575BE100351305;\n\t\t\tremoteInfo = \"SwiftyJSON iOS Tests\";\n\t\t};\n\t\tA8BF45AE1B871E100066C032 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = A82A1C4719D94E86009A653D /* SwiftyJSON.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 9C7DFC5B1A9102BD005AA3F7;\n\t\t\tremoteInfo = \"SwiftyJSON OSX\";\n\t\t};\n\t\tA8BF45B01B871E100066C032 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = A82A1C4719D94E86009A653D /* SwiftyJSON.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 9C7DFC651A9102BD005AA3F7;\n\t\t\tremoteInfo = \"SwiftyJSON OSX Tests\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tA82A1C5419D94E97009A653D /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t04294C501BE5A9DE00D0397E /* Playground.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = Playground.playground; sourceTree = \"<group>\"; };\n\t\tA82A1C1919D926B8009A653D /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA82A1C1D19D926B8009A653D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tA82A1C1E19D926B8009A653D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tA82A1C2319D926B8009A653D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tA82A1C2519D926B8009A653D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\tA82A1C2819D926B8009A653D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = \"<group>\"; };\n\t\tA82A1C3F19D94AE5009A653D /* SwiftyJSONTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = SwiftyJSONTests.json; sourceTree = \"<group>\"; };\n\t\tA82A1C4719D94E86009A653D /* SwiftyJSON.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = SwiftyJSON.xcodeproj; path = ../SwiftyJSON.xcodeproj; sourceTree = \"<group>\"; };\n\t\tA82A1C5519D95606009A653D /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tA82A1C1619D926B8009A653D /* 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\tA82A1C1019D926B8009A653D = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t04294C501BE5A9DE00D0397E /* Playground.playground */,\n\t\t\t\tA82A1C4719D94E86009A653D /* SwiftyJSON.xcodeproj */,\n\t\t\t\tA82A1C1B19D926B8009A653D /* Example */,\n\t\t\t\tA82A1C1A19D926B8009A653D /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA82A1C1A19D926B8009A653D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA82A1C1919D926B8009A653D /* Example.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA82A1C1B19D926B8009A653D /* Example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA82A1C3F19D94AE5009A653D /* SwiftyJSONTests.json */,\n\t\t\t\tA82A1C1E19D926B8009A653D /* AppDelegate.swift */,\n\t\t\t\tA82A1C5519D95606009A653D /* ViewController.swift */,\n\t\t\t\tA82A1C2219D926B8009A653D /* Main.storyboard */,\n\t\t\t\tA82A1C2519D926B8009A653D /* Images.xcassets */,\n\t\t\t\tA82A1C2719D926B8009A653D /* LaunchScreen.xib */,\n\t\t\t\tA82A1C1C19D926B8009A653D /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = Example;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA82A1C1C19D926B8009A653D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA82A1C1D19D926B8009A653D /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA8BF45A41B871E0F0066C032 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA8BF45AB1B871E100066C032 /* SwiftyJSON.framework */,\n\t\t\t\tA8BF45AD1B871E100066C032 /* SwiftyJSON iOS Tests.xctest */,\n\t\t\t\tA8BF45AF1B871E100066C032 /* SwiftyJSON.framework */,\n\t\t\t\tA8BF45B11B871E100066C032 /* SwiftyJSON OSX Tests.xctest */,\n\t\t\t\t04294C591BE5A9DE00D0397E /* SwiftyJSON.framework */,\n\t\t\t\t04294C5B1BE5A9DE00D0397E /* SwiftyJSON.framework */,\n\t\t\t\t04294C5D1BE5A9DE00D0397E /* SwiftyJSON tvOS Tests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tA82A1C1819D926B8009A653D /* Example */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = A82A1C3819D926B8009A653D /* Build configuration list for PBXNativeTarget \"Example\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA82A1C1519D926B8009A653D /* Sources */,\n\t\t\t\tA82A1C1619D926B8009A653D /* Frameworks */,\n\t\t\t\tA82A1C1719D926B8009A653D /* Resources */,\n\t\t\t\tA82A1C5419D94E97009A653D /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Example;\n\t\t\tproductName = Example;\n\t\t\tproductReference = A82A1C1919D926B8009A653D /* Example.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tA82A1C1119D926B8009A653D /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0700;\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t\tORGANIZATIONNAME = swiftyjson;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tA82A1C1819D926B8009A653D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = A82A1C1419D926B8009A653D /* Build configuration list for PBXProject \"Example\" */;\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 = A82A1C1019D926B8009A653D;\n\t\t\tproductRefGroup = A82A1C1A19D926B8009A653D /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = A8BF45A41B871E0F0066C032 /* Products */;\n\t\t\t\t\tProjectRef = A82A1C4719D94E86009A653D /* SwiftyJSON.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tA82A1C1819D926B8009A653D /* Example */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t04294C591BE5A9DE00D0397E /* SwiftyJSON.framework */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.framework;\n\t\t\tpath = SwiftyJSON.framework;\n\t\t\tremoteRef = 04294C581BE5A9DE00D0397E /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t04294C5B1BE5A9DE00D0397E /* SwiftyJSON.framework */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.framework;\n\t\t\tpath = SwiftyJSON.framework;\n\t\t\tremoteRef = 04294C5A1BE5A9DE00D0397E /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t04294C5D1BE5A9DE00D0397E /* SwiftyJSON tvOS Tests.xctest */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.cfbundle;\n\t\t\tpath = \"SwiftyJSON tvOS Tests.xctest\";\n\t\t\tremoteRef = 04294C5C1BE5A9DE00D0397E /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\tA8BF45AB1B871E100066C032 /* SwiftyJSON.framework */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.framework;\n\t\t\tpath = SwiftyJSON.framework;\n\t\t\tremoteRef = A8BF45AA1B871E100066C032 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\tA8BF45AD1B871E100066C032 /* SwiftyJSON iOS Tests.xctest */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.cfbundle;\n\t\t\tpath = \"SwiftyJSON iOS Tests.xctest\";\n\t\t\tremoteRef = A8BF45AC1B871E100066C032 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\tA8BF45AF1B871E100066C032 /* SwiftyJSON.framework */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.framework;\n\t\t\tpath = SwiftyJSON.framework;\n\t\t\tremoteRef = A8BF45AE1B871E100066C032 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\tA8BF45B11B871E100066C032 /* SwiftyJSON OSX Tests.xctest */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.cfbundle;\n\t\t\tpath = \"SwiftyJSON OSX Tests.xctest\";\n\t\t\tremoteRef = A8BF45B01B871E100066C032 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tA82A1C1719D926B8009A653D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA82A1C2419D926B8009A653D /* Main.storyboard in Resources */,\n\t\t\t\tA82A1C2919D926B8009A653D /* LaunchScreen.xib in Resources */,\n\t\t\t\tA82A1C2619D926B8009A653D /* Images.xcassets in Resources */,\n\t\t\t\tA82A1C4019D94AE5009A653D /* SwiftyJSONTests.json in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tA82A1C1519D926B8009A653D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA82A1C5619D95606009A653D /* ViewController.swift in Sources */,\n\t\t\t\tA82A1C1F19D926B8009A653D /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\tA82A1C2219D926B8009A653D /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tA82A1C2319D926B8009A653D /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA82A1C2719D926B8009A653D /* LaunchScreen.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tA82A1C2819D926B8009A653D /* 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\tA82A1C3619D926B8009A653D /* 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 = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\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\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA82A1C3719D926B8009A653D /* 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 = \"iPhone Distribution\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA82A1C3919D926B8009A653D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tINFOPLIST_FILE = Example/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA82A1C3A19D926B8009A653D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Distribution\";\n\t\t\t\tINFOPLIST_FILE = Example/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\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\tA82A1C1419D926B8009A653D /* Build configuration list for PBXProject \"Example\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA82A1C3619D926B8009A653D /* Debug */,\n\t\t\t\tA82A1C3719D926B8009A653D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tA82A1C3819D926B8009A653D /* Build configuration list for PBXNativeTarget \"Example\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA82A1C3919D926B8009A653D /* Debug */,\n\t\t\t\tA82A1C3A19D926B8009A653D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = A82A1C1119D926B8009A653D /* Project object */;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Playground.playground/Contents.swift",
    "content": "//: Playground - noun: a place where people can play\n\nimport SwiftyJSON\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Playground.playground/contents.xcplayground",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<playground version='5.0' target-platform='ios'>\n    <timeline fileName='timeline.xctimeline'/>\n</playground>"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Example/Playground.playground/timeline.xctimeline",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Timeline\n   version = \"3.0\">\n   <TimelineItems>\n   </TimelineItems>\n</Timeline>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Ruoyu Fu\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\nall copies 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\nTHE SOFTWARE.\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Package.swift",
    "content": ""
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/README.md",
    "content": "#SwiftyJSON [中文介绍](http://tangplin.github.io/swiftyjson/)\n\n[![Travis CI](https://travis-ci.org/SwiftyJSON/SwiftyJSON.svg?branch=master)](https://travis-ci.org/SwiftyJSON/SwiftyJSON)\n\nSwiftyJSON makes it easy to deal with JSON data in Swift.\n\n1. [Why is the typical JSON handling in Swift NOT good](#why-is-the-typical-json-handling-in-swift-not-good)\n1. [Requirements](#requirements)\n1. [Integration](#integration)\n1. [Usage](#usage)\n\t- [Initialization](#initialization)\n\t- [Subscript](#subscript)\n\t- [Loop](#loop)\n\t- [Error](#error)\n\t- [Optional getter](#optional-getter)\n\t- [Non-optional getter](#non-optional-getter)\n\t- [Setter](#setter)\n\t- [Raw object](#raw-object)\n\t- [Literal convertibles](#literal-convertibles)\n1. [Work with Alamofire](#work-with-alamofire)\n\n##Why is the typical JSON handling in Swift NOT good?\nSwift is very strict about types. But although explicit typing is good for saving us from mistakes, it becomes painful when dealing with JSON and other areas that are, by nature, implicit about types.\n\nTake the Twitter API for example. Say we want to retrieve a user's \"name\" value of some tweet in Swift (according to Twitter's API https://dev.twitter.com/docs/api/1.1/get/statuses/home_timeline).\n\nThe code would look like this:\n\n```swift\n\nif let statusesArray = try? NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [[String: AnyObject]],\n    let user = statusesArray[0][\"user\"] as? [String: AnyObject],\n    let username = user[\"name\"] as? String {\n    // Finally we got the username\n}\n\n```\n\nIt's not good.\n\nEven if we use optional chaining, it would be messy:\n\n```swift\n\nif let JSONObject = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [[String: AnyObject]],\n    let username = (JSONObject[0][\"user\"] as? [String: AnyObject])?[\"name\"] as? String {\n        // There's our username\n}\n\n```\nAn unreadable mess--for something that should really be simple!\n\nWith SwiftyJSON all you have to do is:\n\n```swift\n\nlet json = JSON(data: dataFromNetworking)\nif let userName = json[0][\"user\"][\"name\"].string {\n  //Now you got your value\n}\n\n```\n\nAnd don't worry about the Optional Wrapping thing. It's done for you automatically.\n\n```swift\n\nlet json = JSON(data: dataFromNetworking)\nif let userName = json[999999][\"wrong_key\"][\"wrong_name\"].string {\n    //Calm down, take it easy, the \".string\" property still produces the correct Optional String type with safety\n} else {\n    //Print the error\n    print(json[999999][\"wrong_key\"][\"wrong_name\"])\n}\n\n```\n\n## Requirements\n\n- iOS 7.0+ / Mac OS X 10.9+\n- Xcode 7\n\n##Integration\n\n####CocoaPods (iOS 8+, OS X 10.9+)\nYou can use [Cocoapods](http://cocoapods.org/) to install `SwiftyJSON`by adding it to your `Podfile`:\n```ruby\nplatform :ios, '8.0'\nuse_frameworks!\n\ntarget 'MyApp' do\n\tpod 'SwiftyJSON', :git => 'https://github.com/SwiftyJSON/SwiftyJSON.git'\nend\n```\nNote that this requires CocoaPods version 36, and your iOS deployment target to be at least 8.0:\n\n####Carthage (iOS 8+, OS X 10.9+)\nYou can use [Carthage](https://github.com/Carthage/Carthage) to install `SwiftyJSON` by adding it to your `Cartfile`:\n```\ngithub \"SwiftyJSON/SwiftyJSON\"\n```\n\n####Manually (iOS 7+, OS X 10.9+)\n\nTo use this library in your project manually you may:  \n\n1. for Projects, just drag SwiftyJSON.swift to the project tree\n2. for Workspaces, include the whole SwiftyJSON.xcodeproj\n\n## Usage\n\n####Initialization\n```swift\nimport SwiftyJSON\n```\n```swift\nlet json = JSON(data: dataFromNetworking)\n```\n```swift\nlet json = JSON(jsonObject)\n```\n```swift\nif let dataFromString = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {\n    let json = JSON(data: dataFromString)\n}\n```\n\n####Subscript\n```swift\n//Getting a double from a JSON Array\nlet name = json[0].double\n```\n```swift\n//Getting a string from a JSON Dictionary\nlet name = json[\"name\"].stringValue\n```\n```swift\n//Getting a string using a path to the element\nlet path = [1,\"list\",2,\"name\"]\nlet name = json[path].string\n//Just the same\nlet name = json[1][\"list\"][2][\"name\"].string\n//Alternatively\nlet name = json[1,\"list\",2,\"name\"].string\n```\n```swift\n//With a hard way\nlet name = json[].string\n```\n```swift\n//With a custom way\nlet keys:[SubscriptType] = [1,\"list\",2,\"name\"]\nlet name = json[keys].string\n```\n####Loop\n```swift\n//If json is .Dictionary\nfor (key,subJson):(String, JSON) in json {\n   //Do something you want\n}\n```\n*The first element is always a String, even if the JSON is an Array*\n```swift\n//If json is .Array\n//The `index` is 0..<json.count's string value\nfor (index,subJson):(String, JSON) in json {\n    //Do something you want\n}\n```\n####Error\nUse a subscript to get/set a value in an Array or Dictionary\n\nIf the JSON is:\n*  an array, the app may crash with \"index out-of-bounds.\"\n*  a dictionary, it will be assigned `nil` without a reason.\n*  not an array or a dictionary, the app may crash with an \"unrecognised selector\" exception.\n\nThis will never happen in SwiftyJSON.\n\n```swift\nlet json = JSON([\"name\", \"age\"])\nif let name = json[999].string {\n    //Do something you want\n} else {\n    print(json[999].error) // \"Array[999] is out of bounds\"\n}\n```\n```swift\nlet json = JSON([\"name\":\"Jack\", \"age\": 25])\nif let name = json[\"address\"].string {\n    //Do something you want\n} else {\n    print(json[\"address\"].error) // \"Dictionary[\"address\"] does not exist\"\n}\n```\n```swift\nlet json = JSON(12345)\nif let age = json[0].string {\n    //Do something you want\n} else {\n    print(json[0])       // \"Array[0] failure, It is not an array\"\n    print(json[0].error) // \"Array[0] failure, It is not an array\"\n}\n\nif let name = json[\"name\"].string {\n    //Do something you want\n} else {\n    print(json[\"name\"])       // \"Dictionary[\\\"name\"] failure, It is not an dictionary\"\n    print(json[\"name\"].error) // \"Dictionary[\\\"name\"] failure, It is not an dictionary\"\n}\n```\n\n####Optional getter\n```swift\n//NSNumber\nif let id = json[\"user\"][\"favourites_count\"].number {\n   //Do something you want\n} else {\n   //Print the error\n   print(json[\"user\"][\"favourites_count\"].error)\n}\n```\n```swift\n//String\nif let id = json[\"user\"][\"name\"].string {\n   //Do something you want\n} else {\n   //Print the error\n   print(json[\"user\"][\"name\"])\n}\n```\n```swift\n//Bool\nif let id = json[\"user\"][\"is_translator\"].bool {\n   //Do something you want\n} else {\n   //Print the error\n   print(json[\"user\"][\"is_translator\"])\n}\n```\n```swift\n//Int\nif let id = json[\"user\"][\"id\"].int {\n   //Do something you want\n} else {\n   //Print the error\n   print(json[\"user\"][\"id\"])\n}\n...\n```\n####Non-optional getter\nNon-optional getter is named `xxxValue`\n```swift\n//If not a Number or nil, return 0\nlet id: Int = json[\"id\"].intValue\n```\n```swift\n//If not a String or nil, return \"\"\nlet name: String = json[\"name\"].stringValue\n```\n```swift\n//If not a Array or nil, return []\nlet list: Array<JSON> = json[\"list\"].arrayValue\n```\n```swift\n//If not a Dictionary or nil, return [:]\nlet user: Dictionary<String, JSON> = json[\"user\"].dictionaryValue\n```\n\n####Setter\n```swift\njson[\"name\"] = JSON(\"new-name\")\njson[0] = JSON(1)\n```\n```swift\njson[\"id\"].int =  1234567890\njson[\"coordinate\"].double =  8766.766\njson[\"name\"].string =  \"Jack\"\njson.arrayObject = [1,2,3,4]\njson.dictionary = [\"name\":\"Jack\", \"age\":25]\n```\n\n####Raw object\n```swift\nlet jsonObject: AnyObject = json.object\n```\n```swift\nif let jsonObject: AnyObject = json.rawValue\n```\n```swift\n//convert the JSON to raw NSData\nif let data = json.rawData() {\n    //Do something you want\n}\n```\n```swift\n//convert the JSON to a raw String\nif let string = json.rawString() {\n    //Do something you want\n}\n```\n####Existance\n```swift\n//shows you whether value specified in JSON or not\nif json[\"name\"].isExists()\n```\n\n####Literal convertibles\nFor more info about literal convertibles: [Swift Literal Convertibles](http://nshipster.com/swift-literal-convertible/)\n```swift\n//StringLiteralConvertible\nlet json: JSON = \"I'm a json\"\n```\n```swift\n//IntegerLiteralConvertible\nlet json: JSON =  12345\n```\n```swift\n//BooleanLiteralConvertible\nlet json: JSON =  true\n```\n```swift\n//FloatLiteralConvertible\nlet json: JSON =  2.8765\n```\n```swift\n//DictionaryLiteralConvertible\nlet json: JSON =  [\"I\":\"am\", \"a\":\"json\"]\n```\n```swift\n//ArrayLiteralConvertible\nlet json: JSON =  [\"I\", \"am\", \"a\", \"json\"]\n```\n```swift\n//NilLiteralConvertible\nlet json: JSON =  nil\n```\n```swift\n//With subscript in array\nvar json: JSON =  [1,2,3]\njson[0] = 100\njson[1] = 200\njson[2] = 300\njson[999] = 300 //Don't worry, nothing will happen\n```\n```swift\n//With subscript in dictionary\nvar json: JSON =  [\"name\": \"Jack\", \"age\": 25]\njson[\"name\"] = \"Mike\"\njson[\"age\"] = \"25\" //It's OK to set String\njson[\"address\"] = \"L.A.\" // Add the \"address\": \"L.A.\" in json\n```\n```swift\n//Array & Dictionary\nvar json: JSON =  [\"name\": \"Jack\", \"age\": 25, \"list\": [\"a\", \"b\", \"c\", [\"what\": \"this\"]]]\njson[\"list\"][3][\"what\"] = \"that\"\njson[\"list\",3,\"what\"] = \"that\"\nlet path = [\"list\",3,\"what\"]\njson[path] = \"that\"\n```\n##Work with Alamofire\n\nSwiftyJSON nicely wraps the result of the Alamofire JSON response handler:\n```swift\nAlamofire.request(.GET, url).validate().responseJSON { response in\n    switch response.result {\n    case .Success:\n        if let value = response.result.value {\n          let json = JSON(value)\n          print(\"JSON: \\(json)\")\n        }\n    case .Failure(let error):\n        print(error)\n    }\n}\n```\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Source/Info-OSX.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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</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>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Source/Info-iOS.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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</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>${CURRENT_PROJECT_VERSION}</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Source/Info-tvOS.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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</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>${CURRENT_PROJECT_VERSION}</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>arm64</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Source/Info-watchOS.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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</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>${CURRENT_PROJECT_VERSION}</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Source/SwiftyJSON.h",
    "content": "//  SwiftyJSON.h\n//\n//  Copyright (c) 2014 Ruoyu Fu, Pinglin Tang\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;\n\n//! Project version number for SwiftyJSON.\nFOUNDATION_EXPORT double SwiftyJSONVersionNumber;\n\n//! Project version string for SwiftyJSON.\nFOUNDATION_EXPORT const unsigned char SwiftyJSONVersionString[];\n\n\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Source/SwiftyJSON.swift",
    "content": "//  SwiftyJSON.swift\n//\n//  Copyright (c) 2014 Ruoyu Fu, Pinglin Tang\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\nimport Foundation\n\n// MARK: - Error\n\n///Error domain\npublic let ErrorDomain: String = \"SwiftyJSONErrorDomain\"\n\n///Error code\npublic let ErrorUnsupportedType: Int = 999\npublic let ErrorIndexOutOfBounds: Int = 900\npublic let ErrorWrongType: Int = 901\npublic let ErrorNotExist: Int = 500\npublic let ErrorInvalidJSON: Int = 490\n\n// MARK: - JSON Type\n\n/**\nJSON's type definitions.\n\nSee http://www.json.org\n*/\npublic enum Type :Int{\n\n    case Number\n    case String\n    case Bool\n    case Array\n    case Dictionary\n    case Null\n    case Unknown\n}\n\n// MARK: - JSON Base\n\npublic struct JSON {\n\n    /**\n    Creates a JSON using the data.\n\n    - parameter data:  The NSData used to convert to json.Top level object in data is an NSArray or NSDictionary\n    - parameter opt:   The JSON serialization reading options. `.AllowFragments` by default.\n    - parameter error: error The NSErrorPointer used to return the error. `nil` by default.\n\n    - returns: The created JSON\n    */\n    public init(data:NSData, options opt: NSJSONReadingOptions = .AllowFragments, error: NSErrorPointer = nil) {\n        do {\n            let object: AnyObject = try NSJSONSerialization.JSONObjectWithData(data, options: opt)\n            self.init(object)\n        } catch let aError as NSError {\n            if error != nil {\n                error.memory = aError\n            }\n            self.init(NSNull())\n        }\n    }\n\n    /**\n     Create a JSON from JSON string\n    - parameter string: Normal json string like '{\"a\":\"b\"}'\n\n    - returns: The created JSON\n    */\n    public static func parse(string:String) -> JSON {\n        return string.dataUsingEncoding(NSUTF8StringEncoding)\n            .flatMap({JSON(data: $0)}) ?? JSON(NSNull())\n    }\n\n    /**\n    Creates a JSON using the object.\n\n    - parameter object:  The object must have the following properties: All objects are NSString/String, NSNumber/Int/Float/Double/Bool, NSArray/Array, NSDictionary/Dictionary, or NSNull; All dictionary keys are NSStrings/String; NSNumbers are not NaN or infinity.\n\n    - returns: The created JSON\n    */\n    public init(_ object: AnyObject) {\n        self.object = object\n    }\n\n    /**\n    Creates a JSON from a [JSON]\n\n    - parameter jsonArray: A Swift array of JSON objects\n\n    - returns: The created JSON\n    */\n    public init(_ jsonArray:[JSON]) {\n        self.init(jsonArray.map { $0.object })\n    }\n\n    /**\n    Creates a JSON from a [String: JSON]\n\n    - parameter jsonDictionary: A Swift dictionary of JSON objects\n\n    - returns: The created JSON\n    */\n    public init(_ jsonDictionary:[String: JSON]) {\n        var dictionary = [String: AnyObject]()\n        for (key, json) in jsonDictionary {\n            dictionary[key] = json.object\n        }\n        self.init(dictionary)\n    }\n\n    /// Private object\n    private var rawArray: [AnyObject] = []\n    private var rawDictionary: [String : AnyObject] = [:]\n    private var rawString: String = \"\"\n    private var rawNumber: NSNumber = 0\n    private var rawNull: NSNull = NSNull()\n    /// Private type\n    private var _type: Type = .Null\n    /// prviate error\n    private var _error: NSError? = nil\n\n    /// Object in JSON\n    public var object: AnyObject {\n        get {\n            switch self.type {\n            case .Array:\n                return self.rawArray\n            case .Dictionary:\n                return self.rawDictionary\n            case .String:\n                return self.rawString\n            case .Number:\n                return self.rawNumber\n            case .Bool:\n                return self.rawNumber\n            default:\n                return self.rawNull\n            }\n        }\n        set {\n            _error = nil\n            switch newValue {\n            case let number as NSNumber:\n                if number.isBool {\n                    _type = .Bool\n                } else {\n                    _type = .Number\n                }\n                self.rawNumber = number\n            case  let string as String:\n                _type = .String\n                self.rawString = string\n            case  _ as NSNull:\n                _type = .Null\n            case let array as [AnyObject]:\n                _type = .Array\n                self.rawArray = array\n            case let dictionary as [String : AnyObject]:\n                _type = .Dictionary\n                self.rawDictionary = dictionary\n            default:\n                _type = .Unknown\n                _error = NSError(domain: ErrorDomain, code: ErrorUnsupportedType, userInfo: [NSLocalizedDescriptionKey: \"It is a unsupported type\"])\n            }\n        }\n    }\n\n    /// json type\n    public var type: Type { get { return _type } }\n\n    /// Error in JSON\n    public var error: NSError? { get { return self._error } }\n\n    /// The static null json\n    @available(*, unavailable, renamed=\"null\")\n    public static var nullJSON: JSON { get { return null } }\n    public static var null: JSON { get { return JSON(NSNull()) } }\n}\n\n// MARK: - CollectionType, SequenceType, Indexable\nextension JSON : Swift.CollectionType, Swift.SequenceType, Swift.Indexable {\n\n    public typealias Generator = JSONGenerator\n\n    public typealias Index = JSONIndex\n\n    public var startIndex: JSON.Index {\n        switch self.type {\n        case .Array:\n            return JSONIndex(arrayIndex: self.rawArray.startIndex)\n        case .Dictionary:\n            return JSONIndex(dictionaryIndex: self.rawDictionary.startIndex)\n        default:\n            return JSONIndex()\n        }\n    }\n\n    public var endIndex: JSON.Index {\n        switch self.type {\n        case .Array:\n            return JSONIndex(arrayIndex: self.rawArray.endIndex)\n        case .Dictionary:\n            return JSONIndex(dictionaryIndex: self.rawDictionary.endIndex)\n        default:\n            return JSONIndex()\n        }\n    }\n\n    public subscript (position: JSON.Index) -> JSON.Generator.Element {\n        switch self.type {\n        case .Array:\n            return (String(position.arrayIndex), JSON(self.rawArray[position.arrayIndex!]))\n        case .Dictionary:\n            let (key, value) = self.rawDictionary[position.dictionaryIndex!]\n            return (key, JSON(value))\n        default:\n            return (\"\", JSON.null)\n        }\n    }\n\n    /// If `type` is `.Array` or `.Dictionary`, return `array.empty` or `dictonary.empty` otherwise return `true`.\n    public var isEmpty: Bool {\n        get {\n            switch self.type {\n            case .Array:\n                return self.rawArray.isEmpty\n            case .Dictionary:\n                return self.rawDictionary.isEmpty\n            default:\n                return true\n            }\n        }\n    }\n\n    /// If `type` is `.Array` or `.Dictionary`, return `array.count` or `dictonary.count` otherwise return `0`.\n    public var count: Int {\n        switch self.type {\n        case .Array:\n            return self.rawArray.count\n        case .Dictionary:\n            return self.rawDictionary.count\n        default:\n            return 0\n        }\n    }\n\n    public func underestimateCount() -> Int {\n        switch self.type {\n        case .Array:\n            return self.rawArray.underestimateCount()\n        case .Dictionary:\n            return self.rawDictionary.underestimateCount()\n        default:\n            return 0\n        }\n    }\n\n    /**\n    If `type` is `.Array` or `.Dictionary`, return a generator over the elements like `Array` or `Dictionary`, otherwise return a generator over empty.\n\n    - returns: Return a *generator* over the elements of JSON.\n    */\n    public func generate() -> JSON.Generator {\n        return JSON.Generator(self)\n    }\n}\n\npublic struct JSONIndex: ForwardIndexType, _Incrementable, Equatable, Comparable {\n\n    let arrayIndex: Int?\n    let dictionaryIndex: DictionaryIndex<String, AnyObject>?\n\n    let type: Type\n\n    init(){\n        self.arrayIndex = nil\n        self.dictionaryIndex = nil\n        self.type = .Unknown\n    }\n\n    init(arrayIndex: Int) {\n        self.arrayIndex = arrayIndex\n        self.dictionaryIndex = nil\n        self.type = .Array\n    }\n\n    init(dictionaryIndex: DictionaryIndex<String, AnyObject>) {\n        self.arrayIndex = nil\n        self.dictionaryIndex = dictionaryIndex\n        self.type = .Dictionary\n    }\n\n    public func successor() -> JSONIndex {\n        switch self.type {\n        case .Array:\n            return JSONIndex(arrayIndex: self.arrayIndex!.successor())\n        case .Dictionary:\n            return JSONIndex(dictionaryIndex: self.dictionaryIndex!.successor())\n        default:\n            return JSONIndex()\n        }\n    }\n}\n\npublic func ==(lhs: JSONIndex, rhs: JSONIndex) -> Bool {\n    switch (lhs.type, rhs.type) {\n    case (.Array, .Array):\n        return lhs.arrayIndex == rhs.arrayIndex\n    case (.Dictionary, .Dictionary):\n        return lhs.dictionaryIndex == rhs.dictionaryIndex\n    default:\n        return false\n    }\n}\n\npublic func <(lhs: JSONIndex, rhs: JSONIndex) -> Bool {\n    switch (lhs.type, rhs.type) {\n    case (.Array, .Array):\n        return lhs.arrayIndex < rhs.arrayIndex\n    case (.Dictionary, .Dictionary):\n        return lhs.dictionaryIndex < rhs.dictionaryIndex\n    default:\n        return false\n    }\n}\n\npublic func <=(lhs: JSONIndex, rhs: JSONIndex) -> Bool {\n    switch (lhs.type, rhs.type) {\n    case (.Array, .Array):\n        return lhs.arrayIndex <= rhs.arrayIndex\n    case (.Dictionary, .Dictionary):\n        return lhs.dictionaryIndex <= rhs.dictionaryIndex\n    default:\n        return false\n    }\n}\n\npublic func >=(lhs: JSONIndex, rhs: JSONIndex) -> Bool {\n    switch (lhs.type, rhs.type) {\n    case (.Array, .Array):\n        return lhs.arrayIndex >= rhs.arrayIndex\n    case (.Dictionary, .Dictionary):\n        return lhs.dictionaryIndex >= rhs.dictionaryIndex\n    default:\n        return false\n    }\n}\n\npublic func >(lhs: JSONIndex, rhs: JSONIndex) -> Bool {\n    switch (lhs.type, rhs.type) {\n    case (.Array, .Array):\n        return lhs.arrayIndex > rhs.arrayIndex\n    case (.Dictionary, .Dictionary):\n        return lhs.dictionaryIndex > rhs.dictionaryIndex\n    default:\n        return false\n    }\n}\n\npublic struct JSONGenerator : GeneratorType {\n\n    public typealias Element = (String, JSON)\n\n    private let type: Type\n    private var dictionayGenerate: DictionaryGenerator<String, AnyObject>?\n    private var arrayGenerate: IndexingGenerator<[AnyObject]>?\n    private var arrayIndex: Int = 0\n\n    init(_ json: JSON) {\n        self.type = json.type\n        if type == .Array {\n            self.arrayGenerate = json.rawArray.generate()\n        }else {\n            self.dictionayGenerate = json.rawDictionary.generate()\n        }\n    }\n\n    public mutating func next() -> JSONGenerator.Element? {\n        switch self.type {\n        case .Array:\n            if let o = self.arrayGenerate?.next() {\n                return (String(self.arrayIndex++), JSON(o))\n            } else {\n                return nil\n            }\n        case .Dictionary:\n            if let (k, v): (String, AnyObject) = self.dictionayGenerate?.next() {\n                return (k, JSON(v))\n            } else {\n                return nil\n            }\n        default:\n            return nil\n        }\n    }\n}\n\n// MARK: - Subscript\n\n/**\n*  To mark both String and Int can be used in subscript.\n*/\npublic enum JSONKey {\n    case Index(Int)\n    case Key(String)\n}\n\npublic protocol JSONSubscriptType {\n    var jsonKey:JSONKey { get }\n}\n\nextension Int: JSONSubscriptType {\n    public var jsonKey:JSONKey {\n        return JSONKey.Index(self)\n    }\n}\n\nextension String: JSONSubscriptType {\n    public var jsonKey:JSONKey {\n        return JSONKey.Key(self)\n    }\n}\n\nextension JSON {\n\n    /// If `type` is `.Array`, return json which's object is `array[index]`, otherwise return null json with error.\n    private subscript(index index: Int) -> JSON {\n        get {\n            if self.type != .Array {\n                var r = JSON.null\n                r._error = self._error ?? NSError(domain: ErrorDomain, code: ErrorWrongType, userInfo: [NSLocalizedDescriptionKey: \"Array[\\(index)] failure, It is not an array\"])\n                return r\n            } else if index >= 0 && index < self.rawArray.count {\n                return JSON(self.rawArray[index])\n            } else {\n                var r = JSON.null\n                r._error = NSError(domain: ErrorDomain, code:ErrorIndexOutOfBounds , userInfo: [NSLocalizedDescriptionKey: \"Array[\\(index)] is out of bounds\"])\n                return r\n            }\n        }\n        set {\n            if self.type == .Array {\n                if self.rawArray.count > index && newValue.error == nil {\n                    self.rawArray[index] = newValue.object\n                }\n            }\n        }\n    }\n\n    /// If `type` is `.Dictionary`, return json which's object is `dictionary[key]` , otherwise return null json with error.\n    private subscript(key key: String) -> JSON {\n        get {\n            var r = JSON.null\n            if self.type == .Dictionary {\n                if let o = self.rawDictionary[key] {\n                    r = JSON(o)\n                } else {\n                    r._error = NSError(domain: ErrorDomain, code: ErrorNotExist, userInfo: [NSLocalizedDescriptionKey: \"Dictionary[\\\"\\(key)\\\"] does not exist\"])\n                }\n            } else {\n                r._error = self._error ?? NSError(domain: ErrorDomain, code: ErrorWrongType, userInfo: [NSLocalizedDescriptionKey: \"Dictionary[\\\"\\(key)\\\"] failure, It is not an dictionary\"])\n            }\n            return r\n        }\n        set {\n            if self.type == .Dictionary && newValue.error == nil {\n                self.rawDictionary[key] = newValue.object\n            }\n        }\n    }\n\n    /// If `sub` is `Int`, return `subscript(index:)`; If `sub` is `String`,  return `subscript(key:)`.\n    private subscript(sub sub: JSONSubscriptType) -> JSON {\n        get {\n            switch sub.jsonKey {\n            case .Index(let index): return self[index: index]\n            case .Key(let key): return self[key: key]\n            }\n        }\n        set {\n            switch sub.jsonKey {\n            case .Index(let index): self[index: index] = newValue\n            case .Key(let key): self[key: key] = newValue\n            }\n        }\n    }\n\n    /**\n    Find a json in the complex data structuresby using the Int/String's array.\n\n    - parameter path: The target json's path. Example:\n\n    let json = JSON[data]\n    let path = [9,\"list\",\"person\",\"name\"]\n    let name = json[path]\n\n    The same as: let name = json[9][\"list\"][\"person\"][\"name\"]\n\n    - returns: Return a json found by the path or a null json with error\n    */\n    public subscript(path: [JSONSubscriptType]) -> JSON {\n        get {\n            return path.reduce(self) { $0[sub: $1] }\n        }\n        set {\n            switch path.count {\n            case 0:\n                return\n            case 1:\n                self[sub:path[0]].object = newValue.object\n            default:\n                var aPath = path; aPath.removeAtIndex(0)\n                var nextJSON = self[sub: path[0]]\n                nextJSON[aPath] = newValue\n                self[sub: path[0]] = nextJSON\n            }\n        }\n    }\n\n    /**\n    Find a json in the complex data structuresby using the Int/String's array.\n\n    - parameter path: The target json's path. Example:\n\n    let name = json[9,\"list\",\"person\",\"name\"]\n\n    The same as: let name = json[9][\"list\"][\"person\"][\"name\"]\n\n    - returns: Return a json found by the path or a null json with error\n    */\n    public subscript(path: JSONSubscriptType...) -> JSON {\n        get {\n            return self[path]\n        }\n        set {\n            self[path] = newValue\n        }\n    }\n}\n\n// MARK: - LiteralConvertible\n\nextension JSON: Swift.StringLiteralConvertible {\n\n    public init(stringLiteral value: StringLiteralType) {\n        self.init(value)\n    }\n\n    public init(extendedGraphemeClusterLiteral value: StringLiteralType) {\n        self.init(value)\n    }\n\n    public init(unicodeScalarLiteral value: StringLiteralType) {\n        self.init(value)\n    }\n}\n\nextension JSON: Swift.IntegerLiteralConvertible {\n\n    public init(integerLiteral value: IntegerLiteralType) {\n        self.init(value)\n    }\n}\n\nextension JSON: Swift.BooleanLiteralConvertible {\n\n    public init(booleanLiteral value: BooleanLiteralType) {\n        self.init(value)\n    }\n}\n\nextension JSON: Swift.FloatLiteralConvertible {\n\n    public init(floatLiteral value: FloatLiteralType) {\n        self.init(value)\n    }\n}\n\nextension JSON: Swift.DictionaryLiteralConvertible {\n\n    public init(dictionaryLiteral elements: (String, AnyObject)...) {\n        self.init(elements.reduce([String : AnyObject]()){(dictionary: [String : AnyObject], element:(String, AnyObject)) -> [String : AnyObject] in\n            var d = dictionary\n            d[element.0] = element.1\n            return d\n            })\n    }\n}\n\nextension JSON: Swift.ArrayLiteralConvertible {\n\n    public init(arrayLiteral elements: AnyObject...) {\n        self.init(elements)\n    }\n}\n\nextension JSON: Swift.NilLiteralConvertible {\n\n    public init(nilLiteral: ()) {\n        self.init(NSNull())\n    }\n}\n\n// MARK: - Raw\n\nextension JSON: Swift.RawRepresentable {\n\n    public init?(rawValue: AnyObject) {\n        if JSON(rawValue).type == .Unknown {\n            return nil\n        } else {\n            self.init(rawValue)\n        }\n    }\n\n    public var rawValue: AnyObject {\n        return self.object\n    }\n\n    public func rawData(options opt: NSJSONWritingOptions = NSJSONWritingOptions(rawValue: 0)) throws -> NSData {\n        guard NSJSONSerialization.isValidJSONObject(self.object) else {\n            throw NSError(domain: ErrorDomain, code: ErrorInvalidJSON, userInfo: [NSLocalizedDescriptionKey: \"JSON is invalid\"])\n        }\n\n        return try NSJSONSerialization.dataWithJSONObject(self.object, options: opt)\n    }\n\n    public func rawString(encoding: UInt = NSUTF8StringEncoding, options opt: NSJSONWritingOptions = .PrettyPrinted) -> String? {\n        switch self.type {\n        case .Array, .Dictionary:\n            do {\n                let data = try self.rawData(options: opt)\n                return NSString(data: data, encoding: encoding) as? String\n            } catch _ {\n                return nil\n            }\n        case .String:\n            return self.rawString\n        case .Number:\n            return self.rawNumber.stringValue\n        case .Bool:\n            return self.rawNumber.boolValue.description\n        case .Null:\n            return \"null\"\n        default:\n            return nil\n        }\n    }\n}\n\n// MARK: - Printable, DebugPrintable\n\nextension JSON: Swift.Printable, Swift.DebugPrintable {\n\n    public var description: String {\n        if let string = self.rawString(options:.PrettyPrinted) {\n            return string\n        } else {\n            return \"unknown\"\n        }\n    }\n\n    public var debugDescription: String {\n        return description\n    }\n}\n\n// MARK: - Array\n\nextension JSON {\n\n    //Optional [JSON]\n    public var array: [JSON]? {\n        get {\n            if self.type == .Array {\n                return self.rawArray.map{ JSON($0) }\n            } else {\n                return nil\n            }\n        }\n    }\n\n    //Non-optional [JSON]\n    public var arrayValue: [JSON] {\n        get {\n            return self.array ?? []\n        }\n    }\n\n    //Optional [AnyObject]\n    public var arrayObject: [AnyObject]? {\n        get {\n            switch self.type {\n            case .Array:\n                return self.rawArray\n            default:\n                return nil\n            }\n        }\n        set {\n            if let array = newValue {\n                self.object = array\n            } else {\n                self.object = NSNull()\n            }\n        }\n    }\n}\n\n// MARK: - Dictionary\n\nextension JSON {\n\n    //Optional [String : JSON]\n    public var dictionary: [String : JSON]? {\n        if self.type == .Dictionary {\n            return self.rawDictionary.reduce([String : JSON]()) { (dictionary: [String : JSON], element: (String, AnyObject)) -> [String : JSON] in\n                var d = dictionary\n                d[element.0] = JSON(element.1)\n                return d\n            }\n        } else {\n            return nil\n        }\n    }\n\n    //Non-optional [String : JSON]\n    public var dictionaryValue: [String : JSON] {\n        return self.dictionary ?? [:]\n    }\n\n    //Optional [String : AnyObject]\n    public var dictionaryObject: [String : AnyObject]? {\n        get {\n            switch self.type {\n            case .Dictionary:\n                return self.rawDictionary\n            default:\n                return nil\n            }\n        }\n        set {\n            if let v = newValue {\n                self.object = v\n            } else {\n                self.object = NSNull()\n            }\n        }\n    }\n}\n\n// MARK: - Bool\n\nextension JSON: Swift.BooleanType {\n\n    //Optional bool\n    public var bool: Bool? {\n        get {\n            switch self.type {\n            case .Bool:\n                return self.rawNumber.boolValue\n            default:\n                return nil\n            }\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(bool: newValue)\n            } else {\n                self.object = NSNull()\n            }\n        }\n    }\n\n    //Non-optional bool\n    public var boolValue: Bool {\n        get {\n            switch self.type {\n            case .Bool, .Number, .String:\n                return self.object.boolValue\n            default:\n                return false\n            }\n        }\n        set {\n            self.object = NSNumber(bool: newValue)\n        }\n    }\n}\n\n// MARK: - String\n\nextension JSON {\n\n    //Optional string\n    public var string: String? {\n        get {\n            switch self.type {\n            case .String:\n                return self.object as? String\n            default:\n                return nil\n            }\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSString(string:newValue)\n            } else {\n                self.object = NSNull()\n            }\n        }\n    }\n\n    //Non-optional string\n    public var stringValue: String {\n        get {\n            switch self.type {\n            case .String:\n                return self.object as? String ?? \"\"\n            case .Number:\n                return self.object.stringValue\n            case .Bool:\n                return (self.object as? Bool).map { String($0) } ?? \"\"\n            default:\n                return \"\"\n            }\n        }\n        set {\n            self.object = NSString(string:newValue)\n        }\n    }\n}\n\n// MARK: - Number\nextension JSON {\n\n    //Optional number\n    public var number: NSNumber? {\n        get {\n            switch self.type {\n            case .Number, .Bool:\n                return self.rawNumber\n            default:\n                return nil\n            }\n        }\n        set {\n            self.object = newValue ?? NSNull()\n        }\n    }\n\n    //Non-optional number\n    public var numberValue: NSNumber {\n        get {\n            switch self.type {\n            case .String:\n                let decimal = NSDecimalNumber(string: self.object as? String)\n                if decimal == NSDecimalNumber.notANumber() {  // indicates parse error\n                    return NSDecimalNumber.zero()\n                }\n                return decimal\n            case .Number, .Bool:\n                return self.object as? NSNumber ?? NSNumber(int: 0)\n            default:\n                return NSNumber(double: 0.0)\n            }\n        }\n        set {\n            self.object = newValue\n        }\n    }\n}\n\n//MARK: - Null\nextension JSON {\n\n    public var null: NSNull? {\n        get {\n            switch self.type {\n            case .Null:\n                return self.rawNull\n            default:\n                return nil\n            }\n        }\n        set {\n            self.object = NSNull()\n        }\n    }\n    public func isExists() -> Bool{\n        if let errorValue = error where errorValue.code == ErrorNotExist{\n            return false\n        }\n        return true\n    }\n}\n\n//MARK: - URL\nextension JSON {\n\n    //Optional URL\n    public var URL: NSURL? {\n        get {\n            switch self.type {\n            case .String:\n                if let encodedString_ = self.rawString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) {\n                    return NSURL(string: encodedString_)\n                } else {\n                    return nil\n                }\n            default:\n                return nil\n            }\n        }\n        set {\n            self.object = newValue?.absoluteString ?? NSNull()\n        }\n    }\n}\n\n// MARK: - Int, Double, Float, Int8, Int16, Int32, Int64\n\nextension JSON {\n\n    public var double: Double? {\n        get {\n            return self.number?.doubleValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(double: newValue)\n            } else {\n                self.object = NSNull()\n            }\n        }\n    }\n\n    public var doubleValue: Double {\n        get {\n            return self.numberValue.doubleValue\n        }\n        set {\n            self.object = NSNumber(double: newValue)\n        }\n    }\n\n    public var float: Float? {\n        get {\n            return self.number?.floatValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(float: newValue)\n            } else {\n                self.object = NSNull()\n            }\n        }\n    }\n\n    public var floatValue: Float {\n        get {\n            return self.numberValue.floatValue\n        }\n        set {\n            self.object = NSNumber(float: newValue)\n        }\n    }\n\n    public var int: Int? {\n        get {\n            return self.number?.longValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(integer: newValue)\n            } else {\n                self.object = NSNull()\n            }\n        }\n    }\n\n    public var intValue: Int {\n        get {\n            return self.numberValue.integerValue\n        }\n        set {\n            self.object = NSNumber(integer: newValue)\n        }\n    }\n\n    public var uInt: UInt? {\n        get {\n            return self.number?.unsignedLongValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(unsignedLong: newValue)\n            } else {\n                self.object = NSNull()\n            }\n        }\n    }\n\n    public var uIntValue: UInt {\n        get {\n            return self.numberValue.unsignedLongValue\n        }\n        set {\n            self.object = NSNumber(unsignedLong: newValue)\n        }\n    }\n\n    public var int8: Int8? {\n        get {\n            return self.number?.charValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(char: newValue)\n            } else {\n                self.object =  NSNull()\n            }\n        }\n    }\n\n    public var int8Value: Int8 {\n        get {\n            return self.numberValue.charValue\n        }\n        set {\n            self.object = NSNumber(char: newValue)\n        }\n    }\n\n    public var uInt8: UInt8? {\n        get {\n            return self.number?.unsignedCharValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(unsignedChar: newValue)\n            } else {\n                self.object =  NSNull()\n            }\n        }\n    }\n\n    public var uInt8Value: UInt8 {\n        get {\n            return self.numberValue.unsignedCharValue\n        }\n        set {\n            self.object = NSNumber(unsignedChar: newValue)\n        }\n    }\n\n    public var int16: Int16? {\n        get {\n            return self.number?.shortValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(short: newValue)\n            } else {\n                self.object =  NSNull()\n            }\n        }\n    }\n\n    public var int16Value: Int16 {\n        get {\n            return self.numberValue.shortValue\n        }\n        set {\n            self.object = NSNumber(short: newValue)\n        }\n    }\n\n    public var uInt16: UInt16? {\n        get {\n            return self.number?.unsignedShortValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(unsignedShort: newValue)\n            } else {\n                self.object =  NSNull()\n            }\n        }\n    }\n\n    public var uInt16Value: UInt16 {\n        get {\n            return self.numberValue.unsignedShortValue\n        }\n        set {\n            self.object = NSNumber(unsignedShort: newValue)\n        }\n    }\n\n    public var int32: Int32? {\n        get {\n            return self.number?.intValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(int: newValue)\n            } else {\n                self.object =  NSNull()\n            }\n        }\n    }\n\n    public var int32Value: Int32 {\n        get {\n            return self.numberValue.intValue\n        }\n        set {\n            self.object = NSNumber(int: newValue)\n        }\n    }\n\n    public var uInt32: UInt32? {\n        get {\n            return self.number?.unsignedIntValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(unsignedInt: newValue)\n            } else {\n                self.object =  NSNull()\n            }\n        }\n    }\n\n    public var uInt32Value: UInt32 {\n        get {\n            return self.numberValue.unsignedIntValue\n        }\n        set {\n            self.object = NSNumber(unsignedInt: newValue)\n        }\n    }\n\n    public var int64: Int64? {\n        get {\n            return self.number?.longLongValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(longLong: newValue)\n            } else {\n                self.object =  NSNull()\n            }\n        }\n    }\n\n    public var int64Value: Int64 {\n        get {\n            return self.numberValue.longLongValue\n        }\n        set {\n            self.object = NSNumber(longLong: newValue)\n        }\n    }\n\n    public var uInt64: UInt64? {\n        get {\n            return self.number?.unsignedLongLongValue\n        }\n        set {\n            if let newValue = newValue {\n                self.object = NSNumber(unsignedLongLong: newValue)\n            } else {\n                self.object =  NSNull()\n            }\n        }\n    }\n\n    public var uInt64Value: UInt64 {\n        get {\n            return self.numberValue.unsignedLongLongValue\n        }\n        set {\n            self.object = NSNumber(unsignedLongLong: newValue)\n        }\n    }\n}\n\n//MARK: - Comparable\nextension JSON : Swift.Comparable {}\n\npublic func ==(lhs: JSON, rhs: JSON) -> Bool {\n\n    switch (lhs.type, rhs.type) {\n    case (.Number, .Number):\n        return lhs.rawNumber == rhs.rawNumber\n    case (.String, .String):\n        return lhs.rawString == rhs.rawString\n    case (.Bool, .Bool):\n        return lhs.rawNumber.boolValue == rhs.rawNumber.boolValue\n    case (.Array, .Array):\n        return lhs.rawArray as NSArray == rhs.rawArray as NSArray\n    case (.Dictionary, .Dictionary):\n        return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary\n    case (.Null, .Null):\n        return true\n    default:\n        return false\n    }\n}\n\npublic func <=(lhs: JSON, rhs: JSON) -> Bool {\n\n    switch (lhs.type, rhs.type) {\n    case (.Number, .Number):\n        return lhs.rawNumber <= rhs.rawNumber\n    case (.String, .String):\n        return lhs.rawString <= rhs.rawString\n    case (.Bool, .Bool):\n        return lhs.rawNumber.boolValue == rhs.rawNumber.boolValue\n    case (.Array, .Array):\n        return lhs.rawArray as NSArray == rhs.rawArray as NSArray\n    case (.Dictionary, .Dictionary):\n        return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary\n    case (.Null, .Null):\n        return true\n    default:\n        return false\n    }\n}\n\npublic func >=(lhs: JSON, rhs: JSON) -> Bool {\n\n    switch (lhs.type, rhs.type) {\n    case (.Number, .Number):\n        return lhs.rawNumber >= rhs.rawNumber\n    case (.String, .String):\n        return lhs.rawString >= rhs.rawString\n    case (.Bool, .Bool):\n        return lhs.rawNumber.boolValue == rhs.rawNumber.boolValue\n    case (.Array, .Array):\n        return lhs.rawArray as NSArray == rhs.rawArray as NSArray\n    case (.Dictionary, .Dictionary):\n        return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary\n    case (.Null, .Null):\n        return true\n    default:\n        return false\n    }\n}\n\npublic func >(lhs: JSON, rhs: JSON) -> Bool {\n\n    switch (lhs.type, rhs.type) {\n    case (.Number, .Number):\n        return lhs.rawNumber > rhs.rawNumber\n    case (.String, .String):\n        return lhs.rawString > rhs.rawString\n    default:\n        return false\n    }\n}\n\npublic func <(lhs: JSON, rhs: JSON) -> Bool {\n\n    switch (lhs.type, rhs.type) {\n    case (.Number, .Number):\n        return lhs.rawNumber < rhs.rawNumber\n    case (.String, .String):\n        return lhs.rawString < rhs.rawString\n    default:\n        return false\n    }\n}\n\nprivate let trueNumber = NSNumber(bool: true)\nprivate let falseNumber = NSNumber(bool: false)\nprivate let trueObjCType = String.fromCString(trueNumber.objCType)\nprivate let falseObjCType = String.fromCString(falseNumber.objCType)\n\n// MARK: - NSNumber: Comparable\n\nextension NSNumber {\n    var isBool:Bool {\n        get {\n            let objCType = String.fromCString(self.objCType)\n            if (self.compare(trueNumber) == NSComparisonResult.OrderedSame && objCType == trueObjCType)\n                || (self.compare(falseNumber) == NSComparisonResult.OrderedSame && objCType == falseObjCType){\n                    return true\n            } else {\n                return false\n            }\n        }\n    }\n}\n\nfunc ==(lhs: NSNumber, rhs: NSNumber) -> Bool {\n    switch (lhs.isBool, rhs.isBool) {\n    case (false, true):\n        return false\n    case (true, false):\n        return false\n    default:\n        return lhs.compare(rhs) == NSComparisonResult.OrderedSame\n    }\n}\n\nfunc !=(lhs: NSNumber, rhs: NSNumber) -> Bool {\n    return !(lhs == rhs)\n}\n\nfunc <(lhs: NSNumber, rhs: NSNumber) -> Bool {\n\n    switch (lhs.isBool, rhs.isBool) {\n    case (false, true):\n        return false\n    case (true, false):\n        return false\n    default:\n        return lhs.compare(rhs) == NSComparisonResult.OrderedAscending\n    }\n}\n\nfunc >(lhs: NSNumber, rhs: NSNumber) -> Bool {\n\n    switch (lhs.isBool, rhs.isBool) {\n    case (false, true):\n        return false\n    case (true, false):\n        return false\n    default:\n        return lhs.compare(rhs) == NSComparisonResult.OrderedDescending\n    }\n}\n\nfunc <=(lhs: NSNumber, rhs: NSNumber) -> Bool {\n\n    switch (lhs.isBool, rhs.isBool) {\n    case (false, true):\n        return false\n    case (true, false):\n        return false\n    default:\n        return lhs.compare(rhs) != NSComparisonResult.OrderedDescending\n    }\n}\n\nfunc >=(lhs: NSNumber, rhs: NSNumber) -> Bool {\n\n    switch (lhs.isBool, rhs.isBool) {\n    case (false, true):\n        return false\n    case (true, false):\n        return false\n    default:\n        return lhs.compare(rhs) != NSComparisonResult.OrderedAscending\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/SwiftyJSON.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name        = \"SwiftyJSON\"\n  s.version     = \"2.3.2\"\n  s.summary     = \"SwiftyJSON makes it easy to deal with JSON data in Swift\"\n  s.homepage    = \"https://github.com/SwiftyJSON/SwiftyJSON\"\n  s.license     = { :type => \"MIT\" }\n  s.authors     = { \"lingoer\" => \"lingoerer@gmail.com\", \"tangplin\" => \"tangplin@gmail.com\" }\n\n  s.requires_arc = true\n  s.osx.deployment_target = \"10.9\"\n  s.ios.deployment_target = \"8.0\"\n  s.watchos.deployment_target = \"2.0\"\n  s.tvos.deployment_target = \"9.0\"\n  s.source   = { :git => \"https://github.com/SwiftyJSON/SwiftyJSON.git\", :tag => \"2.3.2\"}\n  s.source_files = \"Source/*.swift\"\nend\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/SwiftyJSON.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\t2E4FEFE119575BE100351305 /* SwiftyJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E4FEFE019575BE100351305 /* SwiftyJSON.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t2E4FEFE719575BE100351305 /* SwiftyJSON.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E4FEFDB19575BE100351305 /* SwiftyJSON.framework */; };\n\t\t7236B4EE1BAC14150020529B /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8491E1D19CD6DAE00CCFAE6 /* SwiftyJSON.swift */; };\n\t\t7236B4F11BAC14150020529B /* SwiftyJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E4FEFE019575BE100351305 /* SwiftyJSON.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9C459EF41A910334008C9A41 /* SwiftyJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E4FEFE019575BE100351305 /* SwiftyJSON.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9C459EF51A910361008C9A41 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8491E1D19CD6DAE00CCFAE6 /* SwiftyJSON.swift */; };\n\t\t9C459EF81A9103C1008C9A41 /* Tests.json in Resources */ = {isa = PBXBuildFile; fileRef = A885D1DA19CFCFF0002FD4C3 /* Tests.json */; };\n\t\t9C459EF91A9103C1008C9A41 /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86BAA0D19EBC32B009EAAEB /* PerformanceTests.swift */; };\n\t\t9C459EFA1A9103C1008C9A41 /* BaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A885D1D119CF1EE6002FD4C3 /* BaseTests.swift */; };\n\t\t9C459EFB1A9103C1008C9A41 /* SequenceTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E319E3C2A600CDE086 /* SequenceTypeTests.swift */; };\n\t\t9C459EFC1A9103C1008C9A41 /* PrintableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C4A019E37FC600ADCC3D /* PrintableTests.swift */; };\n\t\t9C459EFD1A9103C1008C9A41 /* SubscriptTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C49E19E2EE5B00ADCC3D /* SubscriptTests.swift */; };\n\t\t9C459EFE1A9103C1008C9A41 /* LiteralConvertibleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C49619E1A7DD00ADCC3D /* LiteralConvertibleTests.swift */; };\n\t\t9C459EFF1A9103C1008C9A41 /* RawRepresentableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C49819E1B10300ADCC3D /* RawRepresentableTests.swift */; };\n\t\t9C459F001A9103C1008C9A41 /* ComparableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E519E3DF7800CDE086 /* ComparableTests.swift */; };\n\t\t9C459F011A9103C1008C9A41 /* StringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E919E43C0700CDE086 /* StringTests.swift */; };\n\t\t9C459F021A9103C1008C9A41 /* NumberTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E719E439DA00CDE086 /* NumberTests.swift */; };\n\t\t9C459F031A9103C1008C9A41 /* RawTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A863BE2719EED46F0092A41F /* RawTests.swift */; };\n\t\t9C459F041A9103C1008C9A41 /* DictionaryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8B66C8B19E51D6500540692 /* DictionaryTests.swift */; };\n\t\t9C459F051A9103C1008C9A41 /* ArrayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8B66C8D19E52F4200540692 /* ArrayTests.swift */; };\n\t\t9C7DFC661A9102BD005AA3F7 /* SwiftyJSON.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C7DFC5B1A9102BD005AA3F7 /* SwiftyJSON.framework */; };\n\t\tA819C49719E1A7DD00ADCC3D /* LiteralConvertibleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C49619E1A7DD00ADCC3D /* LiteralConvertibleTests.swift */; };\n\t\tA819C49919E1B10300ADCC3D /* RawRepresentableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C49819E1B10300ADCC3D /* RawRepresentableTests.swift */; };\n\t\tA819C49F19E2EE5B00ADCC3D /* SubscriptTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C49E19E2EE5B00ADCC3D /* SubscriptTests.swift */; };\n\t\tA819C4A119E37FC600ADCC3D /* PrintableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C4A019E37FC600ADCC3D /* PrintableTests.swift */; };\n\t\tA81CBA0B1BCF6B0200A649A2 /* Tests.json in Resources */ = {isa = PBXBuildFile; fileRef = A885D1DA19CFCFF0002FD4C3 /* Tests.json */; };\n\t\tA8491E1E19CD6DAE00CCFAE6 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8491E1D19CD6DAE00CCFAE6 /* SwiftyJSON.swift */; };\n\t\tA8580F791BCF5C5B00DA927B /* SwiftyJSON.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7236B4F61BAC14150020529B /* SwiftyJSON.framework */; };\n\t\tA8580F801BCF69A000DA927B /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86BAA0D19EBC32B009EAAEB /* PerformanceTests.swift */; };\n\t\tA8580F811BCF69A000DA927B /* BaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A885D1D119CF1EE6002FD4C3 /* BaseTests.swift */; };\n\t\tA8580F821BCF69A000DA927B /* SequenceTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E319E3C2A600CDE086 /* SequenceTypeTests.swift */; };\n\t\tA8580F831BCF69A000DA927B /* PrintableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C4A019E37FC600ADCC3D /* PrintableTests.swift */; };\n\t\tA8580F841BCF69A000DA927B /* SubscriptTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C49E19E2EE5B00ADCC3D /* SubscriptTests.swift */; };\n\t\tA8580F851BCF69A000DA927B /* LiteralConvertibleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C49619E1A7DD00ADCC3D /* LiteralConvertibleTests.swift */; };\n\t\tA8580F861BCF69A000DA927B /* RawRepresentableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A819C49819E1B10300ADCC3D /* RawRepresentableTests.swift */; };\n\t\tA8580F871BCF69A000DA927B /* ComparableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E519E3DF7800CDE086 /* ComparableTests.swift */; };\n\t\tA8580F881BCF69A000DA927B /* StringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E919E43C0700CDE086 /* StringTests.swift */; };\n\t\tA8580F891BCF69A000DA927B /* NumberTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E719E439DA00CDE086 /* NumberTests.swift */; };\n\t\tA8580F8A1BCF69A000DA927B /* RawTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A863BE2719EED46F0092A41F /* RawTests.swift */; };\n\t\tA8580F8B1BCF69A000DA927B /* DictionaryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8B66C8B19E51D6500540692 /* DictionaryTests.swift */; };\n\t\tA8580F8C1BCF69A000DA927B /* ArrayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8B66C8D19E52F4200540692 /* ArrayTests.swift */; };\n\t\tA863BE2819EED46F0092A41F /* RawTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A863BE2719EED46F0092A41F /* RawTests.swift */; };\n\t\tA86BAA0E19EBC32B009EAAEB /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86BAA0D19EBC32B009EAAEB /* PerformanceTests.swift */; };\n\t\tA87080E419E3C2A600CDE086 /* SequenceTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E319E3C2A600CDE086 /* SequenceTypeTests.swift */; };\n\t\tA87080E619E3DF7800CDE086 /* ComparableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E519E3DF7800CDE086 /* ComparableTests.swift */; };\n\t\tA87080E819E439DA00CDE086 /* NumberTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E719E439DA00CDE086 /* NumberTests.swift */; };\n\t\tA87080EA19E43C0700CDE086 /* StringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87080E919E43C0700CDE086 /* StringTests.swift */; };\n\t\tA885D1D219CF1EE6002FD4C3 /* BaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A885D1D119CF1EE6002FD4C3 /* BaseTests.swift */; };\n\t\tA885D1DC19CFCFF0002FD4C3 /* Tests.json in Resources */ = {isa = PBXBuildFile; fileRef = A885D1DA19CFCFF0002FD4C3 /* Tests.json */; };\n\t\tA8B66C8C19E51D6500540692 /* DictionaryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8B66C8B19E51D6500540692 /* DictionaryTests.swift */; };\n\t\tA8B66C8E19E52F4200540692 /* ArrayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8B66C8D19E52F4200540692 /* ArrayTests.swift */; };\n\t\tE4D7CCE01B9465A700EE7221 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8491E1D19CD6DAE00CCFAE6 /* SwiftyJSON.swift */; };\n\t\tE4D7CCE31B9465A700EE7221 /* SwiftyJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E4FEFE019575BE100351305 /* SwiftyJSON.h */; settings = {ATTRIBUTES = (Public, ); }; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t2E4FEFE819575BE100351305 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 2E4FEFD219575BE100351305 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2E4FEFDA19575BE100351305;\n\t\t\tremoteInfo = SwiftyJSON;\n\t\t};\n\t\t9C7DFC671A9102BD005AA3F7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 2E4FEFD219575BE100351305 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9C7DFC5A1A9102BD005AA3F7;\n\t\t\tremoteInfo = \"SwiftyJSON OSX\";\n\t\t};\n\t\tA8580F7A1BCF5C5B00DA927B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 2E4FEFD219575BE100351305 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7236B4EC1BAC14150020529B;\n\t\t\tremoteInfo = \"SwiftyJSON tvOS\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t030B6CDC1A6E171D00C2D4F1 /* Info-OSX.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"Info-OSX.plist\"; sourceTree = \"<group>\"; };\n\t\t2E4FEFDB19575BE100351305 /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t2E4FEFDF19575BE100351305 /* Info-iOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"Info-iOS.plist\"; sourceTree = \"<group>\"; };\n\t\t2E4FEFE019575BE100351305 /* SwiftyJSON.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftyJSON.h; sourceTree = \"<group>\"; };\n\t\t2E4FEFE619575BE100351305 /* SwiftyJSON iOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"SwiftyJSON iOS Tests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t7236B4F61BAC14150020529B /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t7236B4F71BAC14150020529B /* Info-tvOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"Info-tvOS.plist\"; sourceTree = \"<group>\"; };\n\t\t9C459EF61A9103B1008C9A41 /* Info-OSX.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = \"Info-OSX.plist\"; sourceTree = \"<group>\"; };\n\t\t9C7DFC5B1A9102BD005AA3F7 /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9C7DFC651A9102BD005AA3F7 /* SwiftyJSON OSX Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"SwiftyJSON OSX Tests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA819C49619E1A7DD00ADCC3D /* LiteralConvertibleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiteralConvertibleTests.swift; sourceTree = \"<group>\"; };\n\t\tA819C49819E1B10300ADCC3D /* RawRepresentableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RawRepresentableTests.swift; sourceTree = \"<group>\"; };\n\t\tA819C49E19E2EE5B00ADCC3D /* SubscriptTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubscriptTests.swift; sourceTree = \"<group>\"; };\n\t\tA819C4A019E37FC600ADCC3D /* PrintableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrintableTests.swift; sourceTree = \"<group>\"; };\n\t\tA82A1C0D19D922DC009A653D /* Info-iOS.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = \"Info-iOS.plist\"; sourceTree = \"<group>\"; };\n\t\tA8491E1D19CD6DAE00CCFAE6 /* SwiftyJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyJSON.swift; sourceTree = \"<group>\"; };\n\t\tA8580F741BCF5C5B00DA927B /* SwiftyJSON tvOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"SwiftyJSON tvOS Tests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA8580F781BCF5C5B00DA927B /* Info-tvOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"Info-tvOS.plist\"; sourceTree = \"<group>\"; };\n\t\tA863BE2719EED46F0092A41F /* RawTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RawTests.swift; sourceTree = \"<group>\"; };\n\t\tA86BAA0D19EBC32B009EAAEB /* PerformanceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PerformanceTests.swift; sourceTree = \"<group>\"; };\n\t\tA87080E319E3C2A600CDE086 /* SequenceTypeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SequenceTypeTests.swift; sourceTree = \"<group>\"; };\n\t\tA87080E519E3DF7800CDE086 /* ComparableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ComparableTests.swift; sourceTree = \"<group>\"; };\n\t\tA87080E719E439DA00CDE086 /* NumberTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NumberTests.swift; sourceTree = \"<group>\"; };\n\t\tA87080E919E43C0700CDE086 /* StringTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringTests.swift; sourceTree = \"<group>\"; };\n\t\tA885D1D119CF1EE6002FD4C3 /* BaseTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTests.swift; sourceTree = \"<group>\"; };\n\t\tA885D1DA19CFCFF0002FD4C3 /* Tests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Tests.json; sourceTree = \"<group>\"; };\n\t\tA8B66C8B19E51D6500540692 /* DictionaryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DictionaryTests.swift; sourceTree = \"<group>\"; };\n\t\tA8B66C8D19E52F4200540692 /* ArrayTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayTests.swift; sourceTree = \"<group>\"; };\n\t\tE4D7CCE81B9465A700EE7221 /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE4D7CCE91B9465A800EE7221 /* Info-watchOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"Info-watchOS.plist\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t2E4FEFD719575BE100351305 /* 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\t\t2E4FEFE319575BE100351305 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2E4FEFE719575BE100351305 /* SwiftyJSON.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7236B4EF1BAC14150020529B /* 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\t\t9C7DFC571A9102BD005AA3F7 /* 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\t\t9C7DFC621A9102BD005AA3F7 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9C7DFC661A9102BD005AA3F7 /* SwiftyJSON.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA8580F711BCF5C5B00DA927B /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA8580F791BCF5C5B00DA927B /* SwiftyJSON.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE4D7CCE11B9465A700EE7221 /* 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\t2E4FEFD119575BE100351305 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2E4FEFDD19575BE100351305 /* Source */,\n\t\t\t\t2E4FEFEA19575BE100351305 /* Tests */,\n\t\t\t\t2E4FEFDC19575BE100351305 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2E4FEFDC19575BE100351305 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2E4FEFDB19575BE100351305 /* SwiftyJSON.framework */,\n\t\t\t\t2E4FEFE619575BE100351305 /* SwiftyJSON iOS Tests.xctest */,\n\t\t\t\t9C7DFC5B1A9102BD005AA3F7 /* SwiftyJSON.framework */,\n\t\t\t\t9C7DFC651A9102BD005AA3F7 /* SwiftyJSON OSX Tests.xctest */,\n\t\t\t\tE4D7CCE81B9465A700EE7221 /* SwiftyJSON.framework */,\n\t\t\t\t7236B4F61BAC14150020529B /* SwiftyJSON.framework */,\n\t\t\t\tA8580F741BCF5C5B00DA927B /* SwiftyJSON tvOS Tests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2E4FEFDD19575BE100351305 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2E4FEFE019575BE100351305 /* SwiftyJSON.h */,\n\t\t\t\tA8491E1D19CD6DAE00CCFAE6 /* SwiftyJSON.swift */,\n\t\t\t\t2E4FEFDE19575BE100351305 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2E4FEFDE19575BE100351305 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2E4FEFDF19575BE100351305 /* Info-iOS.plist */,\n\t\t\t\t030B6CDC1A6E171D00C2D4F1 /* Info-OSX.plist */,\n\t\t\t\tE4D7CCE91B9465A800EE7221 /* Info-watchOS.plist */,\n\t\t\t\t7236B4F71BAC14150020529B /* Info-tvOS.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2E4FEFEA19575BE100351305 /* Tests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA885D1DA19CFCFF0002FD4C3 /* Tests.json */,\n\t\t\t\tA86BAA0D19EBC32B009EAAEB /* PerformanceTests.swift */,\n\t\t\t\tA885D1D119CF1EE6002FD4C3 /* BaseTests.swift */,\n\t\t\t\tA87080E319E3C2A600CDE086 /* SequenceTypeTests.swift */,\n\t\t\t\tA819C4A019E37FC600ADCC3D /* PrintableTests.swift */,\n\t\t\t\tA819C49E19E2EE5B00ADCC3D /* SubscriptTests.swift */,\n\t\t\t\tA819C49619E1A7DD00ADCC3D /* LiteralConvertibleTests.swift */,\n\t\t\t\tA819C49819E1B10300ADCC3D /* RawRepresentableTests.swift */,\n\t\t\t\tA87080E519E3DF7800CDE086 /* ComparableTests.swift */,\n\t\t\t\tA87080E919E43C0700CDE086 /* StringTests.swift */,\n\t\t\t\tA87080E719E439DA00CDE086 /* NumberTests.swift */,\n\t\t\t\tA863BE2719EED46F0092A41F /* RawTests.swift */,\n\t\t\t\tA8B66C8B19E51D6500540692 /* DictionaryTests.swift */,\n\t\t\t\tA8B66C8D19E52F4200540692 /* ArrayTests.swift */,\n\t\t\t\t2E4FEFEB19575BE100351305 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = Tests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2E4FEFEB19575BE100351305 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA82A1C0D19D922DC009A653D /* Info-iOS.plist */,\n\t\t\t\t9C459EF61A9103B1008C9A41 /* Info-OSX.plist */,\n\t\t\t\tA8580F781BCF5C5B00DA927B /* Info-tvOS.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t2E4FEFD819575BE100351305 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2E4FEFE119575BE100351305 /* SwiftyJSON.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7236B4F01BAC14150020529B /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7236B4F11BAC14150020529B /* SwiftyJSON.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9C7DFC581A9102BD005AA3F7 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9C459EF41A910334008C9A41 /* SwiftyJSON.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE4D7CCE21B9465A700EE7221 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE4D7CCE31B9465A700EE7221 /* SwiftyJSON.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t2E4FEFDA19575BE100351305 /* SwiftyJSON iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 2E4FEFF119575BE100351305 /* Build configuration list for PBXNativeTarget \"SwiftyJSON iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t2E4FEFD619575BE100351305 /* Sources */,\n\t\t\t\t2E4FEFD719575BE100351305 /* Frameworks */,\n\t\t\t\t2E4FEFD819575BE100351305 /* Headers */,\n\t\t\t\t2E4FEFD919575BE100351305 /* 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 = \"SwiftyJSON iOS\";\n\t\t\tproductName = SwiftyJSON;\n\t\t\tproductReference = 2E4FEFDB19575BE100351305 /* SwiftyJSON.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t2E4FEFE519575BE100351305 /* SwiftyJSON iOS Tests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 2E4FEFF419575BE100351305 /* Build configuration list for PBXNativeTarget \"SwiftyJSON iOS Tests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t2E4FEFE219575BE100351305 /* Sources */,\n\t\t\t\t2E4FEFE319575BE100351305 /* Frameworks */,\n\t\t\t\t2E4FEFE419575BE100351305 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t2E4FEFE919575BE100351305 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"SwiftyJSON iOS Tests\";\n\t\t\tproductName = SwiftyJSONTests;\n\t\t\tproductReference = 2E4FEFE619575BE100351305 /* SwiftyJSON iOS Tests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t7236B4EC1BAC14150020529B /* SwiftyJSON tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7236B4F31BAC14150020529B /* Build configuration list for PBXNativeTarget \"SwiftyJSON tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t7236B4ED1BAC14150020529B /* Sources */,\n\t\t\t\t7236B4EF1BAC14150020529B /* Frameworks */,\n\t\t\t\t7236B4F01BAC14150020529B /* Headers */,\n\t\t\t\t7236B4F21BAC14150020529B /* 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 = \"SwiftyJSON tvOS\";\n\t\t\tproductName = SwiftyJSON;\n\t\t\tproductReference = 7236B4F61BAC14150020529B /* SwiftyJSON.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t9C7DFC5A1A9102BD005AA3F7 /* SwiftyJSON OSX */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9C7DFC6E1A9102BD005AA3F7 /* Build configuration list for PBXNativeTarget \"SwiftyJSON OSX\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9C7DFC561A9102BD005AA3F7 /* Sources */,\n\t\t\t\t9C7DFC571A9102BD005AA3F7 /* Frameworks */,\n\t\t\t\t9C7DFC581A9102BD005AA3F7 /* Headers */,\n\t\t\t\t9C7DFC591A9102BD005AA3F7 /* 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 = \"SwiftyJSON OSX\";\n\t\t\tproductName = \"SwiftyJSON OSX\";\n\t\t\tproductReference = 9C7DFC5B1A9102BD005AA3F7 /* SwiftyJSON.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t9C7DFC641A9102BD005AA3F7 /* SwiftyJSON OSX Tests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9C7DFC711A9102BD005AA3F7 /* Build configuration list for PBXNativeTarget \"SwiftyJSON OSX Tests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9C7DFC611A9102BD005AA3F7 /* Sources */,\n\t\t\t\t9C7DFC621A9102BD005AA3F7 /* Frameworks */,\n\t\t\t\t9C7DFC631A9102BD005AA3F7 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t9C7DFC681A9102BD005AA3F7 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"SwiftyJSON OSX Tests\";\n\t\t\tproductName = \"SwiftyJSON OSXTests\";\n\t\t\tproductReference = 9C7DFC651A9102BD005AA3F7 /* SwiftyJSON OSX Tests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tA8580F731BCF5C5B00DA927B /* SwiftyJSON tvOS Tests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = A8580F7C1BCF5C5B00DA927B /* Build configuration list for PBXNativeTarget \"SwiftyJSON tvOS Tests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA8580F701BCF5C5B00DA927B /* Sources */,\n\t\t\t\tA8580F711BCF5C5B00DA927B /* Frameworks */,\n\t\t\t\tA8580F721BCF5C5B00DA927B /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tA8580F7B1BCF5C5B00DA927B /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"SwiftyJSON tvOS Tests\";\n\t\t\tproductName = \"SwiftyJSON tvOS Tests\";\n\t\t\tproductReference = A8580F741BCF5C5B00DA927B /* SwiftyJSON tvOS Tests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tE4D7CCDE1B9465A700EE7221 /* SwiftyJSON watchOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E4D7CCE51B9465A700EE7221 /* Build configuration list for PBXNativeTarget \"SwiftyJSON watchOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE4D7CCDF1B9465A700EE7221 /* Sources */,\n\t\t\t\tE4D7CCE11B9465A700EE7221 /* Frameworks */,\n\t\t\t\tE4D7CCE21B9465A700EE7221 /* Headers */,\n\t\t\t\tE4D7CCE41B9465A700EE7221 /* 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 = \"SwiftyJSON watchOS\";\n\t\t\tproductName = SwiftyJSON;\n\t\t\tproductReference = E4D7CCE81B9465A700EE7221 /* SwiftyJSON.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t2E4FEFD219575BE100351305 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0710;\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t2E4FEFDA19575BE100351305 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t};\n\t\t\t\t\t2E4FEFE519575BE100351305 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t\tTestTargetID = 2E4FEFDA19575BE100351305;\n\t\t\t\t\t};\n\t\t\t\t\t9C7DFC5A1A9102BD005AA3F7 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1.1;\n\t\t\t\t\t};\n\t\t\t\t\t9C7DFC641A9102BD005AA3F7 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1.1;\n\t\t\t\t\t};\n\t\t\t\t\tA8580F731BCF5C5B00DA927B = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 2E4FEFD519575BE100351305 /* Build configuration list for PBXProject \"SwiftyJSON\" */;\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 = 2E4FEFD119575BE100351305;\n\t\t\tproductRefGroup = 2E4FEFDC19575BE100351305 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t2E4FEFDA19575BE100351305 /* SwiftyJSON iOS */,\n\t\t\t\t2E4FEFE519575BE100351305 /* SwiftyJSON iOS Tests */,\n\t\t\t\t9C7DFC5A1A9102BD005AA3F7 /* SwiftyJSON OSX */,\n\t\t\t\t9C7DFC641A9102BD005AA3F7 /* SwiftyJSON OSX Tests */,\n\t\t\t\tE4D7CCDE1B9465A700EE7221 /* SwiftyJSON watchOS */,\n\t\t\t\t7236B4EC1BAC14150020529B /* SwiftyJSON tvOS */,\n\t\t\t\tA8580F731BCF5C5B00DA927B /* SwiftyJSON tvOS Tests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t2E4FEFD919575BE100351305 /* 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\t\t2E4FEFE419575BE100351305 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA885D1DC19CFCFF0002FD4C3 /* Tests.json in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7236B4F21BAC14150020529B /* 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\t\t9C7DFC591A9102BD005AA3F7 /* 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\t\t9C7DFC631A9102BD005AA3F7 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9C459EF81A9103C1008C9A41 /* Tests.json in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA8580F721BCF5C5B00DA927B /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA81CBA0B1BCF6B0200A649A2 /* Tests.json in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE4D7CCE41B9465A700EE7221 /* 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\t2E4FEFD619575BE100351305 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA8491E1E19CD6DAE00CCFAE6 /* SwiftyJSON.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2E4FEFE219575BE100351305 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA87080E819E439DA00CDE086 /* NumberTests.swift in Sources */,\n\t\t\t\tA87080E419E3C2A600CDE086 /* SequenceTypeTests.swift in Sources */,\n\t\t\t\tA86BAA0E19EBC32B009EAAEB /* PerformanceTests.swift in Sources */,\n\t\t\t\tA819C49919E1B10300ADCC3D /* RawRepresentableTests.swift in Sources */,\n\t\t\t\tA819C49F19E2EE5B00ADCC3D /* SubscriptTests.swift in Sources */,\n\t\t\t\tA863BE2819EED46F0092A41F /* RawTests.swift in Sources */,\n\t\t\t\tA885D1D219CF1EE6002FD4C3 /* BaseTests.swift in Sources */,\n\t\t\t\tA8B66C8E19E52F4200540692 /* ArrayTests.swift in Sources */,\n\t\t\t\tA8B66C8C19E51D6500540692 /* DictionaryTests.swift in Sources */,\n\t\t\t\tA819C4A119E37FC600ADCC3D /* PrintableTests.swift in Sources */,\n\t\t\t\tA819C49719E1A7DD00ADCC3D /* LiteralConvertibleTests.swift in Sources */,\n\t\t\t\tA87080EA19E43C0700CDE086 /* StringTests.swift in Sources */,\n\t\t\t\tA87080E619E3DF7800CDE086 /* ComparableTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7236B4ED1BAC14150020529B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7236B4EE1BAC14150020529B /* SwiftyJSON.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9C7DFC561A9102BD005AA3F7 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9C459EF51A910361008C9A41 /* SwiftyJSON.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9C7DFC611A9102BD005AA3F7 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9C459EFB1A9103C1008C9A41 /* SequenceTypeTests.swift in Sources */,\n\t\t\t\t9C459F001A9103C1008C9A41 /* ComparableTests.swift in Sources */,\n\t\t\t\t9C459F021A9103C1008C9A41 /* NumberTests.swift in Sources */,\n\t\t\t\t9C459EFF1A9103C1008C9A41 /* RawRepresentableTests.swift in Sources */,\n\t\t\t\t9C459EFA1A9103C1008C9A41 /* BaseTests.swift in Sources */,\n\t\t\t\t9C459F041A9103C1008C9A41 /* DictionaryTests.swift in Sources */,\n\t\t\t\t9C459EF91A9103C1008C9A41 /* PerformanceTests.swift in Sources */,\n\t\t\t\t9C459EFE1A9103C1008C9A41 /* LiteralConvertibleTests.swift in Sources */,\n\t\t\t\t9C459EFC1A9103C1008C9A41 /* PrintableTests.swift in Sources */,\n\t\t\t\t9C459F011A9103C1008C9A41 /* StringTests.swift in Sources */,\n\t\t\t\t9C459F031A9103C1008C9A41 /* RawTests.swift in Sources */,\n\t\t\t\t9C459F051A9103C1008C9A41 /* ArrayTests.swift in Sources */,\n\t\t\t\t9C459EFD1A9103C1008C9A41 /* SubscriptTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA8580F701BCF5C5B00DA927B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA8580F801BCF69A000DA927B /* PerformanceTests.swift in Sources */,\n\t\t\t\tA8580F811BCF69A000DA927B /* BaseTests.swift in Sources */,\n\t\t\t\tA8580F821BCF69A000DA927B /* SequenceTypeTests.swift in Sources */,\n\t\t\t\tA8580F831BCF69A000DA927B /* PrintableTests.swift in Sources */,\n\t\t\t\tA8580F841BCF69A000DA927B /* SubscriptTests.swift in Sources */,\n\t\t\t\tA8580F851BCF69A000DA927B /* LiteralConvertibleTests.swift in Sources */,\n\t\t\t\tA8580F861BCF69A000DA927B /* RawRepresentableTests.swift in Sources */,\n\t\t\t\tA8580F871BCF69A000DA927B /* ComparableTests.swift in Sources */,\n\t\t\t\tA8580F881BCF69A000DA927B /* StringTests.swift in Sources */,\n\t\t\t\tA8580F891BCF69A000DA927B /* NumberTests.swift in Sources */,\n\t\t\t\tA8580F8A1BCF69A000DA927B /* RawTests.swift in Sources */,\n\t\t\t\tA8580F8B1BCF69A000DA927B /* DictionaryTests.swift in Sources */,\n\t\t\t\tA8580F8C1BCF69A000DA927B /* ArrayTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE4D7CCDF1B9465A700EE7221 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE4D7CCE01B9465A700EE7221 /* SwiftyJSON.swift 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\t2E4FEFE919575BE100351305 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 2E4FEFDA19575BE100351305 /* SwiftyJSON iOS */;\n\t\t\ttargetProxy = 2E4FEFE819575BE100351305 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9C7DFC681A9102BD005AA3F7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9C7DFC5A1A9102BD005AA3F7 /* SwiftyJSON OSX */;\n\t\t\ttargetProxy = 9C7DFC671A9102BD005AA3F7 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA8580F7B1BCF5C5B00DA927B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 7236B4EC1BAC14150020529B /* SwiftyJSON tvOS */;\n\t\t\ttargetProxy = A8580F7A1BCF5C5B00DA927B /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t2E4FEFEF19575BE100351305 /* 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 = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t2E4FEFF019575BE100351305 /* 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 = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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_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\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2E4FEFF219575BE100351305 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = \"Source/Info-iOS.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = SwiftyJSON;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t2E4FEFF319575BE100351305 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = \"Source/Info-iOS.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = SwiftyJSON;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2E4FEFF519575BE100351305 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\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 = \"Tests/Info-iOS.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t2E4FEFF619575BE100351305 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = \"Tests/Info-iOS.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t7236B4F41BAC14150020529B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = \"Source/Info-tvOS.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = SwiftyJSON;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t7236B4F51BAC14150020529B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = \"Source/Info-tvOS.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = SwiftyJSON;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9C7DFC6F1A9102BD005AA3F7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\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 = \"Source/Info-OSX.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPLIST_FILE_OUTPUT_FORMAT = binary;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9C7DFC701A9102BD005AA3F7 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = \"Source/Info-OSX.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPLIST_FILE_OUTPUT_FORMAT = binary;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(PROJECT_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9C7DFC721A9102BD005AA3F7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"\";\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 = \"Tests/Info-OSX.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9C7DFC731A9102BD005AA3F7 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"\";\n\t\t\t\tINFOPLIST_FILE = \"Tests/Info-OSX.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA8580F7D1BCF5C5B00DA927B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = \"Tests/Info-tvOS.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.tangplin.SwiftyJSON-tvOS-Tests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA8580F7E1BCF5C5B00DA927B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = \"Tests/Info-tvOS.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.tangplin.SwiftyJSON-tvOS-Tests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE4D7CCE61B9465A700EE7221 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = \"Source/Info-OSX.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = SwiftyJSON;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTED_PLATFORMS = \"watchsimulator watchos\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE4D7CCE71B9465A700EE7221 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tBITCODE_GENERATION_MODE = bitcode;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = \"Source/Info-OSX.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.swiftyjson.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = SwiftyJSON;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTED_PLATFORMS = \"watchsimulator watchos\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t2E4FEFD519575BE100351305 /* Build configuration list for PBXProject \"SwiftyJSON\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2E4FEFEF19575BE100351305 /* Debug */,\n\t\t\t\t2E4FEFF019575BE100351305 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t2E4FEFF119575BE100351305 /* Build configuration list for PBXNativeTarget \"SwiftyJSON iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2E4FEFF219575BE100351305 /* Debug */,\n\t\t\t\t2E4FEFF319575BE100351305 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t2E4FEFF419575BE100351305 /* Build configuration list for PBXNativeTarget \"SwiftyJSON iOS Tests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2E4FEFF519575BE100351305 /* Debug */,\n\t\t\t\t2E4FEFF619575BE100351305 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t7236B4F31BAC14150020529B /* Build configuration list for PBXNativeTarget \"SwiftyJSON tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t7236B4F41BAC14150020529B /* Debug */,\n\t\t\t\t7236B4F51BAC14150020529B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9C7DFC6E1A9102BD005AA3F7 /* Build configuration list for PBXNativeTarget \"SwiftyJSON OSX\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9C7DFC6F1A9102BD005AA3F7 /* Debug */,\n\t\t\t\t9C7DFC701A9102BD005AA3F7 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9C7DFC711A9102BD005AA3F7 /* Build configuration list for PBXNativeTarget \"SwiftyJSON OSX Tests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9C7DFC721A9102BD005AA3F7 /* Debug */,\n\t\t\t\t9C7DFC731A9102BD005AA3F7 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tA8580F7C1BCF5C5B00DA927B /* Build configuration list for PBXNativeTarget \"SwiftyJSON tvOS Tests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA8580F7D1BCF5C5B00DA927B /* Debug */,\n\t\t\t\tA8580F7E1BCF5C5B00DA927B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE4D7CCE51B9465A700EE7221 /* Build configuration list for PBXNativeTarget \"SwiftyJSON watchOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE4D7CCE61B9465A700EE7221 /* Debug */,\n\t\t\t\tE4D7CCE71B9465A700EE7221 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 2E4FEFD219575BE100351305 /* Project object */;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/SwiftyJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:SwiftyJSON.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/SwiftyJSON.xcodeproj/xcshareddata/xcschemes/SwiftyJSON OSX.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"9C7DFC5A1A9102BD005AA3F7\"\n               BuildableName = \"SwiftyJSON.framework\"\n               BlueprintName = \"SwiftyJSON OSX\"\n               ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"9C7DFC641A9102BD005AA3F7\"\n               BuildableName = \"SwiftyJSON OSX Tests.xctest\"\n               BlueprintName = \"SwiftyJSON OSX Tests\"\n               ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"9C7DFC641A9102BD005AA3F7\"\n               BuildableName = \"SwiftyJSON OSX Tests.xctest\"\n               BlueprintName = \"SwiftyJSON OSX Tests\"\n               ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"9C7DFC5A1A9102BD005AA3F7\"\n            BuildableName = \"SwiftyJSON.framework\"\n            BlueprintName = \"SwiftyJSON OSX\"\n            ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"9C7DFC5A1A9102BD005AA3F7\"\n            BuildableName = \"SwiftyJSON.framework\"\n            BlueprintName = \"SwiftyJSON OSX\"\n            ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"9C7DFC5A1A9102BD005AA3F7\"\n            BuildableName = \"SwiftyJSON.framework\"\n            BlueprintName = \"SwiftyJSON OSX\"\n            ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/SwiftyJSON.xcodeproj/xcshareddata/xcschemes/SwiftyJSON iOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"2E4FEFDA19575BE100351305\"\n               BuildableName = \"SwiftyJSON.framework\"\n               BlueprintName = \"SwiftyJSON iOS\"\n               ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"2E4FEFE519575BE100351305\"\n               BuildableName = \"SwiftyJSON iOS Tests.xctest\"\n               BlueprintName = \"SwiftyJSON iOS Tests\"\n               ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"2E4FEFE519575BE100351305\"\n               BuildableName = \"SwiftyJSON iOS Tests.xctest\"\n               BlueprintName = \"SwiftyJSON iOS Tests\"\n               ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"2E4FEFDA19575BE100351305\"\n            BuildableName = \"SwiftyJSON.framework\"\n            BlueprintName = \"SwiftyJSON iOS\"\n            ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"2E4FEFDA19575BE100351305\"\n            BuildableName = \"SwiftyJSON.framework\"\n            BlueprintName = \"SwiftyJSON iOS\"\n            ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"2E4FEFDA19575BE100351305\"\n            BuildableName = \"SwiftyJSON.framework\"\n            BlueprintName = \"SwiftyJSON iOS\"\n            ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/SwiftyJSON.xcodeproj/xcshareddata/xcschemes/SwiftyJSON tvOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"7236B4EC1BAC14150020529B\"\n               BuildableName = \"SwiftyJSON.framework\"\n               BlueprintName = \"SwiftyJSON tvOS\"\n               ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"79049A551BAB7CF500ABA14A\"\n               BuildableName = \"SwiftyJSON tvOS Tests.xctest\"\n               BlueprintName = \"SwiftyJSON tvOS Tests\"\n               ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"7236B4EC1BAC14150020529B\"\n            BuildableName = \"SwiftyJSON.framework\"\n            BlueprintName = \"SwiftyJSON tvOS\"\n            ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"7236B4EC1BAC14150020529B\"\n            BuildableName = \"SwiftyJSON.framework\"\n            BlueprintName = \"SwiftyJSON tvOS\"\n            ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"7236B4EC1BAC14150020529B\"\n            BuildableName = \"SwiftyJSON.framework\"\n            BlueprintName = \"SwiftyJSON tvOS\"\n            ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/SwiftyJSON.xcodeproj/xcshareddata/xcschemes/SwiftyJSON watchOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"E4D7CCDE1B9465A700EE7221\"\n               BuildableName = \"SwiftyJSON.framework\"\n               BlueprintName = \"SwiftyJSON watchOS\"\n               ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"E4D7CCDE1B9465A700EE7221\"\n            BuildableName = \"SwiftyJSON.framework\"\n            BlueprintName = \"SwiftyJSON watchOS\"\n            ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"E4D7CCDE1B9465A700EE7221\"\n            BuildableName = \"SwiftyJSON.framework\"\n            BlueprintName = \"SwiftyJSON watchOS\"\n            ReferencedContainer = \"container:SwiftyJSON.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/SwiftyJSON.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:SwiftyJSON.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Example/Example.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/SwiftyJSON.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "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>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/ArrayTests.swift",
    "content": "//  ArrayTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\n\nclass ArrayTests: XCTestCase {\n\n    func testSingleDimensionalArraysGetter() {\n        let array = [\"1\",\"2\", \"a\", \"B\", \"D\"]\n        let json = JSON(array)\n        XCTAssertEqual((json.array![0] as JSON).string!, \"1\")\n        XCTAssertEqual((json.array![1] as JSON).string!, \"2\")\n        XCTAssertEqual((json.array![2] as JSON).string!, \"a\")\n        XCTAssertEqual((json.array![3] as JSON).string!, \"B\")\n        XCTAssertEqual((json.array![4] as JSON).string!, \"D\")\n    }\n    \n    func testSingleDimensionalArraysSetter() {\n        let array = [\"1\",\"2\", \"a\", \"B\", \"D\"]\n        var json = JSON(array)\n        json.arrayObject = [\"111\", \"222\"]\n        XCTAssertEqual((json.array![0] as JSON).string!, \"111\")\n        XCTAssertEqual((json.array![1] as JSON).string!, \"222\")\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/BaseTests.swift",
    "content": "//  BaseTests.swift\n//\n//  Copyright (c) 2014 Ruoyu Fu, Pinglin Tang\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\nimport XCTest\n@testable import SwiftyJSON\n\nclass BaseTests: XCTestCase {\n\n    var testData: NSData!\n    \n    override func setUp() {\n        \n        super.setUp()\n        \n        if let file = NSBundle(forClass:BaseTests.self).pathForResource(\"Tests\", ofType: \"json\") {\n            self.testData = NSData(contentsOfFile: file)\n        } else {\n            XCTFail(\"Can't find the test JSON file\")\n        }\n    }\n    \n    override func tearDown() {\n        super.tearDown()\n    }\n    \n    func testInit() {\n        let json0 = JSON(data:self.testData)\n        XCTAssertEqual(json0.array!.count, 3)\n        XCTAssertEqual(JSON(\"123\").description, \"123\")\n        XCTAssertEqual(JSON([\"1\":\"2\"])[\"1\"].string!, \"2\")\n        let dictionary = NSMutableDictionary()\n        dictionary.setObject(NSNumber(double: 1.0), forKey: \"number\" as NSString)\n        dictionary.setObject(NSNull(), forKey: \"null\" as NSString)\n        _ = JSON(dictionary)\n        do {\n            let object: AnyObject = try NSJSONSerialization.JSONObjectWithData(self.testData, options: [])\n            let json2 = JSON(object)\n            XCTAssertEqual(json0, json2)\n        } catch _ {\n        }\n    }\n    \n    func testCompare() {\n        XCTAssertNotEqual(JSON(\"32.1234567890\"), JSON(32.1234567890))\n        XCTAssertNotEqual(JSON(\"9876543210987654321\"),JSON(NSNumber(unsignedLongLong:9876543210987654321)))\n        XCTAssertNotEqual(JSON(\"9876543210987654321.12345678901234567890\"), JSON(9876543210987654321.12345678901234567890))\n        XCTAssertEqual(JSON(\"😊\"), JSON(\"😊\"))\n        XCTAssertNotEqual(JSON(\"😱\"), JSON(\"😁\"))\n        XCTAssertEqual(JSON([123,321,456]), JSON([123,321,456]))\n        XCTAssertNotEqual(JSON([123,321,456]), JSON(123456789))\n        XCTAssertNotEqual(JSON([123,321,456]), JSON(\"string\"))\n        XCTAssertNotEqual(JSON([\"1\":123,\"2\":321,\"3\":456]), JSON(\"string\"))\n        XCTAssertEqual(JSON([\"1\":123,\"2\":321,\"3\":456]), JSON([\"2\":321,\"1\":123,\"3\":456]))\n        XCTAssertEqual(JSON(NSNull()),JSON(NSNull()))\n        XCTAssertNotEqual(JSON(NSNull()), JSON(123))\n    }\n    \n    func testJSONDoesProduceValidWithCorrectKeyPath() {\n        let json = JSON(data:self.testData)\n        \n        let tweets = json\n        let tweets_array = json.array\n        let tweets_1 = json[1]\n        _ = tweets_1[1]\n        let tweets_1_user_name = tweets_1[\"user\"][\"name\"]\n        let tweets_1_user_name_string = tweets_1[\"user\"][\"name\"].string\n        XCTAssertNotEqual(tweets.type, Type.Null)\n        XCTAssert(tweets_array != nil)\n        XCTAssertNotEqual(tweets_1.type, Type.Null)\n        XCTAssertEqual(tweets_1_user_name, JSON(\"Raffi Krikorian\"))\n        XCTAssertEqual(tweets_1_user_name_string!, \"Raffi Krikorian\")\n        \n        let tweets_1_coordinates = tweets_1[\"coordinates\"]\n        let tweets_1_coordinates_coordinates = tweets_1_coordinates[\"coordinates\"]\n        let tweets_1_coordinates_coordinates_point_0_double = tweets_1_coordinates_coordinates[0].double\n        let tweets_1_coordinates_coordinates_point_1_float = tweets_1_coordinates_coordinates[1].float\n        let new_tweets_1_coordinates_coordinates = JSON([-122.25831,37.871609] as NSArray)\n        XCTAssertEqual(tweets_1_coordinates_coordinates, new_tweets_1_coordinates_coordinates)\n        XCTAssertEqual(tweets_1_coordinates_coordinates_point_0_double!, -122.25831)\n        XCTAssertTrue(tweets_1_coordinates_coordinates_point_1_float! == 37.871609)\n        let tweets_1_coordinates_coordinates_point_0_string = tweets_1_coordinates_coordinates[0].stringValue\n        let tweets_1_coordinates_coordinates_point_1_string = tweets_1_coordinates_coordinates[1].stringValue\n        XCTAssertEqual(tweets_1_coordinates_coordinates_point_0_string, \"-122.25831\")\n        XCTAssertEqual(tweets_1_coordinates_coordinates_point_1_string, \"37.871609\")\n        let tweets_1_coordinates_coordinates_point_0 = tweets_1_coordinates_coordinates[0]\n        let tweets_1_coordinates_coordinates_point_1 = tweets_1_coordinates_coordinates[1]\n        XCTAssertEqual(tweets_1_coordinates_coordinates_point_0, JSON(-122.25831))\n        XCTAssertEqual(tweets_1_coordinates_coordinates_point_1, JSON(37.871609))\n        \n        let created_at = json[0][\"created_at\"].string\n        let id_str = json[0][\"id_str\"].string\n        let favorited = json[0][\"favorited\"].bool\n        let id = json[0][\"id\"].int64\n        let in_reply_to_user_id_str = json[0][\"in_reply_to_user_id_str\"]\n        XCTAssertEqual(created_at!, \"Tue Aug 28 21:16:23 +0000 2012\")\n        XCTAssertEqual(id_str!,\"240558470661799936\")\n        XCTAssertFalse(favorited!)\n        XCTAssertEqual(id!,240558470661799936)\n        XCTAssertEqual(in_reply_to_user_id_str.type, Type.Null)\n\n        let user = json[0][\"user\"]\n        let user_name = user[\"name\"].string\n        let user_profile_image_url = user[\"profile_image_url\"].URL\n        XCTAssert(user_name == \"OAuth Dancer\")\n        XCTAssert(user_profile_image_url == NSURL(string: \"http://a0.twimg.com/profile_images/730275945/oauth-dancer_normal.jpg\"))\n\n        let user_dictionary = json[0][\"user\"].dictionary\n        let user_dictionary_name = user_dictionary?[\"name\"]?.string\n        let user_dictionary_name_profile_image_url = user_dictionary?[\"profile_image_url\"]?.URL\n        XCTAssert(user_dictionary_name == \"OAuth Dancer\")\n        XCTAssert(user_dictionary_name_profile_image_url == NSURL(string: \"http://a0.twimg.com/profile_images/730275945/oauth-dancer_normal.jpg\"))\n    }\n    \n    func testSequenceType() {\n        let json = JSON(data:self.testData)\n        XCTAssertEqual(json.count, 3)\n        for (_, aJson) in json {\n            XCTAssertEqual(aJson, json[0])\n            break\n        }\n        \n        let index = 0\n        let keys = (json[1].dictionaryObject! as NSDictionary).allKeys as! [String]\n        for (aKey, aJson) in json[1] {\n            XCTAssertEqual(aKey, keys[index])\n            XCTAssertEqual(aJson, json[1][keys[index]])\n            break\n        }\n    }\n    \n    func testJSONNumberCompare() {\n        XCTAssertEqual(JSON(12376352.123321), JSON(12376352.123321))\n        XCTAssertGreaterThan(JSON(20.211), JSON(20.112))\n        XCTAssertGreaterThanOrEqual(JSON(30.211), JSON(20.112))\n        XCTAssertGreaterThanOrEqual(JSON(65232), JSON(65232))\n        XCTAssertLessThan(JSON(-82320.211), JSON(20.112))\n        XCTAssertLessThanOrEqual(JSON(-320.211), JSON(123.1))\n        XCTAssertLessThanOrEqual(JSON(-8763), JSON(-8763))\n        \n        XCTAssertEqual(JSON(12376352.123321), JSON(12376352.123321))\n        XCTAssertGreaterThan(JSON(20.211), JSON(20.112))\n        XCTAssertGreaterThanOrEqual(JSON(30.211), JSON(20.112))\n        XCTAssertGreaterThanOrEqual(JSON(65232), JSON(65232))\n        XCTAssertLessThan(JSON(-82320.211), JSON(20.112))\n        XCTAssertLessThanOrEqual(JSON(-320.211), JSON(123.1))\n        XCTAssertLessThanOrEqual(JSON(-8763), JSON(-8763))\n    }\n\n    func testNumberConvertToString(){\n        XCTAssertEqual(JSON(true).stringValue, \"true\")\n        XCTAssertEqual(JSON(999.9823).stringValue, \"999.9823\")\n        XCTAssertEqual(JSON(true).number!.stringValue, \"1\")\n        XCTAssertEqual(JSON(false).number!.stringValue, \"0\")\n        XCTAssertEqual(JSON(\"hello\").numberValue.stringValue, \"0\")\n        XCTAssertEqual(JSON(NSNull()).numberValue.stringValue, \"0\")\n        XCTAssertEqual(JSON([\"a\",\"b\",\"c\",\"d\"]).numberValue.stringValue, \"0\")\n        XCTAssertEqual(JSON([\"a\":\"b\",\"c\":\"d\"]).numberValue.stringValue, \"0\")\n    }\n    \n    func testNumberPrint(){\n\n        XCTAssertEqual(JSON(false).description,\"false\")\n        XCTAssertEqual(JSON(true).description,\"true\")\n\n        XCTAssertEqual(JSON(1).description,\"1\")\n        XCTAssertEqual(JSON(22).description,\"22\")\n        #if (arch(x86_64) || arch(arm64))\n        XCTAssertEqual(JSON(9.22337203685478E18).description,\"9.22337203685478e+18\")\n        #elseif (arch(i386) || arch(arm))\n        XCTAssertEqual(JSON(2147483647).description,\"2147483647\")\n        #endif\n        XCTAssertEqual(JSON(-1).description,\"-1\")\n        XCTAssertEqual(JSON(-934834834).description,\"-934834834\")\n        XCTAssertEqual(JSON(-2147483648).description,\"-2147483648\")\n\n        XCTAssertEqual(JSON(1.5555).description,\"1.5555\")\n        XCTAssertEqual(JSON(-9.123456789).description,\"-9.123456789\")\n        XCTAssertEqual(JSON(-0.00000000000000001).description,\"-1e-17\")\n        XCTAssertEqual(JSON(-999999999999999999999999.000000000000000000000001).description,\"-1e+24\")\n        XCTAssertEqual(JSON(-9999999991999999999999999.88888883433343439438493483483943948341).stringValue,\"-9.999999991999999e+24\")\n\n        XCTAssertEqual(JSON(Int(Int.max)).description,\"\\(Int.max)\")\n        XCTAssertEqual(JSON(NSNumber(long: Int.min)).description,\"\\(Int.min)\")\n        XCTAssertEqual(JSON(NSNumber(unsignedLong: UInt.max)).description,\"\\(UInt.max)\")\n        XCTAssertEqual(JSON(NSNumber(unsignedLongLong: UInt64.max)).description,\"\\(UInt64.max)\")\n        XCTAssertEqual(JSON(NSNumber(longLong: Int64.max)).description,\"\\(Int64.max)\")\n        XCTAssertEqual(JSON(NSNumber(unsignedLongLong: UInt64.max)).description,\"\\(UInt64.max)\")\n\n        XCTAssertEqual(JSON(Double.infinity).description,\"inf\")\n        XCTAssertEqual(JSON(-Double.infinity).description,\"-inf\")\n        XCTAssertEqual(JSON(Double.NaN).description,\"nan\")\n        \n        XCTAssertEqual(JSON(1.0/0.0).description,\"inf\")\n        XCTAssertEqual(JSON(-1.0/0.0).description,\"-inf\")\n        XCTAssertEqual(JSON(0.0/0.0).description,\"nan\")\n    }\n    \n    func testNullJSON() {\n        XCTAssertEqual(JSON(NSNull()).debugDescription,\"null\")\n        \n        let json:JSON = nil\n        XCTAssertEqual(json.debugDescription,\"null\")\n        XCTAssertNil(json.error)\n        let json1:JSON = JSON(NSNull())\n        if json1 != nil {\n            XCTFail(\"json1 should be nil\")\n        }\n    }\n    \n    func testExistance() {\n        let dictionary = [\"number\":1111]\n        let json = JSON(dictionary)\n        XCTAssertFalse(json[\"unspecifiedValue\"].isExists())\n        XCTAssertTrue(json[\"number\"].isExists())\n    }\n    \n    func testErrorHandle() {\n        let json = JSON(data:self.testData)\n        if let _ = json[\"wrong-type\"].string {\n            XCTFail(\"Should not run into here\")\n        } else {\n            XCTAssertEqual(json[\"wrong-type\"].error!.code, SwiftyJSON.ErrorWrongType)\n        }\n\n        if let _ = json[0][\"not-exist\"].string {\n            XCTFail(\"Should not run into here\")\n        } else {\n            XCTAssertEqual(json[0][\"not-exist\"].error!.code, SwiftyJSON.ErrorNotExist)\n        }\n        \n        let wrongJSON = JSON(NSObject())\n        if let error = wrongJSON.error {\n            XCTAssertEqual(error.code, SwiftyJSON.ErrorUnsupportedType)\n        }\n    }\n    \n    func testReturnObject() {\n        let json = JSON(data:self.testData)\n        XCTAssertNotNil(json.object)\n    }\n        \n    func testNumberCompare(){\n        XCTAssertEqual(NSNumber(double: 888332), NSNumber(int:888332))\n        XCTAssertNotEqual(NSNumber(double: 888332.1), NSNumber(int:888332))\n        XCTAssertLessThan(NSNumber(int: 888332).doubleValue, NSNumber(double:888332.1).doubleValue)\n        XCTAssertGreaterThan(NSNumber(double: 888332.1).doubleValue, NSNumber(int:888332).doubleValue)\n        XCTAssertFalse(NSNumber(double: 1) == NSNumber(bool:true))\n        XCTAssertFalse(NSNumber(int: 0) == NSNumber(bool:false))\n        XCTAssertEqual(NSNumber(bool: false), NSNumber(bool:false))\n        XCTAssertEqual(NSNumber(bool: true), NSNumber(bool:true))\n    }\n    \n\n}"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/ComparableTests.swift",
    "content": "//  ComparableTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\n\nclass ComparableTests: XCTestCase {\n\n    func testNumberEqual() {\n        let jsonL1:JSON = 1234567890.876623\n        let jsonR1:JSON = JSON(1234567890.876623)\n        XCTAssertEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 == 1234567890.876623)\n\n        let jsonL2:JSON = 987654321\n        let jsonR2:JSON = JSON(987654321)\n        XCTAssertEqual(jsonL2, jsonR2)\n        XCTAssertTrue(jsonR2 == 987654321)\n\n        \n        let jsonL3:JSON = JSON(NSNumber(double:87654321.12345678))\n        let jsonR3:JSON = JSON(NSNumber(double:87654321.12345678))\n        XCTAssertEqual(jsonL3, jsonR3)\n        XCTAssertTrue(jsonR3 == 87654321.12345678)\n    }\n    \n    func testNumberNotEqual() {\n        let jsonL1:JSON = 1234567890.876623\n        let jsonR1:JSON = JSON(123.123)\n        XCTAssertNotEqual(jsonL1, jsonR1)\n        XCTAssertFalse(jsonL1 == 34343)\n        \n        let jsonL2:JSON = 8773\n        let jsonR2:JSON = JSON(123.23)\n        XCTAssertNotEqual(jsonL2, jsonR2)\n        XCTAssertFalse(jsonR1 == 454352)\n        \n        let jsonL3:JSON = JSON(NSNumber(double:87621.12345678))\n        let jsonR3:JSON = JSON(NSNumber(double:87654321.45678))\n        XCTAssertNotEqual(jsonL3, jsonR3)\n        XCTAssertFalse(jsonL3 == 4545.232)\n    }\n    \n    func testNumberGreaterThanOrEqual() {\n        let jsonL1:JSON = 1234567890.876623\n        let jsonR1:JSON = JSON(123.123)\n        XCTAssertGreaterThanOrEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 >= -37434)\n        \n        let jsonL2:JSON = 8773\n        let jsonR2:JSON = JSON(-87343)\n        XCTAssertGreaterThanOrEqual(jsonL2, jsonR2)\n        XCTAssertTrue(jsonR2 >= -988343)\n\n        let jsonL3:JSON = JSON(NSNumber(double:87621.12345678))\n        let jsonR3:JSON = JSON(NSNumber(double:87621.12345678))\n        XCTAssertGreaterThanOrEqual(jsonL3, jsonR3)\n        XCTAssertTrue(jsonR3 >= 0.3232)\n    }\n    \n    func testNumberLessThanOrEqual() {\n        let jsonL1:JSON = 1234567890.876623\n        let jsonR1:JSON = JSON(123.123)\n        XCTAssertLessThanOrEqual(jsonR1, jsonL1)\n        XCTAssertFalse(83487343.3493 <= jsonR1)\n        \n        let jsonL2:JSON = 8773\n        let jsonR2:JSON = JSON(-123.23)\n        XCTAssertLessThanOrEqual(jsonR2, jsonL2)\n        XCTAssertFalse(9348343 <= jsonR2)\n        \n        let jsonL3:JSON = JSON(NSNumber(double:87621.12345678))\n        let jsonR3:JSON = JSON(NSNumber(double:87621.12345678))\n        XCTAssertLessThanOrEqual(jsonR3, jsonL3)\n        XCTAssertTrue(87621.12345678 <= jsonR3)\n    }\n\n    func testNumberGreaterThan() {\n        let jsonL1:JSON = 1234567890.876623\n        let jsonR1:JSON = JSON(123.123)\n        XCTAssertGreaterThan(jsonL1, jsonR1)\n        XCTAssertFalse(jsonR1 > 192388843.0988)\n\n        let jsonL2:JSON = 8773\n        let jsonR2:JSON = JSON(123.23)\n        XCTAssertGreaterThan(jsonL2, jsonR2)\n        XCTAssertFalse(jsonR2 > 877434)\n\n        let jsonL3:JSON = JSON(NSNumber(double:87621.12345678))\n        let jsonR3:JSON = JSON(NSNumber(double:87621.1234567))\n        XCTAssertGreaterThan(jsonL3, jsonR3)\n        XCTAssertFalse(-7799 > jsonR3)\n    }\n    \n    func testNumberLessThan() {\n        let jsonL1:JSON = 1234567890.876623\n        let jsonR1:JSON = JSON(123.123)\n        XCTAssertLessThan(jsonR1, jsonL1)\n        XCTAssertTrue(jsonR1 < 192388843.0988)\n\n        let jsonL2:JSON = 8773\n        let jsonR2:JSON = JSON(123.23)\n        XCTAssertLessThan(jsonR2, jsonL2)\n        XCTAssertTrue(jsonR2 < 877434)\n        \n        let jsonL3:JSON = JSON(NSNumber(double:87621.12345678))\n        let jsonR3:JSON = JSON(NSNumber(double:87621.1234567))\n        XCTAssertLessThan(jsonR3, jsonL3)\n        XCTAssertTrue(-7799 < jsonR3)\n    }\n\n    func testBoolEqual() {\n        let jsonL1:JSON = true\n        let jsonR1:JSON = JSON(true)\n        XCTAssertEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 == true)\n\n        let jsonL2:JSON = false\n        let jsonR2:JSON = JSON(false)\n        XCTAssertEqual(jsonL2, jsonR2)\n        XCTAssertTrue(jsonL2 == false)\n    }\n    \n    func testBoolNotEqual() {\n        let jsonL1:JSON = true\n        let jsonR1:JSON = JSON(false)\n        XCTAssertNotEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 != false)\n\n        let jsonL2:JSON = false\n        let jsonR2:JSON = JSON(true)\n        XCTAssertNotEqual(jsonL2, jsonR2)\n        XCTAssertTrue(jsonL2 != true)\n    }\n    \n    func testBoolGreaterThanOrEqual() {\n        let jsonL1:JSON = true\n        let jsonR1:JSON = JSON(true)\n        XCTAssertGreaterThanOrEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 >= true)\n        \n        let jsonL2:JSON = false\n        let jsonR2:JSON = JSON(false)\n        XCTAssertGreaterThanOrEqual(jsonL2, jsonR2)\n        XCTAssertFalse(jsonL2 >= true)\n    }\n    \n    func testBoolLessThanOrEqual() {\n        let jsonL1:JSON = true\n        let jsonR1:JSON = JSON(true)\n        XCTAssertLessThanOrEqual(jsonL1, jsonR1)\n        XCTAssertTrue(true <= jsonR1)\n        \n        let jsonL2:JSON = false\n        let jsonR2:JSON = JSON(false)\n        XCTAssertLessThanOrEqual(jsonL2, jsonR2)\n        XCTAssertFalse(jsonL2 <= true)\n    }\n    \n    func testBoolGreaterThan() {\n        let jsonL1:JSON = true\n        let jsonR1:JSON = JSON(true)\n        XCTAssertFalse(jsonL1 > jsonR1)\n        XCTAssertFalse(jsonL1 > true)\n        XCTAssertFalse(jsonR1 > false)\n\n        let jsonL2:JSON = false\n        let jsonR2:JSON = JSON(false)\n        XCTAssertFalse(jsonL2 > jsonR2)\n        XCTAssertFalse(jsonL2 > false)\n        XCTAssertFalse(jsonR2 > true)\n\n        let jsonL3:JSON = true\n        let jsonR3:JSON = JSON(false)\n        XCTAssertFalse(jsonL3 > jsonR3)\n        XCTAssertFalse(jsonL3 > false)\n        XCTAssertFalse(jsonR3 > true)\n        \n        let jsonL4:JSON = false\n        let jsonR4:JSON = JSON(true)\n        XCTAssertFalse(jsonL4 > jsonR4)\n        XCTAssertFalse(jsonL4 > false)\n        XCTAssertFalse(jsonR4 > true)\n    }\n    \n    func testBoolLessThan() {\n        let jsonL1:JSON = true\n        let jsonR1:JSON = JSON(true)\n        XCTAssertFalse(jsonL1 < jsonR1)\n        XCTAssertFalse(jsonL1 < true)\n        XCTAssertFalse(jsonR1 < false)\n\n        let jsonL2:JSON = false\n        let jsonR2:JSON = JSON(false)\n        XCTAssertFalse(jsonL2 < jsonR2)\n        XCTAssertFalse(jsonL2 < false)\n        XCTAssertFalse(jsonR2 < true)\n        \n        let jsonL3:JSON = true\n        let jsonR3:JSON = JSON(false)\n        XCTAssertFalse(jsonL3 < jsonR3)\n        XCTAssertFalse(jsonL3 < false)\n        XCTAssertFalse(jsonR3 < true)\n\n        let jsonL4:JSON = false\n        let jsonR4:JSON = JSON(true)\n        XCTAssertFalse(jsonL4 < jsonR4)\n        XCTAssertFalse(jsonL4 < false)\n        XCTAssertFalse(true < jsonR4)\n    }\n    \n    func testStringEqual() {\n        let jsonL1:JSON = \"abcdefg 123456789 !@#$%^&*()\"\n        let jsonR1:JSON = JSON(\"abcdefg 123456789 !@#$%^&*()\")\n\n        XCTAssertEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 == \"abcdefg 123456789 !@#$%^&*()\")\n    }\n    \n    func testStringNotEqual() {\n        let jsonL1:JSON = \"abcdefg 123456789 !@#$%^&*()\"\n        let jsonR1:JSON = JSON(\"-=[]\\\\\\\"987654321\")\n        \n        XCTAssertNotEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 != \"not equal\")\n    }\n    \n    func testStringGreaterThanOrEqual() {\n        let jsonL1:JSON = \"abcdefg 123456789 !@#$%^&*()\"\n        let jsonR1:JSON = JSON(\"abcdefg 123456789 !@#$%^&*()\")\n        \n        XCTAssertGreaterThanOrEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 >= \"abcdefg 123456789 !@#$%^&*()\")\n\n        let jsonL2:JSON = \"z-+{}:\"\n        let jsonR2:JSON = JSON(\"a<>?:\")\n        XCTAssertGreaterThanOrEqual(jsonL2, jsonR2)\n        XCTAssertTrue(jsonL2 >= \"mnbvcxz\")\n    }\n    \n    func testStringLessThanOrEqual() {\n        let jsonL1:JSON = \"abcdefg 123456789 !@#$%^&*()\"\n        let jsonR1:JSON = JSON(\"abcdefg 123456789 !@#$%^&*()\")\n        \n        XCTAssertLessThanOrEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 <= \"abcdefg 123456789 !@#$%^&*()\")\n        \n        let jsonL2:JSON = \"z-+{}:\"\n        let jsonR2:JSON = JSON(\"a<>?:\")\n        XCTAssertLessThanOrEqual(jsonR2, jsonL2)\n        XCTAssertTrue(\"mnbvcxz\" <= jsonL2)\n    }\n    \n    func testStringGreaterThan() {\n        let jsonL1:JSON = \"abcdefg 123456789 !@#$%^&*()\"\n        let jsonR1:JSON = JSON(\"abcdefg 123456789 !@#$%^&*()\")\n        \n        XCTAssertFalse(jsonL1 > jsonR1)\n        XCTAssertFalse(jsonL1 > \"abcdefg 123456789 !@#$%^&*()\")\n        \n        let jsonL2:JSON = \"z-+{}:\"\n        let jsonR2:JSON = JSON(\"a<>?:\")\n        XCTAssertGreaterThan(jsonL2, jsonR2)\n        XCTAssertFalse(\"87663434\" > jsonL2)\n    }\n\n    func testStringLessThan() {\n        let jsonL1:JSON = \"abcdefg 123456789 !@#$%^&*()\"\n        let jsonR1:JSON = JSON(\"abcdefg 123456789 !@#$%^&*()\")\n        \n        XCTAssertFalse(jsonL1 < jsonR1)\n        XCTAssertFalse(jsonL1 < \"abcdefg 123456789 !@#$%^&*()\")\n        \n        let jsonL2:JSON = \"98774\"\n        let jsonR2:JSON = JSON(\"123456\")\n        XCTAssertLessThan(jsonR2, jsonL2)\n        XCTAssertFalse(jsonL2 < \"09\")\n    }\n\n    func testNil() {\n        let jsonL1:JSON = nil\n        let jsonR1:JSON = JSON(NSNull())\n        XCTAssertEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 != \"123\")\n        XCTAssertFalse(jsonL1 > \"abcd\")\n        XCTAssertFalse(jsonR1 < \"*&^\")\n        XCTAssertFalse(jsonL1 >= \"jhfid\")\n        XCTAssertFalse(jsonR1 <= \"你好\")\n        XCTAssertTrue(jsonL1 >= jsonR1)\n        XCTAssertTrue(jsonL1 <= jsonR1)\n    }\n    \n    func testArray() {\n        let jsonL1:JSON = [1,2,\"4\",5,\"6\"]\n        let jsonR1:JSON = JSON([1,2,\"4\",5,\"6\"])\n        XCTAssertEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 == [1,2,\"4\",5,\"6\"])\n        XCTAssertTrue(jsonL1 != [\"abcd\",\"efg\"])\n        XCTAssertTrue(jsonL1 >= jsonR1)\n        XCTAssertTrue(jsonL1 <= jsonR1)\n        XCTAssertFalse(jsonL1 > [\"abcd\",\"\"])\n        XCTAssertFalse(jsonR1 < [])\n        XCTAssertFalse(jsonL1 >= [:])\n    }\n    \n    func testDictionary() {\n        let jsonL1:JSON = [\"2\": 2, \"name\": \"Jack\", \"List\": [\"a\", 1.09, NSNull()]]\n        let jsonR1:JSON = JSON([\"2\": 2, \"name\": \"Jack\", \"List\": [\"a\", 1.09, NSNull()]])\n        \n        XCTAssertEqual(jsonL1, jsonR1)\n        XCTAssertTrue(jsonL1 != [\"1\":2,\"Hello\":\"World\",\"Koo\":\"Foo\"])\n        XCTAssertTrue(jsonL1 >= jsonR1)\n        XCTAssertTrue(jsonL1 <= jsonR1)\n        XCTAssertFalse(jsonL1 >= [:])\n        XCTAssertFalse(jsonR1 <= [\"999\":\"aaaa\"])\n        XCTAssertFalse(jsonL1 > [\")(*&^\":1234567])\n        XCTAssertFalse(jsonR1 < [\"MNHH\":\"JUYTR\"])\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/DictionaryTests.swift",
    "content": "//  DictionaryTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\n\nclass DictionaryTests: XCTestCase {\n\n    func testGetter() {\n        let dictionary = [\"number\":9823.212, \"name\":\"NAME\", \"list\":[1234, 4.212], \"object\":[\"sub_number\":877.2323, \"sub_name\":\"sub_name\"], \"bool\":true]\n        let json = JSON(dictionary)\n        //dictionary\n        XCTAssertEqual((json.dictionary![\"number\"]! as JSON).double!, 9823.212)\n        XCTAssertEqual((json.dictionary![\"name\"]! as JSON).string!, \"NAME\")\n        XCTAssertEqual(((json.dictionary![\"list\"]! as JSON).array![0] as JSON).int!, 1234)\n        XCTAssertEqual(((json.dictionary![\"list\"]! as JSON).array![1] as JSON).double!, 4.212)\n        XCTAssertEqual((((json.dictionary![\"object\"]! as JSON).dictionaryValue)[\"sub_number\"]! as JSON).double!, 877.2323)\n        XCTAssertTrue(json.dictionary![\"null\"] == nil)\n        //dictionaryValue\n        XCTAssertEqual(((((json.dictionaryValue)[\"object\"]! as JSON).dictionaryValue)[\"sub_name\"]! as JSON).string!, \"sub_name\")\n        XCTAssertEqual((json.dictionaryValue[\"bool\"]! as JSON).bool!, true)\n        XCTAssertTrue(json.dictionaryValue[\"null\"] == nil)\n        XCTAssertTrue(JSON.null.dictionaryValue == [:])\n        //dictionaryObject\n        XCTAssertEqual(json.dictionaryObject![\"number\"]! as? Double, 9823.212)\n        XCTAssertTrue(json.dictionaryObject![\"null\"] == nil)\n        XCTAssertTrue(JSON.null.dictionaryObject == nil)\n    }\n    \n    func testSetter() {\n        var json:JSON = [\"test\":\"case\"]\n        XCTAssertEqual(json.dictionaryObject! as! [String : String], [\"test\":\"case\"])\n        json.dictionaryObject = [\"name\":\"NAME\"]\n        XCTAssertEqual(json.dictionaryObject! as! [String : String], [\"name\":\"NAME\"])\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/Info-OSX.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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/SwiftyJSON/Tests/Info-iOS.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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/SwiftyJSON/Tests/Info-tvOS.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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/SwiftyJSON/Tests/LiteralConvertibleTests.swift",
    "content": "//  LiteralConvertibleTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\n\nclass LiteralConvertibleTests: XCTestCase {\n\n    func testNumber() {\n        var json:JSON = 1234567890.876623\n        XCTAssertEqual(json.int!, 1234567890)\n        XCTAssertEqual(json.intValue, 1234567890)\n        XCTAssertEqual(json.double!, 1234567890.876623)\n        XCTAssertEqual(json.doubleValue, 1234567890.876623)\n        XCTAssertTrue(json.float! == 1234567890.876623)\n        XCTAssertTrue(json.floatValue == 1234567890.876623)\n    }\n    \n    func testBool() {\n        var jsonTrue:JSON = true\n        XCTAssertEqual(jsonTrue.bool!, true)\n        XCTAssertEqual(jsonTrue.boolValue, true)\n        var jsonFalse:JSON = false\n        XCTAssertEqual(jsonFalse.bool!, false)\n        XCTAssertEqual(jsonFalse.boolValue, false)\n    }\n\n    func testString() {\n        var json:JSON = \"abcd efg, HIJK;LMn\"\n        XCTAssertEqual(json.string!, \"abcd efg, HIJK;LMn\")\n        XCTAssertEqual(json.stringValue, \"abcd efg, HIJK;LMn\")\n    }\n    \n    func testNil() {\n        let jsonNil_1:JSON = nil\n        XCTAssert(jsonNil_1 == nil)\n        let jsonNil_2:JSON = JSON(NSNull)\n        XCTAssert(jsonNil_2 != nil)\n        let jsonNil_3:JSON = JSON([1:2])\n        XCTAssert(jsonNil_3 != nil)\n    }\n    \n    func testArray() {\n        let json:JSON = [1,2,\"4\",5,\"6\"]\n        XCTAssertEqual(json.array!, [1,2,\"4\",5,\"6\"])\n        XCTAssertEqual(json.arrayValue, [1,2,\"4\",5,\"6\"])\n    }\n    \n    func testDictionary() {\n        let json:JSON = [\"1\":2,\"2\":2,\"three\":3,\"list\":[\"aa\",\"bb\",\"dd\"]]\n        XCTAssertEqual(json.dictionary!, [\"1\":2,\"2\":2,\"three\":3,\"list\":[\"aa\",\"bb\",\"dd\"]])\n        XCTAssertEqual(json.dictionaryValue, [\"1\":2,\"2\":2,\"three\":3,\"list\":[\"aa\",\"bb\",\"dd\"]])\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/NumberTests.swift",
    "content": "//  NumberTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\nclass NumberTests: XCTestCase {\n\n    func testNumber() {\n        //getter\n        var json = JSON(NSNumber(double: 9876543210.123456789))\n        XCTAssertEqual(json.number!, 9876543210.123456789)\n        XCTAssertEqual(json.numberValue, 9876543210.123456789)\n        XCTAssertEqual(json.stringValue, \"9876543210.123457\")\n        \n        json.string = \"1000000000000000000000000000.1\"\n        XCTAssertNil(json.number)\n        XCTAssertEqual(json.numberValue.description, \"1000000000000000000000000000.1\")\n\n        json.string = \"1e+27\"\n        XCTAssertEqual(json.numberValue.description, \"1000000000000000000000000000\")\n        \n        //setter\n        json.number = NSNumber(double: 123456789.0987654321)\n        XCTAssertEqual(json.number!, 123456789.0987654321)\n        XCTAssertEqual(json.numberValue, 123456789.0987654321)\n        \n        json.number = nil\n        XCTAssertEqual(json.numberValue, 0)\n        XCTAssertEqual(json.object as? NSNull, NSNull())\n        XCTAssertTrue(json.number == nil)\n        \n        json.numberValue = 2.9876\n        XCTAssertEqual(json.number!, 2.9876)\n    }\n    \n    func testBool() {\n        var json = JSON(true)\n        XCTAssertEqual(json.bool!, true)\n        XCTAssertEqual(json.boolValue, true)\n        XCTAssertEqual(json.numberValue, true as NSNumber)\n        XCTAssertEqual(json.stringValue, \"true\")\n        \n        json.bool = false\n        XCTAssertEqual(json.bool!, false)\n        XCTAssertEqual(json.boolValue, false)\n        XCTAssertEqual(json.numberValue, false as NSNumber)\n        \n        json.bool = nil\n        XCTAssertTrue(json.bool == nil)\n        XCTAssertEqual(json.boolValue, false)\n        XCTAssertEqual(json.numberValue, 0)\n        \n        json.boolValue = true\n        XCTAssertEqual(json.bool!, true)\n        XCTAssertEqual(json.boolValue, true)\n        XCTAssertEqual(json.numberValue, true as NSNumber)\n    }\n    \n    func testDouble() {\n        var json = JSON(9876543210.123456789)\n        XCTAssertEqual(json.double!, 9876543210.123456789)\n        XCTAssertEqual(json.doubleValue, 9876543210.123456789)\n        XCTAssertEqual(json.numberValue, 9876543210.123456789)\n        XCTAssertEqual(json.stringValue, \"9876543210.123457\")\n        \n        json.double = 2.8765432\n        XCTAssertEqual(json.double!, 2.8765432)\n        XCTAssertEqual(json.doubleValue, 2.8765432)\n        XCTAssertEqual(json.numberValue, 2.8765432)\n        \n        json.doubleValue = 89.0987654\n        XCTAssertEqual(json.double!, 89.0987654)\n        XCTAssertEqual(json.doubleValue, 89.0987654)\n        XCTAssertEqual(json.numberValue, 89.0987654)\n        \n        json.double = nil\n        XCTAssertEqual(json.boolValue, false)\n        XCTAssertEqual(json.doubleValue, 0.0)\n        XCTAssertEqual(json.numberValue, 0)\n    }\n\n    func testFloat() {\n        var json = JSON(54321.12345)\n        XCTAssertTrue(json.float! == 54321.12345)\n        XCTAssertTrue(json.floatValue == 54321.12345)\n        print(json.numberValue.doubleValue)\n        XCTAssertEqual(json.numberValue, 54321.12345)\n        XCTAssertEqual(json.stringValue, \"54321.12345\")\n        \n        json.float = 23231.65\n        XCTAssertTrue(json.float! == 23231.65)\n        XCTAssertTrue(json.floatValue == 23231.65)\n        XCTAssertEqual(json.numberValue, NSNumber(float:23231.65))\n        \n        json.floatValue = -98766.23\n        XCTAssertEqual(json.float!, -98766.23)\n        XCTAssertEqual(json.floatValue, -98766.23)\n        XCTAssertEqual(json.numberValue, NSNumber(float:-98766.23))\n    }\n    \n    func testInt() {\n        var json = JSON(123456789)\n        XCTAssertEqual(json.int!, 123456789)\n        XCTAssertEqual(json.intValue, 123456789)\n        XCTAssertEqual(json.numberValue, NSNumber(integer: 123456789))\n        XCTAssertEqual(json.stringValue, \"123456789\")\n        \n        json.int = nil\n        XCTAssertTrue(json.boolValue == false)\n        XCTAssertTrue(json.intValue == 0)\n        XCTAssertEqual(json.numberValue, 0)\n        XCTAssertEqual(json.object as? NSNull, NSNull())\n        XCTAssertTrue(json.int == nil)\n        \n        json.intValue = 76543\n        XCTAssertEqual(json.int!, 76543)\n        XCTAssertEqual(json.intValue, 76543)\n        XCTAssertEqual(json.numberValue, NSNumber(integer: 76543))\n        \n        json.intValue = 98765421\n        XCTAssertEqual(json.int!, 98765421)\n        XCTAssertEqual(json.intValue, 98765421)\n        XCTAssertEqual(json.numberValue, NSNumber(integer: 98765421))\n    }\n    \n    func testUInt() {\n        var json = JSON(123456789)\n        XCTAssertTrue(json.uInt! == 123456789)\n        XCTAssertTrue(json.uIntValue == 123456789)\n        XCTAssertEqual(json.numberValue, NSNumber(unsignedInteger: 123456789))\n        XCTAssertEqual(json.stringValue, \"123456789\")\n        \n        json.uInt = nil\n        XCTAssertTrue(json.boolValue == false)\n        XCTAssertTrue(json.uIntValue == 0)\n        XCTAssertEqual(json.numberValue, 0)\n        XCTAssertEqual(json.object as? NSNull, NSNull())\n        XCTAssertTrue(json.uInt == nil)\n        \n        json.uIntValue = 76543\n        XCTAssertTrue(json.uInt! == 76543)\n        XCTAssertTrue(json.uIntValue == 76543)\n        XCTAssertEqual(json.numberValue, NSNumber(unsignedInteger: 76543))\n        \n        json.uIntValue = 98765421\n        XCTAssertTrue(json.uInt! == 98765421)\n        XCTAssertTrue(json.uIntValue == 98765421)\n        XCTAssertEqual(json.numberValue, NSNumber(unsignedInteger: 98765421))\n    }\n    \n    func testInt8() {\n        let n127 = NSNumber(char: 127)\n        var json = JSON(n127)\n        XCTAssertTrue(json.int8! == n127.charValue)\n        XCTAssertTrue(json.int8Value == n127.charValue)\n        XCTAssertTrue(json.number! == n127)\n        XCTAssertEqual(json.numberValue, n127)\n        XCTAssertEqual(json.stringValue, \"127\")\n        \n        let nm128 = NSNumber(char: -128)\n        json.int8Value = nm128.charValue\n        XCTAssertTrue(json.int8! == nm128.charValue)\n        XCTAssertTrue(json.int8Value == nm128.charValue)\n        XCTAssertTrue(json.number! == nm128)\n        XCTAssertEqual(json.numberValue, nm128)\n        XCTAssertEqual(json.stringValue, \"-128\")\n        \n        let n0 = NSNumber(char: 0 as Int8)\n        json.int8Value = n0.charValue\n        XCTAssertTrue(json.int8! == n0.charValue)\n        XCTAssertTrue(json.int8Value == n0.charValue)\n        print(json.number)\n        XCTAssertTrue(json.number! == n0)\n        XCTAssertEqual(json.numberValue, n0)\n        #if (arch(x86_64) || arch(arm64))\n           XCTAssertEqual(json.stringValue, \"false\")\n        #elseif (arch(i386) || arch(arm))\n            XCTAssertEqual(json.stringValue, \"0\")\n        #endif\n        \n        \n        let n1 = NSNumber(char: 1 as Int8)\n        json.int8Value = n1.charValue\n        XCTAssertTrue(json.int8! == n1.charValue)\n        XCTAssertTrue(json.int8Value == n1.charValue)\n        XCTAssertTrue(json.number! == n1)\n        XCTAssertEqual(json.numberValue, n1)\n        #if (arch(x86_64) || arch(arm64))\n            XCTAssertEqual(json.stringValue, \"true\")\n        #elseif (arch(i386) || arch(arm))\n            XCTAssertEqual(json.stringValue, \"1\")\n        #endif\n    }\n    \n    func testUInt8() {\n        let n255 = NSNumber(unsignedChar: 255)\n        var json = JSON(n255)\n        XCTAssertTrue(json.uInt8! == n255.unsignedCharValue)\n        XCTAssertTrue(json.uInt8Value == n255.unsignedCharValue)\n        XCTAssertTrue(json.number! == n255)\n        XCTAssertEqual(json.numberValue, n255)\n        XCTAssertEqual(json.stringValue, \"255\")\n        \n        let nm2 = NSNumber(unsignedChar: 2)\n        json.uInt8Value = nm2.unsignedCharValue\n        XCTAssertTrue(json.uInt8! == nm2.unsignedCharValue)\n        XCTAssertTrue(json.uInt8Value == nm2.unsignedCharValue)\n        XCTAssertTrue(json.number! == nm2)\n        XCTAssertEqual(json.numberValue, nm2)\n        XCTAssertEqual(json.stringValue, \"2\")\n        \n        let nm0 = NSNumber(unsignedChar: 0)\n        json.uInt8Value = nm0.unsignedCharValue\n        XCTAssertTrue(json.uInt8! == nm0.unsignedCharValue)\n        XCTAssertTrue(json.uInt8Value == nm0.unsignedCharValue)\n        XCTAssertTrue(json.number! == nm0)\n        XCTAssertEqual(json.numberValue, nm0)\n        XCTAssertEqual(json.stringValue, \"0\")\n\n        let nm1 = NSNumber(unsignedChar: 1)\n        json.uInt8 = nm1.unsignedCharValue\n        XCTAssertTrue(json.uInt8! == nm1.unsignedCharValue)\n        XCTAssertTrue(json.uInt8Value == nm1.unsignedCharValue)\n        XCTAssertTrue(json.number! == nm1)\n        XCTAssertEqual(json.numberValue, nm1)\n        XCTAssertEqual(json.stringValue, \"1\")\n    }\n\n    func testInt16() {\n        \n        let n32767 = NSNumber(short: 32767)\n        var json = JSON(n32767)\n        XCTAssertTrue(json.int16! == n32767.shortValue)\n        XCTAssertTrue(json.int16Value == n32767.shortValue)\n        XCTAssertTrue(json.number! == n32767)\n        XCTAssertEqual(json.numberValue, n32767)\n        XCTAssertEqual(json.stringValue, \"32767\")\n        \n        let nm32768 = NSNumber(short: -32768)\n        json.int16Value = nm32768.shortValue\n        XCTAssertTrue(json.int16! == nm32768.shortValue)\n        XCTAssertTrue(json.int16Value == nm32768.shortValue)\n        XCTAssertTrue(json.number! == nm32768)\n        XCTAssertEqual(json.numberValue, nm32768)\n        XCTAssertEqual(json.stringValue, \"-32768\")\n        \n        let n0 = NSNumber(short: 0)\n        json.int16Value = n0.shortValue\n        XCTAssertTrue(json.int16! == n0.shortValue)\n        XCTAssertTrue(json.int16Value == n0.shortValue)\n        print(json.number)\n        XCTAssertTrue(json.number! == n0)\n        XCTAssertEqual(json.numberValue, n0)\n        XCTAssertEqual(json.stringValue, \"0\")\n        \n        let n1 = NSNumber(short: 1)\n        json.int16 = n1.shortValue\n        XCTAssertTrue(json.int16! == n1.shortValue)\n        XCTAssertTrue(json.int16Value == n1.shortValue)\n        XCTAssertTrue(json.number! == n1)\n        XCTAssertEqual(json.numberValue, n1)\n        XCTAssertEqual(json.stringValue, \"1\")\n    }\n\n    func testUInt16() {\n\n        let n65535 = NSNumber(unsignedInteger: 65535)\n        var json = JSON(n65535)\n        XCTAssertTrue(json.uInt16! == n65535.unsignedShortValue)\n        XCTAssertTrue(json.uInt16Value == n65535.unsignedShortValue)\n        XCTAssertTrue(json.number! == n65535)\n        XCTAssertEqual(json.numberValue, n65535)\n        XCTAssertEqual(json.stringValue, \"65535\")\n\n        let n32767 = NSNumber(unsignedInteger: 32767)\n        json.uInt16 = n32767.unsignedShortValue\n        XCTAssertTrue(json.uInt16! == n32767.unsignedShortValue)\n        XCTAssertTrue(json.uInt16Value == n32767.unsignedShortValue)\n        XCTAssertTrue(json.number! == n32767)\n        XCTAssertEqual(json.numberValue, n32767)\n        XCTAssertEqual(json.stringValue, \"32767\")\n    }\n\n    func testInt32() {\n        let n2147483647 = NSNumber(int: 2147483647)\n        var json = JSON(n2147483647)\n        XCTAssertTrue(json.int32! == n2147483647.intValue)\n        XCTAssertTrue(json.int32Value == n2147483647.intValue)\n        XCTAssertTrue(json.number! == n2147483647)\n        XCTAssertEqual(json.numberValue, n2147483647)\n        XCTAssertEqual(json.stringValue, \"2147483647\")\n        \n        let n32767 = NSNumber(int: 32767)\n        json.int32 = n32767.intValue\n        XCTAssertTrue(json.int32! == n32767.intValue)\n        XCTAssertTrue(json.int32Value == n32767.intValue)\n        XCTAssertTrue(json.number! == n32767)\n        XCTAssertEqual(json.numberValue, n32767)\n        XCTAssertEqual(json.stringValue, \"32767\")\n        \n        let nm2147483648 = NSNumber(int: -2147483648)\n        json.int32Value = nm2147483648.intValue\n        XCTAssertTrue(json.int32! == nm2147483648.intValue)\n        XCTAssertTrue(json.int32Value == nm2147483648.intValue)\n        XCTAssertTrue(json.number! == nm2147483648)\n        XCTAssertEqual(json.numberValue, nm2147483648)\n        XCTAssertEqual(json.stringValue, \"-2147483648\")\n    }\n    \n    func testUInt32() {\n        let n2147483648 = NSNumber(unsignedInt: 2147483648)\n        var json = JSON(n2147483648)\n        XCTAssertTrue(json.uInt32! == n2147483648.unsignedIntValue)\n        XCTAssertTrue(json.uInt32Value == n2147483648.unsignedIntValue)\n        XCTAssertTrue(json.number! == n2147483648)\n        XCTAssertEqual(json.numberValue, n2147483648)\n        XCTAssertEqual(json.stringValue, \"2147483648\")\n        \n        let n32767 = NSNumber(unsignedInt: 32767)\n        json.uInt32 = n32767.unsignedIntValue\n        XCTAssertTrue(json.uInt32! == n32767.unsignedIntValue)\n        XCTAssertTrue(json.uInt32Value == n32767.unsignedIntValue)\n        XCTAssertTrue(json.number! == n32767)\n        XCTAssertEqual(json.numberValue, n32767)\n        XCTAssertEqual(json.stringValue, \"32767\")\n        \n        let n0 = NSNumber(unsignedInt: 0)\n        json.uInt32Value = n0.unsignedIntValue\n        XCTAssertTrue(json.uInt32! == n0.unsignedIntValue)\n        XCTAssertTrue(json.uInt32Value == n0.unsignedIntValue)\n        XCTAssertTrue(json.number! == n0)\n        XCTAssertEqual(json.numberValue, n0)\n        XCTAssertEqual(json.stringValue, \"0\")\n    }\n\n    func testInt64() {\n        let int64Max = NSNumber(longLong: INT64_MAX)\n        var json = JSON(int64Max)\n        XCTAssertTrue(json.int64! == int64Max.longLongValue)\n        XCTAssertTrue(json.int64Value == int64Max.longLongValue)\n        XCTAssertTrue(json.number! == int64Max)\n        XCTAssertEqual(json.numberValue, int64Max)\n        XCTAssertEqual(json.stringValue, int64Max.stringValue)\n        \n        let n32767 = NSNumber(longLong: 32767)\n        json.int64 = n32767.longLongValue\n        XCTAssertTrue(json.int64! == n32767.longLongValue)\n        XCTAssertTrue(json.int64Value == n32767.longLongValue)\n        XCTAssertTrue(json.number! == n32767)\n        XCTAssertEqual(json.numberValue, n32767)\n        XCTAssertEqual(json.stringValue, \"32767\")\n        \n        let int64Min = NSNumber(longLong: (INT64_MAX-1) * -1)\n        json.int64Value = int64Min.longLongValue\n        XCTAssertTrue(json.int64! == int64Min.longLongValue)\n        XCTAssertTrue(json.int64Value == int64Min.longLongValue)\n        XCTAssertTrue(json.number! == int64Min)\n        XCTAssertEqual(json.numberValue, int64Min)\n        XCTAssertEqual(json.stringValue, int64Min.stringValue)\n    }\n    \n    func testUInt64() {\n        let uInt64Max = NSNumber(unsignedLongLong: UINT64_MAX)\n        var json = JSON(uInt64Max)\n        XCTAssertTrue(json.uInt64! == uInt64Max.unsignedLongLongValue)\n        XCTAssertTrue(json.uInt64Value == uInt64Max.unsignedLongLongValue)\n        XCTAssertTrue(json.number! == uInt64Max)\n        XCTAssertEqual(json.numberValue, uInt64Max)\n        XCTAssertEqual(json.stringValue, uInt64Max.stringValue)\n        \n        let n32767 = NSNumber(longLong: 32767)\n        json.int64 = n32767.longLongValue\n        XCTAssertTrue(json.int64! == n32767.longLongValue)\n        XCTAssertTrue(json.int64Value == n32767.longLongValue)\n        XCTAssertTrue(json.number! == n32767)\n        XCTAssertEqual(json.numberValue, n32767)\n        XCTAssertEqual(json.stringValue, \"32767\")\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/PerformanceTests.swift",
    "content": "//  PerformanceTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\n\nclass PerformanceTests: XCTestCase {\n\n    var testData: NSData!\n    \n    override func setUp() {\n        super.setUp()\n        \n        if let file = NSBundle(forClass:PerformanceTests.self).pathForResource(\"Tests\", ofType: \"json\") {\n            self.testData = NSData(contentsOfFile: file)\n        } else {\n            XCTFail(\"Can't find the test JSON file\")\n        }\n    }\n    \n    override func 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    func testInitPerformance() {\n        self.measureBlock() {\n            for _ in 1...100 {\n                let json = JSON(data:self.testData)\n                XCTAssertTrue(json != JSON.null)\n            }\n        }\n    }\n    \n    func testObjectMethodPerformance() {\n        var json = JSON(data:self.testData)\n        self.measureBlock() {\n            for _ in 1...100 {\n                let object:AnyObject? = json.object\n                XCTAssertTrue(object != nil)\n            }\n        }\n    }\n\n    func testArrayMethodPerformance() {\n        let json = JSON(data:self.testData)\n        self.measureBlock() {\n            for _ in 1...100 {\n                autoreleasepool{\n                    let array = json.array\n                    XCTAssertTrue(array?.count > 0)\n                }\n            }\n        }\n    }\n    \n    func testDictionaryMethodPerformance() {\n        let json = JSON(data:testData)[0]\n        self.measureBlock() {\n            for _ in 1...100 {\n                autoreleasepool{\n                    let dictionary = json.dictionary\n                    XCTAssertTrue(dictionary?.count > 0)\n                }\n            }\n        }\n    }\n    \n    func testRawStringMethodPerformance() {\n        let json = JSON(data:testData)\n        self.measureBlock() {\n            for _ in 1...100 {\n                autoreleasepool{\n                    let string = json.rawString()\n                    XCTAssertTrue(string != nil)\n                }\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/PrintableTests.swift",
    "content": "//  PrintableTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\n\nclass PrintableTests: XCTestCase {\n    func testNumber() {\n        let json:JSON = 1234567890.876623\n        XCTAssertEqual(json.description, \"1234567890.876623\")\n        XCTAssertEqual(json.debugDescription, \"1234567890.876623\")\n    }\n    \n    func testBool() {\n        let jsonTrue:JSON = true\n        XCTAssertEqual(jsonTrue.description, \"true\")\n        XCTAssertEqual(jsonTrue.debugDescription, \"true\")\n        let jsonFalse:JSON = false\n        XCTAssertEqual(jsonFalse.description, \"false\")\n        XCTAssertEqual(jsonFalse.debugDescription, \"false\")\n    }\n    \n    func testString() {\n        let json:JSON = \"abcd efg, HIJK;LMn\"\n        XCTAssertEqual(json.description, \"abcd efg, HIJK;LMn\")\n        XCTAssertEqual(json.debugDescription, \"abcd efg, HIJK;LMn\")\n    }\n    \n    func testNil() {\n        let jsonNil_1:JSON = nil\n        XCTAssertEqual(jsonNil_1.description, \"null\")\n        XCTAssertEqual(jsonNil_1.debugDescription, \"null\")\n        let jsonNil_2:JSON = JSON(NSNull())\n        XCTAssertEqual(jsonNil_2.description, \"null\")\n        XCTAssertEqual(jsonNil_2.debugDescription, \"null\")\n    }\n    \n    func testArray() {\n        let json:JSON = [1,2,\"4\",5,\"6\"]\n        var description = json.description.stringByReplacingOccurrencesOfString(\"\\n\", withString: \"\")\n        description = description.stringByReplacingOccurrencesOfString(\" \", withString: \"\")\n        XCTAssertEqual(description, \"[1,2,\\\"4\\\",5,\\\"6\\\"]\")\n        XCTAssertTrue(json.description.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) > 0)\n        XCTAssertTrue(json.debugDescription.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) > 0)\n    }\n    \n    func testDictionary() {\n        let json:JSON = [\"1\":2,\"2\":\"two\", \"3\":3]\n        var debugDescription = json.debugDescription.stringByReplacingOccurrencesOfString(\"\\n\", withString: \"\")\n        debugDescription = debugDescription.stringByReplacingOccurrencesOfString(\" \", withString: \"\")\n        XCTAssertTrue(json.description.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) > 0)\n        XCTAssertTrue(debugDescription.rangeOfString(\"\\\"1\\\":2\", options: NSStringCompareOptions.CaseInsensitiveSearch) != nil)\n        XCTAssertTrue(debugDescription.rangeOfString(\"\\\"2\\\":\\\"two\\\"\", options: NSStringCompareOptions.CaseInsensitiveSearch) != nil)\n        XCTAssertTrue(debugDescription.rangeOfString(\"\\\"3\\\":3\", options: NSStringCompareOptions.CaseInsensitiveSearch) != nil)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/RawRepresentableTests.swift",
    "content": "//  RawRepresentableTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\n\nclass RawRepresentableTests: XCTestCase {\n\n    func testNumber() {\n        var json:JSON = JSON(rawValue: 948394394.347384 as NSNumber)!\n        XCTAssertEqual(json.int!, 948394394)\n        XCTAssertEqual(json.intValue, 948394394)\n        XCTAssertEqual(json.double!, 948394394.347384)\n        XCTAssertEqual(json.doubleValue, 948394394.347384)\n        XCTAssertTrue(json.float! == 948394394.347384)\n        XCTAssertTrue(json.floatValue == 948394394.347384)\n        \n        let object: AnyObject = json.rawValue\n        XCTAssertEqual(object as? Int, 948394394)\n        XCTAssertEqual(object as? Double, 948394394.347384)\n        XCTAssertTrue(object as! Float == 948394394.347384)\n        XCTAssertEqual(object as? NSNumber, 948394394.347384)\n    }\n    \n    func testBool() {\n        var jsonTrue:JSON = JSON(rawValue: true as NSNumber)!\n        XCTAssertEqual(jsonTrue.bool!, true)\n        XCTAssertEqual(jsonTrue.boolValue, true)\n        \n        var jsonFalse:JSON = JSON(rawValue: false)!\n        XCTAssertEqual(jsonFalse.bool!, false)\n        XCTAssertEqual(jsonFalse.boolValue, false)\n        \n        let objectTrue: AnyObject = jsonTrue.rawValue\n        XCTAssertEqual(objectTrue as? Int, 1)\n        XCTAssertEqual(objectTrue as? Double, 1.0)\n        XCTAssertEqual(objectTrue as? Bool, true)\n        XCTAssertEqual(objectTrue as? NSNumber, NSNumber(bool: true))\n        \n        let objectFalse: AnyObject = jsonFalse.rawValue\n        XCTAssertEqual(objectFalse as? Int, 0)\n        XCTAssertEqual(objectFalse as? Double, 0.0)\n        XCTAssertEqual(objectFalse as? Bool, false)\n        XCTAssertEqual(objectFalse as? NSNumber, NSNumber(bool: false))\n    }\n    \n    func testString() {\n        let string = \"The better way to deal with JSON data in Swift.\"\n        if let json:JSON = JSON(rawValue: string) {\n            XCTAssertEqual(json.string!, string)\n            XCTAssertEqual(json.stringValue, string)\n            XCTAssertTrue(json.array == nil)\n            XCTAssertTrue(json.dictionary == nil)\n            XCTAssertTrue(json.null == nil)\n            XCTAssertTrue(json.error == nil)\n            XCTAssertTrue(json.type == .String)\n            XCTAssertEqual(json.object as? String, string)\n        } else {\n            XCTFail(\"Should not run into here\")\n        }\n        \n        let object: AnyObject = JSON(rawValue: string)!.rawValue\n        XCTAssertEqual(object as? String, string)\n    }\n    \n    func testNil() {\n        if let _ = JSON(rawValue: NSObject()) {\n            XCTFail(\"Should not run into here\")\n        }\n    }\n    \n    func testArray() {\n        let array = [1,2,\"3\",4102,\"5632\", \"abocde\", \"!@# $%^&*()\"] as NSArray\n        if let json:JSON = JSON(rawValue: array) {\n            XCTAssertEqual(json, JSON(array))\n        }\n        \n        let object: AnyObject = JSON(rawValue: array)!.rawValue\n        XCTAssertTrue(array == object as! NSArray)\n    }\n    \n    func testDictionary() {\n        let dictionary = [\"1\":2,\"2\":2,\"three\":3,\"list\":[\"aa\",\"bb\",\"dd\"]] as NSDictionary\n        if let json:JSON = JSON(rawValue: dictionary) {\n            XCTAssertEqual(json, JSON(dictionary))\n        }\n\n        let object: AnyObject = JSON(rawValue: dictionary)!.rawValue\n        XCTAssertTrue(dictionary == object as! NSDictionary)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/RawTests.swift",
    "content": "//  RawTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\n\nclass RawTests: XCTestCase {\n\n    func testRawData() {\n        let json: JSON = [\"somekey\" : \"some string value\"]\n        let expectedRawData = \"{\\\"somekey\\\":\\\"some string value\\\"}\".dataUsingEncoding(NSUTF8StringEncoding)\n        do {\n            let data: NSData = try json.rawData()\n            XCTAssertEqual(expectedRawData, data)\n        } catch _ {\n            XCTFail()\n        }\n    }\n    \n    func testInvalidJSONForRawData() {\n        let json: JSON = \"...<nonsense>xyz</nonsense>\"\n        do {\n            try json.rawData()\n        } catch let error as NSError {\n            XCTAssertEqual(error.code, ErrorInvalidJSON)\n        }\n    }\n    \n    func testArray() {\n        let json:JSON = [1, \"2\", 3.12, NSNull(), true, [\"name\": \"Jack\"]]\n        let data: NSData?\n        do {\n            data = try json.rawData()\n        } catch _ {\n            data = nil\n        }\n        let string = json.rawString()\n        XCTAssertTrue (data != nil)\n        XCTAssertTrue (string!.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) > 0)\n        print(string!)\n    }\n    \n    func testDictionary() {\n        let json:JSON = [\"number\":111111.23456789, \"name\":\"Jack\", \"list\":[1,2,3,4], \"bool\":false, \"null\":NSNull()]\n        let data: NSData?\n        do {\n            data = try json.rawData()\n        } catch _ {\n            data = nil\n        }\n        let string = json.rawString()\n        XCTAssertTrue (data != nil)\n        XCTAssertTrue (string!.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) > 0)\n        print(string!)\n    }\n    \n    func testString() {\n        let json:JSON = \"I'm a json\"\n        print(json.rawString())\n        XCTAssertTrue(json.rawString() == \"I'm a json\")\n    }\n    \n    func testNumber() {\n        let json:JSON = 123456789.123\n        print(json.rawString())\n        XCTAssertTrue(json.rawString() == \"123456789.123\")\n    }\n    \n    func testBool() {\n        let json:JSON = true\n        print(json.rawString())\n        XCTAssertTrue(json.rawString() == \"true\")\n    }\n    \n    func testNull() {\n        let json:JSON = nil\n        print(json.rawString())\n        XCTAssertTrue(json.rawString() == \"null\")\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/SequenceTypeTests.swift",
    "content": "//\n//  SequenceTypeTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\n\nclass SequenceTypeTests: XCTestCase {\n\n    func testJSONFile() {\n        if let file = NSBundle(forClass:BaseTests.self).pathForResource(\"Tests\", ofType: \"json\") {\n            let testData = NSData(contentsOfFile: file)\n            let json = JSON(data:testData!)\n            for (index, sub) in json {\n                switch (index as NSString).integerValue {\n                case 0:\n                    XCTAssertTrue(sub[\"id_str\"] == \"240558470661799936\")\n                case 1:\n                    XCTAssertTrue(sub[\"id_str\"] == \"240556426106372096\")\n                case 2:\n                    XCTAssertTrue(sub[\"id_str\"] == \"240539141056638977\")\n                default:0\n                }\n            }\n        } else {\n            XCTFail(\"Can't find the test JSON file\")\n        }\n    }\n    \n    func testArrayAllNumber() {\n        var json:JSON = [1,2.0,3.3,123456789,987654321.123456789]\n        XCTAssertEqual(json.count, 5)\n\n        var index = 0\n        var array = [NSNumber]()\n        for (i, sub) in json {\n            XCTAssertEqual(sub, json[index])\n            XCTAssertEqual(i, \"\\(index)\")\n            array.append(sub.number!)\n            index++\n        }\n        XCTAssertEqual(index, 5)\n        XCTAssertEqual(array, [1,2.0,3.3,123456789,987654321.123456789])\n    }\n    \n    func testArrayAllBool() {\n        var json:JSON = JSON([true, false, false, true, true])\n        XCTAssertEqual(json.count, 5)\n        \n        var index = 0\n        var array = [Bool]()\n        for (i, sub) in json {\n            XCTAssertEqual(sub, json[index])\n            XCTAssertEqual(i, \"\\(index)\")\n            array.append(sub.bool!)\n            index++\n        }\n        XCTAssertEqual(index, 5)\n        XCTAssertEqual(array, [true, false, false, true, true])\n    }\n    \n    func testArrayAllString() {\n        var json:JSON = JSON(rawValue: [\"aoo\",\"bpp\",\"zoo\"] as NSArray)!\n        XCTAssertEqual(json.count, 3)\n        \n        var index = 0\n        var array = [String]()\n        for (i, sub) in json {\n            XCTAssertEqual(sub, json[index])\n            XCTAssertEqual(i, \"\\(index)\")\n            array.append(sub.string!)\n            index++\n        }\n        XCTAssertEqual(index, 3)\n        XCTAssertEqual(array, [\"aoo\",\"bpp\",\"zoo\"])\n    }\n    \n    func testArrayWithNull() {\n        var json:JSON = JSON(rawValue: [\"aoo\",\"bpp\", NSNull() ,\"zoo\"] as NSArray)!\n        XCTAssertEqual(json.count, 4)\n        \n        var index = 0\n        var array = [AnyObject]()\n        for (i, sub) in json {\n            XCTAssertEqual(sub, json[index])\n            XCTAssertEqual(i, \"\\(index)\")\n            array.append(sub.object)\n            index++\n        }\n        XCTAssertEqual(index, 4)\n        XCTAssertEqual(array[0] as? String, \"aoo\")\n        XCTAssertEqual(array[2] as? NSNull, NSNull())\n    }\n    \n    func testArrayAllDictionary() {\n        var json:JSON = [[\"1\":1, \"2\":2], [\"a\":\"A\", \"b\":\"B\"], [\"null\":NSNull()]]\n        XCTAssertEqual(json.count, 3)\n        \n        var index = 0\n        var array = [AnyObject]()\n        for (i, sub) in json {\n            XCTAssertEqual(sub, json[index])\n            XCTAssertEqual(i, \"\\(index)\")\n            array.append(sub.object)\n            index++\n        }\n        XCTAssertEqual(index, 3)\n        XCTAssertEqual((array[0] as! [String : Int])[\"1\"]!, 1)\n        XCTAssertEqual((array[0] as! [String : Int])[\"2\"]!, 2)\n        XCTAssertEqual((array[1] as! [String : String])[\"a\"]!, \"A\")\n        XCTAssertEqual((array[1] as! [String : String])[\"b\"]!, \"B\")\n        XCTAssertEqual((array[2] as! [String : NSNull])[\"null\"]!, NSNull())\n    }\n    \n    func testDictionaryAllNumber() {\n        var json:JSON = [\"double\":1.11111, \"int\":987654321]\n        XCTAssertEqual(json.count, 2)\n        \n        var index = 0\n        var dictionary = [String:NSNumber]()\n        for (key, sub) in json {\n            XCTAssertEqual(sub, json[key])\n            dictionary[key] = sub.number!\n            index++\n        }\n        \n        XCTAssertEqual(index, 2)\n        XCTAssertEqual(dictionary[\"double\"]! as NSNumber, 1.11111)\n        XCTAssertEqual(dictionary[\"int\"]! as NSNumber, 987654321)\n    }\n    \n    func testDictionaryAllBool() {\n        var json:JSON = [\"t\":true, \"f\":false, \"false\":false, \"tr\":true, \"true\":true]\n        XCTAssertEqual(json.count, 5)\n        \n        var index = 0\n        var dictionary = [String:Bool]()\n        for (key, sub) in json {\n            XCTAssertEqual(sub, json[key])\n            dictionary[key] = sub.bool!\n            index++\n        }\n        \n        XCTAssertEqual(index, 5)\n        XCTAssertEqual(dictionary[\"t\"]! as Bool, true)\n        XCTAssertEqual(dictionary[\"false\"]! as Bool, false)\n    }\n    \n    func testDictionaryAllString() {\n        var json:JSON = JSON(rawValue: [\"a\":\"aoo\",\"bb\":\"bpp\",\"z\":\"zoo\"] as NSDictionary)!\n        XCTAssertEqual(json.count, 3)\n        \n        var index = 0\n        var dictionary = [String:String]()\n        for (key, sub) in json {\n            XCTAssertEqual(sub, json[key])\n            dictionary[key] = sub.string!\n            index++\n        }\n        \n        XCTAssertEqual(index, 3)\n        XCTAssertEqual(dictionary[\"a\"]! as String, \"aoo\")\n        XCTAssertEqual(dictionary[\"bb\"]! as String, \"bpp\")\n    }\n    \n    func testDictionaryWithNull() {\n        var json:JSON = JSON(rawValue: [\"a\":\"aoo\",\"bb\":\"bpp\",\"null\":NSNull(), \"z\":\"zoo\"] as NSDictionary)!\n        XCTAssertEqual(json.count, 4)\n        \n        var index = 0\n        var dictionary = [String:AnyObject]()\n        for (key, sub) in json {\n            XCTAssertEqual(sub, json[key])\n            dictionary[key] = sub.object\n            index++\n        }\n        \n        XCTAssertEqual(index, 4)\n        XCTAssertEqual(dictionary[\"a\"]! as? String, \"aoo\")\n        XCTAssertEqual(dictionary[\"bb\"]! as? String, \"bpp\")\n        XCTAssertEqual(dictionary[\"null\"]! as? NSNull, NSNull())\n    }\n    \n    func testDictionaryAllArray() {\n        var json:JSON = JSON ([\"Number\":[NSNumber(integer:1),NSNumber(double:2.123456),NSNumber(int:123456789)], \"String\":[\"aa\",\"bbb\",\"cccc\"], \"Mix\":[true, \"766\", NSNull(), 655231.9823]])\n\n        XCTAssertEqual(json.count, 3)\n        \n        var index = 0\n        var dictionary = [String:AnyObject]()\n        for (key, sub) in json {\n            XCTAssertEqual(sub, json[key])\n            dictionary[key] = sub.object\n            index++\n        }\n        \n        XCTAssertEqual(index, 3)\n        XCTAssertEqual((dictionary[\"Number\"] as! NSArray)[0] as? Int, 1)\n        XCTAssertEqual((dictionary[\"Number\"] as! NSArray)[1] as? Double, 2.123456)\n        XCTAssertEqual((dictionary[\"String\"] as! NSArray)[0] as? String, \"aa\")\n        XCTAssertEqual((dictionary[\"Mix\"] as! NSArray)[0] as? Bool, true)\n        XCTAssertEqual((dictionary[\"Mix\"] as! NSArray)[1] as? String, \"766\")\n        XCTAssertEqual((dictionary[\"Mix\"] as! NSArray)[2] as? NSNull, NSNull())\n        XCTAssertEqual((dictionary[\"Mix\"] as! NSArray)[3] as? Double, 655231.9823)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/StringTests.swift",
    "content": "//  StringTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\n\nclass StringTests: XCTestCase {\n\n    func testString() {\n        //getter\n        var json = JSON(\"abcdefg hijklmn;opqrst.?+_()\")\n        XCTAssertEqual(json.string!, \"abcdefg hijklmn;opqrst.?+_()\")\n        XCTAssertEqual(json.stringValue, \"abcdefg hijklmn;opqrst.?+_()\")\n\n        json.string = \"12345?67890.@#\"\n        XCTAssertEqual(json.string!, \"12345?67890.@#\")\n        XCTAssertEqual(json.stringValue, \"12345?67890.@#\")\n    }\n    \n    func testURL() {\n        let json = JSON(\"http://github.com\")\n        XCTAssertEqual(json.URL!, NSURL(string:\"http://github.com\")!)\n    }\n\n    func testURLPercentEscapes() {\n        let emDash = \"\\\\u2014\"\n        let urlString = \"http://examble.com/unencoded\" + emDash + \"string\"\n        let encodedURLString = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())\n        let json = JSON(urlString)\n        XCTAssertEqual(json.URL!, NSURL(string: encodedURLString!)!, \"Wrong unpacked \")\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/SubscriptTests.swift",
    "content": "//  SubscriptTests.swift\n//\n//  Copyright (c) 2014 Pinglin Tang\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\nimport XCTest\nimport SwiftyJSON\n\nclass SubscriptTests: XCTestCase {\n\n    func testArrayAllNumber() {\n        var json:JSON = [1,2.0,3.3,123456789,987654321.123456789]\n        XCTAssertTrue(json == [1,2.0,3.3,123456789,987654321.123456789])\n        XCTAssertTrue(json[0] == 1)\n        XCTAssertEqual(json[1].double!, 2.0)\n        XCTAssertTrue(json[2].floatValue == 3.3)\n        XCTAssertEqual(json[3].int!, 123456789)\n        XCTAssertEqual(json[4].doubleValue, 987654321.123456789)\n        \n        json[0] = 1.9\n        json[1] = 2.899\n        json[2] = 3.567\n        json[3] = 0.999\n        json[4] = 98732\n        \n        XCTAssertTrue(json[0] == 1.9)\n        XCTAssertEqual(json[1].doubleValue, 2.899)\n        XCTAssertTrue(json[2] == 3.567)\n        XCTAssertTrue(json[3].float! == 0.999)\n        XCTAssertTrue(json[4].intValue == 98732)\n    }\n    \n    func testArrayAllBool() {\n        var json:JSON = [true, false, false, true, true]\n        XCTAssertTrue(json == [true, false, false, true, true])\n        XCTAssertTrue(json[0] == true)\n        XCTAssertTrue(json[1] == false)\n        XCTAssertTrue(json[2] == false)\n        XCTAssertTrue(json[3] == true)\n        XCTAssertTrue(json[4] == true)\n        \n        json[0] = false\n        json[4] = true\n        XCTAssertTrue(json[0] == false)\n        XCTAssertTrue(json[4] == true)\n    }\n    \n    func testArrayAllString() {\n        var json:JSON = JSON(rawValue: [\"aoo\",\"bpp\",\"zoo\"] as NSArray)!\n        XCTAssertTrue(json == [\"aoo\",\"bpp\",\"zoo\"])\n        XCTAssertTrue(json[0] == \"aoo\")\n        XCTAssertTrue(json[1] == \"bpp\")\n        XCTAssertTrue(json[2] == \"zoo\")\n        \n        json[1] = \"update\"\n        XCTAssertTrue(json[0] == \"aoo\")\n        XCTAssertTrue(json[1] == \"update\")\n        XCTAssertTrue(json[2] == \"zoo\")\n    }\n    \n    func testArrayWithNull() {\n        var json:JSON = JSON(rawValue: [\"aoo\",\"bpp\", NSNull() ,\"zoo\"] as NSArray)!\n        XCTAssertTrue(json[0] == \"aoo\")\n        XCTAssertTrue(json[1] == \"bpp\")\n        XCTAssertNil(json[2].string)\n        XCTAssertNotNil(json[2].null)\n        XCTAssertTrue(json[3] == \"zoo\")\n        \n        json[2] = \"update\"\n        json[3] = JSON(NSNull())\n        XCTAssertTrue(json[0] == \"aoo\")\n        XCTAssertTrue(json[1] == \"bpp\")\n        XCTAssertTrue(json[2] == \"update\")\n        XCTAssertNil(json[3].string)\n        XCTAssertNotNil(json[3].null)\n    }\n    \n    func testArrayAllDictionary() {\n        var json:JSON = [[\"1\":1, \"2\":2], [\"a\":\"A\", \"b\":\"B\"], [\"null\":NSNull()]]\n        XCTAssertTrue(json[0] == [\"1\":1, \"2\":2])\n        XCTAssertEqual(json[1].dictionary!, [\"a\":\"A\", \"b\":\"B\"])\n        XCTAssertEqual(json[2], JSON([\"null\":NSNull()]))\n        XCTAssertTrue(json[0][\"1\"] == 1)\n        XCTAssertTrue(json[0][\"2\"] == 2)\n        XCTAssertEqual(json[1][\"a\"], JSON(rawValue: \"A\")!)\n        XCTAssertEqual(json[1][\"b\"], JSON(\"B\"))\n        XCTAssertNotNil(json[2][\"null\"].null)\n        XCTAssertNotNil(json[2,\"null\"].null)\n        let keys:[JSONSubscriptType] = [1, \"a\"]\n        XCTAssertEqual(json[keys], JSON(rawValue: \"A\")!)\n    }\n    \n    func testDictionaryAllNumber() {\n        var json:JSON = [\"double\":1.11111, \"int\":987654321]\n        XCTAssertEqual(json[\"double\"].double!, 1.11111)\n        XCTAssertTrue(json[\"int\"] == 987654321)\n        \n        json[\"double\"] = 2.2222\n        json[\"int\"] = 123456789\n        json[\"add\"] = 7890\n        XCTAssertTrue(json[\"double\"] == 2.2222)\n        XCTAssertEqual(json[\"int\"].doubleValue, 123456789.0)\n        XCTAssertEqual(json[\"add\"].intValue, 7890)\n    }\n    \n    func testDictionaryAllBool() {\n        var json:JSON = [\"t\":true, \"f\":false, \"false\":false, \"tr\":true, \"true\":true]\n        XCTAssertTrue(json[\"t\"] == true)\n        XCTAssertTrue(json[\"f\"] == false)\n        XCTAssertTrue(json[\"false\"] == false)\n        XCTAssertTrue(json[\"tr\"] == true)\n        XCTAssertTrue(json[\"true\"] == true)\n\n        json[\"f\"] = true\n        json[\"tr\"] = false\n        XCTAssertTrue(json[\"f\"] == true)\n        XCTAssertTrue(json[\"tr\"] == JSON(false))\n    }\n    \n    func testDictionaryAllString() {\n        var json:JSON = JSON(rawValue: [\"a\":\"aoo\",\"bb\":\"bpp\",\"z\":\"zoo\"] as NSDictionary)!\n        XCTAssertTrue(json[\"a\"] == \"aoo\")\n        XCTAssertEqual(json[\"bb\"], JSON(\"bpp\"))\n        XCTAssertTrue(json[\"z\"] == \"zoo\")\n        \n        json[\"bb\"] = \"update\"\n        XCTAssertTrue(json[\"a\"] == \"aoo\")\n        XCTAssertTrue(json[\"bb\"] == \"update\")\n        XCTAssertTrue(json[\"z\"] == \"zoo\")\n    }\n    \n    func testDictionaryWithNull() {\n        var json:JSON = JSON(rawValue: [\"a\":\"aoo\",\"bb\":\"bpp\",\"null\":NSNull(), \"z\":\"zoo\"] as NSDictionary)!\n        XCTAssertTrue(json[\"a\"] == \"aoo\")\n        XCTAssertEqual(json[\"bb\"], JSON(\"bpp\"))\n        XCTAssertEqual(json[\"null\"], JSON(NSNull()))\n        XCTAssertTrue(json[\"z\"] == \"zoo\")\n        \n        json[\"null\"] = \"update\"\n        XCTAssertTrue(json[\"a\"] == \"aoo\")\n        XCTAssertTrue(json[\"null\"] == \"update\")\n        XCTAssertTrue(json[\"z\"] == \"zoo\")\n    }\n    \n    func testDictionaryAllArray() {\n        //Swift bug: [1, 2.01,3.09] is convert to [1, 2, 3] (Array<Int>)\n        let json:JSON = JSON ([[NSNumber(integer:1),NSNumber(double:2.123456),NSNumber(int:123456789)], [\"aa\",\"bbb\",\"cccc\"], [true, \"766\", NSNull(), 655231.9823]] as NSArray)\n        XCTAssertTrue(json[0] == [1,2.123456,123456789])\n        XCTAssertEqual(json[0][1].double!, 2.123456)\n        XCTAssertTrue(json[0][2] == 123456789)\n        XCTAssertTrue(json[1][0] == \"aa\")\n        XCTAssertTrue(json[1] == [\"aa\",\"bbb\",\"cccc\"])\n        XCTAssertTrue(json[2][0] == true)\n        XCTAssertTrue(json[2][1] == \"766\")\n        XCTAssertTrue(json[[2,1]] == \"766\")\n        XCTAssertEqual(json[2][2], JSON(NSNull()))\n        XCTAssertEqual(json[2,2], JSON(NSNull()))\n        XCTAssertEqual(json[2][3], JSON(655231.9823))\n        XCTAssertEqual(json[2,3], JSON(655231.9823))\n        XCTAssertEqual(json[[2,3]], JSON(655231.9823))\n    }\n    \n    func testOutOfBounds() {\n        let json:JSON = JSON ([[NSNumber(integer:1),NSNumber(double:2.123456),NSNumber(int:123456789)], [\"aa\",\"bbb\",\"cccc\"], [true, \"766\", NSNull(), 655231.9823]] as NSArray)\n        XCTAssertEqual(json[9], JSON.null)\n        XCTAssertEqual(json[-2].error!.code, ErrorIndexOutOfBounds)\n        XCTAssertEqual(json[6].error!.code, ErrorIndexOutOfBounds)\n        XCTAssertEqual(json[9][8], JSON.null)\n        XCTAssertEqual(json[8][7].error!.code, ErrorIndexOutOfBounds)\n        XCTAssertEqual(json[8,7].error!.code, ErrorIndexOutOfBounds)\n        XCTAssertEqual(json[999].error!.code, ErrorIndexOutOfBounds)\n    }\n    \n    func testErrorWrongType() {\n        let json = JSON(12345)\n        XCTAssertEqual(json[9], JSON.null)\n        XCTAssertEqual(json[9].error!.code, ErrorWrongType)\n        XCTAssertEqual(json[8][7].error!.code, ErrorWrongType)\n        XCTAssertEqual(json[\"name\"], JSON.null)\n        XCTAssertEqual(json[\"name\"].error!.code, ErrorWrongType)\n        XCTAssertEqual(json[0][\"name\"].error!.code, ErrorWrongType)\n        XCTAssertEqual(json[\"type\"][\"name\"].error!.code, ErrorWrongType)\n        XCTAssertEqual(json[\"name\"][99].error!.code, ErrorWrongType)\n        XCTAssertEqual(json[1,\"Value\"].error!.code, ErrorWrongType)\n        XCTAssertEqual(json[1, 2,\"Value\"].error!.code, ErrorWrongType)\n        XCTAssertEqual(json[[1, 2,\"Value\"]].error!.code, ErrorWrongType)\n    }\n    \n    func testErrorNotExist() {\n        let json:JSON = [\"name\":\"NAME\", \"age\":15]\n        XCTAssertEqual(json[\"Type\"], JSON.null)\n        XCTAssertEqual(json[\"Type\"].error!.code, ErrorNotExist)\n        XCTAssertEqual(json[\"Type\"][1].error!.code, ErrorNotExist)\n        XCTAssertEqual(json[\"Type\", 1].error!.code, ErrorNotExist)\n        XCTAssertEqual(json[\"Type\"][\"Value\"].error!.code, ErrorNotExist)\n        XCTAssertEqual(json[\"Type\",\"Value\"].error!.code, ErrorNotExist)\n    }\n    \n    func testMultilevelGetter() {\n        let json:JSON = [[[[[\"one\":1]]]]]\n        XCTAssertEqual(json[[0, 0, 0, 0, \"one\"]].int!, 1)\n        XCTAssertEqual(json[0, 0, 0, 0, \"one\"].int!, 1)\n        XCTAssertEqual(json[0][0][0][0][\"one\"].int!, 1)\n    }\n    \n    func testMultilevelSetter1() {\n        var json:JSON = [[[[[\"num\":1]]]]]\n        json[0, 0, 0, 0, \"num\"] = 2\n        XCTAssertEqual(json[[0, 0, 0, 0, \"num\"]].intValue, 2)\n        json[0, 0, 0, 0, \"num\"] = nil\n        XCTAssertEqual(json[0, 0, 0, 0, \"num\"].null!, NSNull())\n        json[0, 0, 0, 0, \"num\"] = 100.009\n        XCTAssertEqual(json[0][0][0][0][\"num\"].doubleValue, 100.009)\n        json[[0, 0, 0, 0]] = [\"name\":\"Jack\"]\n        XCTAssertEqual(json[0,0,0,0,\"name\"].stringValue, \"Jack\")\n        XCTAssertEqual(json[0][0][0][0][\"name\"].stringValue, \"Jack\")\n        XCTAssertEqual(json[[0,0,0,0,\"name\"]].stringValue, \"Jack\")\n        json[[0,0,0,0,\"name\"]].string = \"Mike\"\n        XCTAssertEqual(json[0,0,0,0,\"name\"].stringValue, \"Mike\")\n        let path:[JSONSubscriptType] = [0,0,0,0,\"name\"]\n        json[path].string = \"Jim\"\n        XCTAssertEqual(json[path].stringValue, \"Jim\")\n    }\n    \n    func testMultilevelSetter2() {\n        var json:JSON = [\"user\":[\"id\":987654, \"info\":[\"name\":\"jack\",\"email\":\"jack@gmail.com\"], \"feeds\":[98833,23443,213239,23232]]]\n        json[\"user\",\"info\",\"name\"] = \"jim\"\n        XCTAssertEqual(json[\"user\",\"id\"], 987654)\n        XCTAssertEqual(json[\"user\",\"info\",\"name\"], \"jim\")\n        XCTAssertEqual(json[\"user\",\"info\",\"email\"], \"jack@gmail.com\")\n        XCTAssertEqual(json[\"user\",\"feeds\"], [98833,23443,213239,23232])\n        json[\"user\",\"info\",\"email\"] = \"jim@hotmail.com\"\n        XCTAssertEqual(json[\"user\",\"id\"], 987654)\n        XCTAssertEqual(json[\"user\",\"info\",\"name\"], \"jim\")\n        XCTAssertEqual(json[\"user\",\"info\",\"email\"], \"jim@hotmail.com\")\n        XCTAssertEqual(json[\"user\",\"feeds\"], [98833,23443,213239,23232])\n        json[\"user\",\"info\"] = [\"name\":\"tom\",\"email\":\"tom@qq.com\"]\n        XCTAssertEqual(json[\"user\",\"id\"], 987654)\n        XCTAssertEqual(json[\"user\",\"info\",\"name\"], \"tom\")\n        XCTAssertEqual(json[\"user\",\"info\",\"email\"], \"tom@qq.com\")\n        XCTAssertEqual(json[\"user\",\"feeds\"], [98833,23443,213239,23232])\n        json[\"user\",\"feeds\"] = [77323,2313,4545,323]\n        XCTAssertEqual(json[\"user\",\"id\"], 987654)\n        XCTAssertEqual(json[\"user\",\"info\",\"name\"], \"tom\")\n        XCTAssertEqual(json[\"user\",\"info\",\"email\"], \"tom@qq.com\")\n        XCTAssertEqual(json[\"user\",\"feeds\"], [77323,2313,4545,323])\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/Tests/Tests.json",
    "content": "[\n  {\n  \"coordinates\":null,\n  \"truncated\":false,\n  \"created_at\":\"Tue Aug 28 21:16:23 +0000 2012\",\n  \"favorited\":false,\n  \"id_str\":\"240558470661799936\",\n  \"in_reply_to_user_id_str\":null,\n  \"entities\":{\n  \"urls\":[\n  \n  ],\n  \"hashtags\":[\n  \n  ],\n  \"user_mentions\":[\n  \n  ]\n  },\n  \"text\":\"just another test\",\n  \"contributors\":null,\n  \"id\":240558470661799936,\n  \"retweet_count\":0,\n  \"in_reply_to_status_id_str\":null,\n  \"geo\":null,\n  \"retweeted\":false,\n  \"in_reply_to_user_id\":null,\n  \"place\":null,\n  \"source\":\"&lt;a href=\\\"//realitytechnicians.com\\\" rel=\\\"\\\"nofollow\\\"\\\"&gt;OAuth Dancer Reborn&lt;/a&gt;\",\n  \"user\":{\n  \"name\":\"OAuth Dancer\",\n  \"profile_sidebar_fill_color\":\"DDEEF6\",\n  \"profile_background_tile\":true,\n  \"profile_sidebar_border_color\":\"C0DEED\",\n  \"profile_image_url\":\"http://a0.twimg.com/profile_images/730275945/oauth-dancer_normal.jpg\",\n  \"created_at\":\"Wed Mar 03 19:37:35 +0000 2010\",\n  \"location\":\"San Francisco, CA\",\n  \"follow_request_sent\":false,\n  \"id_str\":\"119476949\",\n  \"is_translator\":false,\n  \"profile_link_color\":\"0084B4\",\n  \"entities\":{\n  \"url\":{\n  \"urls\":[\n          {\n          \"expanded_url\":null,\n          \"url\":\"http://bit.ly/oauth-dancer\",\n          \"indices\":[\n                     0,\n                     26\n                     ],\n          \"display_url\":null\n          }\n          ]\n  },\n  \"description\":null\n  },\n  \"default_profile\":false,\n  \"url\":\"http://bit.ly/oauth-dancer\",\n  \"contributors_enabled\":false,\n  \"favourites_count\":7,\n  \"utc_offset\":null,\n  \"profile_image_url_https\":\"https://si0.twimg.com/profile_images/730275945/oauth-dancer_normal.jpg\",\n  \"id\":119476949,\n  \"listed_count\":1,\n  \"profile_use_background_image\":true,\n  \"profile_text_color\":\"333333\",\n  \"followers_count\":28,\n  \"lang\":\"en\",\n  \"protected\":false,\n  \"geo_enabled\":true,\n  \"notifications\":false,\n  \"description\":\"\",\n  \"profile_background_color\":\"C0DEED\",\n  \"verified\":false,\n  \"time_zone\":null,\n  \"profile_background_image_url_https\":\"https://si0.twimg.com/profile_background_images/80151733/oauth-dance.png\",\n  \"statuses_count\":166,\n  \"profile_background_image_url\":\"http://a0.twimg.com/profile_background_images/80151733/oauth-dance.png\",\n  \"default_profile_image\":false,\n  \"friends_count\":14,\n  \"following\":false,\n  \"show_all_inline_media\":false,\n  \"screen_name\":\"oauth_dancer\"\n  },\n  \"in_reply_to_screen_name\":null,\n  \"in_reply_to_status_id\":null\n  },\n  {\n  \"coordinates\":{\n  \"coordinates\":[\n                 -122.25831,\n                 37.871609\n                 ],\n  \"type\":\"Point\"\n  },\n  \"truncated\":false,\n  \"created_at\":\"Tue Aug 28 21:08:15 +0000 2012\",\n  \"favorited\":false,\n  \"id_str\":\"240556426106372096\",\n  \"in_reply_to_user_id_str\":null,\n  \"entities\":{\n  \"urls\":[\n          {\n          \"expanded_url\":\"http://blogs.ischool.berkeley.edu/i290-abdt-s12/\",\n          \"url\":\"http://t.co/bfj7zkDJ\",\n          \"indices\":[\n                     79,\n                     99\n                     ],\n          \"display_url\":\"blogs.ischool.berkeley.edu/i290-abdt-s12/\"\n          }\n          ],\n  \"hashtags\":[\n  \n  ],\n  \"user_mentions\":[\n                   {\n                   \"name\":\"Cal\",\n                   \"id_str\":\"17445752\",\n                   \"id\":17445752,\n                   \"indices\":[\n                              60,\n                              64\n                              ],\n                   \"screen_name\":\"Cal\"\n                   },\n                   {\n                   \"name\":\"Othman Laraki\",\n                   \"id_str\":\"20495814\",\n                   \"id\":20495814,\n                   \"indices\":[\n                              70,\n                              77\n                              ],\n                   \"screen_name\":\"othman\"\n                   }\n                   ]\n  },\n  \"text\":\"lecturing at the \\\"analyzing big data with twitter\\\" class at @cal with @othman  http://t.co/bfj7zkDJ\",\n  \"contributors\":null,\n  \"id\":240556426106372096,\n  \"retweet_count\":3,\n  \"in_reply_to_status_id_str\":null,\n  \"geo\":{\n  \"coordinates\":[\n                 37.871609,\n                 -122.25831\n                 ],\n  \"type\":\"Point\"\n  },\n  \"retweeted\":false,\n  \"possibly_sensitive\":false,\n  \"in_reply_to_user_id\":null,\n  \"place\":{\n  \"name\":\"Berkeley\",\n  \"country_code\":\"US\",\n  \"country\":\"United States\",\n  \"attributes\":{\n  \n  },\n  \"url\":\"http://api.twitter.com/1/geo/id/5ef5b7f391e30aff.json\",\n  \"id\":\"5ef5b7f391e30aff\",\n  \"bounding_box\":{\n  \"coordinates\":[\n                 [\n                  [\n                   -122.367781,\n                   37.835727\n                   ],\n                  [\n                   -122.234185,\n                   37.835727\n                   ],\n                  [\n                   -122.234185,\n                   37.905824\n                   ],\n                  [\n                   -122.367781,\n                   37.905824\n                   ]\n                  ]\n                 ],\n  \"type\":\"Polygon\"\n  },\n  \"full_name\":\"Berkeley, CA\",\n  \"place_type\":\"city\"\n  },\n  \"source\":\"&lt;a href=\\\"//www.apple.com\\\"\\\" rel=\\\"\\\"nofollow\\\"\\\"&gt;Safari on iOS&lt;/a&gt;\",\n  \"user\":{\n  \"name\":\"Raffi Krikorian\",\n  \"profile_sidebar_fill_color\":\"DDEEF6\",\n  \"profile_background_tile\":false,\n  \"profile_sidebar_border_color\":\"C0DEED\",\n  \"profile_image_url\":\"http://a0.twimg.com/profile_images/1270234259/raffi-headshot-casual_normal.png\",\n  \"created_at\":\"Sun Aug 19 14:24:06 +0000 2007\",\n  \"location\":\"San Francisco, California\",\n  \"follow_request_sent\":false,\n  \"id_str\":\"8285392\",\n  \"is_translator\":false,\n  \"profile_link_color\":\"0084B4\",\n  \"entities\":{\n  \"url\":{\n  \"urls\":[\n          {\n          \"expanded_url\":\"http://about.me/raffi.krikorian\",\n          \"url\":\"http://t.co/eNmnM6q\",\n          \"indices\":[\n                     0,\n                     19\n                     ],\n          \"display_url\":\"about.me/raffi.krikorian\"\n          }\n          ]\n  },\n  \"description\":{\n  \"urls\":[\n  \n  ]\n  }\n  },\n  \"default_profile\":true,\n  \"url\":\"http://t.co/eNmnM6q\",\n  \"contributors_enabled\":false,\n  \"favourites_count\":724,\n  \"utc_offset\":-28800,\n  \"profile_image_url_https\":\"https://si0.twimg.com/profile_images/1270234259/raffi-headshot-casual_normal.png\",\n  \"id\":8285392,\n  \"listed_count\":619,\n  \"profile_use_background_image\":true,\n  \"profile_text_color\":\"333333\",\n  \"followers_count\":18752,\n  \"lang\":\"en\",\n  \"protected\":false,\n  \"geo_enabled\":true,\n  \"notifications\":false,\n  \"description\":\"Director of @twittereng's Platform Services. I break things.\",\n  \"profile_background_color\":\"C0DEED\",\n  \"verified\":false,\n  \"time_zone\":\"Pacific Time (US &amp; Canada)\",\n  \"profile_background_image_url_https\":\"https://si0.twimg.com/images/themes/theme1/bg.png\",\n  \"statuses_count\":5007,\n  \"profile_background_image_url\":\"http://a0.twimg.com/images/themes/theme1/bg.png\",\n  \"default_profile_image\":false,\n  \"friends_count\":701,\n  \"following\":true,\n  \"show_all_inline_media\":true,\n  \"screen_name\":\"raffi\"\n  },\n  \"in_reply_to_screen_name\":null,\n  \"in_reply_to_status_id\":null\n  },\n  {\n  \"coordinates\":null,\n  \"truncated\":false,\n  \"created_at\":\"Tue Aug 28 19:59:34 +0000 2012\",\n  \"favorited\":false,\n  \"id_str\":\"240539141056638977\",\n  \"in_reply_to_user_id_str\":null,\n  \"entities\":{\n  \"urls\":[\n  \n  ],\n  \"hashtags\":[\n  \n  ],\n  \"user_mentions\":[\n  \n  ]\n  },\n  \"text\":\"You'd be right more often if you thought you were wrong.\",\n  \"contributors\":null,\n  \"id\":240539141056638977,\n  \"retweet_count\":1,\n  \"in_reply_to_status_id_str\":null,\n  \"geo\":null,\n  \"retweeted\":false,\n  \"in_reply_to_user_id\":null,\n  \"place\":null,\n  \"source\":\"web\",\n  \"user\":{\n  \"name\":\"Taylor Singletary\",\n  \"profile_sidebar_fill_color\":\"FBFBFB\",\n  \"profile_background_tile\":true,\n  \"profile_sidebar_border_color\":\"000000\",\n  \"profile_image_url\":\"http://a0.twimg.com/profile_images/2546730059/f6a8zq58mg1hn0ha8vie_normal.jpeg\",\n  \"created_at\":\"Wed Mar 07 22:23:19 +0000 2007\",\n  \"location\":\"San Francisco, CA\",\n  \"follow_request_sent\":false,\n  \"id_str\":\"819797\",\n  \"is_translator\":false,\n  \"profile_link_color\":\"c71818\",\n  \"entities\":{\n  \"url\":{\n  \"urls\":[\n          {\n          \"expanded_url\":\"http://www.rebelmouse.com/episod/\",\n          \"url\":\"http://t.co/Lxw7upbN\",\n          \"indices\":[\n                     0,\n                     20\n                     ],\n          \"display_url\":\"rebelmouse.com/episod/\"\n          }\n          ]\n  },\n  \"description\":{\n  \"urls\":[\n  \n  ]\n  }\n  },\n  \"default_profile\":false,\n  \"url\":\"http://t.co/Lxw7upbN\",\n  \"contributors_enabled\":false,\n  \"favourites_count\":15990,\n  \"utc_offset\":-28800,\n  \"profile_image_url_https\":\"https://si0.twimg.com/profile_images/2546730059/f6a8zq58mg1hn0ha8vie_normal.jpeg\",\n  \"id\":819797,\n  \"listed_count\":340,\n  \"profile_use_background_image\":true,\n  \"profile_text_color\":\"D20909\",\n  \"followers_count\":7126,\n  \"lang\":\"en\",\n  \"protected\":false,\n  \"geo_enabled\":true,\n  \"notifications\":false,\n  \"description\":\"Reality Technician, Twitter API team, synthesizer enthusiast; a most excellent adventure in timelines. I know it's hard to believe in something you can't see.\",\n  \"profile_background_color\":\"000000\",\n  \"verified\":false,\n  \"time_zone\":\"Pacific Time (US &amp; Canada)\",\n  \"profile_background_image_url_https\":\"https://si0.twimg.com/profile_background_images/643655842/hzfv12wini4q60zzrthg.png\",\n  \"statuses_count\":18076,\n  \"profile_background_image_url\":\"http://a0.twimg.com/profile_background_images/643655842/hzfv12wini4q60zzrthg.png\",\n  \"default_profile_image\":false,\n  \"friends_count\":5444,\n  \"following\":true,\n  \"show_all_inline_media\":true,\n  \"screen_name\":\"episod\"\n  },\n  \"in_reply_to_screen_name\":null,\n  \"in_reply_to_status_id\":null\n  }\n  ]"
  },
  {
    "path": "Carthage/Checkouts/SwiftyJSON/scripts/ci.sh",
    "content": "#!/usr/bin/env bash\n\nset -e\n\nxcodebuild -workspace SwiftyJSON.xcworkspace -scheme \"SwiftyJSON iOS\" -destination \"platform=iOS Simulator,name=iPhone 6\" test\n\nxcodebuild -workspace SwiftyJSON.xcworkspace -scheme \"SwiftyJSON OSX\" test\n\nxcodebuild -workspace SwiftyJSON.xcworkspace -scheme \"SwiftyJSON tvOS\" -destination \"platform=tvOS Simulator,name=Apple TV 1080p\" test"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/.gitignore",
    "content": "# Xcode\nbuild/*\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\nprofile\n*.moved-aside\n.DS_Store\n\n# `make test` artifacts\n*.o\n*.out\ntestparser.sh\ntestparser\nunparse-date\nunparse-ordinaldate\nunparse-weekdate\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/.hgtags",
    "content": "e190de54c50791dcfdcaa32ce978a684a9fff236 0.4\n0082342cb70688b993b311340df4e4fb9c99531d 0.5\n37825820b1c1140188fc1542b2b543bf5f45be42 0.6\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/.travis.yml",
    "content": "language: objective-c\nbefore_install:\n    - sudo easy_install cpp-coveralls\n\nbefore_script:\n    - cd ISO8601ForCocoa\nscript:\n    - xcodebuild test -scheme 'ISO8601ForCocoa' SRCROOT=../build OBJROOT=../build SHARED_PRECOMPS_DIR=../build\n    - xcodebuild test -scheme 'ISO8601ForCocoaTouch' -destination 'name=iPhone 5s' SRCROOT=../build OBJROOT=../build SHARED_PRECOMPS_DIR=../build\nafter_success:\n    - cd ..\n    - coveralls -x '.m'\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/AppledocSettings.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>--company-id</key>\n\t<string>org.boredzo</string>\n\t<key>--project-company</key>\n\t<string>Peter Hosey</string>\n\t<key>--project-name</key>\n\t<string>ISO 8601 Date Formatter</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601DateFormatter.h",
    "content": "/*ISO8601DateFormatter.h\n *\n *Created by Peter Hosey on 2009-04-11.\n *Copyright 2009–2013 Peter Hosey. All rights reserved.\n */\n\n#import <Foundation/Foundation.h>\n\n///Which of ISO 8601's three date formats the formatter should produce.\ntypedef NS_ENUM(NSUInteger, ISO8601DateFormat) {\n\t///YYYY-MM-DD.\n\tISO8601DateFormatCalendar,\n\t///YYYY-DDD, where DDD ranges from 1 to 366; for example, 2009-32 is 2009-02-01.\n\tISO8601DateFormatOrdinal,\n\t///YYYY-Www-D, where ww ranges from 1 to 53 (the 'W' is literal) and D ranges from 1 to 7; for example, 2009-W05-07.\n\tISO8601DateFormatWeek,\n};\n\n///The default separator for time values. Currently, this is ':'.\nextern const unichar ISO8601DefaultTimeSeparatorCharacter;\n\n/*!\n *\t@brief\tThis class converts dates to and from ISO 8601 strings.\n *\n *\t@details\tTL;DR: You want to use ISO 8601 for any and all dates you send or receive over the internet, unless the spec for the protocol or format you're working with specifically tells you otherwise. See http://xkcd.com/1179/ .\n *\n * ISO 8601 is most recognizable as “year-month-date” strings, such as “2013-09-08T15:06:11-0800”. Of course, as you might expect of a formal standard, it's more sophisticated (some might say complicated) than that.\n *\n * For one thing, ISO 8601 actually defines *three* different date formats. The most common one, shown above, is called the calendar date format. The other two are week dates, where the month is replaced by a week of the year and the day is a day-of-the-week (1 being Monday) rather than day-of-month, and ordinal dates, where the middle segment is dispensed with entirely and the day component is day-of-year (1–366).\n *\n * The week format is the most bizarre of them, since 7 × 52 ≠ 365. The start and end of the year for purposes of week dates usually don't line up with the start and end of the calendar year. As a result, the first and/or last day of a year in the week-date “calendar” more often than not is on a different year from the first and/or last day of that year on the actual Gregorian calendar.\n *\n * In practice, almost all ISO 8601 dates you see in the wild will be in the calendar format.\n *\n * At any rate, this formatter can both parse and unparse dates in all three formats. (By “unparse”, I mean “produce a string from”—the reverse of parsing.)\n *\n * For a good and more detailed introduction to ISO 8601, see [“A summary of the international standard date and time notation” by Markus Kuhn](http://www.cl.cam.ac.uk/~mgk25/iso-time.html). The actual standard itself can be found in PDF format online with a well-crafted web search.\n */\n\n@interface ISO8601DateFormatter: NSFormatter\n{\n\tNSString *lastUsedFormatString;\n\tNSDateFormatter *unparsingFormatter;\n    \n\tNSCalendar *parsingCalendar, *unparsingCalendar;\n    \n\tNSTimeZone *defaultTimeZone;\n\tISO8601DateFormat format;\n\tunichar timeSeparator;\n    unichar timeZoneSeparator;\n\tBOOL includeTime;\n\tBOOL useMillisecondPrecision;\n\tBOOL parsesStrictly;\n}\n\n@property(nonatomic, retain) NSTimeZone *defaultTimeZone;\n\n#pragma mark Parsing\n/*!\n *\t@name\tParsing\n */\n\n//As a formatter, this object converts strings to dates.\n\n/*!\n *\t@brief\tDisables various leniencies in how the formatter parses strings.\n *\n *\t@details\tBy default, the parser allows these extensions to the ISO 8601 standard:\n *\n * - Whitespace is allowed before the date.\n * - Numbers don't have to be within range for a component. For example, you can have a string that refers to the 56th day of the hundredth month.\n * - Since 0.6, allows a single whitespace character before the time-zone specification. This extension provides compatibility with NSDate output (`description`) and input (`dateWithString:`).\n * - “Superfluous” hyphens in date specifications such as “`--DDD`” (where DDD is an ordinal day-of-year number and the year is implied) are allowed. (The standard recommends writing such a date as “`-DDD`”, with only a single hyphen. This is consistent with ordinal dates having only two components: the year and the day-of-year, separated by one hyphen.)\n * - The same goes for week dates such as “`--Www-DD`”. Again, the extra hyphen really is superfluous, but is allowed as an extension.\n * - Calendar dates with no separator between month and day-of-month are allowed, at least when they total four digits. (For example, 2013-0908, which would be interpreted as 2013-09-08.)\n * - Single-digit components are allowed. (If you wish to specify a date in a single-digit year with the strict parser, pad it with zeroes.)\n * - “YYYY-W” (without a week number after the 'W') is allowed, interpreted as “YYYY-W01-01”.\n *\n * Setting this property to `YES` will disable all of those extensions.\n *\n * These extensions are intended to help you process degenerate input (received from programs and services that use broken date-formatting libraries); whenever *you* create ISO 8601 strings, you should generate strictly-conforming ones.\n *\n * This property does not affect unparsing. The formatter always creates valid ISO 8601 strings. Any invalid string (loosely, any string that would require turning this property off to re-parse) should be considered a bug; please report it.\n */\n@property BOOL parsesStrictly;\n\n/*!\n *\t@brief\tParse a string into individual date components.\n *\n *\t@param\tstring\tThe string to parse. Must represent a date in one of the ISO 8601 formats.\n *\t@returns\tAn NSDateComponents object containing most of the information parsed from the string, aside from the fraction of second and time zone (which are lost).\n *\t@sa\tdateComponentsFromString:timeZone:\n *\t@sa\tdateComponentsFromString:timeZone:range:fractionOfSecond:\n */\n- (NSDateComponents *) dateComponentsFromString:(NSString *)string;\n/*!\n *\t@brief\tParse a string into individual date components.\n *\n *\t@param\tstring\tThe string to parse. Must represent a date in one of the ISO 8601 formats.\n *\t@param\toutTimeZone\tIf non-`NULL`, an NSTimeZone object or `nil` will be stored here, depending on whether the string specified a time zone.\n *\t@returns\tAn NSDateComponents object containing most of the information parsed from the string, aside from the fraction of second (which is lost) and time zone.\n *\t@sa\tdateComponentsFromString:\n *\t@sa\tdateComponentsFromString:timeZone:range:fractionOfSecond:\n */\n- (NSDateComponents *) dateComponentsFromString:(NSString *)string timeZone:(out NSTimeZone **)outTimeZone;\n/*!\n *\t@brief\tParse a string into individual date components.\n *\n *\t@param\tstring\tThe string to parse. Must represent a date in one of the ISO 8601 formats.\n *\t@param\toutTimeZone\tIf non-`NULL`, an NSTimeZone object or `nil` will be stored here, depending on whether the string specified a time zone.\n *\t@param\toutRange\tIf non-`NULL`, an NSRange structure will be stored here, identifying the substring of `string` that specified the date.\n *\t@param\toutFractionOfSecond\tIf non-`NULL`, an NSTimeInterval value will be stored here, containing the fraction of a second, if the string specified one. If it didn't, this will be set to zero.\n *\t@returns\tAn NSDateComponents object containing most of the information parsed from the string, aside from the fraction of second and time zone.\n *\t@sa\tdateComponentsFromString:\n *\t@sa\tdateComponentsFromString:timeZone:\n */\n- (NSDateComponents *) dateComponentsFromString:(NSString *)string timeZone:(out NSTimeZone **)outTimeZone range:(out NSRange *)outRange fractionOfSecond:(NSTimeInterval *)outFractionOfSecond;\n\n/*!\n *\t@brief\tParse a string.\n *\n *\t@param\tstring\tThe string to parse. Must represent a date in one of the ISO 8601 formats.\n *\t@returns\tAn NSDate object containing most of the information parsed from the string, aside from the time zone (which is lost).\n *\t@sa\tdateComponentsFromString:\n *\t@sa\tdateFromString:timeZone:\n *\t@sa\tdateFromString:timeZone:range:\n */\n- (NSDate *) dateFromString:(NSString *)string;\n/*!\n *\t@brief\tParse a string.\n *\n *\t@param\tstring\tThe string to parse. Must represent a date in one of the ISO 8601 formats.\n *\t@param\toutTimeZone\tIf non-`NULL`, an NSTimeZone object or `nil` will be stored here, depending on whether the string specified a time zone.\n *\t@returns\tAn NSDate object containing most of the information parsed from the string, aside from the time zone.\n *\t@sa\tdateComponentsFromString:timeZone:\n *\t@sa\tdateFromString:\n *\t@sa\tdateFromString:timeZone:range:\n */\n- (NSDate *) dateFromString:(NSString *)string timeZone:(out NSTimeZone **)outTimeZone;\n/*!\n *\t@brief\tParse a string into a single date, identified by an NSDate object.\n *\n *\t@param\tstring\tThe string to parse. Must represent a date in one of the ISO 8601 formats.\n *\t@param\toutTimeZone\tIf non-`NULL`, an NSTimeZone object or `nil` will be stored here, depending on whether the string specified a time zone.\n *\t@param\toutRange\tIf non-`NULL`, an NSRange structure will be stored here, identifying the substring of `string` that specified the date.\n *\t@returns\tAn NSDate object containing most of the information parsed from the string, aside from the time zone.\n *\t@sa\tdateComponentsFromString:timeZone:range:fractionOfSecond:\n *\t@sa\tdateFromString:\n *\t@sa\tdateFromString:timeZone:\n */\n- (NSDate *) dateFromString:(NSString *)string timeZone:(out NSTimeZone **)outTimeZone range:(out NSRange *)outRange;\n\n#pragma mark Unparsing\n/*!\n *\t@name\tUnparsing\n */\n\n/*!\n *\t@brief\tWhich ISO 8601 format to format dates in.\n *\n *\t@details\tSee ISO8601DateFormat for possible values.\n */\n@property ISO8601DateFormat format;\n/*!\n *\t@brief\tWhether strings should include time of day.\n *\n *\t@details\tIf `NO`, strings include only the date, nothing after it.\n *\n *\t@sa\ttimeSeparator\n *\t@sa\ttimeZoneSeparator\n */\n@property BOOL includeTime;\n/*!\n *\t@brief\tWhether strings should include millisecond precision time.\n *\n *\t@details\tIf `YES`, strings include three millisecond digits. Only has an effect if `includeTime` is `YES`\n *\n */\n@property BOOL useMillisecondPrecision;\n/*!\n *\t@brief\tThe character to use to separate components of the time of day.\n *\n *\t@details\tThis is used in both parsing and unparsing.\n *\n * The default value is ISO8601DefaultTimeSeparatorCharacter.\n *\n * When parsesStrictly is set to `YES`, this property is ignored. Otherwise, the parser will raise an exception if this is set to zero.\n *\n *\t@sa\tincludeTime\n *\t@sa\ttimeZoneSeparator\n */\n@property unichar timeSeparator;\n/*!\n *\t@brief\tThe character to use to separate the hour and minute in a time zone specification.\n *\n *\t@details\tThis is used in both parsing and unparsing.\n *\n * If zero, no separator is inserted into time zone specifications.\n *\n * The default value is zero (no separator).\n *\n *\t@sa\tincludeTime\n *\t@sa\ttimeSeparator\n */\n@property unichar timeZoneSeparator;\n\n/*!\n *\t@brief\tProduce a string that represents a date in UTC.\n *\n *\t@param\tdate\tThe string to parse. Must represent a date in one of the ISO 8601 formats.\n *\t@returns\tA string that represents the date in UTC.\n *\t@sa\tstringFromDate:timeZone:\n */\n- (NSString *) stringFromDate:(NSDate *)date;\n/*!\n *\t@brief\tProduce a string that represents a date.\n *\n *\t@param\tdate\tThe string to parse. Must represent a date in one of the ISO 8601 formats.\n *\t@param\ttimeZone\tAn NSTimeZone object identifying the time zone in which to specify the date.\n *\t@returns\tA string that represents the date in the requested time zone, if possible.\n *\n *\t@details\tNot all dates are representable in all time zones (because of historical calendar changes, such as transitions from the Julian to the Gregorian calendar).\n *\tFor an example, see http://stackoverflow.com/questions/18663407/date-formatter-returns-nil-for-june .\n *\tThis method *should* return `nil` in such cases.\n *\n *\t@sa\tstringFromDate:\n */\n- (NSString *) stringFromDate:(NSDate *)date timeZone:(NSTimeZone *)timeZone;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601DateFormatter.m",
    "content": "/*ISO8601DateFormatter.m\n *\n *Created by Peter Hosey on 2009-04-11.\n *Copyright 2009–2013 Peter Hosey. All rights reserved.\n */\n\n#import <float.h>\n#import <Foundation/Foundation.h>\n#if TARGET_OS_IPHONE\n#\timport <UIKit/UIKit.h>\n#endif\n#import \"ISO8601DateFormatter.h\"\n\n#ifndef DEFAULT_TIME_SEPARATOR\n#\tdefine DEFAULT_TIME_SEPARATOR ':'\n#endif\nconst unichar ISO8601DefaultTimeSeparatorCharacter = DEFAULT_TIME_SEPARATOR;\n\n//Unicode date formats.\n#define ISO_CALENDAR_DATE_FORMAT @\"yyyy-MM-dd\"\n//#define ISO_WEEK_DATE_FORMAT @\"YYYY-'W'ww-ee\" //Doesn't actually work because NSDateComponents counts the weekday starting at 1.\n#define ISO_ORDINAL_DATE_FORMAT @\"yyyy-DDD\"\n#define ISO_TIME_FORMAT @\"HH:mm:ss\"\n#define ISO_TIME_FORMAT_MS_PRECISION @\"HH:mm:ss.SSS\"\n//printf formats.\n#define ISO_TIMEZONE_UTC_FORMAT @\"Z\"\n#define ISO_TIMEZONE_OFFSET_FORMAT_NO_SEPARATOR @\"%+.2d%.2d\"\n#define ISO_TIMEZONE_OFFSET_FORMAT_WITH_SEPARATOR @\"%+.2d%C%.2d\"\n\nstatic NSString * const ISO8601TwoCharIntegerFormat = @\"%.2d\";\n\n@interface ISO8601DateFormatter(UnparsingPrivate)\n\n- (NSString *) replaceColonsInString:(NSString *)timeFormat withTimeSeparator:(unichar)timeSep;\n\n- (NSString *) stringFromDate:(NSDate *)date formatString:(NSString *)dateFormat timeZone:(NSTimeZone *)timeZone;\n- (NSString *) weekDateStringForDate:(NSDate *)date timeZone:(NSTimeZone *)timeZone;\n\n@end\n\nstatic NSCache *timeZonesByOffset;\n\n@implementation ISO8601DateFormatter\n\n+ (void) initialize {\n    timeZonesByOffset = [[NSCache alloc] init];\n}\n\n+ (void) purgeGlobalCaches {\n    [timeZonesByOffset removeAllObjects];\n}\n\n- (NSCalendar *) makeCalendarWithDesiredConfiguration {\n\tNSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian] autorelease];\n\tcalendar.firstWeekday = 2; //Monday\n\tcalendar.timeZone = [NSTimeZone defaultTimeZone];\n\treturn calendar;\n}\n\n- (id) init {\n\tif ((self = [super init])) {\n\t\tparsingCalendar = [[self makeCalendarWithDesiredConfiguration] retain];\n\t\tunparsingCalendar = [[self makeCalendarWithDesiredConfiguration] retain];\n\n\t\tformat = ISO8601DateFormatCalendar;\n\t\ttimeSeparator = ISO8601DefaultTimeSeparatorCharacter;\n\t\tincludeTime = NO;\n\t\tparsesStrictly = NO;\n\t\tuseMillisecondPrecision = NO;\n\t}\n\treturn self;\n}\n\n- (void) dealloc {\n\t[defaultTimeZone release];\n\n\t[unparsingFormatter release];\n\t[lastUsedFormatString release];\n\t[parsingCalendar release];\n\t[unparsingCalendar release];\n\n\t[super dealloc];\n}\n\n@synthesize defaultTimeZone;\n- (void) setDefaultTimeZone:(NSTimeZone *)tz {\n\tif (defaultTimeZone != tz) {\n\t\t[defaultTimeZone release];\n\t\tdefaultTimeZone = [tz retain];\n\n\t\tunparsingCalendar.timeZone = defaultTimeZone;\n\t}\n}\n\n//The following properties are only here because GCC doesn't like @synthesize in category implementations.\n\n#pragma mark Parsing\n\n@synthesize parsesStrictly;\n\nstatic NSUInteger read_segment(const unichar *str, const unichar **next, NSUInteger *out_num_digits);\nstatic NSUInteger read_segment_4digits(const unichar *str, const unichar **next, NSUInteger *out_num_digits);\nstatic NSUInteger read_segment_2digits(const unichar *str, const unichar **next);\nstatic double read_double(const unichar *str, const unichar **next);\nstatic BOOL is_leap_year(NSUInteger year);\n\n/*Valid ISO 8601 date formats:\n *\n *YYYYMMDD\n *YYYY-MM-DD\n *YYYY-MM\n *YYYY\n *YY //century \n * //Implied century: YY is 00-99\n *  YYMMDD\n *  YY-MM-DD\n * -YYMM\n * -YY-MM\n * -YY\n * //Implied year\n *  --MMDD\n *  --MM-DD\n *  --MM\n * //Implied year and month\n *   ---DD\n * //Ordinal dates: DDD is the number of the day in the year (1-366)\n *YYYYDDD\n *YYYY-DDD\n *  YYDDD\n *  YY-DDD\n *   -DDD\n * //Week-based dates: ww is the number of the week, and d is the number (1-7) of the day in the week\n *yyyyWwwd\n *yyyy-Www-d\n *yyyyWww\n *yyyy-Www\n *yyWwwd\n *yy-Www-d\n *yyWww\n *yy-Www\n * //Year of the implied decade\n *-yWwwd\n *-y-Www-d\n *-yWww\n *-y-Www\n * //Week and day of implied year\n *  -Wwwd\n *  -Www-d\n * //Week only of implied year\n *  -Www\n * //Day only of implied week\n *  -W-d\n */\n\n- (NSDateComponents *) dateComponentsFromString:(NSString *)string {\n\treturn [self dateComponentsFromString:string timeZone:NULL];\n}\n- (NSDateComponents *) dateComponentsFromString:(NSString *)string timeZone:(out NSTimeZone **)outTimeZone {\n\treturn [self dateComponentsFromString:string timeZone:outTimeZone range:NULL fractionOfSecond:NULL];\n}\n- (NSDateComponents *) dateComponentsFromString:(NSString *)string timeZone:(out NSTimeZone **)outTimeZone range:(out NSRange *)outRange fractionOfSecond:(out NSTimeInterval *)outFractionOfSecond {\n\tif (string == nil)\n\t\treturn nil;\n\t// Bail if the string contains a slash delimiter (we don't yet support ISO 8601 intervals and we don't support slash-separated dates)\n\tif ([string rangeOfString:@\"/\"].location != NSNotFound)\n\t\treturn nil;\n\n\tNSDate *now = [NSDate date];\n\n\tNSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];\n\tNSDateComponents *nowComponents = [parsingCalendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:now];\n\n\tNSUInteger\n\t\t//Date\n\t\tyear = 0U,\n\t\tmonth_or_week = 0U,\n\t\tday = 0U,\n\t\t//Time\n\t\thour = 0U;\n\tNSTimeInterval\n\t\tminute = 0.0,\n\t\tsecond = 0.0;\n\t//Time zone\n\tNSInteger tz_hour = 0;\n\tNSInteger tz_minute = 0;\n\n\tenum {\n\t\tmonthAndDate,\n\t\tweek,\n\t\tdateOnly\n\t} dateSpecification = monthAndDate;\n\n\tBOOL strict = self.parsesStrictly;\n\tunichar timeSep = self.timeSeparator;\n\n\tif (strict) timeSep = ISO8601DefaultTimeSeparatorCharacter;\n\tNSAssert(timeSep != '\\0', @\"Time separator must not be NUL.\");\n\n\tBOOL isValidDate = ([string length] > 0U);\n\tNSTimeZone *timeZone = nil;\n\n\tconst unichar *ch = (const unichar *)[string cStringUsingEncoding:NSUnicodeStringEncoding];\n\n\tNSRange range = { 0U, 0U };\n\tconst unichar *start_of_date = NULL;\n\tif (strict && isspace(*ch)) {\n\t\trange.location = NSNotFound;\n\t\tisValidDate = NO;\n\t} else {\n\t\t//Skip leading whitespace.\n\t\tNSUInteger i = 0U;\n\t\twhile (isspace(ch[i]))\n\t\t\t++i;\n\n\t\trange.location = i;\n\t\tch += i;\n\t\tstart_of_date = ch;\n\n\t\tNSUInteger segment;\n\t\tNSUInteger num_leading_hyphens = 0U, num_digits = 0U;\n\n\t\tif (*ch == 'T') {\n\t\t\t//There is no date here, only a time. Set the date to now; then we'll parse the time.\n\t\t\tisValidDate = isdigit(*++ch);\n\n\t\t\tyear = nowComponents.year;\n\t\t\tmonth_or_week = nowComponents.month;\n\t\t\tday = nowComponents.day;\n\t\t} else {\n\t\t\twhile(*ch == '-') {\n\t\t\t\t++num_leading_hyphens;\n\t\t\t\t++ch;\n\t\t\t}\n\n\t\t\tsegment = read_segment(ch, &ch, &num_digits);\n\t\t\tswitch(num_digits) {\n\t\t\t\tcase 0:\n\t\t\t\t\tif (*ch == 'W') {\n\t\t\t\t\t\tif ((ch[1] == '-') && isdigit(ch[2]) && ((num_leading_hyphens == 1U) || ((num_leading_hyphens == 2U) && !strict))) {\n\t\t\t\t\t\t\tyear = nowComponents.year;\n\t\t\t\t\t\t\tmonth_or_week = 1U;\n\t\t\t\t\t\t\tch += 2;\n\t\t\t\t\t\t\tgoto parseDayAfterWeek;\n\t\t\t\t\t\t} else if (num_leading_hyphens == 1U) {\n\t\t\t\t\t\t\tyear = nowComponents.year;\n\t\t\t\t\t\t\tgoto parseWeekAndDay;\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t} else\n\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 8: //YYYY MM DD\n\t\t\t\t\tif (num_leading_hyphens > 0U)\n\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\telse {\n\t\t\t\t\t\tday = segment % 100U;\n\t\t\t\t\t\tsegment /= 100U;\n\t\t\t\t\t\tmonth_or_week = segment % 100U;\n\t\t\t\t\t\tyear = segment / 100U;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 6: //YYMMDD (implicit century)\n\t\t\t\t\tif (num_leading_hyphens > 0U || strict)\n\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\telse {\n\t\t\t\t\t\tday = segment % 100U;\n\t\t\t\t\t\tsegment /= 100U;\n\t\t\t\t\t\tmonth_or_week = segment % 100U;\n\t\t\t\t\t\tyear  = nowComponents.year;\n\t\t\t\t\t\tyear -= (year % 100U);\n\t\t\t\t\t\tyear += segment / 100U;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 4:\n\t\t\t\t\tswitch(num_leading_hyphens) {\n\t\t\t\t\t\tcase 0: //YYYY\n\t\t\t\t\t\t\tyear = segment;\n\n\t\t\t\t\t\t\tif (*ch == '-') ++ch;\n\n\t\t\t\t\t\t\tif (!isdigit(*ch)) {\n\t\t\t\t\t\t\t\tif (*ch == 'W')\n\t\t\t\t\t\t\t\t\tgoto parseWeekAndDay;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tmonth_or_week = day = 1U;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsegment = read_segment(ch, &ch, &num_digits);\n\t\t\t\t\t\t\t\tswitch(num_digits) {\n\t\t\t\t\t\t\t\t\tcase 4: //MMDD\n\t\t\t\t\t\t\t\t\t\tif (strict)\n\t\t\t\t\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tday = segment % 100U;\n\t\t\t\t\t\t\t\t\t\t\tmonth_or_week = segment / 100U;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 2: //MM\n\t\t\t\t\t\t\t\t\t\tmonth_or_week = segment;\n\n\t\t\t\t\t\t\t\t\t\tif (*ch == '-') ++ch;\n\t\t\t\t\t\t\t\t\t\tif (!isdigit(*ch))\n\t\t\t\t\t\t\t\t\t\t\tday = 1U;\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tday = read_segment(ch, &ch, NULL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 3: //DDD\n\t\t\t\t\t\t\t\t\t\tday = segment % 1000U;\n\t\t\t\t\t\t\t\t\t\tdateSpecification = dateOnly;\n\t\t\t\t\t\t\t\t\t\tif (strict && (day > (365U + is_leap_year(year))))\n\t\t\t\t\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 1: //YYMM\n\t\t\t\t\t\t\tmonth_or_week = segment % 100U;\n\t\t\t\t\t\t\tyear = segment / 100U;\n\n\t\t\t\t\t\t\tif (*ch == '-') ++ch;\n\t\t\t\t\t\t\tif (!isdigit(*ch))\n\t\t\t\t\t\t\t\tday = 1U;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tday = read_segment(ch, &ch, NULL);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 2: //MMDD\n\t\t\t\t\t\t\tday = segment % 100U;\n\t\t\t\t\t\t\tmonth_or_week = segment / 100U;\n\t\t\t\t\t\t\tyear = nowComponents.year;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t} //switch(num_leading_hyphens) (4 digits)\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\t//Two digits only - never just one.\n\t\t\t\t\t\tif (num_leading_hyphens == 1U) {\n\t\t\t\t\t\t\tif (*ch == '-') ++ch;\n\t\t\t\t\t\t\tif (*++ch == 'W') {\n\t\t\t\t\t\t\t\tyear  = nowComponents.year;\n\t\t\t\t\t\t\t\tyear -= (year % 10U);\n\t\t\t\t\t\t\t\tyear += segment;\n\t\t\t\t\t\t\t\tgoto parseWeekAndDay;\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\tcase 2:\n\t\t\t\t\tswitch(num_leading_hyphens) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\tif (*ch == '-') {\n\t\t\t\t\t\t\t\t//Implicit century\n\t\t\t\t\t\t\t\tyear  = nowComponents.year;\n\t\t\t\t\t\t\t\tyear -= (year % 100U);\n\t\t\t\t\t\t\t\tyear += segment;\n\n\t\t\t\t\t\t\t\tif (*++ch == 'W')\n\t\t\t\t\t\t\t\t\tgoto parseWeekAndDay;\n\t\t\t\t\t\t\t\telse if (!isdigit(*ch)) {\n\t\t\t\t\t\t\t\t\tgoto centuryOnly;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t//Get month and/or date.\n\t\t\t\t\t\t\t\t\tsegment = read_segment_4digits(ch, &ch, &num_digits);\n\t\t\t\t\t\t\t\t\tNSLog(@\"(%@) parsing month; segment is %lu and ch is %@\", string, (unsigned long)segment, [NSString stringWithCString:(const char *)ch encoding:NSUnicodeStringEncoding]);\n\t\t\t\t\t\t\t\t\tswitch(num_digits) {\n\t\t\t\t\t\t\t\t\t\tcase 4: //YY-MMDD\n\t\t\t\t\t\t\t\t\t\t\tday = segment % 100U;\n\t\t\t\t\t\t\t\t\t\t\tmonth_or_week = segment / 100U;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 1: //YY-M; YY-M-DD (extension)\n\t\t\t\t\t\t\t\t\t\t\tif (strict) {\n\t\t\t\t\t\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcase 2: //YY-MM; YY-MM-DD\n\t\t\t\t\t\t\t\t\t\t\tmonth_or_week = segment;\n\t\t\t\t\t\t\t\t\t\t\tif (*ch == '-') {\n\t\t\t\t\t\t\t\t\t\t\t\tif (isdigit(*++ch))\n\t\t\t\t\t\t\t\t\t\t\t\t\tday = read_segment_2digits(ch, &ch);\n\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\tday = 1U;\n\t\t\t\t\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\t\t\t\t\tday = 1U;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 3: //Ordinal date.\n\t\t\t\t\t\t\t\t\t\t\tday = segment;\n\t\t\t\t\t\t\t\t\t\t\tdateSpecification = dateOnly;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (*ch == 'W') {\n\t\t\t\t\t\t\t\tyear  = nowComponents.year;\n\t\t\t\t\t\t\t\tyear -= (year % 100U);\n\t\t\t\t\t\t\t\tyear += segment;\n\n\t\t\t\t\t\t\tparseWeekAndDay: //*ch should be 'W' here.\n\t\t\t\t\t\t\t\tif (!isdigit(*++ch)) {\n\t\t\t\t\t\t\t\t\t//Not really a week-based date; just a year followed by '-W'.\n\t\t\t\t\t\t\t\t\tif (strict)\n\t\t\t\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tmonth_or_week = day = 1U;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tmonth_or_week = read_segment_2digits(ch, &ch);\n\t\t\t\t\t\t\t\t\tif (*ch == '-') ++ch;\n\t\t\t\t\t\t\t\tparseDayAfterWeek:\n\t\t\t\t\t\t\t\t\tday = isdigit(*ch) ? read_segment_2digits(ch, &ch) : 1U;\n\t\t\t\t\t\t\t\t\tdateSpecification = week;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//Century only. Assume current year.\n\t\t\t\t\t\t\tcenturyOnly:\n\t\t\t\t\t\t\t\tyear = segment * 100U + nowComponents.year % 100U;\n\t\t\t\t\t\t\t\tmonth_or_week = day = 1U;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 1:; //-YY; -YY-MM (implicit century)\n\t\t\t\t\t\t\tNSLog(@\"(%@) found %lu digits and one hyphen, so this is either -YY or -YY-MM; segment (year) is %lu\", string, (unsigned long)num_digits, (unsigned long)segment);\n\t\t\t\t\t\t\tNSUInteger current_year = nowComponents.year;\n\t\t\t\t\t\t\tNSUInteger current_century = (current_year % 100U);\n\t\t\t\t\t\t\tyear = segment + (current_year - current_century);\n\t\t\t\t\t\t\tif (num_digits == 1U) //implied decade\n\t\t\t\t\t\t\t\tyear += current_century - (current_year % 10U);\n\n\t\t\t\t\t\t\tif (*ch == '-') {\n\t\t\t\t\t\t\t\t++ch;\n\t\t\t\t\t\t\t\tmonth_or_week = read_segment_2digits(ch, &ch);\n\t\t\t\t\t\t\t\tNSLog(@\"(%@) month is %lu\", string, (unsigned long)month_or_week);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tday = 1U;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 2: //--MM; --MM-DD\n\t\t\t\t\t\t\tyear = nowComponents.year;\n\t\t\t\t\t\t\tmonth_or_week = segment;\n\t\t\t\t\t\t\tif (*ch == '-') {\n\t\t\t\t\t\t\t\t++ch;\n\t\t\t\t\t\t\t\tday = read_segment_2digits(ch, &ch);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 3: //---DD\n\t\t\t\t\t\t\tyear = nowComponents.year;\n\t\t\t\t\t\t\tmonth_or_week = nowComponents.month;\n\t\t\t\t\t\t\tday = segment;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t} //switch(num_leading_hyphens) (2 digits)\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 7: //YYYY DDD (ordinal date)\n\t\t\t\t\tif (num_leading_hyphens > 0U)\n\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\telse {\n\t\t\t\t\t\tday = segment % 1000U;\n\t\t\t\t\t\tyear = segment / 1000U;\n\t\t\t\t\t\tdateSpecification = dateOnly;\n\t\t\t\t\t\tif (strict && (day > (365U + is_leap_year(year))))\n\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3: //--DDD (ordinal date, implicit year)\n\t\t\t\t\t//Technically, the standard only allows one hyphen. But it says that two hyphens is the logical implementation, and one was dropped for brevity. So I have chosen to allow the missing hyphen.\n\t\t\t\t\tif ((num_leading_hyphens < 1U) || ((num_leading_hyphens > 2U) && !strict))\n\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\telse {\n\t\t\t\t\t\tday = segment;\n\t\t\t\t\t\tyear = nowComponents.year;\n\t\t\t\t\t\tdateSpecification = dateOnly;\n\t\t\t\t\t\tif (strict && (day > (365U + is_leap_year(year))))\n\t\t\t\t\t\t\tisValidDate = NO;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tisValidDate = NO;\n\t\t\t}\n\t\t}\n\n\t\tif (isValidDate) {\n\t\t\tif (isspace(*ch) || (*ch == 'T')) ++ch;\n\n\t\t\tif (isdigit(*ch)) {\n\t\t\t\thour = read_segment_2digits(ch, &ch);\n\t\t\t\tif (*ch == timeSep) {\n\t\t\t\t\t++ch;\n\t\t\t\t\tif ((timeSep == ',') || (timeSep == '.')) {\n\t\t\t\t\t\t//We can't do fractional minutes when '.' is the segment separator.\n\t\t\t\t\t\t//Only allow whole minutes and whole seconds.\n\t\t\t\t\t\tminute = read_segment_2digits(ch, &ch);\n\t\t\t\t\t\tif (*ch == timeSep) {\n\t\t\t\t\t\t\t++ch;\n\t\t\t\t\t\t\tsecond = read_segment_2digits(ch, &ch);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//Allow a fractional minute.\n\t\t\t\t\t\t//If we don't get a fraction, look for a seconds segment.\n\t\t\t\t\t\t//Otherwise, the fraction of a minute is the seconds.\n\t\t\t\t\t\tminute = read_double(ch, &ch);\n\t\t\t\t\t\tsecond = modf(minute, &minute);\n\t\t\t\t\t\tif (second > DBL_EPSILON)\n\t\t\t\t\t\t\tsecond *= 60.0; //Convert fraction (e.g. .5) into seconds (e.g. 30).\n\t\t\t\t\t\telse if (*ch == timeSep) {\n\t\t\t\t\t\t\t++ch;\n\t\t\t\t\t\t\tsecond = read_double(ch, &ch);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!strict) {\n\t\t\t\t\tif (isspace(*ch)) ++ch;\n\t\t\t\t}\n\n\t\t\t\tswitch(*ch) {\n\t\t\t\t\tcase 'Z':\n\t\t\t\t\t\ttimeZone = [NSTimeZone timeZoneWithAbbreviation:@\"UTC\"];\n\t\t\t\t\t\t++ch; //So that the Z is included in the range.\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase '+':\n\t\t\t\t\tcase '-':;\n\t\t\t\t\t\tBOOL negative = (*ch == '-');\n\t\t\t\t\t\tif (isdigit(*++ch)) {\n\t\t\t\t\t\t\t//Read hour offset.\n\t\t\t\t\t\t\tsegment = *ch - '0';\n\t\t\t\t\t\t\tif (isdigit(*++ch)) {\n\t\t\t\t\t\t\t\tsegment *= 10U;\n\t\t\t\t\t\t\t\tsegment += *(ch++) - '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttz_hour = (NSInteger)segment;\n\t\t\t\t\t\t\tif (negative) tz_hour = -tz_hour;\n\n\t\t\t\t\t\t\t//Optional separator.\n\t\t\t\t\t\t\tif (*ch == self.timeZoneSeparator) ++ch;\n\n\t\t\t\t\t\t\tif (isdigit(*ch)) {\n\t\t\t\t\t\t\t\t//Read minute offset.\n\t\t\t\t\t\t\t\tsegment = *ch - '0';\n\t\t\t\t\t\t\t\tif (isdigit(*++ch)) {\n\t\t\t\t\t\t\t\t\tsegment *= 10U;\n\t\t\t\t\t\t\t\t\tsegment += *ch - '0';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttz_minute = segment;\n\t\t\t\t\t\t\t\tif (negative) tz_minute = -tz_minute;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tNSInteger timeZoneOffset = (tz_hour * 3600) + (tz_minute * 60);\n\t\t\t\t\t\t\tNSNumber *offsetNum = [NSNumber numberWithInteger:timeZoneOffset];\n\t\t\t\t\t\t\ttimeZone = [timeZonesByOffset objectForKey:offsetNum];\n\t\t\t\t\t\t\tif (!timeZone) {\n\t\t\t\t\t\t\t\ttimeZone = [NSTimeZone timeZoneForSecondsFromGMT:timeZoneOffset];\n\t\t\t\t\t\t\t\tif (timeZone) {\n                                    [timeZonesByOffset setObject:timeZone forKey:offsetNum];\n                                }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isValidDate) {\n\t\t\tcomponents.year = year;\n\t\t\tcomponents.day = day;\n\t\t\tcomponents.hour = hour;\n\t\t\tcomponents.minute = (NSInteger)minute;\n\t\t\tcomponents.second = (NSInteger)second;\n\n\t\t\tif (outFractionOfSecond != NULL) {\n\t\t\t\tNSTimeInterval fractionOfSecond = second - components.second;\n\t\t\t\tif (fractionOfSecond > 0.0) {\n\t\t\t\t\t*outFractionOfSecond = fractionOfSecond;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch(dateSpecification) {\n\t\t\t\tcase monthAndDate:\n\t\t\t\t\tcomponents.month = month_or_week;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase week:;\n\t\t\t\t\t//Adapted from <http://personal.ecu.edu/mccartyr/ISOwdALG.txt>.\n\t\t\t\t\t//This works by converting the week date into an ordinal date, then letting the next case handle it.\n\t\t\t\t\tNSUInteger prevYear = year - 1U;\n\t\t\t\t\tNSUInteger YY = prevYear % 100U;\n\t\t\t\t\tNSUInteger C = prevYear - YY;\n\t\t\t\t\tNSUInteger G = YY + YY / 4U;\n\t\t\t\t\tNSUInteger isLeapYear = (((C / 100U) % 4U) * 5U);\n\t\t\t\t\tNSUInteger Jan1Weekday = (isLeapYear + G) % 7U;\n\t\t\t\t\tenum { monday, tuesday, wednesday, thursday/*, friday, saturday, sunday*/ };\n\t\t\t\t\tcomponents.day = ((8U - Jan1Weekday) + (7U * (Jan1Weekday > thursday))) + (day - 1U) + (7U * (month_or_week - 2));\n\n\t\t\t\tcase dateOnly: //An \"ordinal date\".\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} //if (!(strict && isdigit(ch[0])))\n\n\tif (outRange) {\n\t\tif (isValidDate)\n\t\t\trange.length = ch - start_of_date;\n\t\telse\n\t\t\trange.location = NSNotFound;\n\n\t\t*outRange = range;\n\t}\n\tif (outTimeZone) {\n\t\t*outTimeZone = timeZone;\n\t}\n\n\treturn isValidDate ? components : nil;\n}\n\n- (NSDate *) dateFromString:(NSString *)string {\n\treturn [self dateFromString:string timeZone:NULL];\n}\n- (NSDate *) dateFromString:(NSString *)string timeZone:(out NSTimeZone **)outTimeZone {\n\treturn [self dateFromString:string timeZone:outTimeZone range:NULL];\n}\n- (NSDate *) dateFromString:(NSString *)string timeZone:(out NSTimeZone **)outTimeZone range:(out NSRange *)outRange {\n\tNSTimeZone *timeZone = nil;\n\tNSTimeInterval parsedFractionOfSecond = 0.0;\n  \n\tNSDateComponents *components = [self dateComponentsFromString:string timeZone:&timeZone range:outRange fractionOfSecond:&parsedFractionOfSecond];\n\n\tif (outTimeZone)\n\t\t*outTimeZone = timeZone;\n\tif (components == nil)\n\t\treturn nil;\n\n\tparsingCalendar.timeZone = timeZone;\n\n\tNSDate *parsedDate = [parsingCalendar dateFromComponents:components];\n\n\tif (parsedFractionOfSecond > 0.0) {\n\t\tparsedDate = [parsedDate dateByAddingTimeInterval:parsedFractionOfSecond];\n\t}\n  \n  return parsedDate;\n}\n\n- (BOOL)getObjectValue:(id *)outValue forString:(NSString *)string errorDescription:(NSString **)error {\n\tNSDate *date = [self dateFromString:string];\n\tif (outValue)\n\t\t*outValue = date;\n\treturn (date != nil);\n}\n\n#pragma mark Unparsing\n\n@synthesize format;\n@synthesize includeTime;\n@synthesize useMillisecondPrecision;\n@synthesize timeSeparator;\n@synthesize timeZoneSeparator;\n\n- (NSString *) replaceColonsInString:(NSString *)timeFormat withTimeSeparator:(unichar)timeSep {\n\tif (timeSep != ':') {\n\t\tNSMutableString *timeFormatMutable = [[timeFormat mutableCopy] autorelease];\n\t\t[timeFormatMutable replaceOccurrencesOfString:@\":\"\n\t\t                               \t   withString:[NSString stringWithCharacters:&timeSep length:1U]\n\t                                      \t  options:NSBackwardsSearch | NSLiteralSearch\n\t                                        \trange:(NSRange){ 0UL, [timeFormat length] }];\n\t\ttimeFormat = timeFormatMutable;\n\t}\n\treturn timeFormat;\n}\n\n- (NSString *) stringFromDate:(NSDate *)date {\n\tNSTimeZone *timeZone = self.defaultTimeZone;\n\tif (!timeZone) timeZone = [NSTimeZone defaultTimeZone];\n\treturn [self stringFromDate:date timeZone:timeZone];\n}\n\n- (NSString *) stringFromDate:(NSDate *)date timeZone:(NSTimeZone *)timeZone {\n\tswitch (self.format) {\n\t\tcase ISO8601DateFormatCalendar:\n\t\t\treturn [self stringFromDate:date formatString:ISO_CALENDAR_DATE_FORMAT timeZone:timeZone];\n\t\tcase ISO8601DateFormatWeek:\n\t\t\treturn [self weekDateStringForDate:date timeZone:timeZone];\n\t\tcase ISO8601DateFormatOrdinal:\n\t\t\treturn [self stringFromDate:date formatString:ISO_ORDINAL_DATE_FORMAT timeZone:timeZone];\n\t\tdefault:\n\t\t\t[NSException raise:NSInternalInconsistencyException format:@\"self.format was %tu, not calendar (%tu), week (%tu), or ordinal (%tu)\", self.format, ISO8601DateFormatCalendar, ISO8601DateFormatWeek, ISO8601DateFormatOrdinal];\n\t\t\treturn nil;\n\t}\n}\n\n- (NSString *) stringFromDate:(NSDate *)date formatString:(NSString *)dateFormat timeZone:(NSTimeZone *)timeZone {\n\tif (includeTime){\n\t\tNSString *timeFormat = self.useMillisecondPrecision ? ISO_TIME_FORMAT_MS_PRECISION : ISO_TIME_FORMAT;\n\t\tdateFormat = [dateFormat stringByAppendingFormat:@\"'T'%@\", [self replaceColonsInString:timeFormat withTimeSeparator:self.timeSeparator]];\n\t}\n\t\n\n\tif ([dateFormat isEqualToString:lastUsedFormatString] == NO) {\n\t\t[unparsingFormatter release];\n\t\tunparsingFormatter = nil;\n\n\t\t[lastUsedFormatString release];\n\t\tlastUsedFormatString = [dateFormat retain];\n\t}\n\n\tif (!unparsingFormatter) {\n\t\tunparsingFormatter = [[NSDateFormatter alloc] init];\n\t\tunparsingFormatter.formatterBehavior = NSDateFormatterBehavior10_4;\n\t\tunparsingFormatter.dateFormat = dateFormat;\n\t\tunparsingFormatter.calendar = unparsingCalendar;\n\t\tunparsingFormatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@\"en_US_POSIX\"] autorelease];\n\t}\n\n\tunparsingCalendar.timeZone = timeZone;\n\tunparsingFormatter.timeZone = timeZone;\n\tNSString *str = [unparsingFormatter stringForObjectValue:date];\n\n\tif (includeTime) {\n\t\tNSInteger offset = [timeZone secondsFromGMTForDate:date];\n\t\toffset /= 60;  //bring down to minutes\n\t\tif (offset == 0)\n\t\t\tstr = [str stringByAppendingString:ISO_TIMEZONE_UTC_FORMAT];\n\t\telse {\n\t\t\tint timeZoneOffsetHour = abs((int)(offset / 60));\n\t\t\tint timeZoneOffsetMinute = abs((int)(offset % 60));\n            \n            if (offset > 0) str = [str stringByAppendingString:@\"+\"];\n            else str = [str stringByAppendingString:@\"-\"];\n            \n            str = [str stringByAppendingFormat:ISO8601TwoCharIntegerFormat, timeZoneOffsetHour];\n            \n            if (self.timeZoneSeparator) str = [str stringByAppendingFormat:@\"%C\", self.timeZoneSeparator];\n            \n            str = [str stringByAppendingFormat:ISO8601TwoCharIntegerFormat, timeZoneOffsetMinute];\n\t\t}\n\t}\n\n\t//Undo the change we made earlier\n\tunparsingCalendar.timeZone = self.defaultTimeZone;\n\tunparsingFormatter.timeZone = self.defaultTimeZone;\n\n\treturn str;\n}\n\n- (NSString *) stringForObjectValue:(id)value {\n\tif ( ! [value isKindOfClass:[NSDate class]]) {\n\t\tNSLog(@\"%s: Can only format NSDate objects, not objects like %@\", __func__, value);\n\t\treturn nil;\n\t}\n\n\treturn [self stringFromDate:(NSDate *)value];\n}\n\n/*Adapted from:\n *\tAlgorithm for Converting Gregorian Dates to ISO 8601 Week Date\n *\tRick McCarty, 1999\n *\thttp://personal.ecu.edu/mccartyr/ISOwdALG.txt\n */\n- (NSString *) weekDateStringForDate:(NSDate *)date timeZone:(NSTimeZone *)timeZone {\n\tunparsingCalendar.timeZone = timeZone;\n\tNSDateComponents *components = [unparsingCalendar components:NSCalendarUnitYear | NSCalendarUnitWeekday | NSCalendarUnitDay fromDate:date];\n\n\t//Determine the ordinal date.\n\tNSDateComponents *startOfYearComponents = [unparsingCalendar components:NSCalendarUnitYear fromDate:date];\n\tstartOfYearComponents.month = 1;\n\tstartOfYearComponents.day = 1;\n\tNSDateComponents *ordinalComponents = [unparsingCalendar components:NSCalendarUnitDay fromDate:[unparsingCalendar dateFromComponents:startOfYearComponents] toDate:date options:0];\n\tordinalComponents.day += 1;\n\n\tenum {\n\t\tmonday, tuesday, wednesday, thursday, friday, saturday, sunday\n\t};\n\tenum {\n\t\tjanuary = 1, february, march,\n\t\tapril, may, june,\n\t\tjuly, august, september,\n\t\toctober, november, december\n\t};\n\n\tNSInteger year = components.year;\n\tNSInteger week = 0;\n\t//The old unparser added 6 to [calendarDate dayOfWeek], which was zero-based; components.weekday is one-based, so we now add only 5.\n\tNSInteger dayOfWeek = (components.weekday + 5) % 7;\n\tNSInteger dayOfYear = ordinalComponents.day;\n\n\tNSInteger prevYear = year - 1;\n\n\tBOOL yearIsLeapYear = is_leap_year(year);\n\tBOOL prevYearIsLeapYear = is_leap_year(prevYear);\n\n\tNSInteger YY = prevYear % 100;\n\tNSInteger C = prevYear - YY;\n\tNSInteger G = YY + YY / 4;\n\tNSInteger Jan1Weekday = (((((C / 100) % 4) * 5) + G) % 7);\n\n\tNSInteger weekday = ((dayOfYear + Jan1Weekday) - 1) % 7;\n\n\tif((dayOfYear <= (7 - Jan1Weekday)) && (Jan1Weekday > thursday)) {\n\t\tweek = 52 + ((Jan1Weekday == friday) || ((Jan1Weekday == saturday) && prevYearIsLeapYear));\n\t\t--year;\n\t} else {\n\t\tNSInteger lengthOfYear = 365 + yearIsLeapYear;\n\t\tif((lengthOfYear - dayOfYear) < (thursday - weekday)) {\n\t\t\t++year;\n\t\t\tweek = 1;\n\t\t} else {\n\t\t\tNSInteger J = dayOfYear + (sunday - weekday) + Jan1Weekday;\n\t\t\tweek = J / 7 - (Jan1Weekday > thursday);\n\t\t}\n\t}\n\n\tNSString *string = [NSString stringWithFormat:@\"%lu-W%02lu-%02lu\", (unsigned long)year, (unsigned long)week, ((unsigned long)dayOfWeek) + 1U];\n\n\tNSString *timeString;\n\tif(includeTime) {\n\t\tNSDateFormatter *formatter = [[NSDateFormatter alloc] init];\n\t\tunichar timeSep = self.timeSeparator;\n\t\tif (!timeSep) timeSep = ISO8601DefaultTimeSeparatorCharacter;\n\t\t\n\t\tNSString *timeFormat = self.useMillisecondPrecision ? ISO_TIME_FORMAT_MS_PRECISION : ISO_TIME_FORMAT;\n\t\tformatter.dateFormat = [self replaceColonsInString:timeFormat withTimeSeparator:timeSep];\n\t\tformatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@\"en_US_POSIX\"] autorelease];\n\t\tformatter.timeZone = timeZone;\n\n\t\ttimeString = [formatter stringForObjectValue:date];\n\n\t\t[formatter release];\n\n\t\t//TODO: This is copied from the calendar-date code. It should be isolated in a method.\n\t\tNSInteger offset = [timeZone secondsFromGMTForDate:date];\n\t\toffset /= 60;  //bring down to minutes\n\t\tif (offset == 0)\n\t\t\ttimeString = [timeString stringByAppendingString:ISO_TIMEZONE_UTC_FORMAT];\n\t\telse {\n\t\t\tint timeZoneOffsetHour = (int)(offset / 60);\n\t\t\tint timeZoneOffsetMinute = (int)(offset % 60);\n\t\t\tif (self.timeZoneSeparator)\n\t\t\t\ttimeString = [timeString stringByAppendingFormat:ISO_TIMEZONE_OFFSET_FORMAT_WITH_SEPARATOR,\n\t\t\t\t                                                 timeZoneOffsetHour, self.timeZoneSeparator,\n\t\t\t\t                                                 timeZoneOffsetMinute];\n\t\t\telse\n\t\t\t\ttimeString = [timeString stringByAppendingFormat:ISO_TIMEZONE_OFFSET_FORMAT_NO_SEPARATOR,\n\t\t\t\t                                                 timeZoneOffsetHour, timeZoneOffsetMinute];\n\t\t}\n\n\t\tstring = [string stringByAppendingFormat:@\"T%@\", timeString];\n\t}\n\n\treturn string;\n}\n\n@end\n\nstatic NSUInteger read_segment(const unichar *str, const unichar **next, NSUInteger *out_num_digits) {\n\tNSUInteger num_digits = 0U;\n\tNSUInteger value = 0U;\n\n\twhile(isdigit(*str)) {\n\t\tvalue *= 10U;\n\t\tvalue += *str - '0';\n\t\t++num_digits;\n\t\t++str;\n\t}\n\n\tif (next) *next = str;\n\tif (out_num_digits) *out_num_digits = num_digits;\n\n\treturn value;\n}\nstatic NSUInteger read_segment_4digits(const unichar *str, const unichar **next, NSUInteger *out_num_digits) {\n\tNSUInteger num_digits = 0U;\n\tNSUInteger value = 0U;\n\n\tif (isdigit(*str)) {\n\t\tvalue += *(str++) - '0';\n\t\t++num_digits;\n\t}\n\n\tif (isdigit(*str)) {\n\t\tvalue *= 10U;\n\t\tvalue += *(str++) - '0';\n\t\t++num_digits;\n\t}\n\n\tif (isdigit(*str)) {\n\t\tvalue *= 10U;\n\t\tvalue += *(str++) - '0';\n\t\t++num_digits;\n\t}\n\n\tif (isdigit(*str)) {\n\t\tvalue *= 10U;\n\t\tvalue += *(str++) - '0';\n\t\t++num_digits;\n\t}\n\n\tif (next) *next = str;\n\tif (out_num_digits) *out_num_digits = num_digits;\n\n\treturn value;\n}\nstatic NSUInteger read_segment_2digits(const unichar *str, const unichar **next) {\n\tNSUInteger value = 0U;\n\n\tif (isdigit(*str))\n\t\tvalue += *str - '0';\n\n\tif (isdigit(*++str)) {\n\t\tvalue *= 10U;\n\t\tvalue += *(str++) - '0';\n\t}\n\n\tif (next) *next = str;\n\n\treturn value;\n}\n\n//strtod doesn't support ',' as a separator. This does.\nstatic double read_double(const unichar *str, const unichar **next) {\n\tdouble value = 0.0;\n\n\tif (str) {\n\t\tNSUInteger int_value = 0;\n\n\t\twhile(isdigit(*str)) {\n\t\t\tint_value *= 10U;\n\t\t\tint_value += (*(str++) - '0');\n\t\t}\n\t\tvalue = int_value;\n\n\t\tif (((*str == ',') || (*str == '.'))) {\n\t\t\t++str;\n\n\t\t\tregister double multiplier, multiplier_multiplier;\n\t\t\tmultiplier = multiplier_multiplier = 0.1;\n\n\t\t\twhile(isdigit(*str)) {\n\t\t\t\tvalue += (*(str++) - '0') * multiplier;\n\t\t\t\tmultiplier *= multiplier_multiplier;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (next) *next = str;\n\n\treturn value;\n}\n\nstatic BOOL is_leap_year(NSUInteger year) {\n\treturn \\\n\t    ((year %   4U) == 0U)\n\t&& (((year % 100U) != 0U)\n\t||  ((year % 400U) == 0U));\n}\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601DateFormatter/ISO8601.h",
    "content": "//\n//  ISO8601.h\n//  ISO8601\n//\n//  Created by Agnes Vasarhelyi on 30/12/14.\n//  Copyright (c) 2014 Peter Hosey. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for ISO8601DateFormatter.\nFOUNDATION_EXPORT double ISO8601DateFormatterVersionNumber;\n\n//! Project version string for ISO8601DateFormatter.\nFOUNDATION_EXPORT const unsigned char ISO8601DateFormatterVersionString[];\n\n#import <ISO8601/ISO8601DateFormatter.h>\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601DateFormatter/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</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>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoa/ISO8601ForCocoa-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'ISO8601ForCocoa' target in the 'ISO8601ForCocoa' project\n//\n\n#include <stdbool.h>\n#include <tgmath.h>\n\n#ifdef __OBJC__\n#\tdefine NS_ENABLE_CALENDAR_NEW_API 1\n#   import <Foundation/Foundation.h>\n#endif\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoa.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\t027E31BD1A52DFCE00802098 /* ISO8601.h in Headers */ = {isa = PBXBuildFile; fileRef = 027E31BC1A52DFCE00802098 /* ISO8601.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t027E31D11A52DFE200802098 /* ISO8601DateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 31AEAFF517546BFA00BD292F /* ISO8601DateFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t027E31D21A52DFEC00802098 /* ISO8601DateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 31AEAFF617546BFA00BD292F /* ISO8601DateFormatter.m */; settings = {COMPILER_FLAGS = \"-fno-objc-arc\"; }; };\n\t\t3119ABEF17FCF8F0003412AE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3119ABEE17FCF8F0003412AE /* UIKit.framework */; };\n\t\t312D4C441B9CA7D300FF3602 /* ISO8601Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = 312D4C431B9CA7D300FF3602 /* ISO8601Testing.m */; };\n\t\t312D4C451B9CA7D600FF3602 /* ISO8601Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = 312D4C431B9CA7D300FF3602 /* ISO8601Testing.m */; };\n\t\t31419D9717E08256007B02E2 /* ISO8601ForCocoaWeekDateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 31419D9617E08256007B02E2 /* ISO8601ForCocoaWeekDateTests.m */; };\n\t\t31419D9817E08256007B02E2 /* ISO8601ForCocoaWeekDateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 31419D9617E08256007B02E2 /* ISO8601ForCocoaWeekDateTests.m */; };\n\t\t3198826517FCF2B0005FB1DA /* ISO8601MemoryWarningTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3198826417FCF2B0005FB1DA /* ISO8601MemoryWarningTests.m */; };\n\t\t31A271B717CE9B5A00E3FA7D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 31A271B617CE9B5A00E3FA7D /* Foundation.framework */; };\n\t\t31A271C817CE9B5B00E3FA7D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 31A271B617CE9B5A00E3FA7D /* Foundation.framework */; };\n\t\t31A271CB17CE9B5B00E3FA7D /* libISO8601ForCocoaTouch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 31A271B517CE9B5A00E3FA7D /* libISO8601ForCocoaTouch.a */; };\n\t\t31A271D117CE9B5B00E3FA7D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 31A271CF17CE9B5B00E3FA7D /* InfoPlist.strings */; };\n\t\t31A271DB17CE9C3A00E3FA7D /* ISO8601ForCocoaCalendarDateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 31AEAFEB17546BC900BD292F /* ISO8601ForCocoaCalendarDateTests.m */; };\n\t\t31A271DC17CE9C5E00E3FA7D /* ISO8601DateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 31AEAFF617546BFA00BD292F /* ISO8601DateFormatter.m */; };\n\t\t31A271DD17CE9E3500E3FA7D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 31AEAFD117546BC800BD292F /* Foundation.framework */; };\n\t\t31AEAFE317546BC800BD292F /* libISO8601ForCocoa.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 31AEAFC917546BC800BD292F /* libISO8601ForCocoa.a */; };\n\t\t31AEAFE917546BC800BD292F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 31AEAFE717546BC800BD292F /* InfoPlist.strings */; };\n\t\t31AEAFEC17546BC900BD292F /* ISO8601ForCocoaCalendarDateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 31AEAFEB17546BC900BD292F /* ISO8601ForCocoaCalendarDateTests.m */; };\n\t\t31AEAFF717546BFB00BD292F /* ISO8601DateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 31AEAFF517546BFA00BD292F /* ISO8601DateFormatter.h */; };\n\t\t31AEAFF817546BFB00BD292F /* ISO8601DateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 31AEAFF617546BFA00BD292F /* ISO8601DateFormatter.m */; settings = {COMPILER_FLAGS = \"-fno-objc-arc\"; }; };\n\t\t3904FF2717CF34AE003603D1 /* MBMockLocale.m in Sources */ = {isa = PBXBuildFile; fileRef = 3904FF2417CF34AE003603D1 /* MBMockLocale.m */; };\n\t\t3904FF2817CF34AE003603D1 /* MBMockLocale.m in Sources */ = {isa = PBXBuildFile; fileRef = 3904FF2417CF34AE003603D1 /* MBMockLocale.m */; };\n\t\t3904FF2917CF34AE003603D1 /* NSLocale+UnitTestSwizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = 3904FF2617CF34AE003603D1 /* NSLocale+UnitTestSwizzling.m */; };\n\t\t3904FF2A17CF34AE003603D1 /* NSLocale+UnitTestSwizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = 3904FF2617CF34AE003603D1 /* NSLocale+UnitTestSwizzling.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t31A271C917CE9B5B00E3FA7D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 31AEAFC117546BC800BD292F /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 31A271B417CE9B5A00E3FA7D;\n\t\t\tremoteInfo = ISO8601ForCocoaTouch;\n\t\t};\n\t\t31AEAFE117546BC800BD292F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 31AEAFC117546BC800BD292F /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 31AEAFC817546BC800BD292F;\n\t\t\tremoteInfo = ISO8601ForCocoa;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t31A271B317CE9B5A00E3FA7D /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"include/${PRODUCT_NAME}\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t027E31BB1A52DFCE00802098 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t027E31BC1A52DFCE00802098 /* ISO8601.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ISO8601.h; sourceTree = \"<group>\"; };\n\t\t1B2A62BE59D932056840CE25 /* PRHNamedCharacter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PRHNamedCharacter.h; sourceTree = \"<group>\"; };\n\t\t3119ABEE17FCF8F0003412AE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };\n\t\t312D4C421B9CA7D300FF3602 /* ISO8601Testing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISO8601Testing.h; sourceTree = \"<group>\"; };\n\t\t312D4C431B9CA7D300FF3602 /* ISO8601Testing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ISO8601Testing.m; sourceTree = \"<group>\"; };\n\t\t31419D9517E08256007B02E2 /* ISO8601ForCocoaWeekDateTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISO8601ForCocoaWeekDateTests.h; sourceTree = \"<group>\"; };\n\t\t31419D9617E08256007B02E2 /* ISO8601ForCocoaWeekDateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ISO8601ForCocoaWeekDateTests.m; sourceTree = \"<group>\"; };\n\t\t3179B3EB17E94D5000CE9D95 /* ISO8601ForCocoaTimeOnlyTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISO8601ForCocoaTimeOnlyTests.h; sourceTree = \"<group>\"; };\n\t\t3179B3EC17E94D5000CE9D95 /* ISO8601ForCocoaTimeOnlyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ISO8601ForCocoaTimeOnlyTests.m; sourceTree = \"<group>\"; };\n\t\t3198826317FCF2B0005FB1DA /* ISO8601MemoryWarningTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISO8601MemoryWarningTests.h; sourceTree = \"<group>\"; };\n\t\t3198826417FCF2B0005FB1DA /* ISO8601MemoryWarningTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ISO8601MemoryWarningTests.m; sourceTree = \"<group>\"; };\n\t\t31A271B517CE9B5A00E3FA7D /* libISO8601ForCocoaTouch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libISO8601ForCocoaTouch.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t31A271B617CE9B5A00E3FA7D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t31A271BA17CE9B5B00E3FA7D /* ISO8601ForCocoaTouch-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"ISO8601ForCocoaTouch-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t31A271C417CE9B5B00E3FA7D /* ISO8601ForCocoaTouchTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ISO8601ForCocoaTouchTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t31A271CE17CE9B5B00E3FA7D /* ISO8601ForCocoaTouchTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"ISO8601ForCocoaTouchTests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t31A271D017CE9B5B00E3FA7D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t31AEAFC917546BC800BD292F /* libISO8601ForCocoa.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libISO8601ForCocoa.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t31AEAFCF17546BC800BD292F /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };\n\t\t31AEAFD017546BC800BD292F /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };\n\t\t31AEAFD117546BC800BD292F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t31AEAFD417546BC800BD292F /* ISO8601ForCocoa-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"ISO8601ForCocoa-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t31AEAFDD17546BC800BD292F /* ISO8601ForCocoaTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ISO8601ForCocoaTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t31AEAFE617546BC800BD292F /* ISO8601ForCocoaTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"ISO8601ForCocoaTests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t31AEAFE817546BC800BD292F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t31AEAFEA17546BC800BD292F /* ISO8601ForCocoaCalendarDateTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ISO8601ForCocoaCalendarDateTests.h; sourceTree = \"<group>\"; };\n\t\t31AEAFEB17546BC900BD292F /* ISO8601ForCocoaCalendarDateTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ISO8601ForCocoaCalendarDateTests.m; sourceTree = \"<group>\"; };\n\t\t31AEAFF517546BFA00BD292F /* ISO8601DateFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISO8601DateFormatter.h; path = ../ISO8601DateFormatter.h; sourceTree = \"<group>\"; };\n\t\t31AEAFF617546BFA00BD292F /* ISO8601DateFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ISO8601DateFormatter.m; path = ../ISO8601DateFormatter.m; sourceTree = \"<group>\"; };\n\t\t31D981F31B9E5A35007CF1DA /* ISO8601.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ISO8601.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t3904FF2317CF34AE003603D1 /* MBMockLocale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBMockLocale.h; sourceTree = \"<group>\"; };\n\t\t3904FF2417CF34AE003603D1 /* MBMockLocale.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBMockLocale.m; sourceTree = \"<group>\"; };\n\t\t3904FF2517CF34AE003603D1 /* NSLocale+UnitTestSwizzling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSLocale+UnitTestSwizzling.h\"; sourceTree = \"<group>\"; };\n\t\t3904FF2617CF34AE003603D1 /* NSLocale+UnitTestSwizzling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSLocale+UnitTestSwizzling.m\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t027E31B41A52DFCE00802098 /* 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\t\t31A271B217CE9B5A00E3FA7D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t31A271B717CE9B5A00E3FA7D /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t31A271C017CE9B5B00E3FA7D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3119ABEF17FCF8F0003412AE /* UIKit.framework in Frameworks */,\n\t\t\t\t31A271C817CE9B5B00E3FA7D /* Foundation.framework in Frameworks */,\n\t\t\t\t31A271CB17CE9B5B00E3FA7D /* libISO8601ForCocoaTouch.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t31AEAFC617546BC800BD292F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t31A271DD17CE9E3500E3FA7D /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t31AEAFD917546BC800BD292F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t31AEAFE317546BC800BD292F /* libISO8601ForCocoa.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t027E31B91A52DFCE00802098 /* ISO8601 */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t027E31BC1A52DFCE00802098 /* ISO8601.h */,\n\t\t\t\t027E31BA1A52DFCE00802098 /* Supporting Files */,\n\t\t\t);\n\t\t\tname = ISO8601;\n\t\t\tpath = ISO8601DateFormatter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t027E31BA1A52DFCE00802098 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t027E31BB1A52DFCE00802098 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31A271B817CE9B5B00E3FA7D /* ISO8601ForCocoaTouch */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t31A271B917CE9B5B00E3FA7D /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = ISO8601ForCocoaTouch;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31A271B917CE9B5B00E3FA7D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t31A271BA17CE9B5B00E3FA7D /* ISO8601ForCocoaTouch-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31A271CC17CE9B5B00E3FA7D /* ISO8601ForCocoaTouchTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3198826317FCF2B0005FB1DA /* ISO8601MemoryWarningTests.h */,\n\t\t\t\t3198826417FCF2B0005FB1DA /* ISO8601MemoryWarningTests.m */,\n\t\t\t\t31A271CD17CE9B5B00E3FA7D /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = ISO8601ForCocoaTouchTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31A271CD17CE9B5B00E3FA7D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t31A271CE17CE9B5B00E3FA7D /* ISO8601ForCocoaTouchTests-Info.plist */,\n\t\t\t\t31A271CF17CE9B5B00E3FA7D /* InfoPlist.strings */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31AEAFC017546BC800BD292F = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t31AEAFF517546BFA00BD292F /* ISO8601DateFormatter.h */,\n\t\t\t\t31AEAFF617546BFA00BD292F /* ISO8601DateFormatter.m */,\n\t\t\t\t31AEAFD217546BC800BD292F /* ISO8601ForCocoa */,\n\t\t\t\t31AEAFE417546BC800BD292F /* ISO8601ForCocoaTests */,\n\t\t\t\t31A271B817CE9B5B00E3FA7D /* ISO8601ForCocoaTouch */,\n\t\t\t\t31A271CC17CE9B5B00E3FA7D /* ISO8601ForCocoaTouchTests */,\n\t\t\t\t027E31B91A52DFCE00802098 /* ISO8601 */,\n\t\t\t\t31AEAFCB17546BC800BD292F /* Frameworks */,\n\t\t\t\t31AEAFCA17546BC800BD292F /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31AEAFCA17546BC800BD292F /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t31AEAFC917546BC800BD292F /* libISO8601ForCocoa.a */,\n\t\t\t\t31AEAFDD17546BC800BD292F /* ISO8601ForCocoaTests.xctest */,\n\t\t\t\t31A271B517CE9B5A00E3FA7D /* libISO8601ForCocoaTouch.a */,\n\t\t\t\t31A271C417CE9B5B00E3FA7D /* ISO8601ForCocoaTouchTests.xctest */,\n\t\t\t\t31D981F31B9E5A35007CF1DA /* ISO8601.framework */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31AEAFCB17546BC800BD292F /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3119ABEE17FCF8F0003412AE /* UIKit.framework */,\n\t\t\t\t31A271B617CE9B5A00E3FA7D /* Foundation.framework */,\n\t\t\t\t31AEAFCE17546BC800BD292F /* Other Frameworks */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31AEAFCE17546BC800BD292F /* Other Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t31AEAFCF17546BC800BD292F /* AppKit.framework */,\n\t\t\t\t31AEAFD017546BC800BD292F /* CoreData.framework */,\n\t\t\t\t31AEAFD117546BC800BD292F /* Foundation.framework */,\n\t\t\t);\n\t\t\tname = \"Other Frameworks\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31AEAFD217546BC800BD292F /* ISO8601ForCocoa */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t31AEAFD317546BC800BD292F /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = ISO8601ForCocoa;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31AEAFD317546BC800BD292F /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t31AEAFD417546BC800BD292F /* ISO8601ForCocoa-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31AEAFE417546BC800BD292F /* ISO8601ForCocoaTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3904FF2317CF34AE003603D1 /* MBMockLocale.h */,\n\t\t\t\t3904FF2417CF34AE003603D1 /* MBMockLocale.m */,\n\t\t\t\t3904FF2517CF34AE003603D1 /* NSLocale+UnitTestSwizzling.h */,\n\t\t\t\t3904FF2617CF34AE003603D1 /* NSLocale+UnitTestSwizzling.m */,\n\t\t\t\t312D4C421B9CA7D300FF3602 /* ISO8601Testing.h */,\n\t\t\t\t312D4C431B9CA7D300FF3602 /* ISO8601Testing.m */,\n\t\t\t\t3179B3EB17E94D5000CE9D95 /* ISO8601ForCocoaTimeOnlyTests.h */,\n\t\t\t\t3179B3EC17E94D5000CE9D95 /* ISO8601ForCocoaTimeOnlyTests.m */,\n\t\t\t\t31AEAFEA17546BC800BD292F /* ISO8601ForCocoaCalendarDateTests.h */,\n\t\t\t\t31AEAFEB17546BC900BD292F /* ISO8601ForCocoaCalendarDateTests.m */,\n\t\t\t\t31419D9517E08256007B02E2 /* ISO8601ForCocoaWeekDateTests.h */,\n\t\t\t\t31419D9617E08256007B02E2 /* ISO8601ForCocoaWeekDateTests.m */,\n\t\t\t\t31AEAFE517546BC800BD292F /* Supporting Files */,\n\t\t\t\t1B2A62BE59D932056840CE25 /* PRHNamedCharacter.h */,\n\t\t\t);\n\t\t\tpath = ISO8601ForCocoaTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31AEAFE517546BC800BD292F /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t31AEAFE617546BC800BD292F /* ISO8601ForCocoaTests-Info.plist */,\n\t\t\t\t31AEAFE717546BC800BD292F /* InfoPlist.strings */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t027E31B51A52DFCE00802098 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t027E31BD1A52DFCE00802098 /* ISO8601.h in Headers */,\n\t\t\t\t027E31D11A52DFE200802098 /* ISO8601DateFormatter.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t31AEAFC717546BC800BD292F /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t31AEAFF717546BFB00BD292F /* ISO8601DateFormatter.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t027E31B71A52DFCE00802098 /* ISO8601 */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 027E31CF1A52DFCE00802098 /* Build configuration list for PBXNativeTarget \"ISO8601\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t027E31B31A52DFCE00802098 /* Sources */,\n\t\t\t\t027E31B41A52DFCE00802098 /* Frameworks */,\n\t\t\t\t027E31B51A52DFCE00802098 /* Headers */,\n\t\t\t\t027E31B61A52DFCE00802098 /* 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 = ISO8601;\n\t\t\tproductName = ISO8601DateFormatter;\n\t\t\tproductReference = 31D981F31B9E5A35007CF1DA /* ISO8601.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t31A271B417CE9B5A00E3FA7D /* ISO8601ForCocoaTouch */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 31A271D917CE9B5B00E3FA7D /* Build configuration list for PBXNativeTarget \"ISO8601ForCocoaTouch\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t31A271B117CE9B5A00E3FA7D /* Sources */,\n\t\t\t\t31A271B217CE9B5A00E3FA7D /* Frameworks */,\n\t\t\t\t31A271B317CE9B5A00E3FA7D /* 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 = ISO8601ForCocoaTouch;\n\t\t\tproductName = ISO8601ForCocoaTouch;\n\t\t\tproductReference = 31A271B517CE9B5A00E3FA7D /* libISO8601ForCocoaTouch.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t31A271C317CE9B5B00E3FA7D /* ISO8601ForCocoaTouchTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 31A271DA17CE9B5B00E3FA7D /* Build configuration list for PBXNativeTarget \"ISO8601ForCocoaTouchTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t31A271BF17CE9B5B00E3FA7D /* Sources */,\n\t\t\t\t31A271C017CE9B5B00E3FA7D /* Frameworks */,\n\t\t\t\t31A271C117CE9B5B00E3FA7D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t31A271CA17CE9B5B00E3FA7D /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = ISO8601ForCocoaTouchTests;\n\t\t\tproductName = ISO8601ForCocoaTouchTests;\n\t\t\tproductReference = 31A271C417CE9B5B00E3FA7D /* ISO8601ForCocoaTouchTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t31AEAFC817546BC800BD292F /* ISO8601ForCocoa */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 31AEAFEF17546BC900BD292F /* Build configuration list for PBXNativeTarget \"ISO8601ForCocoa\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t31AEAFC517546BC800BD292F /* Sources */,\n\t\t\t\t31AEAFC617546BC800BD292F /* Frameworks */,\n\t\t\t\t31AEAFC717546BC800BD292F /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ISO8601ForCocoa;\n\t\t\tproductName = ISO8601ForCocoa;\n\t\t\tproductReference = 31AEAFC917546BC800BD292F /* libISO8601ForCocoa.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t31AEAFDC17546BC800BD292F /* ISO8601ForCocoaTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 31AEAFF217546BC900BD292F /* Build configuration list for PBXNativeTarget \"ISO8601ForCocoaTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t31AEAFD817546BC800BD292F /* Sources */,\n\t\t\t\t31AEAFD917546BC800BD292F /* Frameworks */,\n\t\t\t\t31AEAFDA17546BC800BD292F /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t31AEAFE217546BC800BD292F /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = ISO8601ForCocoaTests;\n\t\t\tproductName = ISO8601ForCocoaTests;\n\t\t\tproductReference = 31AEAFDD17546BC800BD292F /* ISO8601ForCocoaTests.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\t31AEAFC117546BC800BD292F /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastTestingUpgradeCheck = 0700;\n\t\t\t\tLastUpgradeCheck = 0460;\n\t\t\t\tORGANIZATIONNAME = \"Peter Hosey\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t027E31B71A52DFCE00802098 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1.1;\n\t\t\t\t\t};\n\t\t\t\t\t31AEAFDC17546BC800BD292F = {\n\t\t\t\t\t\tTestTargetID = 31AEAFC817546BC800BD292F;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 31AEAFC417546BC800BD292F /* Build configuration list for PBXProject \"ISO8601ForCocoa\" */;\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 = 31AEAFC017546BC800BD292F;\n\t\t\tproductRefGroup = 31AEAFCA17546BC800BD292F /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t31AEAFC817546BC800BD292F /* ISO8601ForCocoa */,\n\t\t\t\t31AEAFDC17546BC800BD292F /* ISO8601ForCocoaTests */,\n\t\t\t\t31A271B417CE9B5A00E3FA7D /* ISO8601ForCocoaTouch */,\n\t\t\t\t31A271C317CE9B5B00E3FA7D /* ISO8601ForCocoaTouchTests */,\n\t\t\t\t027E31B71A52DFCE00802098 /* ISO8601 */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t027E31B61A52DFCE00802098 /* 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\t\t31A271C117CE9B5B00E3FA7D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t31A271D117CE9B5B00E3FA7D /* InfoPlist.strings in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t31AEAFDA17546BC800BD292F /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t31AEAFE917546BC800BD292F /* InfoPlist.strings in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t027E31B31A52DFCE00802098 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t027E31D21A52DFEC00802098 /* ISO8601DateFormatter.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t31A271B117CE9B5A00E3FA7D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t31A271DC17CE9C5E00E3FA7D /* ISO8601DateFormatter.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t31A271BF17CE9B5B00E3FA7D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t31A271DB17CE9C3A00E3FA7D /* ISO8601ForCocoaCalendarDateTests.m in Sources */,\n\t\t\t\t3904FF2817CF34AE003603D1 /* MBMockLocale.m in Sources */,\n\t\t\t\t3904FF2A17CF34AE003603D1 /* NSLocale+UnitTestSwizzling.m in Sources */,\n\t\t\t\t31419D9817E08256007B02E2 /* ISO8601ForCocoaWeekDateTests.m in Sources */,\n\t\t\t\t3198826517FCF2B0005FB1DA /* ISO8601MemoryWarningTests.m in Sources */,\n\t\t\t\t312D4C451B9CA7D600FF3602 /* ISO8601Testing.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t31AEAFC517546BC800BD292F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t31AEAFF817546BFB00BD292F /* ISO8601DateFormatter.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t31AEAFD817546BC800BD292F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t312D4C441B9CA7D300FF3602 /* ISO8601Testing.m in Sources */,\n\t\t\t\t31AEAFEC17546BC900BD292F /* ISO8601ForCocoaCalendarDateTests.m in Sources */,\n\t\t\t\t3904FF2717CF34AE003603D1 /* MBMockLocale.m in Sources */,\n\t\t\t\t3904FF2917CF34AE003603D1 /* NSLocale+UnitTestSwizzling.m in Sources */,\n\t\t\t\t31419D9717E08256007B02E2 /* ISO8601ForCocoaWeekDateTests.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\t31A271CA17CE9B5B00E3FA7D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 31A271B417CE9B5A00E3FA7D /* ISO8601ForCocoaTouch */;\n\t\t\ttargetProxy = 31A271C917CE9B5B00E3FA7D /* PBXContainerItemProxy */;\n\t\t};\n\t\t31AEAFE217546BC800BD292F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 31AEAFC817546BC800BD292F /* ISO8601ForCocoa */;\n\t\t\ttargetProxy = 31AEAFE117546BC800BD292F /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t31A271CF17CE9B5B00E3FA7D /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t31A271D017CE9B5B00E3FA7D /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t31AEAFE717546BC800BD292F /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t31AEAFE817546BC800BD292F /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t027E31CB1A52DFCE00802098 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\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_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\tINFOPLIST_FILE = ISO8601DateFormatter/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.boredzo.ISO8601;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t027E31CC1A52DFCE00802098 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = 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\tINFOPLIST_FILE = ISO8601DateFormatter/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = org.boredzo.ISO8601;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t31A271D517CE9B5B00E3FA7D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tDSTROOT = /tmp/ISO8601ForCocoaTouch.dst;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ISO8601ForCocoaTouch/ISO8601ForCocoaTouch-Prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"ISO8601_TESTING_PURPOSES_ONLY=1\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t31A271D617CE9B5B00E3FA7D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tDSTROOT = /tmp/ISO8601ForCocoaTouch.dst;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ISO8601ForCocoaTouch/ISO8601ForCocoaTouch-Prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"ISO8601_TESTING_PURPOSES_ONLY=1\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t31A271D717CE9B5B00E3FA7D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SDKROOT)/Developer/Library/Frameworks\\\"\",\n\t\t\t\t\t\"\\\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\\\"\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ISO8601ForCocoaTouch/ISO8601ForCocoaTouch-Prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"ISO8601_TESTING_PURPOSES_ONLY=1\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = \"ISO8601ForCocoaTouchTests/ISO8601ForCocoaTouchTests-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t31A271D817CE9B5B00E3FA7D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SDKROOT)/Developer/Library/Frameworks\\\"\",\n\t\t\t\t\t\"\\\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\\\"\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ISO8601ForCocoaTouch/ISO8601ForCocoaTouch-Prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"ISO8601_TESTING_PURPOSES_ONLY=1\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = \"ISO8601ForCocoaTouchTests/ISO8601ForCocoaTouchTests-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\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\t31AEAFED17546BC900BD292F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD)\";\n\t\t\t\t\"ARCHS[sdk=macosx*]\" = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\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__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = 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;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t31AEAFEE17546BC900BD292F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD)\";\n\t\t\t\t\"ARCHS[sdk=macosx*]\" = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\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__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t31AEAFF017546BC900BD292F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_GENERATE_TEST_COVERAGE_FILES = YES;\n\t\t\t\tGCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ISO8601ForCocoa/ISO8601ForCocoa-Prefix.pch\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t31AEAFF117546BC900BD292F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_GENERATE_TEST_COVERAGE_FILES = YES;\n\t\t\t\tGCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ISO8601ForCocoa/ISO8601ForCocoa-Prefix.pch\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t31AEAFF317546BC900BD292F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\\\"\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_GENERATE_TEST_COVERAGE_FILES = YES;\n\t\t\t\tGCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ISO8601ForCocoa/ISO8601ForCocoa-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"ISO8601ForCocoaTests/ISO8601ForCocoaTests-Info.plist\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t31AEAFF417546BC900BD292F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\\\"\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_GENERATE_TEST_COVERAGE_FILES = YES;\n\t\t\t\tGCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ISO8601ForCocoa/ISO8601ForCocoa-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"ISO8601ForCocoaTests/ISO8601ForCocoaTests-Info.plist\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t027E31CF1A52DFCE00802098 /* Build configuration list for PBXNativeTarget \"ISO8601\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t027E31CB1A52DFCE00802098 /* Debug */,\n\t\t\t\t027E31CC1A52DFCE00802098 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t31A271D917CE9B5B00E3FA7D /* Build configuration list for PBXNativeTarget \"ISO8601ForCocoaTouch\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t31A271D517CE9B5B00E3FA7D /* Debug */,\n\t\t\t\t31A271D617CE9B5B00E3FA7D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t31A271DA17CE9B5B00E3FA7D /* Build configuration list for PBXNativeTarget \"ISO8601ForCocoaTouchTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t31A271D717CE9B5B00E3FA7D /* Debug */,\n\t\t\t\t31A271D817CE9B5B00E3FA7D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t31AEAFC417546BC800BD292F /* Build configuration list for PBXProject \"ISO8601ForCocoa\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t31AEAFED17546BC900BD292F /* Debug */,\n\t\t\t\t31AEAFEE17546BC900BD292F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t31AEAFEF17546BC900BD292F /* Build configuration list for PBXNativeTarget \"ISO8601ForCocoa\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t31AEAFF017546BC900BD292F /* Debug */,\n\t\t\t\t31AEAFF117546BC900BD292F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t31AEAFF217546BC900BD292F /* Build configuration list for PBXNativeTarget \"ISO8601ForCocoaTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t31AEAFF317546BC900BD292F /* Debug */,\n\t\t\t\t31AEAFF417546BC900BD292F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 31AEAFC117546BC800BD292F /* Project object */;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoa.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:ISO8601ForCocoa.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoa.xcodeproj/xcshareddata/xcschemes/ISO8601DateFormatter.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0610\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"027E31B71A52DFCE00802098\"\n               BuildableName = \"ISO8601.framework\"\n               BlueprintName = \"ISO8601\"\n               ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"31AEAFDC17546BC800BD292F\"\n               BuildableName = \"ISO8601ForCocoaTests.xctest\"\n               BlueprintName = \"ISO8601ForCocoaTests\"\n               ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"31A271C317CE9B5B00E3FA7D\"\n               BuildableName = \"ISO8601ForCocoaTouchTests.xctest\"\n               BlueprintName = \"ISO8601ForCocoaTouchTests\"\n               ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"31AEAFDC17546BC800BD292F\"\n               BuildableName = \"ISO8601ForCocoaTests.xctest\"\n               BlueprintName = \"ISO8601ForCocoaTests\"\n               ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"31A271C317CE9B5B00E3FA7D\"\n               BuildableName = \"ISO8601ForCocoaTouchTests.xctest\"\n               BlueprintName = \"ISO8601ForCocoaTouchTests\"\n               ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"027E31B71A52DFCE00802098\"\n            BuildableName = \"ISO8601.framework\"\n            BlueprintName = \"ISO8601\"\n            ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"027E31B71A52DFCE00802098\"\n            BuildableName = \"ISO8601.framework\"\n            BlueprintName = \"ISO8601\"\n            ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"027E31B71A52DFCE00802098\"\n            BuildableName = \"ISO8601.framework\"\n            BlueprintName = \"ISO8601\"\n            ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoa.xcodeproj/xcshareddata/xcschemes/ISO8601ForCocoa.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0500\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"31AEAFC817546BC800BD292F\"\n               BuildableName = \"libISO8601ForCocoa.a\"\n               BlueprintName = \"ISO8601ForCocoa\"\n               ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"31AEAFDC17546BC800BD292F\"\n               BuildableName = \"ISO8601ForCocoaTests.xctest\"\n               BlueprintName = \"ISO8601ForCocoaTests\"\n               ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"31AEAFC817546BC800BD292F\"\n            BuildableName = \"libISO8601ForCocoa.a\"\n            BlueprintName = \"ISO8601ForCocoa\"\n            ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoa.xcodeproj/xcshareddata/xcschemes/ISO8601ForCocoaTouch.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0460\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"31A271B417CE9B5A00E3FA7D\"\n               BuildableName = \"libISO8601ForCocoaTouch.a\"\n               BlueprintName = \"ISO8601ForCocoaTouch\"\n               ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"31A271C317CE9B5B00E3FA7D\"\n               BuildableName = \"ISO8601ForCocoaTouchTests.xctest\"\n               BlueprintName = \"ISO8601ForCocoaTouchTests\"\n               ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"31A271C317CE9B5B00E3FA7D\"\n               BuildableName = \"ISO8601ForCocoaTouchTests.xctest\"\n               BlueprintName = \"ISO8601ForCocoaTouchTests\"\n               ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"31A271B417CE9B5A00E3FA7D\"\n            BuildableName = \"libISO8601ForCocoaTouch.a\"\n            BlueprintName = \"ISO8601ForCocoaTouch\"\n            ReferencedContainer = \"container:ISO8601ForCocoa.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/ISO8601ForCocoaCalendarDateTests.h",
    "content": "//\n//  ISO8601ForCocoaCalendarDateTests.h\n//  ISO8601ForCocoaCalendarDateTests\n//\n//  Created by Peter Hosey on 2013-05-27.\n//  Copyright (c) 2013–2015 Peter Hosey. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n\n//This should be set to 1 (actually, removed from all uses) after the dateComponentsFromString: methods are refactored to behave reasonably on their own, rather than as the implementation of the dateFromString: methods.\n//For example, “T22” currently returns mostly zero components, when it should return all but one undefined. The filling in of zeroes and the current date should happen on dateFromString:'s side. That refactor is on hold pending much more test coverage (especially of dateFromString: cases).\n#define POST_DATE_COMPONENTS_REFACTOR 0\n\n@interface ISO8601ForCocoaCalendarDateTests : XCTestCase\n\n- (void) testParsingDateInPacificStandardTime;\n- (void) testUnparsingDateInPacificStandardTime;\n\n- (void) testParsingDateInPacificDaylightTime;\n- (void) testUnparsingDateInPacificDaylightTime;\n\n//Test case for https://github.com/boredzo/iso-8601-date-formatter/issues/15\n- (void) testUnparsingDateAtRiskOfAccidentalPM;\n\n- (void) testParsingDateInGreenwichMeanTime;\n- (void) testUnparsingDateInGreenwichMeanTime;\n\n- (void) testParsingDateWithFractionOfSecondWithoutLosingPrecision;\n\n- (void) testParsingDateWithUnusualTimeSeparator;\n- (void) testUnparsingDateWithUnusualTimeSeparator;\n\n- (void) testParsingDateWithTimeZoneSeparator;\n- (void) testUnparsingDateWithTimeZoneSeparator;\n\n- (void) testParsingDateWithIncompleteTime;\n#if POST_DATE_COMPONENTS_REFACTOR\n- (void) testParsingDateWithTimeOnly;\n#endif\n\n- (void) testUnparsingDatesWithoutTime;\n\n//Test case for https://github.com/boredzo/iso-8601-date-formatter/issues/6\n- (void) testUnparsingDateInDaylightSavingTime;\n\n//Test case for https://github.com/boredzo/iso-8601-date-formatter/issues/3 and https://github.com/boredzo/iso-8601-date-formatter/issues/5\n- (void) testUnparsingDateWithinBritishSummerTimeAsUTC;\n\n//Test case for https://github.com/boredzo/iso-8601-date-formatter/pull/20\n- (void) testStrictModeRejectsSlashyDates;\n\n- (void) testParseNilIntoDateComponents;\n- (void) testParseNilIntoDate;\n\n- (void) testStringFromInapplicableObjectValues;\n\n- (void) testParsingDateWithSpaceInFrontOfItStrictly;\n- (void) testParsingDateWithSpaceInFrontOfItNonStrictly;\n\n- (void) testParsingSloppyDatesStrictly;\n\n- (void) testParsingDateFromSubstring;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/ISO8601ForCocoaCalendarDateTests.m",
    "content": "//\n//  ISO8601ForCocoaCalendarDateTests.m\n//  ISO8601ForCocoaCalendarDateTests\n//\n//  Created by Peter Hosey on 2013-05-27.\n//  Copyright (c) 2013–2015 Peter Hosey. All rights reserved.\n//\n\n//#import <XCTest/XCTest.h>\n#import \"ISO8601ForCocoaCalendarDateTests.h\"\n#import \"ISO8601DateFormatter.h\"\n#import \"NSLocale+UnitTestSwizzling.h\"\n#import \"ISO8601Testing.h\"\n#import \"PRHNamedCharacter.h\"\n#include <vis.h>\n\nstatic const NSTimeInterval gSecondsPerHour = 3600.0;\n\n@interface ISO8601ForCocoaCalendarDateTests ()\n\n- (void)        attemptToParseString:(NSString *)dateString\nexpectTimeIntervalSinceReferenceDate:(NSTimeInterval)expectedTimeIntervalSinceReferenceDate\n\t  expectTimeZoneWithHoursFromGMT:(NSTimeInterval)expectedHoursFromGMT;\n\n@end\n\n@implementation ISO8601ForCocoaCalendarDateTests\n{\n\tISO8601DateFormatter *_iso8601DateFormatter;\n}\n\n- (void) setUp {\n\t[super setUp];\n\n\t_iso8601DateFormatter = [[ISO8601DateFormatter alloc] init];\n}\n\n- (void) tearDown {\n\t_iso8601DateFormatter = nil;\n\n\t[super tearDown];\n}\n\n- (void)        attemptToParseString:(NSString *)dateString\nexpectTimeIntervalSinceReferenceDate:(NSTimeInterval)expectedTimeIntervalSinceReferenceDate\n\t  expectTimeZoneWithHoursFromGMT:(NSTimeInterval)expectedHoursFromGMT\n{\n\tconst NSTimeInterval expectedSecondsFromGMT = expectedHoursFromGMT * gSecondsPerHour;\n\n\tNSTimeZone *timeZone = nil;\n\tNSDate *date = [_iso8601DateFormatter dateFromString:dateString timeZone:&timeZone];\n\tXCTAssertNotNil(date, @\"Parsing a valid ISO 8601 calendar date should return an NSDate object\");\n\tXCTAssertNotNil(timeZone, @\"Parsing a valid ISO 8601 calendar date that specifies a time zone offset should return an NSTimeZone object\");\n\tXCTAssertEqualWithAccuracy([date timeIntervalSinceReferenceDate], expectedTimeIntervalSinceReferenceDate, 0.0001, @\"Date parsed from '%@' should be %f seconds since the reference date\", dateString, expectedTimeIntervalSinceReferenceDate);\n\tNSInteger secondsFromGMTForDate = [timeZone secondsFromGMTForDate:date];\n\tXCTAssertEqual(secondsFromGMTForDate, (NSInteger)expectedSecondsFromGMT, @\"Time zone parsed from '%@' should be %f seconds (%f hours) from GMT, not %ld seconds (%f hours)\", dateString, expectedSecondsFromGMT, expectedHoursFromGMT, secondsFromGMTForDate, secondsFromGMTForDate / gSecondsPerHour);\n}\n\n- (void) attemptToUnparseDateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)timeIntervalSinceReferenceDate\n                                                   timeZoneName:(NSString *)tzName\n\t\t\t                                   expectDateString:(NSString *)expectedDateString\n\t\t\t\t\t\t\t                        includeTime:(bool)includeTime\n{\n\tNSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate];\n\tNSTimeZone *timeZone = [NSTimeZone timeZoneWithName:tzName];\n\t_iso8601DateFormatter.includeTime = includeTime;\n\n\tNSString *dateString = [_iso8601DateFormatter stringFromDate:date timeZone:timeZone];\n\tXCTAssertNotNil(dateString, @\"Unparsing a date should return a string\");\n\tXCTAssertEqualObjects(dateString, expectedDateString, @\"Got unexpected output for date with time interval since reference date %f in time zone %@\", timeIntervalSinceReferenceDate, timeZone);\n}\n\n- (void) testParsingDateInPacificStandardTime {\n\tstatic NSString *const dateString = @\"2013-01-01T01:01:01-0800\";\n\tstatic NSTimeInterval const expectedTimeIntervalSinceReferenceDate = 378723661.0;\n\tstatic NSTimeInterval const expectedHoursFromGMT = -8.0;\n\n\t[self attemptToParseString:dateString expectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\nexpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n}\n\n- (void) testUnparsingDateInPacificStandardTime {\n\tNSTimeInterval timeIntervalSinceReferenceDate = 378723661.0;\n\tNSString *expectedDateString = @\"2013-01-01T01:01:01-0800\";\n\tNSString *tzName = @\"America/Los_Angeles\";\n\n\t[self attemptToUnparseDateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate\n\t\ttimeZoneName:tzName\n\t\texpectDateString:expectedDateString\n\t\tincludeTime:true];\n}\n\n- (void) testParsingDateInPacificDaylightTime {\n\tstatic NSString *const dateString = @\"2013-08-01T01:01:01-0700\";\n\tstatic NSTimeInterval const expectedTimeIntervalSinceReferenceDate = 397036861.0;\n\tstatic NSTimeInterval const expectedHoursFromGMT = -7.0;\n\n\t[self attemptToParseString:dateString expectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\nexpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n}\n\n- (void) testUnparsingDateInPacificDaylightTime {\n\tNSTimeInterval timeIntervalSinceReferenceDate = 397036861.0;\n\tNSString *expectedDateString = @\"2013-08-01T01:01:01-0700\";\n\tNSString *tzName = @\"America/Los_Angeles\";\n\n\t[self attemptToUnparseDateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate\n\t\ttimeZoneName:tzName\n\t\texpectDateString:expectedDateString\n\t\tincludeTime:true];\n}\n\n- (void) testUnparsingDateAtRiskOfAccidentalPM {\n    // swizzle [NSLocale currentLocale] with a method that returns a mock object which forces \"12 hour mode\" on the de_DE locale which naturally uses 24 hour formatting.\n    SwizzleClassMethod([NSLocale class], @selector(currentLocale), @selector(mockCurrentLocale));\n\n\t_iso8601DateFormatter.includeTime = YES;\n\tNSTimeInterval timeIntervalSinceReferenceDate = 397143300.0;\n\tNSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate];\n\tNSTimeZone *tz;\n\n\ttz = [NSTimeZone timeZoneWithName:@\"GMT\"];\n\tXCTAssertEqualObjects([_iso8601DateFormatter stringFromDate:date timeZone:tz], @\"2013-08-02T13:35:00Z\", @\"Unexpected date string for 13:35 on 2 August 2013 in London\");\n\n\ttz = [NSTimeZone timeZoneWithName:@\"Europe/London\"];\n\tXCTAssertEqualObjects([_iso8601DateFormatter stringFromDate:date timeZone:tz], @\"2013-08-02T14:35:00+0100\", @\"Unexpected date string for 13:35 on 2 August 2013 in London\");\n    \n    // swizzle back so only this test is affected\n    SwizzleClassMethod([NSLocale class], @selector(currentLocale), @selector(mockCurrentLocale));\n}\n\n- (void) testParsingDateInGreenwichMeanTime {\n\tstatic NSTimeInterval const expectedTimeIntervalSinceReferenceDate = 381373261.0;\n\tstatic NSTimeInterval const expectedHoursFromGMT = -0.0;\n\n\t[self attemptToParseString:@\"2013-02-01T01:01:01-0000\"\n\t\texpectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\n\t\texpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n\t[self attemptToParseString:@\"2013-02-01T01:01:01+0000\"\n\t\texpectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\n\t\texpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n\t[self attemptToParseString:@\"2013-02-01T01:01:01Z\"\n\t\texpectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\n\t\texpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n}\n\n- (void) testUnparsingDateInGreenwichMeanTime {\n\tNSTimeInterval timeIntervalSinceReferenceDate = 381373261.0;\n\tNSString *expectedDateString = @\"2013-02-01T01:01:01Z\";\n\tNSString *tzName = @\"GMT\";\n\n\t[self attemptToUnparseDateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate\n\t\ttimeZoneName:tzName\n\t\texpectDateString:expectedDateString\n\t\tincludeTime:true];\n}\n\n- (void) testParsingDateWithFractionOfSecondWithoutLosingPrecision {\n  NSDate *referenceDate = [_iso8601DateFormatter dateFromString:@\"2013-02-01T01:01:01-0000\"];\n  NSDate *referenceDateWithAddedMilliseconds = [_iso8601DateFormatter dateFromString:@\"2013-02-01T01:01:01.123-0000\"];\n  \n  NSTimeInterval differenceBetweenDates = [referenceDateWithAddedMilliseconds timeIntervalSinceDate:referenceDate];\n  \n  XCTAssertEqualWithAccuracy(differenceBetweenDates, 0.123, 1e-3, @\"Expected parsed dates to reflect difference in milliseconds\");\n}\n\n- (void) testParsingDateWithUnusualTimeSeparator {\n\t_iso8601DateFormatter.parsesStrictly = false;\n\t_iso8601DateFormatter.timeSeparator = SNOWMAN;\n\n\tstatic NSString *const dateString = @\"2013-01-01T01☃01☃01-0800\";\n\tstatic NSTimeInterval const expectedTimeIntervalSinceReferenceDate = 378723661.0;\n\tstatic NSTimeInterval const expectedHoursFromGMT = -8.0;\n\n\t[self attemptToParseString:dateString expectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\nexpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n}\n\n- (void) testUnparsingDateWithUnusualTimeSeparator {\n\t_iso8601DateFormatter.timeSeparator = SNOWMAN;\n\n\tNSTimeInterval timeIntervalSinceReferenceDate = 378723661.0;\n\tNSString *expectedDateString = @\"2013-01-01T01☃01☃01-0800\";\n\tNSString *tzName = @\"America/Los_Angeles\";\n\n\t[self attemptToUnparseDateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate\n\t                                                timeZoneName:tzName\n\t\t\t\t                                expectDateString:expectedDateString\n\t\t\t\t\t\t\t\t                     includeTime:true];\n}\n\n- (void) testParsingDateWithTimeZoneSeparator {\n\t_iso8601DateFormatter.timeZoneSeparator = SNOWMAN;\n\n\tstatic NSString *const dateString = @\"2013-08-01T01:01:01-07☃30\";\n\tstatic NSTimeInterval const expectedTimeIntervalSinceReferenceDate = 397038661.0;\n\tstatic NSTimeInterval const expectedHoursFromGMT = -7.5;\n\n\t[self attemptToParseString:dateString expectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\nexpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n}\n\n- (void) testUnparsingDateWithTimeZoneSeparator {\n\t_iso8601DateFormatter.timeZoneSeparator = ':';\n\n\tNSTimeInterval timeIntervalSinceReferenceDate = 378723661.0;\n\tNSString *expectedDateString = @\"2013-01-01T01:01:01-08:00\";\n\tNSString *tzName = @\"America/Los_Angeles\";\n\n\t[self attemptToUnparseDateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate\n\t                                                timeZoneName:tzName\n\t\t\t\t                                expectDateString:expectedDateString\n\t\t\t\t\t\t\t\t                     includeTime:true];\n}\n\n- (void) testParsingDateWithIncompleteTime {\n\tNSString *string;\n\tNSTimeInterval expectedTimeIntervalSinceReferenceDate;\n\tNSDate *date;\n\tNSDate *expectedDate;\n\n\tstring = @\"2013-09-10T21:41:05Z\";\n\texpectedTimeIntervalSinceReferenceDate = 400542065.0;\n\texpectedDate = [NSDate dateWithTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate];\n\tdate = [_iso8601DateFormatter dateFromString:string];\n\tXCTAssertEqualObjects(date, expectedDate, @\"Date %@ doesn't match string %@\", date, string);\n\n\tstring = @\"2013-09-10T21:41Z\";\n\texpectedTimeIntervalSinceReferenceDate = 400542060.0;\n\texpectedDate = [NSDate dateWithTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate];\n\tdate = [_iso8601DateFormatter dateFromString:string];\n\tXCTAssertEqualObjects(date, expectedDate, @\"Date %@ doesn't match string %@\", date, string);\n\n\tstring = @\"2013-09-10T21Z\";\n\texpectedTimeIntervalSinceReferenceDate = 400539600.0;\n\texpectedDate = [NSDate dateWithTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate];\n\tdate = [_iso8601DateFormatter dateFromString:string];\n\tXCTAssertEqualObjects(date, expectedDate, @\"Date %@ doesn't match string %@\", date, string);\n}\n\n#if POST_DATE_COMPONENTS_REFACTOR\n- (void) testParsingDateWithTimeOnly {\n\tNSString *timeOnlyString;\n\tNSTimeInterval expectedSecondsFromGMT;\n\tNSDateComponents *components;\n\tNSTimeZone *timeZone;\n\n\ttimeOnlyString = @\"T22:63:24-11:21\";\n\texpectedSecondsFromGMT = -11.0 * 3600.0 + -21.0 * 60.0;\n\tcomponents = [_iso8601DateFormatter dateComponentsFromString:timeOnlyString timeZone:&timeZone];\n\tXCTAssertEqual(components.hour, (NSInteger)22, @\"Expected hour of '%@' to be 22\", timeOnlyString);\n\tXCTAssertEqual(components.minute, (NSInteger)63, @\"Expected minute of '%@' to be 63\", timeOnlyString);\n\tXCTAssertEqual(components.second, (NSInteger)24, @\"Expected second of '%@' to be 24\", timeOnlyString);\n\tXCTAssertNotNil(timeZone, @\"Expected '%@' to yield a time zone\", timeOnlyString);\n\tXCTAssertEqual(timeZone.secondsFromGMT, (NSInteger)expectedSecondsFromGMT, @\"Expected time zone offset of '%@' to be 11 hours and 21 minutes west of GMT\", timeOnlyString);\n\n\ttimeOnlyString = @\"T22:63:24+50:70\";\n\texpectedSecondsFromGMT = +50.0 * 3600.0 + +70.0 * 60.0;\n\tcomponents = [_iso8601DateFormatter dateComponentsFromString:timeOnlyString timeZone:&timeZone];\n\tXCTAssertEqual(components.hour, (NSInteger)22, @\"Expected hour of '%@' to be 22\", timeOnlyString);\n\tXCTAssertEqual(components.minute, (NSInteger)63, @\"Expected minute of '%@' to be 63\", timeOnlyString);\n\tXCTAssertEqual(components.second, (NSInteger)24, @\"Expected second of '%@' to be 24\", timeOnlyString);\n\tXCTAssertNotNil(timeZone, @\"Expected '%@' to yield a time zone\", timeOnlyString);\n\tXCTAssertEqual(timeZone.secondsFromGMT, (NSInteger)expectedSecondsFromGMT, @\"Expected time zone offset of '%@' to be 50 hours and 70 minutes east of GMT\", timeOnlyString);\n\n\ttimeOnlyString = @\"T22:1:2\";\n\tcomponents = [_iso8601DateFormatter dateComponentsFromString:timeOnlyString];\n\tXCTAssertEqual(components.hour, (NSInteger)22, @\"Expected hour of '%@' to be 22\", timeOnlyString);\n\tXCTAssertEqual(components.minute, (NSInteger)1, @\"Expected minute of '%@' to be 1\", timeOnlyString);\n\tXCTAssertEqual(components.second, (NSInteger)2, @\"Expected second of '%@' to be 2\", timeOnlyString);\n\n\ttimeOnlyString = @\"T22:1Z\";\n\texpectedSecondsFromGMT = 0.0;\n\tcomponents = [_iso8601DateFormatter dateComponentsFromString:timeOnlyString timeZone:&timeZone];\n\tXCTAssertEqual(components.hour, (NSInteger)22, @\"Expected hour of '%@' to be 22\", timeOnlyString);\n\tXCTAssertEqual(components.minute, (NSInteger)1, @\"Expected minute of '%@' to be 1\", timeOnlyString);\n\tXCTAssertEqual(components.second, (NSInteger)NSUndefinedDateComponent, @\"Expected second of '%@' to be undefined\", timeOnlyString);\n\tXCTAssertEqual(timeZone.secondsFromGMT, (NSInteger)expectedSecondsFromGMT, @\"Expected time zone offset of '%@' to be zero (GMT)\", timeOnlyString);\n\n\ttimeOnlyString = @\"T22:\";\n\tcomponents = [_iso8601DateFormatter dateComponentsFromString:timeOnlyString];\n\tXCTAssertEqual(components.hour, (NSInteger)22, @\"Expected hour of '%@' to be 22\", timeOnlyString);\n\tXCTAssertEqual(components.minute, (NSInteger)NSUndefinedDateComponent, @\"Expected minute of '%@' to be undefined\", timeOnlyString);\n\tXCTAssertEqual(components.second, (NSInteger)NSUndefinedDateComponent, @\"Expected second of '%@' to be undefined\", timeOnlyString);\n\n\ttimeOnlyString = @\"T22\";\n\tcomponents = [_iso8601DateFormatter dateComponentsFromString:timeOnlyString];\n\tXCTAssertEqual(components.hour, (NSInteger)22, @\"Expected hour of '%@' to be 22\", timeOnlyString);\n\tXCTAssertEqual(components.minute, (NSInteger)NSUndefinedDateComponent, @\"Expected minute of '%@' to be undefined\", timeOnlyString);\n\tXCTAssertEqual(components.second, (NSInteger)NSUndefinedDateComponent, @\"Expected second of '%@' to be undefined\", timeOnlyString);\n\n\ttimeOnlyString = @\"T2\";\n\tcomponents = [_iso8601DateFormatter dateComponentsFromString:timeOnlyString];\n\tXCTAssertEqual(components.hour, (NSInteger)2, @\"Expected hour of '%@' to be 2\", timeOnlyString);\n\tXCTAssertEqual(components.minute, (NSInteger)NSUndefinedDateComponent, @\"Expected minute of '%@' to be undefined\", timeOnlyString);\n\tXCTAssertEqual(components.second, (NSInteger)NSUndefinedDateComponent, @\"Expected second of '%@' to be undefined\", timeOnlyString);\n\n\ttimeOnlyString = @\"T2:2:2\";\n\tcomponents = [_iso8601DateFormatter dateComponentsFromString:timeOnlyString];\n\tXCTAssertEqual(components.hour, (NSInteger)2, @\"Expected hour of '%@' to be 2\", timeOnlyString);\n\tXCTAssertEqual(components.minute, (NSInteger)2, @\"Expected minute of '%@' to be 2\", timeOnlyString);\n\tXCTAssertEqual(components.second, (NSInteger)2, @\"Expected second of '%@' to be 2\", timeOnlyString);\n}\n#endif\n\n- (void) testUnparsingDatesWithoutTime {\n\t_iso8601DateFormatter.includeTime = false;\n\n\tNSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];\n\tXCTAssertNotNil(calendar, @\"Couldn't create Gregorian calendar with which to set up date-unparsing tests\");\n\tNSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@\"en_US_POSIX\"];\n\tXCTAssertNotNil(calendar, @\"Couldn't create C/POSIX locale with which to set up date-unparsing tests\");\n\tcalendar.locale = locale;\n\n\tNSDateComponents *components = [NSDateComponents new];\n\tcomponents.month = 1;\n\tcomponents.day = 1;\n\tfor (NSUInteger year = 1990; year < 2020; ++year) {\n\t\tcomponents.year = year;\n\n\t\tNSDate *date = [calendar dateFromComponents:components];\n\t\tNSString *expectedString = [NSString stringWithFormat:@\"%04ld-%02ld-%02ld\", components.year, components.month, components.day];\n\t\tNSString *string = [_iso8601DateFormatter stringFromDate:date];\n\t\tXCTAssertEqualObjects(string, expectedString, @\"Got surprising string for January 1, %lu\", year);\n\t}\n}\n\n- (void) testUnparsingDateInDaylightSavingTime {\n\t_iso8601DateFormatter.defaultTimeZone = [NSTimeZone timeZoneWithName:@\"Europe/Prague\"];\n\t_iso8601DateFormatter.includeTime = YES;\n\n\tNSDate *date;\n\tNSString *string;\n\tNSString *expectedString;\n\n\tdate = [NSDate dateWithTimeIntervalSinceReferenceDate:365464800.0];\n\tstring = [_iso8601DateFormatter stringFromDate:date];\n\texpectedString = @\"2012-08-01T00:00:00+0200\";\n\tXCTAssertEqualObjects(string, expectedString, @\"Got wrong string for first date in DST in Prague #1 (check whether DST is included in TZ offset)\");\n\n\tdate = [NSDate dateWithTimeIntervalSinceReferenceDate:373417200.0];\n\tstring = [_iso8601DateFormatter stringFromDate:date];\n\texpectedString = @\"2012-11-01T00:00:00+0100\";\n\tXCTAssertEqualObjects(string, expectedString, @\"Got wrong string for second date in DST in Prague #1 (check whether DST is included in TZ offset)\");\n}\n\n- (void) testUnparsingDateWithinBritishSummerTimeAsUTC {\n\t_iso8601DateFormatter.includeTime = YES;\n\n\tNSDate *date;\n\tNSString *expectedString;\n\tNSString *string;\n\tNSTimeZone *UTCTimeZone = [NSTimeZone timeZoneWithName:@\"UTC\"];\n\n\tdate = [NSDate dateWithTimeIntervalSinceReferenceDate:354987473.0];\n\texpectedString = @\"2012-04-01T15:37:53Z\";\n\n\tstring = [_iso8601DateFormatter stringFromDate:date timeZone:UTCTimeZone];\n\tXCTAssertEqualObjects(string, expectedString, @\"Got wrong string for April date in UTC (check whether DST is included in TZ offset)\");\n\n\t_iso8601DateFormatter.defaultTimeZone = UTCTimeZone;\n\tstring = [_iso8601DateFormatter stringFromDate:date];\n\tXCTAssertEqualObjects(string, expectedString, @\"Got wrong string for April date in UTC-as-default (check whether DST is included in TZ offset)\");\n\n\t//Date https://github.com/boredzo/iso-8601-date-formatter/issues/3 was filed.\n\tdate = [NSDate dateWithTimeIntervalSinceReferenceDate:370245466.0];\n\texpectedString = @\"2012-09-25T05:57:46Z\";\n\n\tstring = [_iso8601DateFormatter stringFromDate:date];\n\tXCTAssertEqualObjects(string, expectedString, @\"Got wrong string for September date in UTC-as-default (check whether DST is included in TZ offset)\");\n}\n\n//https://github.com/boredzo/iso-8601-date-formatter/issues/31\n- (void) testParsingOctober9th2013 {\n\tNSDate *date = [_iso8601DateFormatter dateFromString:@\"2013-10-09T13:00:00Z\"];\n\t//#31 is a crash, so we shouldn't even get here.\n\tXCTAssertNotNil(date, @\"1 PM UTC on October 9th, 2013 should not be nil\");\n}\n\n// https://github.com/boredzo/iso-8601-date-formatter/issues/36\n- (void) testParsingFractionaryTimeZone\n{\n    _iso8601DateFormatter.includeTime = YES;\n    \n\tNSTimeZone *UTCTimeZone = [NSTimeZone timeZoneForSecondsFromGMT:gSecondsPerHour*-2.5];\n    \n\tNSDate *date= [NSDate dateWithTimeIntervalSinceReferenceDate:354987473.0];\n    \n\tNSString *expectedString = @\"2012-04-01T13:07:53-0230\";\n\n\tNSString *string = [_iso8601DateFormatter stringFromDate:date\n                                                    timeZone:UTCTimeZone];\n\tXCTAssertEqualObjects(string, expectedString, @\"Got wrong string for fractionary time zone\");\n}\n\n- (void) testStrictModeRejectsSlashyDates {\n\t_iso8601DateFormatter.parsesStrictly = true;\n\n\tNSString *dateString = @\"11/27/1982\";\n\tNSDate *date = [_iso8601DateFormatter dateFromString:dateString];\n\n\tXCTAssertNil(date, @\"Slashy date string '%@' should not have been parsed as anything, let alone %@\", dateString, date);\n}\n\n- (void) testParseNilIntoDateComponents {\n\tNSDateComponents *components = [_iso8601DateFormatter dateComponentsFromString:nil];\n\tXCTAssertNil(components, @\"dateComponentsFromString:nil should have returned nil, but returned %@\", components);\n}\n\n- (void) testParseNilIntoDate {\n\tNSDate *date = [_iso8601DateFormatter dateFromString:nil];\n\tXCTAssertNil(date, @\"dateFromString:nil returned should have returned nil, but returned %@\", date);\n}\n\n- (void) testStringFromInapplicableObjectValues {\n\tNSString *string = nil;\n\tXCTAssertNoThrow((string = [_iso8601DateFormatter stringForObjectValue:@42]), @\"stringForObjectValue:@42 threw an exception\");\n\tXCTAssertNil(string, @\"stringForObjectValue:@42 should have returned nil, but returned %@\", string);\n\tXCTAssertNoThrow((string = [_iso8601DateFormatter stringForObjectValue:[NSFileManager defaultManager]]), @\"stringForObjectValue:[NSFileManager] failed to throw an exception\");\n\tXCTAssertNil(string, @\"stringForObjectValue:[NSFileManager] should have returned nil, but returned %@\", string);\n\tXCTAssertNoThrow((string = [_iso8601DateFormatter stringForObjectValue:self]), @\"stringForObjectValue:%@ failed to throw an exception\", self);\n\tXCTAssertNil(string, @\"stringForObjectValue:self should have returned nil, but returned %@\", string);\n}\n\n- (void) testParsingDateWithSpaceInFrontOfItStrictly {\n\tNSString *dateString = @\"2013-09-12T23:40Z\";\n\t[self attemptToParseDateString:dateString prefixedWithString:@\" \"  strictMode:true expectedDate:nil];\n\t[self attemptToParseDateString:dateString prefixedWithString:@\"\\t\" strictMode:true expectedDate:nil];\n\t[self attemptToParseDateString:dateString prefixedWithString:@\"\\n\" strictMode:true expectedDate:nil];\n\t[self attemptToParseDateString:dateString prefixedWithString:@\"\\v\" strictMode:true expectedDate:nil];\n\t[self attemptToParseDateString:dateString prefixedWithString:@\"\\f\" strictMode:true expectedDate:nil];\n\t[self attemptToParseDateString:dateString prefixedWithString:@\"\\r\" strictMode:true expectedDate:nil];\n}\n- (void) testParsingDateWithSpaceInFrontOfItNonStrictly {\n\tNSString *dateString = @\"2013-09-12T23:40Z\";\n\tNSDate *expectedDate = [NSDate dateWithTimeIntervalSinceReferenceDate:400722000.0];\n\t[self attemptToParseDateString:dateString prefixedWithString:@\" \"  strictMode:false expectedDate:expectedDate];\n\t[self attemptToParseDateString:dateString prefixedWithString:@\"\\t\" strictMode:false expectedDate:expectedDate];\n\t[self attemptToParseDateString:dateString prefixedWithString:@\"\\n\" strictMode:false expectedDate:expectedDate];\n\t[self attemptToParseDateString:dateString prefixedWithString:@\"\\v\" strictMode:false expectedDate:expectedDate];\n\t[self attemptToParseDateString:dateString prefixedWithString:@\"\\f\" strictMode:false expectedDate:expectedDate];\n\t[self attemptToParseDateString:dateString prefixedWithString:@\"\\r\" strictMode:false expectedDate:expectedDate];\n}\n\n- (void) attemptToParseDateString:(NSString *)dateString\n\tprefixedWithString:(NSString *)prefix\n\tstrictMode:(bool)strict\n\texpectedDate:(NSDate *)expectedDate\n{\n\t_iso8601DateFormatter.parsesStrictly = strict;\n\tXCTAssertEqual(_iso8601DateFormatter.parsesStrictly, (typeof(_iso8601DateFormatter.parsesStrictly))strict, @\"Date formatter %@ blew off an attempt to set whether it parses strictly to %@\", _iso8601DateFormatter, strict ? @\"true\" : @\"false\");\n\n\tNSString *string = [prefix stringByAppendingString:dateString];\n\tNSDate *date = [_iso8601DateFormatter dateFromString:string];\n\tif (strict) {\n\t\tXCTAssertNil(date, @\"Strictly parsing string '%@' should have returned nil, not %@\", [self stringByEscapingString:string], date);\n\t} else {\n\t\tXCTAssertNotNil(date, @\"Parsing string '%@' with strict mode off should have returned a date, not nil\", [self stringByEscapingString:string]);\n\t\tXCTAssertEqualObjects(date, expectedDate, @\"Parsing string '%@' with strict mode off returned wrong date (expected %f, got %f)\", [self stringByEscapingString:string], expectedDate.timeIntervalSinceReferenceDate, date.timeIntervalSinceReferenceDate);\n\t}\n}\n\n- (NSString *) stringByEscapingString:(NSString *)string {\n\tNSData *unescapedData = [string dataUsingEncoding:NSUTF8StringEncoding];\n\tNSUInteger length = unescapedData.length;\n\n\t//NUL-terminate it.\n\t{\n\t\tNSMutableData *tempData = [unescapedData mutableCopy];\n\t\ttempData.length = length + 1;\n\t\tunescapedData = tempData;\n\t}\n\n\tNSMutableData *escapedData = [NSMutableData dataWithLength:length * 4UL + 1UL];\n\tescapedData.length = (NSUInteger)strvis(escapedData.mutableBytes, unescapedData.bytes, VIS_WHITE | VIS_CSTYLE);\n\treturn [[NSString alloc] initWithData:escapedData encoding:NSASCIIStringEncoding];\n}\n\n//This is really only here because test code counts toward code coverage.\n- (void) testStringEscaping {\n\tNSString *string;\n\tNSString *escapedString;\n\n\tstring = @\"foo\";\n\tescapedString = [self stringByEscapingString:string];\n\tXCTAssertEqualObjects(escapedString, string, @\"Escaping an all-letters string should effect no change, not produce '%@'\", escapedString);\n\n\tstring = @\"foo123\";\n\tescapedString = [self stringByEscapingString:string];\n\tXCTAssertEqualObjects(escapedString, string, @\"Escaping an alphanumeric string should effect no change, not produce '%@'\", escapedString);\n\n\tNSString *expectedString;\n\texpectedString = @\"\\\\t\\\\n\\\\v\\\\f\\\\r\";\n\tstring = @\"\\t\\n\\v\\f\\r\";\n\tescapedString = [self stringByEscapingString:string];\n\tXCTAssertEqualObjects(escapedString, expectedString, @\"Escaping a string of whitespace in order should produce escape sequences in order ('%@'), not '%@'\", expectedString, escapedString);\n}\n\n- (void) testParsingSloppyDatesStrictly {\n\t_iso8601DateFormatter.parsesStrictly = true;\n\n\tNSString *string;\n\tNSDate *date;\n\n\tstring = @\"130918\";\n\tdate = [_iso8601DateFormatter dateFromString:string];\n\tXCTAssertNil(date, @\"Parsing '%@' strictly should return nil, not %@ (%f)\", string, date, date.timeIntervalSinceReferenceDate);\n\n\tstring = @\"2013-0918\";\n\tdate = [_iso8601DateFormatter dateFromString:string];\n\tXCTAssertNil(date, @\"Parsing '%@' strictly should return nil, not %@ (%f)\", string, date, date.timeIntervalSinceReferenceDate);\n}\n\n- (void) testParsingDateFromSubstring {\n\tNSString *string;\n\tNSTimeInterval expectedTimeIntervalSinceReferenceDate;\n\tNSDate *expectedDate;\n\tNSTimeZone *expectedTimeZone;\n\tNSRange expectedRange;\n\tNSDate *date;\n\tNSTimeZone *timeZone;\n\tNSRange range;\n\n#define PREFIX @\" \\t\\t \"\n#define DATE @\"2013-09-18T04:18Z\"\n#define NOT_A_DATE @\"\\u2603\"\n#define SUFFIX @\" \\t\\t \"\n\n\tstring = PREFIX DATE;\n\texpectedTimeIntervalSinceReferenceDate = 401170680.0;\n\texpectedDate = [NSDate dateWithTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate];\n\texpectedTimeZone = [NSTimeZone timeZoneWithName:@\"UTC\"];\n\texpectedRange = (NSRange){ PREFIX.length, DATE.length };\n\tdate = [_iso8601DateFormatter dateFromString:string timeZone:&timeZone range:&range];\n\tXCTAssertEqualObjects(date, expectedDate, @\"Date from substring of '%@' should be %@ (%f), not %@ (%f) (%+f seconds difference)\", string, expectedDate, expectedTimeIntervalSinceReferenceDate, date, date.timeIntervalSinceReferenceDate, [date timeIntervalSinceDate:expectedDate]);\n\tXCTAssertEqualObjects(timeZone, expectedTimeZone, @\"Time zone from substring of '%@' should be %@, not %@\", string, expectedTimeZone, timeZone);\n\tISO8601AssertEqualRanges(range, expectedRange, @\"Range of date from substring of '%@' should be %@ ('%@'), not %@ ('%@')\", string, NSStringFromRange(expectedRange), [string substringWithRange:expectedRange], NSStringFromRange(range), [string substringWithRange:range]);\n\n\tstring = PREFIX DATE SUFFIX;\n\texpectedTimeIntervalSinceReferenceDate = 401170680.0;\n\texpectedDate = [NSDate dateWithTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate];\n\texpectedTimeZone = [NSTimeZone timeZoneWithName:@\"UTC\"];\n\texpectedRange = (NSRange){ PREFIX.length, DATE.length };\n\tdate = [_iso8601DateFormatter dateFromString:string timeZone:&timeZone range:&range];\n\tXCTAssertEqualObjects(date, expectedDate, @\"Date from substring of '%@' should be %@ (%f), not %@ (%f) (%+f seconds difference)\", string, expectedDate, expectedTimeIntervalSinceReferenceDate, date, date.timeIntervalSinceReferenceDate, [date timeIntervalSinceDate:expectedDate]);\n\tXCTAssertEqualObjects(timeZone, expectedTimeZone, @\"Time zone from substring of '%@' should be %@, not %@\", string, expectedTimeZone, timeZone);\n\tISO8601AssertEqualRanges(range, expectedRange, @\"Range of date from substring of '%@' should be %@ ('%@'), not %@ ('%@')\", string, NSStringFromRange(expectedRange), [string substringWithRange:expectedRange], NSStringFromRange(range), [string substringWithRange:range]);\n\n\tstring = DATE SUFFIX;\n\texpectedTimeIntervalSinceReferenceDate = 401170680.0;\n\texpectedDate = [NSDate dateWithTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate];\n\texpectedTimeZone = [NSTimeZone timeZoneWithName:@\"UTC\"];\n\texpectedRange = (NSRange){ 0, DATE.length };\n\tdate = [_iso8601DateFormatter dateFromString:string timeZone:&timeZone range:&range];\n\tXCTAssertEqualObjects(date, expectedDate, @\"Date from substring of '%@' should be %@ (%f), not %@ (%f) (%+f seconds difference)\", string, expectedDate, expectedTimeIntervalSinceReferenceDate, date, date.timeIntervalSinceReferenceDate, [date timeIntervalSinceDate:expectedDate]);\n\tXCTAssertEqualObjects(timeZone, expectedTimeZone, @\"Time zone from substring of '%@' should be %@, not %@\", string, expectedTimeZone, timeZone);\n\tISO8601AssertEqualRanges(range, expectedRange, @\"Range of date from substring of '%@' should be %@ ('%@'), not %@ ('%@')\", string, NSStringFromRange(expectedRange), [string substringWithRange:expectedRange], NSStringFromRange(range), [string substringWithRange:range]);\n\n\tstring = PREFIX NOT_A_DATE SUFFIX;\n\t//Note that timeZone and range are both set to previous results at this point. If dateFromString::: doesn't set them, that will cause a test failure.\n\texpectedTimeIntervalSinceReferenceDate = 0.0;\n\texpectedDate = nil;\n\texpectedTimeZone = nil;\n\texpectedRange = (NSRange){ NSNotFound, 0 };\n\tdate = [_iso8601DateFormatter dateFromString:string timeZone:&timeZone range:&range];\n\tXCTAssertNil(date, @\"Date from substring of '%@' should be nil, not %@ (%f)\", string, date, date.timeIntervalSinceReferenceDate);\n\tXCTAssertNil(timeZone, @\"Time zone from substring of '%@' should be nil, not %@\", string, timeZone);\n\tISO8601AssertEqualRanges(range, expectedRange, @\"Range of date from substring of '%@' should be %@ ('%@'), not %@ ('%@')\", string, NSStringFromRange(expectedRange), [string substringWithRange:expectedRange], NSStringFromRange(range), [string substringWithRange:range]);\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/ISO8601ForCocoaTests-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>org.boredzo.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</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": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/ISO8601ForCocoaTimeOnlyTests.h",
    "content": "//\n//  ISO8601ForCocoaTimeOnlyTests.h\n//  ISO8601ForCocoa\n//\n//  Created by Peter Hosey on 2013-09-17.\n//  Copyright (c) 2013 Peter Hosey. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n\n@interface ISO8601ForCocoaTimeOnlyTests : XCTestCase\n\n- (void) testParsingStringWithOnlyHourMinuteSecondZulu;\n- (void) testParsingStringWithOnlyHourMinuteZulu;\n- (void) testParsingStringWithOnlyHourMinuteSecondAndTimeZone;\n- (void) testParsingStringWithOnlyHourMinuteAndTimeZone;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/ISO8601ForCocoaTimeOnlyTests.m",
    "content": "//\n//  ISO8601ForCocoaTimeOnlyTests.m\n//  ISO8601ForCocoa\n//\n//  Created by Peter Hosey on 2013-09-17.\n//  Copyright (c) 2013 Peter Hosey. All rights reserved.\n//\n\n#import \"ISO8601ForCocoaTimeOnlyTests.h\"\n#import \"ISO8601DateFormatter.h\"\n\nstatic const NSTimeInterval gSecondsPerHour = 3600.0;\nstatic const NSTimeInterval gSecondsPerMinute = 60.0;\n\n@implementation ISO8601ForCocoaTimeOnlyTests\n{\n\tISO8601DateFormatter *_iso8601DateFormatter;\n}\n\n- (void) setUp {\n\t[super setUp];\n\n\t_iso8601DateFormatter = [[ISO8601DateFormatter alloc] init];\n}\n\n- (void) tearDown {\n\t_iso8601DateFormatter = nil;\n\n\t[super tearDown];\n}\n\n- (NSString *) dateStringWithHour:(NSTimeInterval)hour\n\tminute:(NSTimeInterval)minute\n\tsecond:(NSTimeInterval)second\n\ttimeZone:(NSTimeZone *)timeZone\n{\n\tNSString *format =\n\t\t  second > 0.0 ? @\"T%02g:%02g:%02g\"\n\t\t: minute > 0.0 ? @\"T%02g:%02g\"\n\t\t: hour > 0.0 ? @\"T%02g\"\n\t\t: @\"no non-zero components provided!\"\n\t;\n\tNSString *string = [NSString stringWithFormat:format, hour, minute, second];\n\tNSInteger secondsFromGMT = [timeZone secondsFromGMT];\n\tstring = secondsFromGMT == 0.0\n\t\t? [string stringByAppendingString:@\"Z\"]\n\t\t: [string stringByAppendingFormat:@\"%+03g%02g\", secondsFromGMT / gSecondsPerHour, fabs(fmod(secondsFromGMT / gSecondsPerMinute, gSecondsPerMinute))];\n\treturn string;\n}\n\n- (NSDate *) dateForTodayWithHour:(NSTimeInterval)hour\n\tminute:(NSTimeInterval)minute\n\tsecond:(NSTimeInterval)second\n\ttimeZone:(NSTimeZone *)timeZone\n{\n\tNSDate *now = [NSDate date];\n\tNSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];\n\tcalendar.timeZone = timeZone;\n\n\tNSDate *today = nil;\n\t[calendar rangeOfUnit:NSDayCalendarUnit startDate:&today interval:NULL forDate:now];\n\n\tNSDateComponents *components = [NSDateComponents new];\n\tcomponents.hour = (NSInteger)hour;\n\tcomponents.minute = (NSInteger)minute;\n\tcomponents.second = (NSInteger)second;\n\n\tNSDate *date = [calendar dateByAddingComponents:components toDate:today options:0];\n\treturn date;\n}\n\n- (void)        attemptToParseString:(NSString *)dateString\nexpectTimeIntervalSinceReferenceDate:(NSTimeInterval)expectedTimeIntervalSinceReferenceDate\n\t  expectTimeZoneWithHoursFromGMT:(NSTimeInterval)expectedHoursFromGMT\n{\n\tconst NSTimeInterval expectedSecondsFromGMT = expectedHoursFromGMT * gSecondsPerHour;\n\n\tNSTimeZone *timeZone = nil;\n\tNSDate *date = [_iso8601DateFormatter dateFromString:dateString timeZone:&timeZone];\n\tXCTAssertNotNil(date, @\"Parsing a valid ISO 8601 date string (%@) should return an NSDate object\", dateString);\n\tXCTAssertNotNil(timeZone, @\"Parsing a valid ISO 8601 date string (%@) that specifies a time zone offset should return an NSTimeZone object\", dateString);\n\tXCTAssertEqualWithAccuracy([date timeIntervalSinceReferenceDate], expectedTimeIntervalSinceReferenceDate, 0.0001, @\"Date parsed from '%@' should be %f seconds since the reference date (%f seconds difference)\", dateString, expectedTimeIntervalSinceReferenceDate, [date timeIntervalSinceDate:[NSDate dateWithTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate]]);\n\tNSInteger secondsFromGMTForDate = [timeZone secondsFromGMTForDate:date];\n\tXCTAssertEqual(secondsFromGMTForDate, (NSInteger)expectedSecondsFromGMT, @\"Time zone parsed from '%@' should be %f seconds (%f hours) from GMT, not %ld seconds (%f hours)\", dateString, expectedSecondsFromGMT, expectedHoursFromGMT, secondsFromGMTForDate, secondsFromGMTForDate / gSecondsPerHour);\n}\n\n/*TODO: These tests are inherently flaky.\n *You can't build a stable test on [NSDate date]—the results will vary according to the current date and are likely to vary by time zone.\n *These tests should probably use some sort of “default date” property of the date formatter, and the date formatter should fill in from the current date if and only if its default date is not set.\n *Additionally, the behavior we're testing is probably best modeled by dateComponentsFromString::, not dateFromString::, once dCFS:: is changed to return only the components that were specified by the string.\n */\n\n- (void) testParsingStringWithOnlyHourMinuteSecondZulu {\n\tNSTimeInterval hour = 14.0, minute = 23.0, second = 56.0;\n\tNSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@\"UTC\"];\n\tNSString *string = [self dateStringWithHour:hour minute:minute second:second timeZone:timeZone];\n\tNSTimeInterval timeInterval = [self dateForTodayWithHour:hour minute:minute second:second timeZone:timeZone].timeIntervalSinceReferenceDate;\n\t[self attemptToParseString:string\n\t\texpectTimeIntervalSinceReferenceDate:timeInterval\n\t\texpectTimeZoneWithHoursFromGMT:0.0];\n}\n\n- (void) testParsingStringWithOnlyHourMinuteZulu {\n\tNSTimeInterval hour = 14.0, minute = 23.0;\n\tNSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@\"UTC\"];\n\tNSString *string = [self dateStringWithHour:hour minute:minute second:0.0 timeZone:timeZone];\n\tNSTimeInterval timeInterval = [self dateForTodayWithHour:hour minute:minute second:0.0 timeZone:timeZone].timeIntervalSinceReferenceDate;\n\t[self attemptToParseString:string\n\t\texpectTimeIntervalSinceReferenceDate:timeInterval\n\t\texpectTimeZoneWithHoursFromGMT:0.0];\n}\n\n- (void) testParsingStringWithOnlyHourMinuteSecondAndTimeZone {\n\tNSTimeInterval hour = 14.0, minute = 23.0, second = 56.0;\n\tNSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:(NSInteger)(-8.0 * gSecondsPerHour)];\n\tNSString *string = [self dateStringWithHour:hour minute:minute second:second timeZone:timeZone];\n\tNSTimeInterval timeInterval = [self dateForTodayWithHour:hour minute:minute second:second timeZone:timeZone].timeIntervalSinceReferenceDate;\n\t[self attemptToParseString:string\n\t\texpectTimeIntervalSinceReferenceDate:timeInterval\n\t\texpectTimeZoneWithHoursFromGMT:-8.0];\n}\n\n- (void) testParsingStringWithOnlyHourMinuteAndTimeZone {\n\tNSTimeInterval hour = 14.0, minute = 23.0;\n\tNSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:(NSInteger)(-8.0 * gSecondsPerHour)];\n\tNSString *string = [self dateStringWithHour:hour minute:minute second:0.0 timeZone:timeZone];\n\tNSTimeInterval timeInterval = [self dateForTodayWithHour:hour minute:minute second:0.0 timeZone:timeZone].timeIntervalSinceReferenceDate;\n\t[self attemptToParseString:string\n\t\texpectTimeIntervalSinceReferenceDate:timeInterval\n\t\texpectTimeZoneWithHoursFromGMT:-8.0];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/ISO8601ForCocoaWeekDateTests.h",
    "content": "//\n//  ISO8601ForCocoaWeekDateTests.h\n//  ISO8601ForCocoa\n//\n//  Created by Peter Hosey on 2013-09-11.\n//  Copyright (c) 2013 Peter Hosey. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n\n@interface ISO8601ForCocoaWeekDateTests : XCTestCase\n\n- (void) testParsingDateInPacificStandardTime;\n- (void) testUnparsingDateInPacificStandardTime;\n\n- (void) testParsingDateInPacificDaylightTime;\n- (void) testUnparsingDateInPacificDaylightTime;\n\n//Test case for https://github.com/boredzo/iso-8601-date-formatter/issues/15\n- (void) testUnparsingDateAtRiskOfAccidentalPM;\n\n- (void) testParsingDateInGreenwichMeanTime;\n- (void) testUnparsingDateInGreenwichMeanTime;\n\n- (void) testParsingDateWithFractionOfSecondWithoutLosingPrecision;\n\n- (void) testParsingDateWithUnusualTimeSeparator;\n- (void) testUnparsingDateWithUnusualTimeSeparator;\n\n- (void) testParsingDateWithTimeZoneSeparator;\n- (void) testUnparsingDateWithTimeZoneSeparator;\n\n- (void) testParsingDateWithIncompleteTime;\n\n- (void) testUnparsingDateWithoutTime;\n\n//Test case for https://github.com/boredzo/iso-8601-date-formatter/issues/6\n- (void) testUnparsingDateInDaylightSavingTime;\n\n//Test case for https://github.com/boredzo/iso-8601-date-formatter/issues/3 and https://github.com/boredzo/iso-8601-date-formatter/issues/5\n- (void) testUnparsingDateWithinBritishSummerTimeAsUTC;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/ISO8601ForCocoaWeekDateTests.m",
    "content": "//\n//  ISO8601ForCocoaWeekDateTests.m\n//  ISO8601ForCocoa\n//\n//  Created by Peter Hosey on 2013-09-11.\n//  Copyright (c) 2013 Peter Hosey. All rights reserved.\n//\n\n#import \"ISO8601ForCocoaWeekDateTests.h\"\n#import \"ISO8601DateFormatter.h\"\n#import \"NSLocale+UnitTestSwizzling.h\"\n#import \"PRHNamedCharacter.h\"\n\nstatic const NSTimeInterval gSecondsPerHour = 3600.0;\n\n@interface ISO8601ForCocoaWeekDateTests ()\n\n- (void)        attemptToParseString:(NSString *)dateString\nexpectTimeIntervalSinceReferenceDate:(NSTimeInterval)expectedTimeIntervalSinceReferenceDate\n\t  expectTimeZoneWithHoursFromGMT:(NSTimeInterval)expectedHoursFromGMT;\n\n@end\n\n@implementation ISO8601ForCocoaWeekDateTests\n{\n\tISO8601DateFormatter *_iso8601DateFormatter;\n}\n\n- (void) setUp {\n\t[super setUp];\n\n\t_iso8601DateFormatter = [[ISO8601DateFormatter alloc] init];\n}\n\n- (void) tearDown {\n\t_iso8601DateFormatter = nil;\n\n\t[super tearDown];\n}\n\n- (void)        attemptToParseString:(NSString *)dateString\nexpectTimeIntervalSinceReferenceDate:(NSTimeInterval)expectedTimeIntervalSinceReferenceDate\n\t  expectTimeZoneWithHoursFromGMT:(NSTimeInterval)expectedHoursFromGMT\n{\n\tconst NSTimeInterval expectedSecondsFromGMT = expectedHoursFromGMT * gSecondsPerHour;\n\n\tNSTimeZone *timeZone = nil;\n\tNSDate *date = [_iso8601DateFormatter dateFromString:dateString timeZone:&timeZone];\n\tXCTAssertNotNil(date, @\"Parsing a valid ISO 8601 calendar date should return an NSDate object\");\n\tXCTAssertNotNil(timeZone, @\"Parsing a valid ISO 8601 calendar date that specifies a time zone offset should return an NSTimeZone object\");\n\tXCTAssertEqualWithAccuracy([date timeIntervalSinceReferenceDate], expectedTimeIntervalSinceReferenceDate, 0.0001, @\"Date parsed from '%@' (%@) should be %f seconds since the reference date (%@)\", dateString, date, expectedTimeIntervalSinceReferenceDate, [NSDate dateWithTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate]);\n\tNSInteger secondsFromGMTForDate = [timeZone secondsFromGMTForDate:date];\n\tXCTAssertEqual(secondsFromGMTForDate, (NSInteger)expectedSecondsFromGMT, @\"Time zone parsed from '%@' should be %f seconds (%f hours) from GMT, not %ld seconds (%f hours)\", dateString, expectedSecondsFromGMT, expectedHoursFromGMT, secondsFromGMTForDate, secondsFromGMTForDate / gSecondsPerHour);\n}\n\n- (void) attemptToUnparseDateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)timeIntervalSinceReferenceDate\n                                                   timeZoneName:(NSString *)tzName\n\t\t\t                                   expectDateString:(NSString *)expectedDateString\n\t\t\t\t\t\t\t                        includeTime:(bool)includeTime\n{\n\tNSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate];\n\tNSTimeZone *timeZone = [NSTimeZone timeZoneWithName:tzName];\n\n\t_iso8601DateFormatter.includeTime = includeTime;\n\t_iso8601DateFormatter.format = ISO8601DateFormatWeek;\n\n\tNSString *dateString = [_iso8601DateFormatter stringFromDate:date timeZone:timeZone];\n\tXCTAssertNotNil(dateString, @\"Unparsing a date should return a string\");\n\tXCTAssertEqualObjects(dateString, expectedDateString, @\"Got unexpected output for date with time interval since reference date %f in time zone %@\", timeIntervalSinceReferenceDate, timeZone);\n}\n\n- (void) testParsingDateInPacificStandardTime {\n\tstatic NSString *const dateString = @\"2007-W01-01T13:24:56-0800\";\n\tstatic NSTimeInterval const expectedTimeIntervalSinceReferenceDate = 189379496.0;\n\tstatic NSTimeInterval const expectedHoursFromGMT = -8.0;\n\n\t[self attemptToParseString:dateString expectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\nexpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n}\n\n- (void) testUnparsingDateInPacificStandardTime {\n\tNSTimeInterval timeIntervalSinceReferenceDate = 189379496.0;\n\tNSString *expectedDateString = @\"2007-W01-01T13:24:56-0800\";\n\tNSString *tzName = @\"America/Los_Angeles\";\n\n\t[self attemptToUnparseDateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate\n\t\ttimeZoneName:tzName\n\t\texpectDateString:expectedDateString\n\t\tincludeTime:true];\n}\n\n- (void) testParsingDateInPacificDaylightTime {\n\tstatic NSString *const dateString = @\"2007-W31-03T13:24:56-0700\";\n\tstatic NSTimeInterval const expectedTimeIntervalSinceReferenceDate = 207692696.0;\n\tstatic NSTimeInterval const expectedHoursFromGMT = -7.0;\n\n\t[self attemptToParseString:dateString expectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\nexpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n}\n\n- (void) testUnparsingDateInPacificDaylightTime {\n\tNSTimeInterval timeIntervalSinceReferenceDate = 207692696.0;\n\tNSString *expectedDateString = @\"2007-W31-03T13:24:56-0700\";\n\tNSString *tzName = @\"America/Los_Angeles\";\n\n\t[self attemptToUnparseDateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate\n\t\ttimeZoneName:tzName\n\t\texpectDateString:expectedDateString\n\t\tincludeTime:true];\n}\n\n- (void) testUnparsingDateAtRiskOfAccidentalPM {\n    // swizzle [NSLocale currentLocale] with a method that returns a mock object which forces \"12 hour mode\" on the de_DE locale which naturally uses 24 hour formatting.\n    SwizzleClassMethod([NSLocale class], @selector(currentLocale), @selector(mockCurrentLocale));\n\n\t_iso8601DateFormatter.includeTime = YES;\n\t_iso8601DateFormatter.format = ISO8601DateFormatWeek;\n\n\tNSTimeInterval timeIntervalSinceReferenceDate = 397143300.0;\n\tNSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate];\n\tNSTimeZone *tz;\n\n\ttz = [NSTimeZone timeZoneWithName:@\"GMT\"];\n\tXCTAssertEqualObjects([_iso8601DateFormatter stringFromDate:date timeZone:tz], @\"2013-W31-05T13:35:00Z\", @\"Unexpected date string for 13:35 on 2 August 2013 in London\");\n\n\ttz = [NSTimeZone timeZoneWithName:@\"Europe/London\"];\n\tXCTAssertEqualObjects([_iso8601DateFormatter stringFromDate:date timeZone:tz], @\"2013-W31-05T14:35:00+0100\", @\"Unexpected date string for 13:35 on 2 August 2013 in London\");\n\n    // swizzle back so only this test is affected\n    SwizzleClassMethod([NSLocale class], @selector(currentLocale), @selector(mockCurrentLocale));\n}\n\n- (void) testParsingDateInGreenwichMeanTime {\n\tstatic NSTimeInterval const expectedTimeIntervalSinceReferenceDate = 189350696.0;\n\tstatic NSTimeInterval const expectedHoursFromGMT = -0.0;\n\n\t[self attemptToParseString:@\"2007-W01-01T13:24:56-0000\"\n\t\texpectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\n\t\texpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n\t[self attemptToParseString:@\"2007-W01-01T13:24:56+0000\"\n\t\texpectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\n\t\texpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n\t[self attemptToParseString:@\"2007-W01-01T13:24:56Z\"\n\t\texpectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\n\t\texpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n}\n\n- (void) testUnparsingDateInGreenwichMeanTime {\n\tNSTimeInterval timeIntervalSinceReferenceDate = 189350696.0;\n\tNSString *expectedDateString = @\"2007-W01-01T13:24:56Z\";\n\tNSString *tzName = @\"GMT\";\n\n\t[self attemptToUnparseDateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate\n\t\ttimeZoneName:tzName\n\t\texpectDateString:expectedDateString\n\t\tincludeTime:true];\n}\n\n- (void) testParsingDateWithFractionOfSecondWithoutLosingPrecision {\n  NSDate *referenceDate = [_iso8601DateFormatter dateFromString:@\"2007-W01-01T13:24:56-0000\"];\n  NSDate *referenceDateWithAddedMilliseconds = [_iso8601DateFormatter dateFromString:@\"2007-W01-01T13:24:56.123-0000\"];\n\n  NSTimeInterval differenceBetweenDates = [referenceDateWithAddedMilliseconds timeIntervalSinceDate:referenceDate];\n\n  XCTAssertEqualWithAccuracy(differenceBetweenDates, 0.123, 1e-3, @\"Expected parsed dates to reflect difference in milliseconds\");\n}\n\n- (void) testParsingDateWithUnusualTimeSeparator {\n\t_iso8601DateFormatter.parsesStrictly = false;\n\t_iso8601DateFormatter.timeSeparator = SNOWMAN;\n\n\tstatic NSString *const dateString = @\"2007-W01-01T13☃24☃56-0800\";\n\tstatic NSTimeInterval const expectedTimeIntervalSinceReferenceDate = 189379496.0;\n\tstatic NSTimeInterval const expectedHoursFromGMT = -8.0;\n\n\t[self attemptToParseString:dateString expectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\nexpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n}\n\n- (void) testUnparsingDateWithUnusualTimeSeparator {\n\t_iso8601DateFormatter.timeSeparator = SNOWMAN;\n\n\tNSTimeInterval timeIntervalSinceReferenceDate = 189379496.0;\n\tNSString *expectedDateString = @\"2007-W01-01T13☃24☃56-0800\";\n\tNSString *tzName = @\"America/Los_Angeles\";\n\n\t[self attemptToUnparseDateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate\n\t                                                timeZoneName:tzName\n\t\t\t\t                                expectDateString:expectedDateString\n\t\t\t\t\t\t\t\t                     includeTime:true];\n}\n\n- (void) testParsingDateWithTimeZoneSeparator {\n\t_iso8601DateFormatter.timeZoneSeparator = SNOWMAN;\n\n\tstatic NSString *const dateString = @\"2007-W01-01T13:24:56-07☃30\";\n\tstatic NSTimeInterval const expectedTimeIntervalSinceReferenceDate = 189377696.0;\n\tstatic NSTimeInterval const expectedHoursFromGMT = -7.5;\n\n\t[self attemptToParseString:dateString expectTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate\nexpectTimeZoneWithHoursFromGMT:expectedHoursFromGMT];\n}\n\n- (void) testUnparsingDateWithTimeZoneSeparator {\n\t_iso8601DateFormatter.timeZoneSeparator = ':';\n\n\tNSTimeInterval timeIntervalSinceReferenceDate = 189379496.0;\n\tNSString *expectedDateString = @\"2007-W01-01T13:24:56-08:00\";\n\tNSString *tzName = @\"America/Los_Angeles\";\n\n\t[self attemptToUnparseDateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate\n\t                                                timeZoneName:tzName\n\t\t\t\t                                expectDateString:expectedDateString\n\t\t\t\t\t\t\t\t                     includeTime:true];\n}\n\n- (void) testParsingDateWithIncompleteTime {\n\tNSString *string;\n\tNSTimeInterval expectedTimeIntervalSinceReferenceDate;\n\tNSDate *date;\n\tNSDate *expectedDate;\n\n\tstring = @\"2007-W01-01T13:24:56Z\";\n\texpectedTimeIntervalSinceReferenceDate = 189350696.0;\n\texpectedDate = [NSDate dateWithTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate];\n\tdate = [_iso8601DateFormatter dateFromString:string];\n\tXCTAssertEqualObjects(date, expectedDate, @\"Parsing string %@ (expected %f); got date %@ (%f)\", string, expectedTimeIntervalSinceReferenceDate, date, date.timeIntervalSinceReferenceDate);\n\n\tstring = @\"2007-W01-01T13:24Z\";\n\texpectedTimeIntervalSinceReferenceDate = 189350640.0;\n\texpectedDate = [NSDate dateWithTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate];\n\tdate = [_iso8601DateFormatter dateFromString:string];\n\tXCTAssertEqualObjects(date, expectedDate, @\"Parsing string %@ (expected %f); got date %@ (%f)\", string, expectedTimeIntervalSinceReferenceDate, date, date.timeIntervalSinceReferenceDate);\n\n\tstring = @\"2007-W01-01T13Z\";\n\texpectedTimeIntervalSinceReferenceDate = 189349200.0;\n\texpectedDate = [NSDate dateWithTimeIntervalSinceReferenceDate:expectedTimeIntervalSinceReferenceDate];\n\tdate = [_iso8601DateFormatter dateFromString:string];\n\tXCTAssertEqualObjects(date, expectedDate, @\"Parsing string %@ (expected %f); got date %@ (%f)\", string, expectedTimeIntervalSinceReferenceDate, date, date.timeIntervalSinceReferenceDate);\n}\n\n- (void) testUnparsingDateWithoutTime {\n\t_iso8601DateFormatter.format = ISO8601DateFormatWeek;\n\t_iso8601DateFormatter.includeTime = false;\n\t_iso8601DateFormatter.defaultTimeZone = [NSTimeZone timeZoneWithName:@\"UTC\"];\n\n\tNSString *expectedString = @\"2007-W01-01\";\n\tNSTimeInterval timeIntervalSinceReferenceDate = 189302400.0;\n\tNSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate];\n\tNSString *string = [_iso8601DateFormatter stringFromDate:date];\n\tXCTAssertEqualObjects(string, expectedString, @\"Generated wrong week date string for %@ (%f)\", date, timeIntervalSinceReferenceDate);\n}\n\n//<rdar://problem/23248311>: As of 10.10.4, NSDateFormatter with format @\"YYYY-'W'ww-FF\" generates 2016-W01-05 for this date.\n- (void) testUnparsingDateWithoutTimeAtEndOf2015 {\n\t_iso8601DateFormatter.format = ISO8601DateFormatWeek;\n\t_iso8601DateFormatter.includeTime = false;\n\t_iso8601DateFormatter.defaultTimeZone = [NSTimeZone timeZoneWithName:@\"UTC\"];\n\n\tNSString *expectedString = @\"2015-W53-04\";\n\tNSTimeInterval timeIntervalSinceReferenceDate = 473241600.000000;\n\tNSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:timeIntervalSinceReferenceDate];\n\tNSString *string = [_iso8601DateFormatter stringFromDate:date];\n\tXCTAssertEqualObjects(string, expectedString, @\"Generated wrong week date string for %@ (%f)\", date, timeIntervalSinceReferenceDate);\n}\n\n- (void) testUnparsingDateInDaylightSavingTime {\n\t_iso8601DateFormatter.defaultTimeZone = [NSTimeZone timeZoneWithName:@\"Europe/Prague\"];\n\t_iso8601DateFormatter.includeTime = YES;\n\t_iso8601DateFormatter.format = ISO8601DateFormatWeek;\n\n\tNSDate *date;\n\tNSString *string;\n\tNSString *expectedString;\n\n\tdate = [NSDate dateWithTimeIntervalSinceReferenceDate:365464800.0];\n\tstring = [_iso8601DateFormatter stringFromDate:date];\n\texpectedString = @\"2012-W31-03T00:00:00+0200\";\n\tXCTAssertEqualObjects(string, expectedString, @\"Got wrong string for first date in DST in Prague #1 (check whether DST is included in TZ offset)\");\n\n\tdate = [NSDate dateWithTimeIntervalSinceReferenceDate:373417200.0];\n\tstring = [_iso8601DateFormatter stringFromDate:date];\n\texpectedString = @\"2012-W44-04T00:00:00+0100\";\n\tXCTAssertEqualObjects(string, expectedString, @\"Got wrong string for second date in DST in Prague #1 (check whether DST is included in TZ offset)\");\n}\n\n- (void) testUnparsingDateWithinBritishSummerTimeAsUTC {\n\t_iso8601DateFormatter.includeTime = YES;\n\t_iso8601DateFormatter.format = ISO8601DateFormatWeek;\n\n\tNSDate *date;\n\tNSString *expectedString;\n\tNSString *string;\n\tNSTimeZone *UTCTimeZone = [NSTimeZone timeZoneWithName:@\"UTC\"];\n\n\tdate = [NSDate dateWithTimeIntervalSinceReferenceDate:354987473.0];\n\texpectedString = @\"2012-W13-07T15:37:53Z\";\n\n\tstring = [_iso8601DateFormatter stringFromDate:date timeZone:UTCTimeZone];\n\tXCTAssertEqualObjects(string, expectedString, @\"Got wrong string for April date in UTC (check whether DST is included in TZ offset)\");\n\n\t_iso8601DateFormatter.defaultTimeZone = UTCTimeZone;\n\tstring = [_iso8601DateFormatter stringFromDate:date];\n\tXCTAssertEqualObjects(string, expectedString, @\"Got wrong string for April date in UTC-as-default (check whether DST is included in TZ offset)\");\n\n\t//Date https://github.com/boredzo/iso-8601-date-formatter/issues/3 was filed.\n\tdate = [NSDate dateWithTimeIntervalSinceReferenceDate:370245466.0];\n\texpectedString = @\"2012-W39-02T05:57:46Z\";\n\n\tstring = [_iso8601DateFormatter stringFromDate:date];\n\tXCTAssertEqualObjects(string, expectedString, @\"Got wrong string for September date in UTC-as-default (check whether DST is included in TZ offset)\");\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/ISO8601Testing.h",
    "content": "//\n//  ISO8601Testing.h\n//  ISO8601ForCocoa\n//\n//  Created by Peter Hosey on 2015-09-06.\n//  Copyright © 2015 Peter Hosey. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n//#import <XCTest/XCTest.h>\n\n#define ISO8601AssertEqualRanges(range1, range2, ...) \\\ndo { \\\n\tXCTAssertEqual((range1).location, (range2).location, __VA_ARGS__); \\\n\tXCTAssertEqual((range1).length, (range2).length, __VA_ARGS__); \\\n} while(0)\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/ISO8601Testing.m",
    "content": "//\n//  ISO8601Testing.m\n//  ISO8601ForCocoa\n//\n//  Created by Peter Hosey on 2015-09-06.\n//  Copyright © 2015 Peter Hosey. All rights reserved.\n//\n\n#import \"ISO8601Testing.h\"\n\n//Nothing here at this time.\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/MBMockLocale.h",
    "content": "//\n//  MBMockLocale.h\n//  ISO8601ForCocoa\n//\n//  Created by Matthias Bauch on 8/29/13.\n//  Copyright (c) 2013 Peter Hosey. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface MBMockLocale : NSObject\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/MBMockLocale.m",
    "content": "//\n//  MBMockLocale.m\n//  ISO8601ForCocoa\n//\n//  Created by Matthias Bauch on 8/29/13.\n//  Copyright (c) 2013 Peter Hosey. All rights reserved.\n//\n\n#import \"MBMockLocale.h\"\n\n@implementation MBMockLocale {\n    NSLocale *locale;\n}\n\n- (id)init {\n    self = [super init];\n    locale = [[NSLocale alloc] initWithLocaleIdentifier:@\"de_DE\"];\n    return self;\n}\n\n- (id)copyWithZone:(NSZone *)zone {\n    return [[[self class] allocWithZone:zone] init];\n}\n\n- (NSString *)localeIdentifier {\n    return [locale localeIdentifier];\n}\n\n- (id)objectForKey:(NSString *)key {\n    id object = [locale objectForKey:key];\n    return object;\n}\n\n- (NSDictionary *)_prefs {\n    NSMutableDictionary *prefs = [NSMutableDictionary dictionaryWithDictionary:[locale performSelector:@selector(_prefs)]];\n    [prefs setObject:@YES forKey:@\"AppleICUForce12HourTime\"];\n    return prefs;\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/NSLocale+UnitTestSwizzling.h",
    "content": "//\n//  NSLocale+UnitTestSwizzling.h\n//  ISO8601ForCocoa\n//\n//  Created by Matthias Bauch on 8/29/13.\n//  Copyright (c) 2013 Peter Hosey. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface NSLocale (TestSwizzling)\n\nvoid SwizzleClassMethod(Class c, SEL orig, SEL new);\n\n+ (NSLocale *)mockCurrentLocale;\n\n@end\n\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/NSLocale+UnitTestSwizzling.m",
    "content": "//\n//  NSLocale+UnitTestSwizzling.m\n//  ISO8601ForCocoa\n//\n//  Created by Matthias Bauch on 8/29/13.\n//  Copyright (c) 2013 Peter Hosey. All rights reserved.\n//\n\n#import \"NSLocale+UnitTestSwizzling.h\"\n#import \"MBMockLocale.h\"\n#import <objc/runtime.h>\n#import <objc/message.h>\n\n@implementation NSLocale (TestSwizzling)\n\nvoid SwizzleClassMethod(Class c, SEL orig, SEL new) {\n    \n    Method origMethod = class_getClassMethod(c, orig);\n    Method newMethod = class_getClassMethod(c, new);\n    \n    c = object_getClass((id)c);\n    \n    if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))\n        class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));\n    else\n        method_exchangeImplementations(origMethod, newMethod);\n}\n\n+ (NSLocale *)mockCurrentLocale {\n    return (NSLocale *)[[MBMockLocale alloc] init];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/PRHNamedCharacter.h",
    "content": "typedef NS_ENUM(unichar, PRHNamedCharacter) {\n\tSNOWMAN = 0x2603\n};\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTests/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTouch/ISO8601ForCocoaTouch-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'ISO8601ForCocoaTouch' target in the 'ISO8601ForCocoaTouch' project\n//\n\n#ifdef __OBJC__\n#\tdefine NS_ENABLE_CALENDAR_NEW_API 1\n#\timport <Foundation/Foundation.h>\n#endif\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTouchTests/ISO8601ForCocoaTouchTests-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>org.boredzo.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</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": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTouchTests/ISO8601MemoryWarningTests.h",
    "content": "//\n//  ISO8601MemoryWarningTests.h\n//  ISO8601ForCocoa\n//\n//  Created by Peter Hosey on 2013-10-02.\n//  Copyright (c) 2013 Peter Hosey. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n\n@interface ISO8601MemoryWarningTests : XCTestCase\n\n- (void) testMemoryWarning;\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTouchTests/ISO8601MemoryWarningTests.m",
    "content": "//\n//  ISO8601MemoryWarningTests.m\n//  ISO8601ForCocoa\n//\n//  Created by Peter Hosey on 2013-10-02.\n//  Copyright (c) 2013 Peter Hosey. All rights reserved.\n//\n\n#import \"ISO8601MemoryWarningTests.h\"\n\n#import \"ISO8601DateFormatter.h\"\n\n@interface ISO8601DateFormatter (ISO8601MemoryWarningTesting)\n+ (void) purgeGlobalCaches;\n@end\n\n#import <UIKit/UIKit.h>\n\n@implementation ISO8601MemoryWarningTests\n{\n\tISO8601DateFormatter *_iso8601DateFormatter;\n}\n\n- (void) setUp {\n\t[super setUp];\n\n\t_iso8601DateFormatter = [[ISO8601DateFormatter alloc] init];\n\n\t//Just in case this isn't the first test that this process has run…\n\t[ISO8601DateFormatter purgeGlobalCaches];\n}\n\n- (void) tearDown {\n\t_iso8601DateFormatter = nil;\n\n\t[super tearDown];\n}\n\n- (void) testMemoryWarning {\n\t//Now parse a bunch of dates to try to warm the caches.\n\t[_iso8601DateFormatter dateFromString:@\"2013-09-18T07:34:21-1200\"];\n\t[_iso8601DateFormatter dateFromString:@\"2013-09-18T07:34:21-0800\"];\n\t[_iso8601DateFormatter dateFromString:@\"2013-09-18T07:34:21-0130\"];\n\t[_iso8601DateFormatter dateFromString:@\"2013-09-18T07:34:21-0000\"];\n\t[_iso8601DateFormatter dateFromString:@\"2013-09-18T07:34:21+0000\"];\n\t[_iso8601DateFormatter dateFromString:@\"2013-09-18T07:34:21+0130\"];\n\t[_iso8601DateFormatter dateFromString:@\"2013-09-18T07:34:21+0800\"];\n\t[_iso8601DateFormatter dateFromString:@\"2013-09-18T07:34:21+1200\"];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/ISO8601ForCocoa/ISO8601ForCocoaTouchTests/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/LICENSE.txt",
    "content": "Copyright © 2006–2013 Peter Hosey\n All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\nRedistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\nRedistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\nNeither the name of Peter Hosey nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/Makefile",
    "content": "CLANG=/usr/bin/clang\nCC=$(CLANG)\nCFLAGS+=-std=c99 -g -Werror -Wmissing-field-initializers -Wreturn-type -Wmissing-braces -Wparentheses -Wswitch -Wunused-function -Wunused-label -Wunused-variable -Wunused-value -Wshadow -Wsign-compare -Wnewline-eof -Wshorten-64-to-32 -Wundeclared-selector -Wmissing-prototypes -Wformat -Wunknown-pragmas\nLDFLAGS+=-framework Foundation\n\nall: testparser unparse-weekdate unparse-ordinaldate unparse-date\ntest: all parser-test unparser-test\nanalysis: ISO8601DateFormatter-analysis.plist\n\nparser-test: testparser testparser.sh\n\t./testparser.sh\nunparser-test: testunparser.sh unparse-weekdate unparse-ordinaldate unparse-date\n\t./testunparser.sh > testunparser.out\n\tdiff -qs test_files/testunparser-expected.out testunparser.out\n\n.PHONY: all test analysis parser-test unparser-test\n\ntestparser: testparser.o ISO8601DateFormatter.o\n\ntestparser.sh: testparser.sh.in\n\tpython testparser.sh.py\n\nunparse-weekdate: unparse-weekdate.o ISO8601DateFormatter.o ISO8601DateFormatter.o\nunparse-ordinaldate: unparse-ordinaldate.o ISO8601DateFormatter.o ISO8601DateFormatter.o\nunparse-date: unparse-date.o ISO8601DateFormatter.o ISO8601DateFormatter.o\n\ntestunparsewithtime: testunparsewithtime.o ISO8601DateFormatter.o\n\nISO8601DateFormatter-analysis.plist: ISO8601DateFormatter.m\n\t$(CLANG) $^ --analyze -o /dev/null\n\ntimetrial: timetrial.o ISO8601DateFormatter.o\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/README.md",
    "content": "# ISO 8601: The only date format worth using\n\n[![Image: Status of most recent build and test attempt.](https://travis-ci.org/boredzo/iso-8601-date-formatter.png?branch=master)](https://travis-ci.org/boredzo/iso-8601-date-formatter)\n[![Image: Test code coverage percentage.](https://coveralls.io/repos/boredzo/iso-8601-date-formatter/badge.png?branch=master)](https://coveralls.io/r/boredzo/iso-8601-date-formatter?branch=master)\n\nObligatory relevant [xkcd](http://xkcd.com/):\n\n[![Seriously now. “ISO 8601 was published on 06/05/88 and most recently amended on 12/01/04.”](http://imgs.xkcd.com/comics/iso_8601.png)](http://xkcd.com/1179/)\n\n## How to use this code in your program\n\nAdd the source files to your project.\n\n### Parsing\n\nCreate an ISO 8601 date formatter, then call `[formatter dateFromString:myString]`. The method will return either an NSDate or `nil`.\n\nThere are a total of six parser methods. The one that contains the actual parser is `-[ISO8601DateFormatter dateComponentsFromString:timeZone:range:]`. The other five are based on this one.\n\nThe “`outTimeZone`” parameter, when not set to `NULL`, is a pointer to an `NSTimeZone *`variable. If the string specified a time zone, you'll receive the time zone object in that variable. If the string didn't specify a time zone, you'll receive `nil`.\n\nThe “`outRange`” parameter, when not set to `NULL`, is a pointer to `NSRange` storage. You will receive the range of the parsed substring in that storage.\n\n### Unparsing\n\nCreate an ISO 8601 date formatter, then call `[formatter stringFromDate:myDate]`. The method will return a string.\n\nThe formatter has several properties that control its behavior:\n\n* You can set the format of the resulting strings. By default, the formatter will generate calendar-date strings; your other options are week dates and ordinal dates.\n* You can set a default time zone; by default, it will use `[NSTimeZone defaultTimeZone]`.\n* You can enable a strict mode, wherein the formatter enforces sanity checks on the string. By default, the parser will afford you quite a bit of leeway.\n* You can set whether to include the time in the string, and if so, what hour-minute separator to use (default `':'`).\n\n## How to test that this code works\n\nUPDATE from the year 2013: Conversion from the old make-based test monsters to modern OCUnit-based tests is underway. Contributions of new and old test cases will be greatly appreciated.\n\n'make test' will perform all tests. If you want to perform only *some* tests:\n\n### Parsing\n\nType 'make parser-test'. make will build the test program (testparser), then invoke testparser.sh.py to generate testparser.sh. Then make will invoke testparser.sh, which will invoke the test program with various dates.\n\nIf you don't want to use my tests, 'make testparser' will create the test program without running it. You can then invoke testparser yourself with any date you want to. If it doesn't give you the result you expected, contact me, making sure to provide me with both the input and the output.\n\n### Unparsing\n\nType 'make unparser-test'. make will build the test programs, then invoke testunparser.sh. This shell script invokes each test program for -01-01 of every year from 1991 to 2010, writing the output to a file, and then runs diff -qs between that file (testunparser.out) and a file (testunparser-expected.out) containing known correct output. diff should report that the files are identical.\n\nThree test programs are included: unparse-date, unparse-weekdate, and unparse-ordinal date. If you don't want to use my tests, you can make these test programs separately. Each takes a date specified by ISO 8601 (parsed with my own ISO 8601 parser), and outputs a string that should represent the same date.\n\n## Notes\n\n### Version history\n\nThis version is 0.7. Changes from 0.6:\n\n- Cocoa Touch is now officially supported. 4bc0a08 5d95233\n- Added an Xcode project with static library targets. c847ddb 4bc0a08\n- `stringFromObjectValue:` now logs to the Console when you hand it a value that isn't an NSDate. Check your Console output after upgrading—you might have had a bug all this time without knowing! 4e05978\n- Added proper documentation in the header, compatible with [appledoc](http://gentlebytes.com/appledoc/). f17713f\n- Fixed nonsense date components/dates being returned when the input is not a valid date string. 288f757 93bb9df 0cb6442\n- Fixed a bug in unparsing where the time zone was wrong (#3). 0e355ee 8f8a2c3 (Thanks, Carl Lindberg)\n- Fixed a DST bug in unparsing where the time zone offset was computed in general rather than for the date being unparsed (#6). 5665132 (Thanks, Zachary West) 9e835c8 0d36057\n- Fixed AM/PM (or local equivalent) appearing in some locales on iOS devices (#15). 4bc0a08 3f697b5 249b3df (Thanks, Matthias Bauch)\n- Fixed another NSDateFormatter-rewriting-formats-to-12-hour-in-some-locales bug. 7c9907f (Thanks, Carl Lindberg)\n- (iOS) The class now purges its time zone cache automatically in response to a memory warning. You don't need to do that yourself, anymore, so the method to purge the caches is no longer public. 138e186 3224b32 a9b6973 3f3c3b8\n- Added support for strings that specify a fraction of a second. 1d3194b 0b0b1ea (Thanks, Luke Redpath)\n- Added support for non-ASCII time separator characters. 47d5035\n- Added support for a time zone separator. 8198f1b 3bd0c07 17c15ed (Thanks to Daniel Tull for the suggestion.)\n- Fixed the parser's response to being passed `nil`. 3c12abc 4980ee6\n- Fixed (I think) #5: dates being formatted with DST applied when they shouldn't. 7368fe8\n- Fixed `stringFromObjectValue:` to behave as NSFormatter's documentation says it should. 3846f80 9754438\n- Added real unit tests based on OCUnit. c847ddb aa1c2cb daf3cc9 9029991 d92aeb6 b412326 (Thanks, Luke Redpath) 45af6bd cfedd75 af0b93c 6a7fd88 9e835c8 9e835c8 0d36057 7368fe8 4bc0a08 3f697b5 8f8a2c3 51c1130 e888681 13a872d f49193c 10ed166 d5fdf51 4980ee6 3846f80 288f757 93bb9df daa45fb 2d61bd0 9f35c4a 8f95099 d62777a 138e186 2a63718\n- Fixed range computation for strings where the date portion ends with a 'Z'. 8f95099 efa095e 808e8c4\n- Fixed some formats with missing hyphens being wrongly accepted when strict mode is on. 9f35c4a c4e0f15\n- Fixed week date strings not having a 'T' between date and time. 7b6fd9f 6a1b66b\n- Fixed week date strings having wrong time zones. 9f6af7c\n- Strings that specify intervals (as specified by ISO 8601) are now explicitly rejected, at least for now (#20). 6d539db 51c1130 bf6a2db 6aef760 (Thanks, Blake Watters)\n- `ISO8601DefaultTimeSeparatorCharacter` is now declared as `const`. I hope none of you were relying on changing that. db9877c\n- Upgraded this README to Markdown. 103f666 fbd34b2 ebbf65a c0b9609\n- Added the above xkcd comic. fbd34b2 63ba50a da3ed65\n- Some light modernization (#25, #28). cdec3e9 8df32fd bb7c5c9\n\nChanges in 0.6 from 0.5:\n\n* When not set to strict parsing, allow a space before the time-zone specification, for greater compatibility with NSDate output (`description`) and input (`dateWithString:`). 27603efc8a77\n* Bug fix: We no longer try to format the formatter. 83415de9f527\n* Bug fix: Hours are now zero-padded correctly ([#4](https://bitbucket.org/boredzo/iso-8601-parser-unparser/issue/4/time-zones-are-emitted-without-leading)). a5608e189ebe af0c6b397428\n* Fixed many various compiler warnings. Some fixes contributed by Sparks. 8be3d6f7c6f2 78ae31de2170 68dc351e9fdb e7ea87db8621 873f499ae6db\n* Now 75 times faster. 6a023812bd2b 05dc35d6b505 3b2225e0ce8c d59720ad015a 10f526956963 297b8dae4095 796be11aa596 cadf0f0c8199 61d2959c6921\n* iOS users can now tell the ISO 8601 date formatter class to drop its caches (which you should do when you receive a memory warning). 2bb1725914b1\n* Added a couple of command-line options to the calendar-format-unparser test tool. c644aadb2b14\n* The parser test tool now displays parsed dates in GMT rather than the local time zone. 788c1455ecb1\n* Added a test tool to test unparsing with the time included. a89a9a8b3d61\n* You can now “make analysis” to run the Clang Static Analyzer on the date formatter. b3dd33841f42\n* The test tools are now built using Clang. 0723d3aa6596\n\nChanges in 0.5 from 0.4:\n\n* Rewrote as an NSFormatter subclass using NSCalendar.\n  * Making it a formatter makes it much easier to use with Bindings.\n  * Using NSCalendar means we're no longer using NSCalendarDate, which Apple has said they will deprecate at some point.\n* Fixed a bug in week date generation: One subtraction could give a negative result, which was a problem because my implementation of the algorithm used unsigned integers. I've changed it to use signed integers, so the result truly is negative now. I also added a test case for this.\n\nChanges in 0.4 from 0.3:\n\n* Added the ability to use a time separator other than ':'.\n\nChanges in 0.3 from 0.2:\n\n* Colin Barrett noticed that I used `%m` instead of `%M` when creating the time strings. Oops.\n* Colin also noticed that I had the `?:` in `ISO8601DateStringWithTime:` the wrong way around. Oops again.\n\nChanges in 0.2 from 0.1:\n\n* The unparser is new. The  has been munged to allow both components together, \n* The parser has not changed.\n\n## Implementation details\n### Parsing\n\nWhitespace before a date, and anything after a date, is ignored. Thus, \"    T23 and all's well\" is a valid date for the purpose of this method. (Yes, T23 is a valid ISO 8601 date. It means 23:00:00, or 11 PM.)\n\nAll of the frills of ISO 8601 are supported, except for extended dates (years longer than 4 digits). Specifically, you can use week-based dates (2006-W2 for the second week of 2006), ordinal dates (2006-365 for December 31), decimal minutes (11:30.5 == 11:30:30), and decimal seconds (11:30:10.5). All methods of specifying a time zone are supported.\n\nISO 8601 leaves quite a bit up to the parties exchanging dates. I hope I've chosen reasonable defaults. For example (note that I'm writing this on 2006-02-24):\n\n* If the month or month and date are missing, 1 is assumed. \"2006\" == \"2006-01-01\".\n* If the year or year and month are missing, the current ones are assumed. \"--02-01\" == \"2006-02-01\". \"---28\" == \"2006-02-28\".\n* In the case of week-based dates, with  the day missing, this implementation returns the first day of that week: 2006-W1 is 2006-01-01, 2006-W2 is 2006-01-08, etc.\n* For any date without a time, midnight on that date is used.\n* ISO 8601 permits the choice of either T0 or T24 for midnight. This implementation uses T0. T24 will get you T0 on the following day.\n* If no time-zone is specified, local time (as returned by [NSTimeZone localTimeZone]) is used.\n\nWhen a date is parsed that has a year but no century, this implementation adds the current century.\n\nThe implementation is tolerant of out-of-range numbers. For example, \"2005-13-40T24:62:89\" == 1:02 AM on 2006-02-10. Notice that the month (13 > 12), date (40 > 31), hour (24 > 23), minute (62 > 59), and second (89 > 59) are all out-of-range.\n\nAs mentioned above, there is a \"strict\" mode that enforces sanity checks. In particular, the date must be the entire contents of the string, and numbers are range-checked. If you have any suggestions on how to make this mode more strict, please file an enhancement request in the Issues section.\n\n### Unparsing\n\nI use [Rick McCarty's algorithm for converting calendar dates to week dates](http://lachy.id.au/dev/script/examples/datetime/ISOwdALG.txt), slightly tweaked.\n\n## Bugs\n\n### Parsing\n\n* This method won't extract a date from just anywhere in a string, only immediately after the start of the string (or any leading whitespace). There are two solutions: either require you to invoke the parser on a string that is only an ISO 8601 date, with nothing before or after (bad for parsing purposes), or make the parser able to find an ISO 8601 date as a substring. I won't do the first one, and barring a patch, I probably won't do the second one either.\n\n* Date ranges (also specified by ISO 8601) are not supported; this method will only return one date. To handle ranges would require at least one more method.\n\n* There is no method to analyze a date string and tell you what was found in it (year, month, week, day, ordinal day, etc.). Feel free to submit a patch.\n\n## Copyright\n\nThis code is copyright 2006–2013 Peter Hosey. It is under the BSD license; see LICENSE.txt for the full text of the license.\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/test_files/2005-2006.txt",
    "content": "   December 2005\n M Tu  W Th  F  S  S \n          1  2  3  4 \n 5  6  7  8  9 10 11 \n12 13 14 15 16 17 18 \n19 20 21 22 23 24 25 \n26 27 28 29 30 31\n\n    January 2006\n M Tu  W Th  F  S  S \n                   1 <- NOT W01\n 2  3  4  5  6  7  8 <- W01\n 9 10 11 12 13 14 15 \n16 17 18 19 20 21 22 \n23 24 25 26 27 28 29 \n30 31\n\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/test_files/2005.txt",
    "content": "\t  2005\n\n      January              \n CW Mo Tu We Th Fr Sa Su   \n 53                 1  2   \n 01  3  4  5  6  7  8  9   \n 02 10 11 12 13 14 15 16   \n 03 17 18 19 20 21 22 23   \n 04 24 25 26 27 28 29 30   \n 05 31                                             \n   \n         February       \n CW Mo Tu We Th Fr Sa Su\n 05     1  2  3  4  5  6\n 06  7  8  9 10 11 12 13\n 07 14 15 16 17 18 19 20\n 08 21 22 23 24 25 26 27\n 09 28                  \n   \n          March\n CW Mo Tu We Th Fr Sa Su\n 09     1  2  3  4  5  6\n 10  7  8  9 10 11 12 13\n 11 14 15 16 17 18 19 20\n 12 21 22 23 24 25 26 27\n 13 28 29 30 31         \n   \n          April            \n CW Mo Tu We Th Fr Sa Su   \n 13              1  2  3   \n 14  4  5  6  7  8  9 10   \n 15 11 12 13 14 15 16 17   \n 16 18 19 20 21 22 23 24   \n 17 25 26 27 28 29 30      \n                                                   \n           May          \n CW Mo Tu We Th Fr Sa Su\n 17                    1\n 18  2  3  4  5  6  7  8\n 19  9 10 11 12 13 14 15\n 20 16 17 18 19 20 21 22\n 21 23 24 25 26 27 28 29\n 22 30 31               \n   \n           June\n CW Mo Tu We Th Fr Sa Su\n 22        1  2  3  4  5\n 23  6  7  8  9 10 11 12\n 24 13 14 15 16 17 18 19\n 25 20 21 22 23 24 25 26\n 26 27 28 29 30         \n   \n           July            \n CW Mo Tu We Th Fr Sa Su   \n 26              1  2  3   \n 27  4  5  6  7  8  9 10   \n 28 11 12 13 14 15 16 17   \n 29 18 19 20 21 22 23 24   \n 30 25 26 27 28 29 30 31   \n                                                                           \n          August        \n CW Mo Tu We Th Fr Sa Su\n 31  1  2  3  4  5  6  7\n 32  8  9 10 11 12 13 14\n 33 15 16 17 18 19 20 21\n 34 22 23 24 25 26 27 28\n 35 29 30 31            \n   \n        September\n CW Mo Tu We Th Fr Sa Su\n 35           1  2  3  4\n 36  5  6  7  8  9 10 11\n 37 12 13 14 15 16 17 18\n 38 19 20 21 22 23 24 25\n 39 26 27 28 29 30      \n   \n         October           \n CW Mo Tu We Th Fr Sa Su   \n 39                 1  2   \n 40  3  4  5  6  7  8  9   \n 41 10 11 12 13 14 15 16   \n 42 17 18 19 20 21 22 23   \n 43 24 25 26 27 28 29 30   \n 44 31                                                                     \n   \n         November       \n CW Mo Tu We Th Fr Sa Su\n 44     1  2  3  4  5  6\n 45  7  8  9 10 11 12 13\n 46 14 15 16 17 18 19 20\n 47 21 22 23 24 25 26 27\n 48 28 29 30            \n   \n         December\n CW Mo Tu We Th Fr Sa Su\n 48           1  2  3  4\n 49  5  6  7  8  9 10 11\n 50 12 13 14 15 16 17 18\n 51 19 20 21 22 23 24 25\n 52 26 27 28 29 30 31   \n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/test_files/2006.txt",
    "content": ""
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/test_files/2009-2010.txt",
    "content": "   December 2009\n M Tu  W Th  F  S  S \n    1  2  3  4  5  6 \n 7  8  9 10 11 12 13 \n14 15 16 17 18 19 20 \n21 22 23 24 25 26 27 \n28 29 30 31      \n\n    January 2010\n M Tu  W Th  F  S  S \n             1  2  3 \n 4  5  6  7  8  9 10 \n11 12 13 14 15 16 17 \n18 19 20 21 22 23 24 \n25 26 27 28 29 30 31 \n\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/test_files/januaries.txt",
    "content": "     January 1991                       January 2001\n Mo Tu We Th Fr Sa Su CW            Mo Tu We Th Fr Sa Su CW\n     1  2  3  4  5  6 53/1 #W01-02   1  2  3  4  5  6  7 01   #W01-01\n  7  8  9 10 11 12 13 02             8  9 10 11 12 13 14 02  \n 14 15 16 17 18 19 20 03            15 16 17 18 19 20 21 03  \n 21 22 23 24 25 26 27 04            22 23 24 25 26 27 28 04  \n 28 29 30 31          05            29 30 31             05  \n                                                                     \n     January 1992                       January 2002                 \n Mo Tu We Th Fr Sa Su CW            Mo Tu We Th Fr Sa Su CW  \n        1  2  3  4  5 53/1 #W01-03      1  2  3  4  5  6 53/1 #W01-02\n  6  7  8  9 10 11 12 02             7  8  9 10 11 12 13 02  \n 13 14 15 16 17 18 19 03            14 15 16 17 18 19 20 03  \n 20 21 22 23 24 25 26 04            21 22 23 24 25 26 27 04  \n 27 28 29 30 31       05            28 29 30 31          05           \n\n     January 1993                       January 2003                 \n Mo Tu We Th Fr Sa Su CW            Mo Tu We Th Fr Sa Su CW  \n              1  2  3 53/0 #W53-05         1  2  3  4  5 53/1 #W01-03\n  4  5  6  7  8  9 10 01             6  7  8  9 10 11 12 02  \n 11 12 13 14 15 16 17 02            13 14 15 16 17 18 19 03  \n 18 19 20 21 22 23 24 03            20 21 22 23 24 25 26 04  \n 25 26 27 28 29 30 31 04            27 28 29 30 31       05          \n\n     January 1994                       January 2004                 \n Mo Tu We Th Fr Sa Su CW            Mo Tu We Th Fr Sa Su CW  \n                 1  2 52/0 #W52-06            1  2  3  4 53/1 #W01-04\n  3  4  5  6  7  8  9 01             5  6  7  8  9 10 11 02  \n 10 11 12 13 14 15 16 02            12 13 14 15 16 17 18 03  \n 17 18 19 20 21 22 23 03            19 20 21 22 23 24 25 04  \n 24 25 26 27 28 29 30 04            26 27 28 29 30 31    05          \n 31                   05\n\n     January 1995                       January 2005                 \n Mo Tu We Th Fr Sa Su CW            Mo Tu We Th Fr Sa Su CW  \n                    1 52/0 #W52-07                  1  2 53/0 #W53-06\n  2  3  4  5  6  7  8 01             3  4  5  6  7  8  9 01  \n  9 10 11 12 13 14 15 02            10 11 12 13 14 15 16 02  \n 16 17 18 19 20 21 22 03            17 18 19 20 21 22 23 03  \n 23 24 25 26 27 28 29 04            24 25 26 27 28 29 30 04  \n 30 31                05            31                   05          \n\n     January 1996                       January 2006                 \n Mo Tu We Th Fr Sa Su CW            Mo Tu We Th Fr Sa Su CW  \n  1  2  3  4  5  6  7 01   #W01-01                     1 52/0 #W52-07\n  8  9 10 11 12 13 14 02             2  3  4  5  6  7  8 01  \n 15 16 17 18 19 20 21 03             9 10 11 12 13 14 15 02  \n 22 23 24 25 26 27 28 04            16 17 18 19 20 21 22 03  \n 29 30 31             05            23 24 25 26 27 28 29 04  \n                                    30 31                05          \n\n     January 1997                       January 2007                 \n Mo Tu We Th Fr Sa Su CW            Mo Tu We Th Fr Sa Su CW  \n        1  2  3  4  5 53/1 #W01-03   1  2  3  4  5  6  7 01   #W01-01\n  6  7  8  9 10 11 12 02             8  9 10 11 12 13 14 02  \n 13 14 15 16 17 18 19 03            15 16 17 18 19 20 21 03  \n 20 21 22 23 24 25 26 04            22 23 24 25 26 27 28 04  \n 27 28 29 30 31       05            29 30 31             05          \n\n     January 1998                       January 2008                 \n Mo Tu We Th Fr Sa Su CW            Mo Tu We Th Fr Sa Su CW  \n           1  2  3  4 53/1 #W01-04      1  2  3  4  5  6 53/1 #W01-02\n  5  6  7  8  9 10 11 02             7  8  9 10 11 12 13 02  \n 12 13 14 15 16 17 18 03            14 15 16 17 18 19 20 03  \n 19 20 21 22 23 24 25 04            21 22 23 24 25 26 27 04  \n 26 27 28 29 30 31    05            28 29 30 31          05          \n\n     January 1999                       January 2009                 \n Mo Tu We Th Fr Sa Su CW            Mo Tu We Th Fr Sa Su CW  \n              1  2  3 53/0 #W53-05            1  2  3  4 53/1 #W01-04\n  4  5  6  7  8  9 10 01             5  6  7  8  9 10 11 02  \n 11 12 13 14 15 16 17 02            12 13 14 15 16 17 18 03  \n 18 19 20 21 22 23 24 03            19 20 21 22 23 24 25 04  \n 25 26 27 28 29 30 31 04            26 27 28 29 30 31    05          \n\n     January 2000                       January 2010                 \n Mo Tu We Th Fr Sa Su CW            Mo Tu We Th Fr Sa Su CW  \n                 1  2 52/0 #W52-06               1  2  3 53/0 #W53-05\n  3  4  5  6  7  8  9 01             4  5  6  7  8  9 10 01\n 10 11 12 13 14 15 16 02            11 12 13 14 15 16 17 02\n 17 18 19 20 21 22 23 03            18 19 20 21 22 23 24 03\n 24 25 26 27 28 29 30 04            25 26 27 28 29 30 31 04          \n 31                   05\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/test_files/januaries3.txt",
    "content": "\n     January 1991\n Mo Tu We Th Fr Sa Su CW\n     1  2  3  4  5  6 53/1\n  7  8  9 10 11 12 13 02\n 14 15 16 17 18 19 20 03\n 21 22 23 24 25 26 27 04\n 28 29 30 31          05\n                        \n\n     January 1992\n Mo Tu We Th Fr Sa Su CW\n        1  2  3  4  5 53/1\n  6  7  8  9 10 11 12 02\n 13 14 15 16 17 18 19 03\n 20 21 22 23 24 25 26 04\n 27 28 29 30 31       05\n                        \n\n     January 1993\n Mo Tu We Th Fr Sa Su CW\n              1  2  3 53/0\n  4  5  6  7  8  9 10 01\n 11 12 13 14 15 16 17 02\n 18 19 20 21 22 23 24 03\n 25 26 27 28 29 30 31 04\n                        \n\n     January 1994\n Mo Tu We Th Fr Sa Su CW\n                 1  2 52/0\n  3  4  5  6  7  8  9 01\n 10 11 12 13 14 15 16 02\n 17 18 19 20 21 22 23 03\n 24 25 26 27 28 29 30 04\n 31                   05\n\n     January 1995\n Mo Tu We Th Fr Sa Su CW\n                    1 52/0\n  2  3  4  5  6  7  8 01\n  9 10 11 12 13 14 15 02\n 16 17 18 19 20 21 22 03\n 23 24 25 26 27 28 29 04\n 30 31                05\n\n     January 1996\n Mo Tu We Th Fr Sa Su CW\n  1  2  3  4  5  6  7 01\n  8  9 10 11 12 13 14 02\n 15 16 17 18 19 20 21 03\n 22 23 24 25 26 27 28 04\n 29 30 31             05\n                        \n\n     January 1997\n Mo Tu We Th Fr Sa Su CW\n        1  2  3  4  5 53/1\n  6  7  8  9 10 11 12 02\n 13 14 15 16 17 18 19 03\n 20 21 22 23 24 25 26 04\n 27 28 29 30 31       05\n                        \n\n     January 1998\n Mo Tu We Th Fr Sa Su CW\n           1  2  3  4 53/1\n  5  6  7  8  9 10 11 02\n 12 13 14 15 16 17 18 03\n 19 20 21 22 23 24 25 04\n 26 27 28 29 30 31    05\n                        \n\n     January 1999\n Mo Tu We Th Fr Sa Su CW\n              1  2  3 53/0\n  4  5  6  7  8  9 10 01\n 11 12 13 14 15 16 17 02\n 18 19 20 21 22 23 24 03\n 25 26 27 28 29 30 31 04\n                        \n\n     January 2000\n Mo Tu We Th Fr Sa Su CW\n                 1  2 52/0\n  3  4  5  6  7  8  9 01\n 10 11 12 13 14 15 16 02\n 17 18 19 20 21 22 23 03\n 24 25 26 27 28 29 30 04\n 31                   05\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/testparser.m",
    "content": "#import <Foundation/Foundation.h>\n#import \"ISO8601DateFormatter.h\"\n\nint main(int argc, const char **argv) {\n\tNSAutoreleasePool *pool = [NSAutoreleasePool new];\n\n\tBOOL parseStrictly = NO;\n\tif((argc > 1) && (strcmp(argv[1], \"--strict\") == 0)) {\n\t\t--argc;++argv;\n\t\tparseStrictly = YES;\n\t}\n\n\t[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:+0]];\n\n\tISO8601DateFormatter *formatter = [[[ISO8601DateFormatter alloc] init] autorelease];\n\tformatter.parsesStrictly = parseStrictly;\n\n\twhile(--argc) {\n\t\tNSString *str = [NSString stringWithUTF8String:*++argv];\n\t\tNSLog(@\"Parsing strictly: %hhi\", parseStrictly);\n\t\tNSDate *date = [formatter dateFromString:str];\n\t\tfputs([[NSString stringWithFormat:@\"%@ %C %@\\n\", str, (unsigned short)0x2192, date] UTF8String], stdout);\n\t}\n\n\t[pool release];\n\treturn 0;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/testparser.sh.in",
    "content": "\n#Tests with a date only\n./testparser 2006-02-24 \\\n2006-12 \\\n2006 \\\n2006- \\\n2006-02- \\\n2006-0224 \\\n200602-24 \\\n20060224 \\\n2001-W1-1 \\\n2002-W1-1 \\\n2003-W1-1 \\\n2004-W1-1 \\\n2010-W1-1 \\\n2000-W1-1 \\\n2006-W1-1 \\\n2006-W1-2 \\\n2006-W02 \\\n2006-W2 \\\n2006-W02-01 \\\n2006-W02-1 \\\n2006-W2-01 \\\n2006-W2-1 \\\n2006-W2-2 \\\n2006-W2-8 \\\n2006-W3-1 \\\n2006-W22 \\\n2006-W22-11 \\\n06-02-24 \\\n06-12 \\\n06-02- \\\n06-0224 \\\n0602-24 \\\n060224 \\\n06-W22 \\\n06-W2 \\\n06-W22-11 \\\n06-W2-1 \\\n-6-02-24 \\\n-6-12 \\\n-6 \\\n-6- \\\n-6-02- \\\n-6-0224 \\\n-602-24 \\\n-6-W22 \\\n-6-W2 \\\n-6-W22-11 \\\n-6-W2-1 \\\n--0224 \\\n--02-24 \\\n--2-24 \\\n--02-2 \\\n--02 \\\n---24 \\\n-W2 \\\n-W2-11 \\\n-W-3 \\\n--W-3 \\\n2006-001 \\\n2006-002 \\\n2006-032 \\\n2006-055 \\\n2006-365 \\\n2004-001 \\\n2004-366 \\\n-055 \\\n--055 \\\n2006T\n#Current year in x century\n./testparser 20 \\\n1\n#x year in current century\n./testparser -06\n#x year and month in current century\n./testparser -06-02\n#x year, month, and date in current century\n./testparser 06-02-24\n#x month and date in current year\n./testparser --02-24\n#x date in current year and month\n./testparser ---24\n\n#Tests with a time only\n./testparser T22:63:24-11:21 \\\nT22:63:24+50:70 \\\nT22:1:2 \\\nT22:1Z \\\nT22: \\\nT22 \\\nT2 \\\nT2:2:2\n#Tests with both a date and a time\n./testparser 2006-02-24T02:43:24 \\\n2006-02-24T22:43:24 \\\n2006-02-24T22:63:24 \\\n2006-12T12:34 \\\n2006T22\n#Tests with a date, a time, and a time zone\n./testparser 2006-02-24T22:63:24-01:00 \\\n2006-02-24T22:63:24Z      \\\n2006-02-24T22:63:24-1 \\\n2006-02-24T22:63:24-01 \\\n2006-02-24T22:63:24-01:32 \\\n2006-02-24T22:63:24-01:0  \\\n2006-02-24T22:63:24-01:00 \\\n2006-02-24T22:63:24-01:01 \\\n2006-02-24T22:63:24-01:11 \\\n2006-02-24T22:63:24-11:21\n\n#Invalid dates\n./testparser '' \\\nT \\\n2006-W \\\n2006-366 \\\n2006-400 \\\n2004-367 \\\n-2006-02-24T02:43:24 \\\n-2006-02-24T22:43:24 \\\n-2006-02-24T22:63:24 \\\n-2006-12T12:34 \\\n-2006T22 \\\n-60224 \\\n--2006-02-24T02:43:24 \\\n--2006-02-24T22:43:24 \\\n--2006-02-24T22:63:24 \\\n--2006-12T12:34 \\\n--2006T22 \\\n---2006-02-24T02:43:24 \\\n---2006-02-24T22:43:24 \\\n---2006-02-24T22:63:24 \\\n---2006-12T12:34 \\\n---2006T22\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/testparser.sh.py",
    "content": "#!/usr/bin/env python\n\noutfile = file('testparser.sh', 'w')\n\noutfile.write('#!/bin/sh\\n')\n\nhash = '#'\ncolon = ':'\nshell_prompt = '% '\necho_format = \"echo '%s'\\n\"\nnewline = '\\n'\necho_by_itself = 'echo\\n'\n\nimport re\nbs_exp = re.compile('(\\\\\\\\*)\\n')\nescape_newline_exp = re.compile('\\\\\\\\\\n')\nempty = ''\n\nimport fileinput\nholding = []\nfor line in fileinput.input(['testparser.sh.in']):\n\tif len(line) <= 1:\n\t\t#Empty line.\n\t\tcontinue\n\n\tif(len(bs_exp.search(line).group(1)) % 2):\n\t\tholding.append(line[:-1])\n\t\tcontinue\n\telif holding:\n\t\tholding.append(line)\n\t\tline = '\\n'.join(holding)\n\t\tdel holding[:]\n\n\tline = escape_newline_exp.sub(empty, line)\n\n\tis_comment = line.startswith(hash)\n\tif is_comment:\n\t\tline_for_display = line[:-1].strip(hash) + colon\n\telse:\n\t\tline_for_display = shell_prompt + line[:-1]\n\n\techo_line = echo_format % (line_for_display,)\n\n\tlines = [newline, echo_line]\n\tif is_comment:\n\t\tlines.insert(1, echo_by_itself)\n\telse:\n\t\tlines.append(line)\n\toutfile.writelines(lines)\n\noutfile.close()\n\n# Make it executable.\nimport os\nos.chmod('testparser.sh', 0755)\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/testunparser.sh",
    "content": "#!/usr/bin/env zsh -f\necho './unparse-date 199{1,2,3,4,5,6,7,8,9}-01-01 200{0,1,2,3,4,5,6,7,8,9}-01-01 2010-01-01'\n./unparse-date 199{1,2,3,4,5,6,7,8,9}-01-01 200{0,1,2,3,4,5,6,7,8,9}-01-01 2010-01-01\necho\necho './unparse-weekdate 199{1,2,3,4,5,6,7,8,9}-01-01 200{0,1,2,3,4,5,6,7,8,9}-01-01 2010-01-01'\n./unparse-weekdate 199{1,2,3,4,5,6,7,8,9}-01-01 200{0,1,2,3,4,5,6,7,8,9}-01-01 2010-01-01\necho\necho './unparse-ordinaldate 199{1,2,3,4,5,6,7,8,9}-01-01 200{0,1,2,3,4,5,6,7,8,9}-01-01 2010-01-01'\n./unparse-ordinaldate 199{1,2,3,4,5,6,7,8,9}-01-01 200{0,1,2,3,4,5,6,7,8,9}-01-01 2010-01-01\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/testunparsewithtime.m",
    "content": "#import <Foundation/Foundation.h>\n#import \"ISO8601DateFormatter.h\"\n\nstatic void testFormatStrings(int hour, int minute);\n\nint main(void) {\n\tNSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];\n\tISO8601DateFormatter *formatter = [[[ISO8601DateFormatter alloc] init] autorelease];\n\tformatter.includeTime = YES;\n\tNSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:336614400.0];\n\tNSLog(@\"2011-09-01 at 5 PM ET: %@\", [formatter stringFromDate:date]);\n\n\ttestFormatStrings(11, 6);\n\ttestFormatStrings(2, 6);\n\ttestFormatStrings(-2, 6);\n\n\t[pool drain];\n\treturn EXIT_SUCCESS;\n}\n\nstatic void testFormatStrings(int hour, int minute) {\n\tNSArray *formatStrings = [NSArray arrayWithObjects:\n\t\t@\"%@: %02d:%02d\",\n\t\t@\"%@: %+02d:%02d\",\n\t\t@\"%@: %0+2d:%02d\",\n\t\t@\"%@: %02+d:%02d\",\n\t\t@\"%@: %+.2d:%02d\",\n\t\tnil];\n\tNSLog(@\"Testing with NSLog:\");\n\tfor (NSString *format in formatStrings) {\n\t\tNSLog(format, format, hour, minute);\n\t}\n\tprintf(\"Testing with printf:\\n\");\n\tfor (NSString *format in formatStrings) {\n\t\tformat = [format stringByReplacingOccurrencesOfString:@\"%@\" withString:@\"%s\"];\n\t\tprintf([[format stringByAppendingString:@\"\\n\"] UTF8String], [format UTF8String], hour, minute);\n\t}\n}\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/timetrial.m",
    "content": "#import <Foundation/Foundation.h>\n\n#import \"ISO8601DateFormatter.h\"\n\nint main(void) {\n\tNSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];\n\n\tsleep(1);\n\n\tISO8601DateFormatter *formatter = [[[ISO8601DateFormatter alloc] init] autorelease];\n\tNSString *inString = @\"2011-04-12T13:15:17-0800\";\n\tNSUInteger numResults = 0;\n\tNSDate *start, *end;\n\tenum { numReps = 10000 };\n\n\tNSLog(@\"Timing ISO8601DateFormatter\");\n\n\tstart = [NSDate date];\n\tfor (NSUInteger i = 10000; i > 0; --i) {\n\t\tNSDate *date = [formatter dateFromString:inString];\n\t\tNSString *outString = [formatter stringFromDate:date];\n\t\tif (outString) ++numResults;\n\t}\n\tend = [NSDate date];\n\tNSLog(@\"Time taken: %f seconds\", [end timeIntervalSinceDate:start]);\n\tNSLog(@\"Number of dates and strings computed: %lu each\", (unsigned long)numResults);\n\tNSLog(@\"Time taken per date: %f seconds\", [end timeIntervalSinceDate:start] / numReps);\n\n\t[pool drain];\n\tpool = [[NSAutoreleasePool alloc] init];\n\n\tsleep(1);\n\n\tnumResults = 0;\n\n\tNSLog(@\"Timing C standard library parsing and unparsing\");\n\n\tstruct tm timeInfo;\n\ttime_t then;\n\tchar buffer[80] = { 0 };\n\tNSTimeInterval timeZoneOffset = [[NSTimeZone localTimeZone] secondsFromGMT];\n\n\tstart = [NSDate date];\n\tfor (NSUInteger i = 10000; i > 0; --i) {\n    \tstrptime([inString cStringUsingEncoding:NSUTF8StringEncoding], \"%Y-%m-%dT%H:%M:%S%z\", &timeInfo);\n    \ttimeInfo.tm_isdst = -1;\n    \tthen = mktime(&timeInfo);\n\n\t\tNSDate *date = [NSDate dateWithTimeIntervalSince1970:then + timeZoneOffset];\n\n\t\tstruct tm *outputTimeInfo;\n\t\ttime_t outputTime = [date timeIntervalSince1970] - timeZoneOffset;\n\t\toutputTimeInfo = localtime(&outputTime);\n\t\tstrftime(buffer, sizeof(buffer), \"%Y-%m-%dT%H:%M:%S%z\", outputTimeInfo);\n\n\t\tNSString *outString = [NSString stringWithCString:buffer encoding:NSUTF8StringEncoding];\n\t\tif (outString) ++numResults;\n\t}\n\tend = [NSDate date];\n\tNSLog(@\"Time taken: %f seconds\", [end timeIntervalSinceDate:start]);\n\tNSLog(@\"Number of dates and strings computed: %lu each\", (unsigned long)numResults);\n\tNSLog(@\"Time taken per date: %f seconds\", [end timeIntervalSinceDate:start] / numReps);\n\n\tsleep(1);\n\n\t[pool drain];\n\treturn EXIT_SUCCESS;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/unparse-date.m",
    "content": "#import \"ISO8601DateFormatter.h\"\n\nint main(int argc, const char **argv) {\n\tNSAutoreleasePool *pool = [NSAutoreleasePool new];\n\n\tISO8601DateFormatter *formatter = [[[ISO8601DateFormatter alloc] init] autorelease];\n\tformatter.format = ISO8601DateFormatCalendar;\n\n\tBOOL forceUTC = NO;\n\n\twhile (argv[1]) {\n\t\tif (strcmp(argv[1], \"--include-time\") == 0)\n\t\t\tformatter.includeTime = YES;\n\t\telse if (strcmp(argv[1], \"--force-utc\") == 0)\n\t\t\tforceUTC = YES;\n\t\telse\n\t\t\tbreak;\n\t\t--argc;\n\t\t++argv;\n\t}\n\n\twhile(--argc) {\n\t\tNSString *arg = [NSString stringWithUTF8String:*++argv];\n\t\tNSTimeZone *timeZone = nil;\n\t\tNSDate *date = [formatter dateFromString:arg timeZone:&timeZone];\n\t\tif (forceUTC)\n\t\t\ttimeZone = [NSTimeZone timeZoneWithAbbreviation:@\"UTC\"];\n\t\tprintf(\"%s\\n\", [[NSString stringWithFormat:@\"%@:\\t%@\", arg, [formatter stringFromDate:date timeZone:timeZone]] UTF8String]);\n\t}\n\n\t[pool release];\n\treturn 0;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/unparse-ordinaldate.m",
    "content": "#import \"ISO8601DateFormatter.h\"\n\nint main(int argc, const char **argv) {\n\tNSAutoreleasePool *pool = [NSAutoreleasePool new];\n\n\tISO8601DateFormatter *formatter = [[[ISO8601DateFormatter alloc] init] autorelease];\n\tformatter.format = ISO8601DateFormatOrdinal;\n\n\twhile(--argc) {\n\t\tNSString *arg = [NSString stringWithUTF8String:*++argv];\n\t\tNSTimeZone *timeZone = nil;\n\t\tprintf(\"%s\\n\", [[NSString stringWithFormat:@\"%@:\\t%@\", arg, [formatter stringFromDate:[formatter dateFromString:arg timeZone:&timeZone] timeZone:timeZone]] UTF8String]);\n\t}\n\n\t[pool release];\n\treturn 0;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/iso-8601-date-formatter/unparse-weekdate.m",
    "content": "#import \"ISO8601DateFormatter.h\"\n\nint main(int argc, const char **argv) {\n\tNSAutoreleasePool *pool = [NSAutoreleasePool new];\n\n\tISO8601DateFormatter *formatter = [[[ISO8601DateFormatter alloc] init] autorelease];\n\tformatter.format = ISO8601DateFormatWeek;\n\n\twhile(--argc) {\n\t\tNSString *arg = [NSString stringWithUTF8String:*++argv];\n\t\tNSTimeZone *timeZone = nil;\n\t\tprintf(\"%s\\n\", [[NSString stringWithFormat:@\"%@:\\t%@\", arg, [formatter stringFromDate:[formatter dateFromString:arg timeZone:&timeZone] timeZone:timeZone]] UTF8String]);\n\t}\n\n\t[pool release];\n\treturn 0;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/.gitignore",
    "content": ".DS_Store\n.AppleDouble\n.LSOverride\n*.xcodeproj\n.build/*\nPackages/*\n\n# Icon must end with two \\r\nIcon\n\n\n# Thumbnails\n._*\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\n# Xcode\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\nSocket.IO-Test-Server/node_modules/*\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/.travis.yml",
    "content": "language: objective-c\nxcode_project: Socket.IO-Client-Swift.xcodeproj # path to your xcodeproj folder\nxcode_scheme: SocketIO-iOS\nosx_image: xcode7\nbefore_install:\n    - cd Socket.IO-Test-Server/\n    - npm install\n    - cd ..\ninstall: node Socket.IO-Test-Server/main.js &\nscript: xctool -project Socket.IO-Client-Swift.xcodeproj -scheme SocketIO-Mac build test -parallelize\ncache:\n  directories:\n    - Socket.IO-Test-Server/node_modules\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014-2015 Erik Little\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\nall copies 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\nTHE SOFTWARE.\n\n\n\nThis library makes use of the following third party libraries:\n\nStarscream\n----------\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Package.swift",
    "content": "import PackageDescription\n\nlet package = Package(\n    name: \"SocketIOClientSwift\"\n)\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/README.md",
    "content": "[![Build Status](https://travis-ci.org/socketio/socket.io-client-swift.svg?branch=master)](https://travis-ci.org/socketio/socket.io-client-swift)\n\n#Socket.IO-Client-Swift\nSocket.IO-client for iOS/OS X.\n\n##Example\n```swift\nlet socket = SocketIOClient(socketURL: NSURL(string: \"http://localhost:8080\")!, options: [.Log(true), .ForcePolling(true)])\n\nsocket.on(\"connect\") {data, ack in\n    print(\"socket connected\")\n}\n\nsocket.on(\"currentAmount\") {data, ack in\n    if let cur = data[0] as? Double {\n        socket.emitWithAck(\"canUpdate\", cur)(timeoutAfter: 0) {data in\n            socket.emit(\"update\", [\"amount\": cur + 2.50])\n        }\n\n        ack.with(\"Got your currentAmount\", \"dude\")\n    }\n}\n\nsocket.connect()\n```\n\n##Objective-C Example\n```objective-c\nNSURL* url = [[NSURL alloc] initWithString:@\"http://localhost:8080\"];\nSocketIOClient* socket = [[SocketIOClient alloc] initWithSocketURL:url options:@{@\"log\": @YES, @\"forcePolling\": @YES}];\n\n[socket on:@\"connect\" callback:^(NSArray* data, SocketAckEmitter* ack) {\n    NSLog(@\"socket connected\");\n}];\n\n[socket on:@\"currentAmount\" callback:^(NSArray* data, SocketAckEmitter* ack) {\n    double cur = [[data objectAtIndex:0] floatValue];\n\n    [socket emitWithAck:@\"canUpdate\" withItems:@[@(cur)]](0, ^(NSArray* data) {\n        [socket emit:@\"update\" withItems:@[@{@\"amount\": @(cur + 2.50)}]];\n    });\n\n    [ack with:@[@\"Got your currentAmount, \", @\"dude\"]];\n}];\n\n[socket connect];\n\n```\n\n##Features\n- Supports socket.io 1.0+\n- Supports binary\n- Supports Polling and WebSockets\n- Supports TLS/SSL\n- Can be used from Objective-C\n\n##Installation\nRequires Swift 2/Xcode 7\n\nIf you need Swift 1.2/Xcode 6.3/4 use v2.4.5 (Pre-Swift 2 support is no longer maintained)\n\nIf you need Swift 1.1/Xcode 6.2 use v1.5.2. (Pre-Swift 1.2 support is no longer maintained)\n\nManually (iOS 7+)\n-----------------\n1. Copy the Source folder into your Xcode project. (Make sure you add the files to your target(s))\n2. If you plan on using this from Objective-C, read [this](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html) on exposing Swift code to Objective-C.\n\nSwift Package Manager\n---------------------\nAdd the project as a dependency to your Package.swift:\n```swift\nimport PackageDescription\n\nlet package = Package(\n    name: \"YourSocketIOProject\",\n    dependencies: [\n        .Package(url: \"https://github.com/socketio/socket.io-client-swift\", majorVersion: 5)\n    ]\n)\n```\n\nThen import `import SocketIOClientSwift`.\n\nCarthage\n-----------------\nAdd this line to your `Cartfile`:\n```\ngithub \"socketio/socket.io-client-swift\" ~> 5.3.3 # Or latest version\n```\n\nRun `carthage update --platform ios,macosx`.\n\nCocoaPods 0.36.0 or later (iOS 8+)\n------------------\nCreate `Podfile` and add `pod 'Socket.IO-Client-Swift'`:\n\n```ruby\nsource 'https://github.com/CocoaPods/Specs.git'\nplatform :ios, '8.0'\nuse_frameworks!\n\npod 'Socket.IO-Client-Swift', '~> 5.3.3' # Or latest version\n```\n\nInstall pods:\n\n```\n$ pod install\n```\n\nImport the module:\n\nSwift:\n```swift\nimport SocketIOClientSwift\n```\n\nObjective-C:\n\n```Objective-C\n#import <SocketIOClientSwift/SocketIOClientSwift-Swift.h>\n```\n\nCocoaSeeds\n-----------------\n\nAdd this line to your `Seedfile`:\n\n```\ngithub \"socketio/socket.io-client-swift\", \"v5.3.3\", :files => \"Source/*.swift\" # Or latest version\n```\n\nRun `seed install`.\n\n\n##API\nConstructors\n-----------\n`init(var socketURL: NSURL, options: Set<SocketIOClientOption> = [])` - Creates a new SocketIOClient. options is a Set of SocketIOClientOption. If your socket.io server is secure, you need to specify `https` in your socketURL.\n\n`convenience init(socketURL: NSURL, options: NSDictionary?)` - Same as above, but meant for Objective-C. See Options on how convert between SocketIOClientOptions and dictionary keys.\n\nOptions\n-------\nAll options are a case of SocketIOClientOption. To get the Objective-C Option, convert the name to lowerCamelCase.\n\n```swift\ncase ConnectParams([String: AnyObject]) // Dictionary whose contents will be passed with the connection.\ncase Reconnects(Bool) // Whether to reconnect on server lose. Default is `true`\ncase ReconnectAttempts(Int) // How many times to reconnect. Default is `-1` (infinite tries)\ncase ReconnectWait(Int) // Amount of time to wait between reconnects. Default is `10`\ncase ForcePolling(Bool) // `true` forces the client to use xhr-polling. Default is `false`\ncase ForceNew(Bool) // Will a create a new engine for each connect. Useful if you find a bug in the engine related to reconnects\ncase ForceWebsockets(Bool) // `true` forces the client to use WebSockets. Default is `false`\ncase Nsp(String) // The namespace to connect to. Must begin with /. Default is `/`\ncase Cookies([NSHTTPCookie]) // An array of NSHTTPCookies. Passed during the handshake. Default is nil.\ncase Log(Bool) // If `true` socket will log debug messages. Default is false.\ncase Logger(SocketLogger) // Custom logger that conforms to SocketLogger. Will use the default logging otherwise.\ncase SessionDelegate(NSURLSessionDelegate) // Sets an NSURLSessionDelegate for the underlying engine. Useful if you need to handle self-signed certs. Default is nil.\ncase Path(String) // If the server uses a custom path. ex: `\"/swift/\"`. Default is `\"\"`\ncase ExtraHeaders([String: String]) // Adds custom headers to the initial request. Default is nil.\ncase HandleQueue(dispatch_queue_t) // The dispatch queue that handlers are run on. Default is the main queue.\ncase VoipEnabled(Bool) // Only use this option if you're using the client with VoIP services. Changes the way the WebSocket is created. Default is false\ncase Secure(Bool) // If the connection should use TLS. Default is false.\ncase SelfSigned(Bool) // Sets WebSocket.selfSignedSSL (Don't do this, iOS will yell at you)\n\n```\nMethods\n-------\n1. `on(event: String, callback: NormalCallback) -> NSUUID` - Adds a handler for an event. Items are passed by an array. `ack` can be used to send an ack when one is requested. See example. Returns a unique id for the handler.\n2. `once(event: String, callback: NormalCallback) -> NSUUID` - Adds a handler that will only be executed once. Returns a unique id for the handler.\n3. `onAny(callback:((event: String, items: AnyObject?)) -> Void)` - Adds a handler for all events. It will be called on any received event.\n4. `emit(event: String, _ items: AnyObject...)` - Sends a message. Can send multiple items.\n5. `emit(event: String, withItems items: [AnyObject])` - `emit` for Objective-C\n6. `emitWithAck(event: String, _ items: AnyObject...) -> (timeoutAfter: UInt64, callback: (NSArray?) -> Void) -> Void` - Sends a message that requests an acknowledgement from the server. Returns a function which you can use to add a handler. See example. Note: The message is not sent until you call the returned function.\n7. `emitWithAck(event: String, withItems items: [AnyObject]) -> (UInt64, (NSArray?) -> Void) -> Void` - `emitWithAck` for Objective-C. Note: The message is not sent until you call the returned function.\n8. `connect()` - Establishes a connection to the server. A \"connect\" event is fired upon successful connection.\n9. `connect(timeoutAfter timeoutAfter: Int, withTimeoutHandler handler: (() -> Void)?)` - Connect to the server. If it isn't connected after timeoutAfter seconds, the handler is called.\n10. `disconnect()` - Closes the socket. Reopening a disconnected socket is not fully tested.\n11. `reconnect()` - Causes the client to reconnect to the server.\n12. `joinNamespace(namespace: String)` - Causes the client to join namespace. Shouldn't need to be called unless you change namespaces manually.\n13. `leaveNamespace()` - Causes the client to leave the nsp and go back to /\n14. `off(event: String)` - Removes all event handlers for event.\n15. `off(id id: NSUUID)` - Removes the event that corresponds to id.\n16. `removeAllHandlers()` - Removes all handlers.\n\nClient Events\n------\n1. `connect` - Emitted when on a successful connection.\n2. `disconnect` - Emitted when the connection is closed.\n3. `error` - Emitted on an error.\n4. `reconnect` - Emitted when the connection is starting to reconnect.\n5. `reconnectAttempt` - Emitted when attempting to reconnect.\n\n##Detailed Example\nA more detailed example can be found [here](https://github.com/nuclearace/socket.io-client-swift-example)\n\n##License\nMIT\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Socket.IO-Client-Swift.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = \"Socket.IO-Client-Swift\"\n  s.module_name  = \"SocketIOClientSwift\"\n  s.version      = \"5.3.3\"\n  s.summary      = \"Socket.IO-client for iOS and OS X\"\n  s.description  = <<-DESC\n                   Socket.IO-client for iOS and OS X.\n                   Supports ws/wss/polling connections and binary.\n                   For socket.io 1.0+ and Swift.\n                   DESC\n  s.homepage     = \"https://github.com/socketio/socket.io-client-swift\"\n  s.license      = { :type => 'MIT' }\n  s.author       = { \"Erik\" => \"nuclear.ace@gmail.com\" }\n  s.ios.deployment_target = '8.0'\n  s.osx.deployment_target = '10.10'\n  s.tvos.deployment_target = '9.0'\n  s.source       = { :git => \"https://github.com/socketio/socket.io-client-swift.git\", :tag => 'v5.3.3' }\n  s.source_files  = \"Source/**/*.swift\"\n  s.requires_arc = true\n  # s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files\nend\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Socket.IO-Test-Server/TestCases.js",
    "content": "var assert = require(\"assert\")\n\nmodule.exports = {\n\tbasicTest: {\n\t\tassert: function(inputData) {\n\t\t\t\n\t\t},\n\t\treturnData: []\n\t}, \n\ttestNull: {\n\t\tassert: function(inputData) {\n\t\t\tassert(!inputData)\n\t\t},\n\t\treturnData: [null]\n\t},\n\ttestBinary: {\n\t\tassert: function(inputData) {\n\t\t\t assert.equal(inputData.toString(), \"gakgakgak2\")\n\t\t},\n\t\treturnData: [new Buffer(\"gakgakgak2\", \"utf-8\")]\n\t},\n\ttestArray: {\n\t\tassert: function(inputData) {\n\t\t\tassert.equal(inputData.length, 2)\n\t\t    assert.equal(inputData[0], \"test1\")\n\t\t    assert.equal(inputData[1], \"test2\")\n\t\t},\n\t\treturnData: [[\"test3\", \"test4\"]]\n\t},\n\ttestString: {\n\t\tassert: function(inputData) {\n\t\t\tassert.equal(inputData, \"marco\")\n\t\t},\n\t\treturnData: [\"polo\"]\n\t},\n\ttestBool: {\n\t\tassert: function(inputData) {\n\t\t\tassert(!inputData)\n\t\t},\n\t\treturnData: [true]\n\t},\n\ttestInteger: {\n\t\tassert: function(inputData) {\n\t\t\tassert.equal(inputData, 10)\n\t\t},\n\t\treturnData: [20]\n\t},\n\ttestDouble: {\n\t\tassert: function(inputData) {\n\t\t\t assert.equal(inputData, 1.1)\n\t\t},\n\t\treturnData: [1.2]\n\t},\n\ttestJSON: {\n\t\tassert: function(inputData) {\n\t\t\tassert.equal(inputData.name, \"test\")\n\t\t    assert.equal(inputData.nestedTest.test, \"test\")\n\t\t    assert.equal(inputData.testArray.length, 1)\n\t\t},\n\t\treturnData: [{testString: \"test\", testNumber: 15, nestedTest: {test: \"test\"}, testArray: [1, 1]}]\n\t},\t\n\ttestJSONWithBuffer: {\n\t\tassert: function(inputData) {\n\t\t\tassert.equal(inputData.name, \"test\")\n\t\t    assert.equal(inputData.nestedTest.test, \"test\")\n\t\t    assert.equal(inputData.testArray.length, 1)\n\t\t},\n\t\treturnData: [{testString: \"test\", testNumber: 15, nestedTest: {test: \"test\"}, testArray: [new Buffer(\"gakgakgak2\", \"utf-8\"), 1]}]\n\t},testUnicode: {\n\t\tassert: function(inputData) {\n\t\t\tassert.equal(inputData, \"🚀\")\n\t\t},\n\t\treturnData: [\"🚄\"]\n\t},testMultipleItems: {\n\t\tassert: function(array, object, number, string, bool) {\n\t\t\tassert.equal(array.length, 2)\n\t\t\tassert.equal(array[0], \"test1\")\n\t\t\tassert.equal(array[1], \"test2\")\n\t\t\tassert.equal(number, 15)\n\t\t\tassert.equal(string, \"marco\")\n\t\t\tassert.equal(bool, false)\t\n\t\t},\n\t\treturnData: [[1, 2], {test: \"bob\"}, 25, \"polo\", false]\n\t},testMultipleItemsWithBuffer: {\n\t\tassert: function(array, object, number, string, binary) {\n\t\t\tassert.equal(array.length, 2)\n\t\t\tassert.equal(array[0], \"test1\")\n\t\t\tassert.equal(array[1], \"test2\")\n\t\t\tassert.equal(number, 15)\n\t\t\tassert.equal(string, \"marco\")\n\t\t\tassert.equal(binary.toString(), \"gakgakgak2\")\n\t\t},\n\t\treturnData: [[1, 2], {test: \"bob\"}, 25, \"polo\", new Buffer(\"gakgakgak2\")]\n\t}\n}"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Socket.IO-Test-Server/acknowledgementEvents.js",
    "content": "function socketCallback(testKey, socket, testCase) {\n\treturn function() {\n\t\ttestCase.assert.apply(undefined , arguments)\n\t\tvar emitArguments = testCase.returnData;\n\t\tvar ack = arguments[arguments.length - 1]\n\t\tack.apply(socket, emitArguments)\n\t}\n}\n\nmodule.exports.socketCallback = socketCallback\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Socket.IO-Test-Server/emitEvents.js",
    "content": "function socketCallback(testKey, socket, testCase) {\n\treturn function() {\n\t\ttestCase.assert.apply(undefined , arguments)\n\t\t\n\t\tvar emitArguments = addArrays([testKey + \"EmitReturn\"], testCase.returnData)\n\t\tsocket.emit.apply(socket, emitArguments)\n\t}\n}\n\nfunction addArrays(firstArray, secondArray) {\n\tvar length = secondArray.length\n\tvar i;\n\tfor(i = 0; i < length; i++) {\n\t\tfirstArray.push(secondArray[i])\n\t}\n\t\n\treturn firstArray;\n}\n\nmodule.exports.socketCallback = socketCallback"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Socket.IO-Test-Server/main.js",
    "content": "var app = require('http').createServer()\nvar io = require('socket.io')(app);\napp.listen(6979)\n\n\nvar acknowledgementsEvents = require(\"./acknowledgementEvents.js\")\nvar emitEvents = require(\"./emitEvents.js\")\nvar socketEventRegister = require(\"./socketEventRegister.js\")\n\nsocketEventRegister.register(io, emitEvents.socketCallback, \"Emit\")\nsocketEventRegister.register(io, acknowledgementsEvents.socketCallback, \"Acknowledgement\")\n\nvar nsp = io.of(\"/swift\")\nsocketEventRegister.register(nsp, emitEvents.socketCallback, \"Emit\")\nsocketEventRegister.register(nsp, acknowledgementsEvents.socketCallback, \"Acknowledgement\")\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Socket.IO-Test-Server/package.json",
    "content": "{\n  \"name\": \"socket.io-client-swift-test-server\",\n  \"version\": \"0.0.1\",\n  \"description\": \"A simple server to test aginst\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"Lukas Schmidt\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"socket.io\": \"^1.3.6\"\n  }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Socket.IO-Test-Server/socketEventRegister.js",
    "content": "var testCases = require(\"./TestCases.js\")\n\nfunction registerSocketForEvents(ioSocket, socketCallback, testKind) {\n\tioSocket.on('connection', function(socket) {\n\t\tvar testCase;\n\t\tfor(testKey in testCases) {\n\t\t\ttestCase = testCases[testKey]\n\t\t\tsocket.on((testKey + testKind), socketCallback(testKey, socket, testCase))\n\t\t}\n\t})\n}\n\nmodule.exports.register = registerSocketForEvents"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/SocketIO-Mac/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</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>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/SocketIO-Mac/SocketIO-Mac.h",
    "content": "//\n//  SocketIO-Mac.h\n//  SocketIO-Mac\n//\n//  Created by Nacho Soto on 7/11/15.\n//\n//\n\n#import <Cocoa/Cocoa.h>\n\n//! Project version number for SocketIO-Mac.\nFOUNDATION_EXPORT double SocketIO_MacVersionNumber;\n\n//! Project version string for SocketIO-Mac.\nFOUNDATION_EXPORT const unsigned char SocketIO_MacVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SocketIO_Mac/PublicHeader.h>\n\n\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/SocketIO-MacTests/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/socket.io-client-swift/SocketIO-MacTests/SocketAckManagerTest.swift",
    "content": "//\n//  SocketAckManagerTest.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Lukas Schmidt on 04.09.15.\n//\n//\n\nimport XCTest\n@testable import SocketIOClientSwift\n\nclass SocketAckManagerTest: XCTestCase {\n    var ackManager = SocketAckManager()\n    \n    func testAddAcks() {\n        let callbackExpection = self.expectationWithDescription(\"callbackExpection\")\n        let itemsArray = [\"Hi\", \"ho\"]\n        func callback(items: [AnyObject]) {\n            callbackExpection.fulfill()\n        }\n        ackManager.addAck(1, callback: callback)\n        ackManager.executeAck(1, items: itemsArray)\n        waitForExpectationsWithTimeout(3.0, handler: nil)\n        \n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/SocketIO-MacTests/SocketBasicPacketTest.swift",
    "content": "//\n//  SocketBasicPacketTest.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 10/7/15.\n//\n//\n\nimport XCTest\n@testable import SocketIOClientSwift\n\nclass SocketBasicPacketTest: XCTestCase {\n    let data = \"test\".dataUsingEncoding(NSUTF8StringEncoding)!\n    let data2 = \"test2\".dataUsingEncoding(NSUTF8StringEncoding)!\n    \n    func testEmpyEmit() {\n        let expectedSendString = \"2[\\\"test\\\"]\"\n        let sendData = [\"test\"]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/\", ack: false)\n\n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testNullEmit() {\n        let expectedSendString = \"2[\\\"test\\\",null]\"\n        let sendData = [\"test\", NSNull()]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testStringEmit() {\n        let expectedSendString = \"2[\\\"test\\\",\\\"foo bar\\\"]\"\n        let sendData = [\"test\", \"foo bar\"]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testJSONEmit() {\n        let expectedSendString = \"2[\\\"test\\\",{\\\"test\\\":\\\"hello\\\",\\\"hello\\\":1,\\\"foobar\\\":true,\\\"null\\\":null}]\"\n        let sendData = [\"test\", [\"foobar\": true, \"hello\": 1, \"test\": \"hello\", \"null\": NSNull()]]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testArrayEmit() {\n        let expectedSendString = \"2[\\\"test\\\",[\\\"hello\\\",1,{\\\"test\\\":\\\"test\\\"}]]\"\n        let sendData = [\"test\", [\"hello\", 1, [\"test\": \"test\"]]]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testBinaryEmit() {\n        let expectedSendString = \"51-[\\\"test\\\",{\\\"num\\\":0,\\\"_placeholder\\\":true}]\"\n        let sendData = [\"test\", data]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n        XCTAssertEqual(packet.binary, [data])\n    }\n    \n    func testMultipleBinaryEmit() {\n        let expectedSendString = \"52-[\\\"test\\\",{\\\"data1\\\":{\\\"num\\\":0,\\\"_placeholder\\\":true},\\\"data2\\\":{\\\"num\\\":1,\\\"_placeholder\\\":true}}]\"\n        let sendData = [\"test\", [\"data1\": data, \"data2\": data2]]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n        XCTAssertEqual(packet.binary, [data, data2])\n    }\n    \n    func testEmitWithAck() {\n        let expectedSendString = \"20[\\\"test\\\"]\"\n        let sendData = [\"test\"]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testEmitDataWithAck() {\n        let expectedSendString = \"51-0[\\\"test\\\",{\\\"num\\\":0,\\\"_placeholder\\\":true}]\"\n        let sendData = [\"test\", data]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/\", ack: false)\n\n        XCTAssertEqual(packet.packetString, expectedSendString)\n        XCTAssertEqual(packet.binary, [data])\n    }\n    \n    // Acks\n    func testEmptyAck() {\n        let expectedSendString = \"30[]\"\n        let packet = SocketPacket.packetFromEmit([], id: 0, nsp: \"/\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testNullAck() {\n        let expectedSendString = \"30[null]\"\n        let sendData = [NSNull()]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testStringAck() {\n        let expectedSendString = \"30[\\\"test\\\"]\"\n        let sendData = [\"test\"]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testJSONAck() {\n        let expectedSendString = \"30[{\\\"test\\\":\\\"hello\\\",\\\"hello\\\":1,\\\"foobar\\\":true,\\\"null\\\":null}]\"\n        let sendData = [[\"foobar\": true, \"hello\": 1, \"test\": \"hello\", \"null\": NSNull()]]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testBinaryAck() {\n        let expectedSendString = \"61-0[{\\\"num\\\":0,\\\"_placeholder\\\":true}]\"\n        let sendData = [data]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n        XCTAssertEqual(packet.binary, [data])\n    }\n    \n    func testMultipleBinaryAck() {\n        let expectedSendString = \"62-0[{\\\"data2\\\":{\\\"num\\\":0,\\\"_placeholder\\\":true},\\\"data1\\\":{\\\"num\\\":1,\\\"_placeholder\\\":true}}]\"\n        let sendData = [[\"data1\": data, \"data2\": data2]]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n        XCTAssertEqual(packet.binary, [data2, data])\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/SocketIO-MacTests/SocketEngineTest.swift",
    "content": "//\n//  SocketEngineTest.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 10/15/15.\n//\n//\n\nimport XCTest\n@testable import SocketIOClientSwift\n\nclass SocketEngineTest: XCTestCase {\n    var client: SocketIOClient!\n    var engine: SocketEngine!\n\n    override func setUp() {\n        super.setUp()\n        client = SocketIOClient(socketURL: NSURL(string: \"http://localhost\")!)\n        engine = SocketEngine(client: client, url: NSURL(string: \"http://localhost\")!, options: nil)\n        \n        client.setTestable()\n    }\n    \n    func testBasicPollingMessage() {\n        let expectation = expectationWithDescription(\"Basic polling test\")\n        client.on(\"blankTest\") {data, ack in\n            expectation.fulfill()\n        }\n        \n        engine.parsePollingMessage(\"15:42[\\\"blankTest\\\"]\")\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n    \n    func testTwoPacketsInOnePollTest() {\n        let finalExpectation = expectationWithDescription(\"Final packet in poll test\")\n        var gotBlank = false\n        \n        client.on(\"blankTest\") {data, ack in\n            gotBlank = true\n        }\n        \n        client.on(\"stringTest\") {data, ack in\n            if let str = data[0] as? String where gotBlank {\n                if str == \"hello\" {\n                    finalExpectation.fulfill()\n                }\n            }\n        }\n        \n        engine.parsePollingMessage(\"15:42[\\\"blankTest\\\"]24:42[\\\"stringTest\\\",\\\"hello\\\"]\")\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n    \n    func testEngineDoesErrorOnUnknownTransport() {\n        let finalExpectation = expectationWithDescription(\"Unknown Transport\")\n        \n        client.on(\"error\") {data, ack in\n            if let error = data[0] as? String where error == \"Unknown transport\" {\n                finalExpectation.fulfill()\n            }\n        }\n        \n        engine.parseEngineMessage(\"{\\\"code\\\": 0, \\\"message\\\": \\\"Unknown transport\\\"}\", fromPolling: false)\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n    \n    func testEngineDoesErrorOnUnknownMessage() {\n        let finalExpectation = expectationWithDescription(\"Engine Errors\")\n        \n        client.on(\"error\") {data, ack in\n            finalExpectation.fulfill()\n        }\n        \n        engine.parseEngineMessage(\"afafafda\", fromPolling: false)\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n    \n    func testEngineDecodesUTF8Properly() {\n        let expectation = expectationWithDescription(\"Engine Decodes utf8\")\n        \n        client.on(\"stringTest\") {data, ack in\n            XCTAssertEqual(data[0] as? String, \"lïne one\\nlīne \\rtwo\", \"Failed string test\")\n            expectation.fulfill()\n        }\n\n        engine.parsePollingMessage(\"41:42[\\\"stringTest\\\",\\\"lÃ¯ne one\\\\nlÄ«ne \\\\rtwo\\\"]\")\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/SocketIO-MacTests/SocketNamespacePacketTest.swift",
    "content": "//\n//  SocketNamespacePacketTest.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 10/11/15.\n//\n//\n\nimport XCTest\n@testable import SocketIOClientSwift\n\nclass SocketNamespacePacketTest: XCTestCase {\n    let data = \"test\".dataUsingEncoding(NSUTF8StringEncoding)!\n    let data2 = \"test2\".dataUsingEncoding(NSUTF8StringEncoding)!\n    \n    func testEmpyEmit() {\n        let expectedSendString = \"2/swift,[\\\"test\\\"]\"\n        let sendData = [\"test\"]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/swift\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testNullEmit() {\n        let expectedSendString = \"2/swift,[\\\"test\\\",null]\"\n        let sendData = [\"test\", NSNull()]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/swift\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testStringEmit() {\n        let expectedSendString = \"2/swift,[\\\"test\\\",\\\"foo bar\\\"]\"\n        let sendData = [\"test\", \"foo bar\"]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/swift\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testJSONEmit() {\n        let expectedSendString = \"2/swift,[\\\"test\\\",{\\\"test\\\":\\\"hello\\\",\\\"hello\\\":1,\\\"foobar\\\":true,\\\"null\\\":null}]\"\n        let sendData = [\"test\", [\"foobar\": true, \"hello\": 1, \"test\": \"hello\", \"null\": NSNull()]]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/swift\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testArrayEmit() {\n        let expectedSendString = \"2/swift,[\\\"test\\\",[\\\"hello\\\",1,{\\\"test\\\":\\\"test\\\"}]]\"\n        let sendData = [\"test\", [\"hello\", 1, [\"test\": \"test\"]]]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/swift\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testBinaryEmit() {\n        let expectedSendString = \"51-/swift,[\\\"test\\\",{\\\"num\\\":0,\\\"_placeholder\\\":true}]\"\n        let sendData = [\"test\", data]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/swift\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n        XCTAssertEqual(packet.binary, [data])\n    }\n    \n    func testMultipleBinaryEmit() {\n        let expectedSendString = \"52-/swift,[\\\"test\\\",{\\\"data1\\\":{\\\"num\\\":0,\\\"_placeholder\\\":true},\\\"data2\\\":{\\\"num\\\":1,\\\"_placeholder\\\":true}}]\"\n        let sendData = [\"test\", [\"data1\": data, \"data2\": data2]]\n        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: \"/swift\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n        XCTAssertEqual(packet.binary, [data, data2])\n    }\n    \n    func testEmitWithAck() {\n        let expectedSendString = \"2/swift,0[\\\"test\\\"]\"\n        let sendData = [\"test\"]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/swift\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testEmitDataWithAck() {\n        let expectedSendString = \"51-/swift,0[\\\"test\\\",{\\\"num\\\":0,\\\"_placeholder\\\":true}]\"\n        let sendData = [\"test\", data]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/swift\", ack: false)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n        XCTAssertEqual(packet.binary, [data])\n    }\n    \n    // Acks\n    func testEmptyAck() {\n        let expectedSendString = \"3/swift,0[]\"\n        let packet = SocketPacket.packetFromEmit([], id: 0, nsp: \"/swift\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testNullAck() {\n        let expectedSendString = \"3/swift,0[null]\"\n        let sendData = [NSNull()]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/swift\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testStringAck() {\n        let expectedSendString = \"3/swift,0[\\\"test\\\"]\"\n        let sendData = [\"test\"]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/swift\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testJSONAck() {\n        let expectedSendString = \"3/swift,0[{\\\"test\\\":\\\"hello\\\",\\\"hello\\\":1,\\\"foobar\\\":true,\\\"null\\\":null}]\"\n        let sendData = [[\"foobar\": true, \"hello\": 1, \"test\": \"hello\", \"null\": NSNull()]]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/swift\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n    }\n    \n    func testBinaryAck() {\n        let expectedSendString = \"61-/swift,0[{\\\"num\\\":0,\\\"_placeholder\\\":true}]\"\n        let sendData = [data]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/swift\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n        XCTAssertEqual(packet.binary, [data])\n    }\n    \n    func testMultipleBinaryAck() {\n        let expectedSendString = \"62-/swift,0[{\\\"data2\\\":{\\\"num\\\":0,\\\"_placeholder\\\":true},\\\"data1\\\":{\\\"num\\\":1,\\\"_placeholder\\\":true}}]\"\n        let sendData = [[\"data1\": data, \"data2\": data2]]\n        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: \"/swift\", ack: true)\n        \n        XCTAssertEqual(packet.packetString, expectedSendString)\n        XCTAssertEqual(packet.binary, [data2, data])\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/SocketIO-MacTests/SocketParserTest.swift",
    "content": "//\n//  SocketParserTest.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Lukas Schmidt on 05.09.15.\n//\n//\n\nimport XCTest\n@testable import SocketIOClientSwift\n\nclass SocketParserTest: XCTestCase {\n    let testSocket = SocketIOClient(socketURL: NSURL())\n    \n    //Format key: message; namespace-data-binary-id\n    static let packetTypes: Dictionary<String, (String, [AnyObject], [NSData], Int)> = [\n        \"0\": (\"/\", [], [], -1), \"1\": (\"/\", [], [], -1),\n        \"25[\\\"test\\\"]\": (\"/\", [\"test\"], [], 5),\n        \"2[\\\"test\\\",\\\"~~0\\\"]\": (\"/\", [\"test\", \"~~0\"], [], -1),\n        \"2/swift,[\\\"testArrayEmitReturn\\\",[\\\"test3\\\",\\\"test4\\\"]]\": (\"/swift\", [\"testArrayEmitReturn\", [\"test3\", \"test4\"]], [], -1),\n        \"51-/swift,[\\\"testMultipleItemsWithBufferEmitReturn\\\",[1,2],{\\\"test\\\":\\\"bob\\\"},25,\\\"polo\\\",{\\\"_placeholder\\\":true,\\\"num\\\":0}]\": (\"/swift\", [\"testMultipleItemsWithBufferEmitReturn\", [1, 2], [\"test\": \"bob\"], 25, \"polo\", \"~~0\"], [], -1),\n        \"3/swift,0[[\\\"test3\\\",\\\"test4\\\"]]\": (\"/swift\", [[\"test3\", \"test4\"]], [], 0),\n        \"61-/swift,19[[1,2],{\\\"test\\\":\\\"bob\\\"},25,\\\"polo\\\",{\\\"_placeholder\\\":true,\\\"num\\\":0}]\": (\"/swift\", [ [1, 2], [\"test\": \"bob\"], 25, \"polo\", \"~~0\"], [], 19),\n        \"4/swift,\": (\"/swift\", [], [], -1),\n        \"0/swift\": (\"/swift\", [], [], -1),\n        \"1/swift\": (\"/swift\", [], [], -1),\n        \"4\\\"ERROR\\\"\": (\"/\", [\"ERROR\"], [], -1),\n        \"41\": (\"/\", [1], [], -1)]\n    \n    func testDisconnect() {\n        let message = \"1\"\n        validateParseResult(message)\n    }\n\n    func testConnect() {\n        let message = \"0\"\n        validateParseResult(message)\n    }\n    \n    func testDisconnectNameSpace() {\n        let message = \"1/swift\"\n        validateParseResult(message)\n    }\n    \n    func testConnecttNameSpace() {\n        let message = \"0/swift\"\n        validateParseResult(message)\n    }\n    \n    func testIdEvent() {\n        let message = \"25[\\\"test\\\"]\"\n        validateParseResult(message)\n    }\n    \n    func testBinaryPlaceholderAsString() {\n        let message = \"2[\\\"test\\\",\\\"~~0\\\"]\"\n        validateParseResult(message)\n    }\n    \n    func testNameSpaceArrayParse() {\n        let message = \"2/swift,[\\\"testArrayEmitReturn\\\",[\\\"test3\\\",\\\"test4\\\"]]\"\n        validateParseResult(message)\n    }\n    \n    func testNameSpaceArrayAckParse() {\n        let message = \"3/swift,0[[\\\"test3\\\",\\\"test4\\\"]]\"\n        validateParseResult(message)\n    }\n    \n    func testNameSpaceBinaryEventParse() {\n        let message = \"51-/swift,[\\\"testMultipleItemsWithBufferEmitReturn\\\",[1,2],{\\\"test\\\":\\\"bob\\\"},25,\\\"polo\\\",{\\\"_placeholder\\\":true,\\\"num\\\":0}]\"\n        validateParseResult(message)\n    }\n    \n    func testNameSpaceBinaryAckParse() {\n        let message = \"61-/swift,19[[1,2],{\\\"test\\\":\\\"bob\\\"},25,\\\"polo\\\",{\\\"_placeholder\\\":true,\\\"num\\\":0}]\"\n        validateParseResult(message)\n    }\n    \n    func testNamespaceErrorParse() {\n        let message = \"4/swift,\"\n        validateParseResult(message)\n    }\n    \n    func testErrorTypeString() {\n        let message = \"4\\\"ERROR\\\"\"\n        validateParseResult(message)\n    }\n    \n    func testErrorTypeInt() {\n        let message = \"41\"\n        validateParseResult(message)\n    }\n    \n    func testInvalidInput() {\n        let message = \"8\"\n        switch testSocket.parseString(message) {\n        case .Left(_):\n            return\n        case .Right(_):\n            XCTFail(\"Created packet when shouldn't have\")\n        }\n    }\n    \n    func testGenericParser() {\n        var parser = SocketStringReader(message: \"61-/swift,\")\n        XCTAssertEqual(parser.read(1), \"6\")\n        XCTAssertEqual(parser.currentCharacter, \"1\")\n        XCTAssertEqual(parser.readUntilStringOccurence(\"-\"), \"1\")\n        XCTAssertEqual(parser.currentCharacter, \"/\")\n    }\n    \n    func validateParseResult(message: String) {\n        let validValues = SocketParserTest.packetTypes[message]!\n        let packet = testSocket.parseString(message)\n        let type = message.substringWithRange(Range<String.Index>(start: message.startIndex, end: message.startIndex.advancedBy(1)))\n        if case let .Right(packet) = packet {\n            XCTAssertEqual(packet.type, SocketPacket.PacketType(rawValue: Int(type) ?? -1)!)\n            XCTAssertEqual(packet.nsp, validValues.0)\n            XCTAssertTrue((packet.data as NSArray).isEqualToArray(validValues.1))\n            XCTAssertTrue((packet.binary as NSArray).isEqualToArray(validValues.2))\n            XCTAssertEqual(packet.id, validValues.3)\n        } else {\n            XCTFail()\n        }\n    }\n    \n    func testParsePerformance() {\n        let keys = Array(SocketParserTest.packetTypes.keys)\n        measureBlock({\n            for item in keys.enumerate() {\n                self.testSocket.parseString(item.element)\n            }\n        })\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/SocketIO-MacTests/SocketSideEffectTest.swift",
    "content": "//\n//  SocketSideEffectTest.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 10/11/15.\n//\n//\n\nimport XCTest\n@testable import SocketIOClientSwift\n\nclass SocketSideEffectTest: XCTestCase {\n    let data = \"test\".dataUsingEncoding(NSUTF8StringEncoding)!\n    let data2 = \"test2\".dataUsingEncoding(NSUTF8StringEncoding)!\n    private var socket: SocketIOClient!\n    \n    override func setUp() {\n        super.setUp()\n        socket = SocketIOClient(socketURL: NSURL())\n        socket.setTestable()\n    }\n    \n    func testInitialCurrentAck() {\n        XCTAssertEqual(socket.currentAck, -1)\n    }\n    \n    func testFirstAck() {\n        socket.emitWithAck(\"test\")(timeoutAfter: 0) {data in}\n        XCTAssertEqual(socket.currentAck, 0)\n    }\n    \n    func testSecondAck() {\n        socket.emitWithAck(\"test\")(timeoutAfter: 0) {data in}\n        socket.emitWithAck(\"test\")(timeoutAfter: 0) {data in}\n        \n        XCTAssertEqual(socket.currentAck, 1)\n    }\n    \n    func testHandleAck() {\n        let expectation = expectationWithDescription(\"handled ack\")\n        socket.emitWithAck(\"test\")(timeoutAfter: 0) {data in\n            XCTAssertEqual(data[0] as? String, \"hello world\")\n            expectation.fulfill()\n        }\n        \n        socket.parseSocketMessage(\"30[\\\"hello world\\\"]\")\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n    \n    func testHandleAck2() {\n        let expectation = expectationWithDescription(\"handled ack2\")\n        socket.emitWithAck(\"test\")(timeoutAfter: 0) {data in\n            XCTAssertTrue(data.count == 2, \"Wrong number of ack items\")\n            expectation.fulfill()\n        }\n        \n        socket.parseSocketMessage(\"61-0[{\\\"_placeholder\\\":true,\\\"num\\\":0},{\\\"test\\\":true}]\")\n        socket.parseBinaryData(NSData())\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n    \n    func testHandleEvent() {\n        let expectation = expectationWithDescription(\"handled event\")\n        socket.on(\"test\") {data, ack in\n            XCTAssertEqual(data[0] as? String, \"hello world\")\n            expectation.fulfill()\n        }\n        \n        socket.parseSocketMessage(\"2[\\\"test\\\",\\\"hello world\\\"]\")\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n    \n    func testHandleOnceEvent() {\n        let expectation = expectationWithDescription(\"handled event\")\n        socket.once(\"test\") {data, ack in\n            XCTAssertEqual(data[0] as? String, \"hello world\")\n            XCTAssertEqual(self.socket.testHandlers.count, 0)\n            expectation.fulfill()\n        }\n        \n        socket.parseSocketMessage(\"2[\\\"test\\\",\\\"hello world\\\"]\")\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n    \n    func testOffWithEvent() {\n        socket.on(\"test\") {data, ack in }\n        XCTAssertEqual(socket.testHandlers.count, 1)\n        socket.on(\"test\") {data, ack in }\n        XCTAssertEqual(socket.testHandlers.count, 2)\n        socket.off(\"test\")\n        XCTAssertEqual(socket.testHandlers.count, 0)\n    }\n    \n    func testOffWithId() {\n        let handler = socket.on(\"test\") {data, ack in }\n        XCTAssertEqual(socket.testHandlers.count, 1)\n        socket.on(\"test\") {data, ack in }\n        XCTAssertEqual(socket.testHandlers.count, 2)\n        socket.off(id: handler)\n        XCTAssertEqual(socket.testHandlers.count, 1)\n    }\n    \n    func testHandlesErrorPacket() {\n        let expectation = expectationWithDescription(\"Handled error\")\n        socket.on(\"error\") {data, ack in\n            if let error = data[0] as? String where error == \"test error\" {\n                expectation.fulfill()\n            }\n        }\n        \n        socket.parseSocketMessage(\"4\\\"test error\\\"\")\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n    \n    func testHandleBinaryEvent() {\n        let expectation = expectationWithDescription(\"handled binary event\")\n        socket.on(\"test\") {data, ack in\n            if let dict = data[0] as? NSDictionary, data = dict[\"test\"] as? NSData {\n                XCTAssertEqual(data, self.data)\n                expectation.fulfill()\n            }\n        }\n        \n        socket.parseSocketMessage(\"51-[\\\"test\\\",{\\\"test\\\":{\\\"_placeholder\\\":true,\\\"num\\\":0}}]\")\n        socket.parseBinaryData(data)\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n    \n    func testHandleMultipleBinaryEvent() {\n        let expectation = expectationWithDescription(\"handled multiple binary event\")\n        socket.on(\"test\") {data, ack in\n            if let dict = data[0] as? NSDictionary, data = dict[\"test\"] as? NSData,\n                data2 = dict[\"test2\"] as? NSData {\n                    XCTAssertEqual(data, self.data)\n                    XCTAssertEqual(data2, self.data2)\n                    expectation.fulfill()\n            }\n        }\n        \n        socket.parseSocketMessage(\"52-[\\\"test\\\",{\\\"test\\\":{\\\"_placeholder\\\":true,\\\"num\\\":0},\\\"test2\\\":{\\\"_placeholder\\\":true,\\\"num\\\":1}}]\")\n        socket.parseBinaryData(data)\n        socket.parseBinaryData(data2)\n        waitForExpectationsWithTimeout(3, handler: nil)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/SocketIO-iOS/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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>FMWK</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>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/SocketIO-iOS/SocketIO-iOS.h",
    "content": "//\n//  SocketIO-iOS.h\n//  SocketIO-iOS\n//\n//  Created by Nacho Soto on 7/11/15.\n//\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for SocketIO-iOS.\nFOUNDATION_EXPORT double SocketIO_iOSVersionNumber;\n\n//! Project version string for SocketIO-iOS.\nFOUNDATION_EXPORT const unsigned char SocketIO_iOSVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SocketIO_iOS/PublicHeader.h>\n\n\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/SocketIO-iOSTests/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>$(PRODUCT_BUNDLE_IDENTIFIER)</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": "Carthage/Checkouts/socket.io-client-swift/Source/SocketAckEmitter.swift",
    "content": "//\n//  SocketAckEmitter.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 9/16/15.\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\nimport Foundation\n\npublic final class SocketAckEmitter: NSObject {\n    let socket: SocketIOClient\n    let ackNum: Int\n    \n    init(socket: SocketIOClient, ackNum: Int) {\n        self.socket = socket\n        self.ackNum = ackNum\n    }\n    \n    public func with(items: AnyObject...) {\n        guard ackNum != -1 else { return }\n        \n        socket.emitAck(ackNum, withItems: items)\n    }\n    \n    public func with(items: [AnyObject]) {\n        guard ackNum != -1 else { return }\n        \n        socket.emitAck(ackNum, withItems: items)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketAckManager.swift",
    "content": "//\n//  SocketAckManager.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 4/3/15.\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\nimport Foundation\n\nprivate struct SocketAck: Hashable, Equatable {\n    let ack: Int\n    var callback: AckCallback!\n    var hashValue: Int {\n        return ack.hashValue\n    }\n    \n    init(ack: Int) {\n        self.ack = ack\n    }\n    \n    init(ack: Int, callback: AckCallback) {\n        self.ack = ack\n        self.callback = callback\n    }\n}\n\nprivate func <(lhs: SocketAck, rhs: SocketAck) -> Bool {\n    return lhs.ack < rhs.ack\n}\n\nprivate func ==(lhs: SocketAck, rhs: SocketAck) -> Bool {\n    return lhs.ack == rhs.ack\n}\n\nstruct SocketAckManager {\n    private var acks = Set<SocketAck>(minimumCapacity: 1)\n    \n    mutating func addAck(ack: Int, callback: AckCallback) {\n        acks.insert(SocketAck(ack: ack, callback: callback))\n    }\n    \n    mutating func executeAck(ack: Int, items: [AnyObject]) {\n        let callback = acks.remove(SocketAck(ack: ack))\n\n        dispatch_async(dispatch_get_main_queue()) {\n            callback?.callback(items)\n        }\n    }\n    \n    mutating func timeoutAck(ack: Int) {\n        let callback = acks.remove(SocketAck(ack: ack))\n        \n        dispatch_async(dispatch_get_main_queue()) {\n            callback?.callback([\"NO ACK\"])\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketAnyEvent.swift",
    "content": "//\n//  SocketAnyEvent.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 3/28/15.\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\nimport Foundation\n\npublic final class SocketAnyEvent: NSObject {\n    public let event: String\n    public let items: NSArray?\n    override public var description: String {\n        return \"SocketAnyEvent: Event: \\(event) items: \\(items ?? nil)\"\n    }\n    \n    init(event: String, items: NSArray?) {\n        self.event = event\n        self.items = items\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketClientSpec.swift",
    "content": "//\n//  SocketClientSpec.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 1/3/16.\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\nprotocol SocketClientSpec: class {\n    var nsp: String { get set }\n    var waitingData: [SocketPacket] { get set }\n    \n    func didConnect()\n    func didDisconnect(reason: String)\n    func didError(reason: String)\n    func handleAck(ack: Int, data: [AnyObject])\n    func handleEvent(event: String, data: [AnyObject], isInternalMessage: Bool, withAck ack: Int)\n    func joinNamespace(namespace: String)\n}\n\nextension SocketClientSpec {\n    func didError(reason: String) {\n        DefaultSocketLogger.Logger.error(\"%@\", type: \"SocketIOClient\", args: reason)\n        \n        handleEvent(\"error\", data: [reason], isInternalMessage: true, withAck: -1)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketEngine.swift",
    "content": "//\n//  SocketEngine.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 3/3/15.\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\nimport Foundation\n\npublic final class SocketEngine: NSObject, SocketEnginePollable, SocketEngineWebsocket {\n    public let emitQueue = dispatch_queue_create(\"com.socketio.engineEmitQueue\", DISPATCH_QUEUE_SERIAL)\n    public let handleQueue = dispatch_queue_create(\"com.socketio.engineHandleQueue\", DISPATCH_QUEUE_SERIAL)\n    public let parseQueue = dispatch_queue_create(\"com.socketio.engineParseQueue\", DISPATCH_QUEUE_SERIAL)\n\n    public var connectParams: [String: AnyObject]? {\n        didSet {\n            (urlPolling, urlWebSocket) = createURLs()\n        }\n    }\n    public var postWait = [String]()\n    public var waitingForPoll = false\n    public var waitingForPost = false\n    \n    public private(set) var closed = false\n    public private(set) var connected = false\n    public private(set) var cookies: [NSHTTPCookie]?\n    public private(set) var extraHeaders: [String: String]?\n    public private(set) var fastUpgrade = false\n    public private(set) var forcePolling = false\n    public private(set) var forceWebsockets = false\n    public private(set) var invalidated = false\n    public private(set) var pingTimer: NSTimer?\n    public private(set) var polling = true\n    public private(set) var probing = false\n    public private(set) var session: NSURLSession?\n    public private(set) var sid = \"\"\n    public private(set) var socketPath = \"/engine.io/\"\n    public private(set) var urlPolling = NSURL()\n    public private(set) var urlWebSocket = NSURL()\n    public private(set) var websocket = false\n    public private(set) var ws: WebSocket?\n\n    public weak var client: SocketEngineClient?\n    \n    private weak var sessionDelegate: NSURLSessionDelegate?\n\n    private typealias Probe = (msg: String, type: SocketEnginePacketType, data: [NSData])\n    private typealias ProbeWaitQueue = [Probe]\n\n    private let logType = \"SocketEngine\"\n    private let url: NSURL\n    \n    private var pingInterval: Double?\n    private var pingTimeout = 0.0 {\n        didSet {\n            pongsMissedMax = Int(pingTimeout / (pingInterval ?? 25))\n        }\n    }\n    private var pongsMissed = 0\n    private var pongsMissedMax = 0\n    private var probeWait = ProbeWaitQueue()\n    private var secure = false\n    private var selfSigned = false\n    private var voipEnabled = false\n\n    public init(client: SocketEngineClient, url: NSURL, options: Set<SocketIOClientOption>) {\n        self.client = client\n        self.url = url\n        \n        for option in options {\n            switch option {\n            case let .ConnectParams(params):\n                connectParams = params\n            case let .SessionDelegate(delegate):\n                sessionDelegate = delegate\n            case let .ForcePolling(force):\n                forcePolling = force\n            case let .ForceWebsockets(force):\n                forceWebsockets = force\n            case let .Cookies(cookies):\n                self.cookies = cookies\n            case let .Path(path):\n                socketPath = path\n            case let .ExtraHeaders(headers):\n                extraHeaders = headers\n            case let .VoipEnabled(enable):\n                voipEnabled = enable\n            case let .Secure(secure):\n                self.secure = secure\n            case let .SelfSigned(selfSigned):\n                self.selfSigned = selfSigned\n            default:\n                continue\n            }\n        }\n        \n        super.init()\n        \n        (urlPolling, urlWebSocket) = createURLs()\n    }\n    \n    public convenience init(client: SocketEngineClient, url: NSURL, options: NSDictionary?) {\n        self.init(client: client, url: url, options: options?.toSocketOptionsSet() ?? [])\n    }\n    \n    @available(*, deprecated=5.3)\n    public convenience init(client: SocketEngineClient, urlString: String, options: Set<SocketIOClientOption>) {\n        guard let url = NSURL(string: urlString) else { fatalError(\"Incorrect url\") }\n        self.init(client: client, url: url, options: options)\n    }\n    \n    @available(*, deprecated=5.3)\n    public convenience init(client: SocketEngineClient, urlString: String, options: NSDictionary?) {\n        guard let url = NSURL(string: urlString) else { fatalError(\"Incorrect url\") }\n        self.init(client: client, url: url, options: options?.toSocketOptionsSet() ?? [])\n    }\n\n    deinit {\n        DefaultSocketLogger.Logger.log(\"Engine is being released\", type: logType)\n        closed = true\n        stopPolling()\n    }\n    \n    private func checkAndHandleEngineError(msg: String) {\n        guard let stringData = msg.dataUsingEncoding(NSUTF8StringEncoding,\n            allowLossyConversion: false) else { return }\n        \n        do {\n            if let dict = try NSJSONSerialization.JSONObjectWithData(stringData,\n                options: NSJSONReadingOptions.MutableContainers) as? NSDictionary {\n                    guard let code = dict[\"code\"] as? Int else { return }\n                    guard let error = dict[\"message\"] as? String else { return }\n                    \n                    switch code {\n                    case 0: // Unknown transport\n                        didError(error)\n                    case 1: // Unknown sid.\n                        didError(error)\n                    case 2: // Bad handshake request\n                        didError(error)\n                    case 3: // Bad request\n                        didError(error)\n                    default:\n                        didError(error)\n                    }\n            }\n        } catch {\n            didError(\"Got unknown error from server \\(msg)\")\n        }\n    }\n\n    private func checkIfMessageIsBase64Binary(message: String) -> Bool {\n        if message.hasPrefix(\"b4\") {\n            // binary in base64 string\n            let noPrefix = message[message.startIndex.advancedBy(2)..<message.endIndex]\n\n            if let data = NSData(base64EncodedString: noPrefix,\n                options: .IgnoreUnknownCharacters) {\n                    client?.parseEngineBinaryData(data)\n            }\n            \n            return true\n        } else {\n            return false\n        }\n    }\n\n    public func close(reason: String) {\n        func postSendClose(data: NSData?, _ res: NSURLResponse?, _ err: NSError?) {\n            sid = \"\"\n            closed = true\n            invalidated = true\n            connected = false\n            \n            pingTimer?.invalidate()\n            ws?.disconnect()\n            stopPolling()\n            client?.engineDidClose(reason)\n        }\n        \n        DefaultSocketLogger.Logger.log(\"Engine is being closed.\", type: logType)\n        \n        if websocket {\n            sendWebSocketMessage(\"\", withType: .Close, withData: [])\n            postSendClose(nil, nil, nil)\n        } else {\n            // We need to take special care when we're polling that we send it ASAP\n            postWait.append(String(SocketEnginePacketType.Close.rawValue))\n            let req = createRequestForPostWithPostWait()\n            doRequest(req, withCallback: postSendClose)\n        }\n    }\n\n    private func createURLs() -> (NSURL, NSURL) {\n        if client == nil {\n            return (NSURL(), NSURL())\n        }\n\n        let urlPolling = NSURLComponents(string: url.absoluteString)!\n        let urlWebSocket = NSURLComponents(string: url.absoluteString)!\n        var queryString = \"\"\n        \n        urlWebSocket.path = socketPath\n        urlPolling.path = socketPath\n        urlWebSocket.query = \"transport=websocket\"\n        urlPolling.query = \"transport=polling&b64=1\"\n\n        if secure {\n            urlPolling.scheme = \"https\"\n            urlWebSocket.scheme = \"wss\"\n        } else {\n            urlPolling.scheme = \"http\"\n            urlWebSocket.scheme = \"ws\"\n        }\n\n        if connectParams != nil {\n            for (key, value) in connectParams! {\n                queryString += \"&\\(key)=\\(value)\"\n            }\n        }\n\n        urlWebSocket.query = urlWebSocket.query! + queryString\n        urlPolling.query = urlPolling.query! + queryString\n        \n        return (urlPolling.URL!, urlWebSocket.URL!)\n    }\n\n    private func createWebsocketAndConnect() {\n        ws = WebSocket(url: urlWebSocketWithSid)\n        \n        if cookies != nil {\n            let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies!)\n            for (key, value) in headers {\n                ws?.headers[key] = value\n            }\n        }\n\n        if extraHeaders != nil {\n            for (headerName, value) in extraHeaders! {\n                ws?.headers[headerName] = value\n            }\n        }\n\n        ws?.queue = handleQueue\n        ws?.voipEnabled = voipEnabled\n        ws?.delegate = self\n        ws?.selfSignedSSL = selfSigned\n\n        ws?.connect()\n    }\n    \n    public func didError(error: String) {\n        DefaultSocketLogger.Logger.error(error, type: logType)\n        client?.engineDidError(error)\n        close(error)\n    }\n\n    public func doFastUpgrade() {\n        if waitingForPoll {\n            DefaultSocketLogger.Logger.error(\"Outstanding poll when switched to WebSockets,\" +\n                \"we'll probably disconnect soon. You should report this.\", type: logType)\n        }\n\n        sendWebSocketMessage(\"\", withType: .Upgrade, withData: [])\n        websocket = true\n        polling = false\n        fastUpgrade = false\n        probing = false\n        flushProbeWait()\n    }\n\n    private func flushProbeWait() {\n        DefaultSocketLogger.Logger.log(\"Flushing probe wait\", type: logType)\n\n        dispatch_async(emitQueue) {\n            for waiter in self.probeWait {\n                self.write(waiter.msg, withType: waiter.type, withData: waiter.data)\n            }\n            \n            self.probeWait.removeAll(keepCapacity: false)\n            \n            if self.postWait.count != 0 {\n                self.flushWaitingForPostToWebSocket()\n            }\n        }\n    }\n    \n    // We had packets waiting for send when we upgraded\n    // Send them raw\n    public func flushWaitingForPostToWebSocket() {\n        guard let ws = self.ws else { return }\n        \n        for msg in postWait {\n            ws.writeString(fixDoubleUTF8(msg))\n        }\n        \n        postWait.removeAll(keepCapacity: true)\n    }\n\n    private func handleClose(reason: String) {\n        client?.engineDidClose(reason)\n    }\n\n    private func handleMessage(message: String) {\n        client?.parseEngineMessage(message)\n    }\n\n    private func handleNOOP() {\n        doPoll()\n    }\n\n    private func handleOpen(openData: String) {\n        let mesData = openData.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!\n        do {\n            let json = try NSJSONSerialization.JSONObjectWithData(mesData,\n                options: NSJSONReadingOptions.AllowFragments) as? NSDictionary\n            if let sid = json?[\"sid\"] as? String {\n                let upgradeWs: Bool\n\n                self.sid = sid\n                connected = true\n\n                if let upgrades = json?[\"upgrades\"] as? [String] {\n                    upgradeWs = upgrades.contains(\"websocket\")\n                } else {\n                    upgradeWs = false\n                }\n\n                if let pingInterval = json?[\"pingInterval\"] as? Double, pingTimeout = json?[\"pingTimeout\"] as? Double {\n                    self.pingInterval = pingInterval / 1000.0\n                    self.pingTimeout = pingTimeout / 1000.0\n                }\n\n                if !forcePolling && !forceWebsockets && upgradeWs {\n                    createWebsocketAndConnect()\n                }\n                \n                \n                startPingTimer()\n                \n                if !forceWebsockets {\n                    doPoll()\n                }\n                \n                client?.engineDidOpen?(\"Connect\")\n            }\n        } catch {\n            didError(\"Error parsing open packet\")\n            return\n        }\n    }\n\n    private func handlePong(pongMessage: String) {\n        pongsMissed = 0\n\n        // We should upgrade\n        if pongMessage == \"3probe\" {\n            upgradeTransport()\n        }\n    }\n\n    public func open() {\n        if connected {\n            DefaultSocketLogger.Logger.error(\"Engine tried opening while connected. Assuming this was a reconnect\", type: logType)\n            close(\"reconnect\")\n        }\n        \n        DefaultSocketLogger.Logger.log(\"Starting engine\", type: logType)\n        DefaultSocketLogger.Logger.log(\"Handshaking\", type: logType)\n\n        resetEngine()\n\n        if forceWebsockets {\n            polling = false\n            websocket = true\n            createWebsocketAndConnect()\n            return\n        }\n\n        let reqPolling = NSMutableURLRequest(URL: urlPolling)\n\n        if cookies != nil {\n            let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies!)\n            reqPolling.allHTTPHeaderFields = headers\n        }\n\n        if let extraHeaders = extraHeaders {\n            for (headerName, value) in extraHeaders {\n                reqPolling.setValue(value, forHTTPHeaderField: headerName)\n            }\n        }\n\n        doLongPoll(reqPolling)\n    }\n\n    public func parseEngineData(data: NSData) {\n        DefaultSocketLogger.Logger.log(\"Got binary data: %@\", type: \"SocketEngine\", args: data)\n        client?.parseEngineBinaryData(data.subdataWithRange(NSMakeRange(1, data.length - 1)))\n    }\n\n    public func parseEngineMessage(message: String, fromPolling: Bool) {\n        DefaultSocketLogger.Logger.log(\"Got message: %@\", type: logType, args: message)\n        \n        let reader = SocketStringReader(message: message)\n        let fixedString: String\n\n        guard let type = SocketEnginePacketType(rawValue: Int(reader.currentCharacter) ?? -1) else {\n            if !checkIfMessageIsBase64Binary(message) {\n                checkAndHandleEngineError(message)\n            }\n            \n            return\n        }\n\n        if fromPolling && type != .Noop {\n            fixedString = fixDoubleUTF8(message)\n        } else {\n            fixedString = message\n        }\n\n        switch type {\n        case .Message:\n            handleMessage(fixedString[fixedString.startIndex.successor()..<fixedString.endIndex])\n        case .Noop:\n            handleNOOP()\n        case .Pong:\n            handlePong(fixedString)\n        case .Open:\n            handleOpen(fixedString[fixedString.startIndex.successor()..<fixedString.endIndex])\n        case .Close:\n            handleClose(fixedString)\n        default:\n            DefaultSocketLogger.Logger.log(\"Got unknown packet type\", type: logType)\n        }\n    }\n    \n    private func resetEngine() {\n        closed = false\n        connected = false\n        fastUpgrade = false\n        polling = true\n        probing = false\n        invalidated = false\n        session = NSURLSession(configuration: .defaultSessionConfiguration(),\n            delegate: sessionDelegate,\n            delegateQueue: NSOperationQueue())\n        sid = \"\"\n        waitingForPoll = false\n        waitingForPost = false\n        websocket = false\n    }\n\n    @objc private func sendPing() {\n        //Server is not responding\n        if pongsMissed > pongsMissedMax {\n            pingTimer?.invalidate()\n            client?.engineDidClose(\"Ping timeout\")\n            return\n        }\n\n        pongsMissed += 1\n        write(\"\", withType: .Ping, withData: [])\n    }\n\n    // Starts the ping timer\n    private func startPingTimer() {\n        if let pingInterval = pingInterval {\n            pingTimer?.invalidate()\n            pingTimer = nil\n\n            dispatch_async(dispatch_get_main_queue()) {\n                self.pingTimer = NSTimer.scheduledTimerWithTimeInterval(pingInterval, target: self,\n                    selector: Selector(\"sendPing\"), userInfo: nil, repeats: true)\n            }\n        }\n    }\n\n    private func upgradeTransport() {\n        if ws?.isConnected ?? false {\n            DefaultSocketLogger.Logger.log(\"Upgrading transport to WebSockets\", type: logType)\n\n            fastUpgrade = true\n            sendPollMessage(\"\", withType: .Noop, withData: [])\n            // After this point, we should not send anymore polling messages\n        }\n    }\n\n    /**\n    Write a message, independent of transport.\n     */\n    public func write(msg: String, withType type: SocketEnginePacketType, withData data: [NSData]) {\n        dispatch_async(emitQueue) {\n            guard self.connected else { return }\n            \n            if self.websocket {\n                DefaultSocketLogger.Logger.log(\"Writing ws: %@ has data: %@\",\n                    type: self.logType, args: msg, data.count != 0)\n                self.sendWebSocketMessage(msg, withType: type, withData: data)\n            } else if !self.probing {\n                DefaultSocketLogger.Logger.log(\"Writing poll: %@ has data: %@\",\n                    type: self.logType, args: msg, data.count != 0)\n                self.sendPollMessage(msg, withType: type, withData: data)\n            } else {\n                self.probeWait.append((msg, type, data))\n            }\n        }\n    }\n    \n    // Delegate methods\n    public func websocketDidConnect(socket: WebSocket) {\n        if !forceWebsockets {\n            probing = true\n            probeWebSocket()\n        } else {\n            connected = true\n            probing = false\n            polling = false\n        }\n    }\n    \n    public func websocketDidDisconnect(socket: WebSocket, error: NSError?) {\n        probing = false\n        \n        if closed {\n            client?.engineDidClose(\"Disconnect\")\n            return\n        }\n        \n        if websocket {\n            pingTimer?.invalidate()\n            connected = false\n            websocket = false\n            \n            let reason = error?.localizedDescription ?? \"Socket Disconnected\"\n            \n            if error != nil {\n                didError(reason)\n            }\n            \n            client?.engineDidClose(reason)\n        } else {\n            flushProbeWait()\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketEngineClient.swift",
    "content": "//\n//  SocketEngineClient.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 3/19/15.\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\nimport Foundation\n\n@objc public protocol SocketEngineClient {    \n    func engineDidError(reason: String)\n    func engineDidClose(reason: String)\n    optional func engineDidOpen(reason: String)\n    func parseEngineMessage(msg: String)\n    func parseEngineBinaryData(data: NSData)\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketEnginePacketType.swift",
    "content": "//\n//  SocketEnginePacketType.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 10/7/15.\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\nimport Foundation\n\n@objc public enum SocketEnginePacketType: Int {\n    case Open, Close, Ping, Pong, Message, Upgrade, Noop\n}"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketEnginePollable.swift",
    "content": "//\n//  SocketEnginePollable.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 1/15/16.\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\nimport Foundation\n\n/// Protocol that is used to implement socket.io polling support\npublic protocol SocketEnginePollable: SocketEngineSpec {\n    var invalidated: Bool { get }\n    /// Holds strings waiting to be sent over polling. \n    /// You shouldn't need to mess with this.\n    var postWait: [String] { get set }\n    var session: NSURLSession? { get }\n    /// Because socket.io doesn't let you send two polling request at the same time\n    /// we have to keep track if there's an outstanding poll\n    var waitingForPoll: Bool { get set }\n    /// Because socket.io doesn't let you send two post request at the same time\n    /// we have to keep track if there's an outstanding post\n    var waitingForPost: Bool { get set }\n    \n    func doPoll()\n    func sendPollMessage(message: String, withType type: SocketEnginePacketType, withData datas: [NSData])\n    func stopPolling()\n}\n\n// Default polling methods\nextension SocketEnginePollable {\n    private func addHeaders(req: NSMutableURLRequest) {\n        if cookies != nil {\n            let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies!)\n            req.allHTTPHeaderFields = headers\n        }\n        \n        if extraHeaders != nil {\n            for (headerName, value) in extraHeaders! {\n                req.setValue(value, forHTTPHeaderField: headerName)\n            }\n        }\n    }\n    \n    func createRequestForPostWithPostWait() -> NSURLRequest {\n        var postStr = \"\"\n        \n        for packet in postWait {\n            let len = packet.characters.count\n            \n            postStr += \"\\(len):\\(packet)\"\n        }\n        \n        DefaultSocketLogger.Logger.log(\"Created POST string: %@\", type: \"SocketEnginePolling\", args: postStr)\n        \n        postWait.removeAll(keepCapacity: false)\n        \n        let req = NSMutableURLRequest(URL: urlPollingWithSid)\n        \n        addHeaders(req)\n        \n        req.HTTPMethod = \"POST\"\n        req.setValue(\"text/plain; charset=UTF-8\", forHTTPHeaderField: \"Content-Type\")\n        \n        let postData = postStr.dataUsingEncoding(NSUTF8StringEncoding,\n            allowLossyConversion: false)!\n        \n        req.HTTPBody = postData\n        req.setValue(String(postData.length), forHTTPHeaderField: \"Content-Length\")\n        \n        return req\n    }\n    \n    public func doPoll() {\n        if websocket || waitingForPoll || !connected || closed {\n            return\n        }\n        \n        waitingForPoll = true\n        let req = NSMutableURLRequest(URL: urlPollingWithSid)\n        \n        addHeaders(req)\n        doLongPoll(req)\n    }\n    \n    func doRequest(req: NSURLRequest, withCallback callback: (NSData?, NSURLResponse?, NSError?) -> Void) {\n            if !polling || closed || invalidated {\n                DefaultSocketLogger.Logger.error(\"Tried to do polling request when not supposed to\", type: \"SocketEnginePolling\")\n                return\n            }\n            \n            DefaultSocketLogger.Logger.log(\"Doing polling request\", type: \"SocketEnginePolling\")\n            \n            session?.dataTaskWithRequest(req, completionHandler: callback).resume()\n    }\n    \n    func doLongPoll(req: NSURLRequest) {\n        doRequest(req) {[weak self] data, res, err in\n            guard let this = self else { return }\n            \n            if err != nil || data == nil {\n                DefaultSocketLogger.Logger.error(err?.localizedDescription ?? \"Error\", type: \"SocketEnginePolling\")\n                \n                if this.polling {\n                    this.didError(err?.localizedDescription ?? \"Error\")\n                }\n                \n                return\n            }\n            \n            DefaultSocketLogger.Logger.log(\"Got polling response\", type: \"SocketEnginePolling\")\n            \n            if let str = String(data: data!, encoding: NSUTF8StringEncoding) {\n                dispatch_async(this.parseQueue) {\n                    this.parsePollingMessage(str)\n                }\n            }\n            \n            this.waitingForPoll = false\n            \n            if this.fastUpgrade {\n                this.doFastUpgrade()\n            } else if !this.closed && this.polling {\n                this.doPoll()\n            }\n        }\n    }\n    \n    private func flushWaitingForPost() {\n        if postWait.count == 0 || !connected {\n            return\n        } else if websocket {\n            flushWaitingForPostToWebSocket()\n            return\n        }\n        \n        let req = createRequestForPostWithPostWait()\n        \n        waitingForPost = true\n        \n        DefaultSocketLogger.Logger.log(\"POSTing\", type: \"SocketEnginePolling\")\n        \n        doRequest(req) {[weak self] data, res, err in\n            guard let this = self else { return }\n            \n            if err != nil {\n                DefaultSocketLogger.Logger.error(err?.localizedDescription ?? \"Error\", type: \"SocketEnginePolling\")\n                \n                if this.polling {\n                    this.didError(err?.localizedDescription ?? \"Error\")\n                }\n                \n                return\n            }\n            \n            this.waitingForPost = false\n            \n            dispatch_async(this.emitQueue) {\n                if !this.fastUpgrade {\n                    this.flushWaitingForPost()\n                    this.doPoll()\n                }\n            }\n        }\n    }\n    \n    func parsePollingMessage(str: String) {\n        guard str.characters.count != 1 else {\n            return\n        }\n        \n        var reader = SocketStringReader(message: str)\n        \n        while reader.hasNext {\n            if let n = Int(reader.readUntilStringOccurence(\":\")) {\n                let str = reader.read(n)\n                \n                dispatch_async(handleQueue) {\n                    self.parseEngineMessage(str, fromPolling: true)\n                }\n            } else {\n                dispatch_async(handleQueue) {\n                    self.parseEngineMessage(str, fromPolling: true)\n                }\n                break\n            }\n        }\n    }\n    \n    /// Send polling message.\n    /// Only call on emitQueue\n    public func sendPollMessage(message: String, withType type: SocketEnginePacketType, withData datas: [NSData]) {\n            DefaultSocketLogger.Logger.log(\"Sending poll: %@ as type: %@\", type: \"SocketEnginePolling\", args: message, type.rawValue)\n            let fixedMessage = doubleEncodeUTF8(message)\n            let strMsg = \"\\(type.rawValue)\\(fixedMessage)\"\n            \n            postWait.append(strMsg)\n            \n            for data in datas {\n                if case let .Right(bin) = createBinaryDataForSend(data) {\n                    postWait.append(bin)\n                }\n            }\n            \n            if !waitingForPost {\n                flushWaitingForPost()\n            }\n    }\n    \n    public func stopPolling() {\n        waitingForPoll = false\n        waitingForPost = false\n        session?.finishTasksAndInvalidate()\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketEngineSpec.swift",
    "content": "//\n//  SocketEngineSpec.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 10/7/15.\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\nimport Foundation\n\n@objc public protocol SocketEngineSpec {\n    weak var client: SocketEngineClient? { get set }\n    var closed: Bool { get }\n    var connected: Bool { get }\n    var connectParams: [String: AnyObject]? { get set }\n    var cookies: [NSHTTPCookie]? { get }\n    var extraHeaders: [String: String]? { get }\n    var fastUpgrade: Bool { get }\n    var forcePolling: Bool { get }\n    var forceWebsockets: Bool { get }\n    var parseQueue: dispatch_queue_t! { get }\n    var pingTimer: NSTimer? { get }\n    var polling: Bool { get }\n    var probing: Bool { get }\n    var emitQueue: dispatch_queue_t! { get }\n    var handleQueue: dispatch_queue_t! { get }\n    var sid: String { get }\n    var socketPath: String { get }\n    var urlPolling: NSURL { get }\n    var urlWebSocket: NSURL { get }\n    var websocket: Bool { get }\n    \n    init(client: SocketEngineClient, url: NSURL, options: NSDictionary?)\n    \n    func close(reason: String)\n    func didError(error: String)\n    func doFastUpgrade()\n    func flushWaitingForPostToWebSocket()\n    func open()\n    func parseEngineData(data: NSData)\n    func parseEngineMessage(message: String, fromPolling: Bool)\n    func write(msg: String, withType type: SocketEnginePacketType, withData data: [NSData])\n}\n\nextension SocketEngineSpec {\n    var urlPollingWithSid: NSURL {\n        let com = NSURLComponents(URL: urlPolling, resolvingAgainstBaseURL: false)!\n        com.query = com.query! + \"&sid=\\(sid)\"\n        \n        return com.URL!\n    }\n    \n    var urlWebSocketWithSid: NSURL {\n        let com = NSURLComponents(URL: urlWebSocket, resolvingAgainstBaseURL: false)!\n        com.query = com.query! + (sid == \"\" ? \"\" : \"&sid=\\(sid)\")\n        \n        return com.URL!\n    }\n    \n    func createBinaryDataForSend(data: NSData) -> Either<NSData, String> {\n        if websocket {\n            var byteArray = [UInt8](count: 1, repeatedValue: 0x4)\n            let mutData = NSMutableData(bytes: &byteArray, length: 1)\n            \n            mutData.appendData(data)\n            \n            return .Left(mutData)\n        } else {\n            let str = \"b4\" + data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))\n            \n            return .Right(str)\n        }\n    }\n    \n    /// Send an engine message (4)\n    func send(msg: String, withData datas: [NSData]) {\n        write(msg, withType: .Message, withData: datas)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketEngineWebsocket.swift",
    "content": "//\n//  SocketEngineWebsocket.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 1/15/16.\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\nimport Foundation\n\n/// Protocol that is used to implement socket.io WebSocket support\npublic protocol SocketEngineWebsocket: SocketEngineSpec, WebSocketDelegate {\n    var ws: WebSocket? { get }\n\n    func sendWebSocketMessage(str: String, withType type: SocketEnginePacketType, withData datas: [NSData])\n}\n\n// WebSocket methods\nextension SocketEngineWebsocket {\n    func probeWebSocket() {\n        if ws?.isConnected ?? false {\n            sendWebSocketMessage(\"probe\", withType: .Ping, withData: [])\n        }\n    }\n    \n    /// Send message on WebSockets\n    /// Only call on emitQueue\n    public func sendWebSocketMessage(str: String, withType type: SocketEnginePacketType, withData datas: [NSData]) {\n            DefaultSocketLogger.Logger.log(\"Sending ws: %@ as type: %@\", type: \"SocketEngine\", args: str, type.rawValue)\n            \n            ws?.writeString(\"\\(type.rawValue)\\(str)\")\n            \n            for data in datas {\n                if case let .Left(bin) = createBinaryDataForSend(data) {\n                    ws?.writeData(bin)\n                }\n            }\n    }\n    \n    public func websocketDidReceiveMessage(socket: WebSocket, text: String) {\n        parseEngineMessage(text, fromPolling: false)\n    }\n    \n    public func websocketDidReceiveData(socket: WebSocket, data: NSData) {\n        parseEngineData(data)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketEventHandler.swift",
    "content": "//\n//  EventHandler.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 1/18/15.\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\nimport Foundation\n\nstruct SocketEventHandler {\n    let event: String\n    let id: NSUUID\n    let callback: NormalCallback\n    \n    func executeCallback(items: [AnyObject], withAck ack: Int, withSocket socket: SocketIOClient) {\n        callback(items, SocketAckEmitter(socket: socket, ackNum: ack))\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketFixUTF8.swift",
    "content": "//\n//  SocketFixUTF8.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 3/16/15.\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\nimport Foundation\n\nfunc fixDoubleUTF8(string: String) -> String {\n    if let utf8 = string.dataUsingEncoding(NSISOLatin1StringEncoding),\n        latin1 = NSString(data: utf8, encoding: NSUTF8StringEncoding) {\n            return latin1 as String\n    } else {\n        return string\n    }\n}\n\nfunc doubleEncodeUTF8(string: String) -> String {\n    if let latin1 = string.dataUsingEncoding(NSUTF8StringEncoding),\n        utf8 = NSString(data: latin1, encoding: NSISOLatin1StringEncoding) {\n            return utf8 as String\n    } else {\n        return string\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketIOClient.swift",
    "content": "//\n//  SocketIOClient.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 11/23/14.\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\nimport Foundation\n\npublic final class SocketIOClient: NSObject, SocketEngineClient, SocketParsable {\n    public let socketURL: NSURL\n\n    public private(set) var engine: SocketEngineSpec?\n    public private(set) var status = SocketIOClientStatus.NotConnected\n\n    public var forceNew = false\n    public var nsp = \"/\"\n    public var options: Set<SocketIOClientOption>\n    public var reconnects = true\n    public var reconnectWait = 10\n    public var sid: String? {\n        return engine?.sid\n    }\n\n    private let emitQueue = dispatch_queue_create(\"com.socketio.emitQueue\", DISPATCH_QUEUE_SERIAL)\n    private let logType = \"SocketIOClient\"\n    private let parseQueue = dispatch_queue_create(\"com.socketio.parseQueue\", DISPATCH_QUEUE_SERIAL)\n\n    private var anyHandler: ((SocketAnyEvent) -> Void)?\n    private var currentReconnectAttempt = 0\n    private var handlers = [SocketEventHandler]()\n    private var reconnectTimer: NSTimer?\n    private var ackHandlers = SocketAckManager()\n\n    private(set) var currentAck = -1\n    private(set) var handleQueue = dispatch_get_main_queue()\n    private(set) var reconnectAttempts = -1\n\n    var waitingData = [SocketPacket]()\n    \n    /**\n     Type safe way to create a new SocketIOClient. opts can be omitted\n     */\n    public init(socketURL: NSURL, options: Set<SocketIOClientOption> = []) {\n        self.options = options\n        self.socketURL = socketURL\n        \n        if socketURL.absoluteString.hasPrefix(\"https://\") {\n            self.options.insertIgnore(.Secure(true))\n        }\n        \n        for option in options {\n            switch option {\n            case let .Reconnects(reconnects):\n                self.reconnects = reconnects\n            case let .ReconnectAttempts(attempts):\n                reconnectAttempts = attempts\n            case let .ReconnectWait(wait):\n                reconnectWait = abs(wait)\n            case let .Nsp(nsp):\n                self.nsp = nsp\n            case let .Log(log):\n                DefaultSocketLogger.Logger.log = log\n            case let .Logger(logger):\n                DefaultSocketLogger.Logger = logger\n            case let .HandleQueue(queue):\n                handleQueue = queue\n            case let .ForceNew(force):\n                forceNew = force\n            default:\n                continue\n            }\n        }\n        \n        self.options.insertIgnore(.Path(\"/socket.io/\"))\n        \n        super.init()\n    }\n    \n    /**\n     Not so type safe way to create a SocketIOClient, meant for Objective-C compatiblity.\n     If using Swift it's recommended to use `init(socketURL: NSURL, options: Set<SocketIOClientOption>)`\n     */\n    public convenience init(socketURL: NSURL, options: NSDictionary?) {\n        self.init(socketURL: socketURL, options: options?.toSocketOptionsSet() ?? [])\n    }\n\n    /// Please use the NSURL based init\n    @available(*, deprecated=5.3)\n    public convenience init(socketURLString: String, options: Set<SocketIOClientOption> = []) {\n        guard let url = NSURL(string: socketURLString) else { fatalError(\"Incorrect url\") }\n        self.init(socketURL: url, options: options)\n    }\n    \n    /// Please use the NSURL based init\n    @available(*, deprecated=5.3)\n    public convenience init(socketURLString: String, options: NSDictionary?) {\n        guard let url = NSURL(string: socketURLString) else { fatalError(\"Incorrect url\") }\n        self.init(socketURL: url, options: options?.toSocketOptionsSet() ?? [])\n    }\n\n    deinit {\n        DefaultSocketLogger.Logger.log(\"Client is being released\", type: logType)\n        engine?.close(\"Client Deinit\")\n    }\n\n    private func addEngine() -> SocketEngineSpec {\n        DefaultSocketLogger.Logger.log(\"Adding engine\", type: logType)\n\n        engine = SocketEngine(client: self, url: socketURL, options: options)\n\n        return engine!\n    }\n\n    private func clearReconnectTimer() {\n        reconnectTimer?.invalidate()\n        reconnectTimer = nil\n    }\n\n    @available(*, deprecated=5.3)\n    public func close() {\n        disconnect()\n    }\n\n    /**\n     Connect to the server.\n     */\n    public func connect() {\n        connect(timeoutAfter: 0, withTimeoutHandler: nil)\n    }\n\n    /**\n     Connect to the server. If we aren't connected after timeoutAfter, call handler\n     */\n    public func connect(timeoutAfter timeoutAfter: Int, withTimeoutHandler handler: (() -> Void)?) {\n        assert(timeoutAfter >= 0, \"Invalid timeout: \\(timeoutAfter)\")\n\n        guard status != .Connected else {\n            DefaultSocketLogger.Logger.log(\"Tried connecting on an already connected socket\",\n                type: logType)\n            return\n        }\n\n        status = .Connecting\n\n        if engine == nil || forceNew {\n            addEngine().open()\n        } else {\n            engine?.open()\n        }\n\n        guard timeoutAfter != 0 else { return }\n\n        let time = dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutAfter) * Int64(NSEC_PER_SEC))\n\n        dispatch_after(time, handleQueue) {[weak self] in\n            if let this = self where this.status != .Connected {\n                this.status = .Closed\n                this.engine?.close(\"Connect timeout\")\n\n                handler?()\n            }\n        }\n    }\n\n    private func createOnAck(items: [AnyObject]) -> OnAckCallback {\n        currentAck += 1\n\n        return {[weak self, ack = currentAck] timeout, callback in\n            if let this = self {\n                this.ackHandlers.addAck(ack, callback: callback)\n\n                dispatch_async(this.emitQueue) {\n                    this._emit(items, ack: ack)\n                }\n\n                if timeout != 0 {\n                    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(timeout * NSEC_PER_SEC))\n\n                    dispatch_after(time, this.handleQueue) {\n                        this.ackHandlers.timeoutAck(ack)\n                    }\n                }\n            }\n        }\n    }\n\n    func didConnect() {\n        DefaultSocketLogger.Logger.log(\"Socket connected\", type: logType)\n        status = .Connected\n        currentReconnectAttempt = 0\n        clearReconnectTimer()\n\n        // Don't handle as internal because something crazy could happen where\n        // we disconnect before it's handled\n        handleEvent(\"connect\", data: [], isInternalMessage: false)\n    }\n\n    func didDisconnect(reason: String) {\n        guard status != .Closed else {\n            return\n        }\n\n        DefaultSocketLogger.Logger.log(\"Disconnected: %@\", type: logType, args: reason)\n\n        status = .Closed\n        reconnects = false\n\n        // Make sure the engine is actually dead.\n        engine?.close(reason)\n        handleEvent(\"disconnect\", data: [reason], isInternalMessage: true)\n    }\n\n    /**\n     Disconnects the socket. Only reconnect the same socket if you know what you're doing.\n     Will turn off automatic reconnects.\n     */\n    public func disconnect() {\n        DefaultSocketLogger.Logger.log(\"Closing socket\", type: logType)\n\n        reconnects = false\n        didDisconnect(\"Disconnect\")\n    }\n\n    /**\n     Send a message to the server\n     */\n    public func emit(event: String, _ items: AnyObject...) {\n        emit(event, withItems: items)\n    }\n\n    /**\n     Same as emit, but meant for Objective-C\n     */\n    public func emit(event: String, withItems items: [AnyObject]) {\n        guard status == .Connected else {\n            handleEvent(\"error\", data: [\"Tried emitting \\(event) when not connected\"], isInternalMessage: true)\n            return\n        }\n\n        dispatch_async(emitQueue) {\n            self._emit([event] + items)\n        }\n    }\n\n    /**\n     Sends a message to the server, requesting an ack. Use the onAck method of SocketAckHandler to add\n     an ack.\n     */\n    public func emitWithAck(event: String, _ items: AnyObject...) -> OnAckCallback {\n        return emitWithAck(event, withItems: items)\n    }\n\n    /**\n     Same as emitWithAck, but for Objective-C\n     */\n    public func emitWithAck(event: String, withItems items: [AnyObject]) -> OnAckCallback {\n        return createOnAck([event] + items)\n    }\n\n    private func _emit(data: [AnyObject], ack: Int? = nil) {\n        guard status == .Connected else {\n            handleEvent(\"error\", data: [\"Tried emitting when not connected\"], isInternalMessage: true)\n            return\n        }\n\n        let packet = SocketPacket.packetFromEmit(data, id: ack ?? -1, nsp: nsp, ack: false)\n        let str = packet.packetString\n\n        DefaultSocketLogger.Logger.log(\"Emitting: %@\", type: logType, args: str)\n\n        engine?.send(str, withData: packet.binary)\n    }\n\n    // If the server wants to know that the client received data\n    func emitAck(ack: Int, withItems items: [AnyObject]) {\n        dispatch_async(emitQueue) {\n            if self.status == .Connected {\n                let packet = SocketPacket.packetFromEmit(items, id: ack ?? -1, nsp: self.nsp, ack: true)\n                let str = packet.packetString\n\n                DefaultSocketLogger.Logger.log(\"Emitting Ack: %@\", type: self.logType, args: str)\n\n                self.engine?.send(str, withData: packet.binary)\n            }\n        }\n    }\n\n    public func engineDidClose(reason: String) {\n        waitingData.removeAll()\n\n        if status == .Closed || !reconnects {\n            didDisconnect(reason)\n        } else if status != .Reconnecting {\n            tryReconnectWithReason(reason)\n        }\n    }\n\n    /// error\n    public func engineDidError(reason: String) {\n        DefaultSocketLogger.Logger.error(\"%@\", type: logType, args: reason)\n\n        handleEvent(\"error\", data: [reason], isInternalMessage: true)\n    }\n\n    // Called when the socket gets an ack for something it sent\n    func handleAck(ack: Int, data: [AnyObject]) {\n        guard status == .Connected else {return}\n\n        DefaultSocketLogger.Logger.log(\"Handling ack: %@ with data: %@\", type: logType, args: ack, data ?? \"\")\n\n        ackHandlers.executeAck(ack, items: data)\n    }\n\n    /**\n     Causes an event to be handled. Only use if you know what you're doing.\n     */\n    public func handleEvent(event: String, data: [AnyObject], isInternalMessage: Bool, withAck ack: Int = -1) {\n        guard status == .Connected || isInternalMessage else {\n            return\n        }\n\n        DefaultSocketLogger.Logger.log(\"Handling event: %@ with data: %@\", type: logType, args: event, data ?? \"\")\n\n        dispatch_async(handleQueue) {\n            self.anyHandler?(SocketAnyEvent(event: event, items: data))\n\n            for handler in self.handlers where handler.event == event {\n                handler.executeCallback(data, withAck: ack, withSocket: self)\n            }\n        }\n    }\n\n    /**\n     Leaves nsp and goes back to /\n     */\n    public func leaveNamespace() {\n        if nsp != \"/\" {\n            engine?.send(\"1\\(nsp)\", withData: [])\n            nsp = \"/\"\n        }\n    }\n\n    /**\n     Joins namespace\n     */\n    public func joinNamespace(namespace: String) {\n        nsp = namespace\n\n        if nsp != \"/\" {\n            DefaultSocketLogger.Logger.log(\"Joining namespace\", type: logType)\n            engine?.send(\"0\\(nsp)\", withData: [])\n        }\n    }\n\n    /**\n     Removes handler(s)\n     */\n    public func off(event: String) {\n        DefaultSocketLogger.Logger.log(\"Removing handler for event: %@\", type: logType, args: event)\n\n        handlers = handlers.filter { $0.event != event }\n    }\n\n    /**\n    Removes a handler with the specified UUID gotten from an `on` or `once`\n    */\n    public func off(id id: NSUUID) {\n        DefaultSocketLogger.Logger.log(\"Removing handler with id: %@\", type: logType, args: id)\n\n        handlers = handlers.filter { $0.id != id }\n    }\n\n    /**\n     Adds a handler for an event.\n     Returns: A unique id for the handler\n     */\n    public func on(event: String, callback: NormalCallback) -> NSUUID {\n        DefaultSocketLogger.Logger.log(\"Adding handler for event: %@\", type: logType, args: event)\n\n        let handler = SocketEventHandler(event: event, id: NSUUID(), callback: callback)\n        handlers.append(handler)\n\n        return handler.id\n    }\n\n    /**\n     Adds a single-use handler for an event.\n     Returns: A unique id for the handler\n     */\n    public func once(event: String, callback: NormalCallback) -> NSUUID {\n        DefaultSocketLogger.Logger.log(\"Adding once handler for event: %@\", type: logType, args: event)\n\n        let id = NSUUID()\n\n        let handler = SocketEventHandler(event: event, id: id) {[weak self] data, ack in\n            guard let this = self else { return }\n            this.off(id: id)\n            callback(data, ack)\n        }\n\n        handlers.append(handler)\n\n        return handler.id\n    }\n\n    /**\n     Adds a handler that will be called on every event.\n     */\n    public func onAny(handler: (SocketAnyEvent) -> Void) {\n        anyHandler = handler\n    }\n\n    /**\n     Same as connect\n     */\n    @available(*, deprecated=5.3)\n    public func open() {\n        connect()\n    }\n\n    public func parseEngineMessage(msg: String) {\n        DefaultSocketLogger.Logger.log(\"Should parse message: %@\", type: \"SocketIOClient\", args: msg)\n\n        dispatch_async(parseQueue) {\n            self.parseSocketMessage(msg)\n        }\n    }\n\n    public func parseEngineBinaryData(data: NSData) {\n        dispatch_async(parseQueue) {\n            self.parseBinaryData(data)\n        }\n    }\n\n    /**\n     Tries to reconnect to the server.\n     */\n    public func reconnect() {\n        tryReconnectWithReason(\"manual reconnect\")\n    }\n\n    /**\n     Removes all handlers.\n     Can be used after disconnecting to break any potential remaining retain cycles.\n     */\n    public func removeAllHandlers() {\n        handlers.removeAll(keepCapacity: false)\n    }\n\n    private func tryReconnectWithReason(reason: String) {\n        if reconnectTimer == nil {\n            DefaultSocketLogger.Logger.log(\"Starting reconnect\", type: logType)\n            handleEvent(\"reconnect\", data: [reason], isInternalMessage: true)\n\n            status = .Reconnecting\n\n            dispatch_async(dispatch_get_main_queue()) {\n                self.reconnectTimer = NSTimer.scheduledTimerWithTimeInterval(Double(self.reconnectWait),\n                    target: self, selector: \"_tryReconnect\", userInfo: nil, repeats: true)\n            }\n        }\n    }\n\n    @objc private func _tryReconnect() {\n        if status == .Connected {\n            clearReconnectTimer()\n\n            return\n        }\n\n        if reconnectAttempts != -1 && currentReconnectAttempt + 1 > reconnectAttempts || !reconnects {\n            clearReconnectTimer()\n            didDisconnect(\"Reconnect Failed\")\n\n            return\n        }\n\n        DefaultSocketLogger.Logger.log(\"Trying to reconnect\", type: logType)\n        handleEvent(\"reconnectAttempt\", data: [reconnectAttempts - currentReconnectAttempt],\n            isInternalMessage: true)\n\n        currentReconnectAttempt += 1\n        connect()\n    }\n}\n\n// Test extensions\nextension SocketIOClient {\n    var testHandlers: [SocketEventHandler] {\n        return handlers\n    }\n\n    func setTestable() {\n        status = .Connected\n    }\n\n    func setTestEngine(engine: SocketEngineSpec?) {\n        self.engine = engine\n    }\n\n    func emitTest(event: String, _ data: AnyObject...) {\n        self._emit([event] + data)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketIOClientOption.swift",
    "content": "//\n//  SocketIOClientOption .swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 10/17/15.\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\nimport Foundation\n\nprotocol ClientOption: CustomStringConvertible, Hashable {\n    func getSocketIOOptionValue() -> AnyObject\n}\n\npublic enum SocketIOClientOption: ClientOption {\n    case ConnectParams([String: AnyObject])\n    case Cookies([NSHTTPCookie])\n    case ExtraHeaders([String: String])\n    case ForceNew(Bool)\n    case ForcePolling(Bool)\n    case ForceWebsockets(Bool)\n    case HandleQueue(dispatch_queue_t)\n    case Log(Bool)\n    case Logger(SocketLogger)\n    case Nsp(String)\n    case Path(String)\n    case Reconnects(Bool)\n    case ReconnectAttempts(Int)\n    case ReconnectWait(Int)\n    case Secure(Bool)\n    case SelfSigned(Bool)\n    case SessionDelegate(NSURLSessionDelegate)\n    case VoipEnabled(Bool)\n    \n    public var description: String {\n        let description: String\n        \n        switch self {\n        case .ConnectParams:\n            description = \"connectParams\"\n        case .Cookies:\n            description = \"cookies\"\n        case .ExtraHeaders:\n            description = \"extraHeaders\"\n        case .ForceNew:\n            description = \"forceNew\"\n        case .ForcePolling:\n            description = \"forcePolling\"\n        case .ForceWebsockets:\n            description = \"forceWebsockets\"\n        case .HandleQueue:\n            description = \"handleQueue\"\n        case .Log:\n            description = \"log\"\n        case .Logger:\n            description = \"logger\"\n        case .Nsp:\n            description = \"nsp\"\n        case .Path:\n            description = \"path\"\n        case .Reconnects:\n            description = \"reconnects\"\n        case .ReconnectAttempts:\n            description = \"reconnectAttempts\"\n        case .ReconnectWait:\n            description = \"reconnectWait\"\n        case .Secure:\n            description = \"secure\"\n        case .SelfSigned:\n            description = \"selfSigned\"\n        case .SessionDelegate:\n            description = \"sessionDelegate\"\n        case .VoipEnabled:\n            description = \"voipEnabled\"\n        }\n        \n        return description\n    }\n    \n    public var hashValue: Int {\n        return description.hashValue\n    }\n    \n    func getSocketIOOptionValue() -> AnyObject {\n        let value: AnyObject\n        \n        switch self {\n        case let .ConnectParams(params):\n            value = params\n        case let .Cookies(cookies):\n            value = cookies\n        case let .ExtraHeaders(headers):\n            value = headers\n        case let .ForceNew(force):\n            value = force\n        case let .ForcePolling(force):\n            value = force\n        case let .ForceWebsockets(force):\n            value = force\n        case let .HandleQueue(queue):\n            value = queue\n        case let .Log(log):\n            value = log\n        case let .Logger(logger):\n            value = logger\n        case let .Nsp(nsp):\n            value = nsp\n        case let .Path(path):\n            value = path\n        case let .Reconnects(reconnects):\n            value = reconnects\n        case let .ReconnectAttempts(attempts):\n            value = attempts\n        case let .ReconnectWait(wait):\n            value = wait\n        case let .Secure(secure):\n            value = secure\n        case let .SelfSigned(signed):\n            value = signed\n        case let .SessionDelegate(delegate):\n            value = delegate\n        case let .VoipEnabled(enabled):\n            value = enabled\n        }\n        \n        return value\n    }\n}\n\npublic func ==(lhs: SocketIOClientOption, rhs: SocketIOClientOption) -> Bool {\n    return lhs.description == rhs.description\n}\n\nextension Set where Element: ClientOption {\n    mutating func insertIgnore(element: Element) {\n        if !contains(element) {\n            insert(element)\n        }\n    }\n}\n\nextension NSDictionary {\n    static func keyValueToSocketIOClientOption(key: String, value: AnyObject) -> SocketIOClientOption? {\n        switch (key, value) {\n        case let (\"connectParams\", params as [String: AnyObject]):\n            return .ConnectParams(params)\n        case let (\"reconnects\", reconnects as Bool):\n            return .Reconnects(reconnects)\n        case let (\"reconnectAttempts\", attempts as Int):\n            return .ReconnectAttempts(attempts)\n        case let (\"reconnectWait\", wait as Int):\n            return .ReconnectWait(wait)\n        case let (\"forceNew\", force as Bool):\n            return .ForceNew(force)\n        case let (\"forcePolling\", force as Bool):\n            return .ForcePolling(force)\n        case let (\"forceWebsockets\", force as Bool):\n            return .ForceWebsockets(force)\n        case let (\"nsp\", nsp as String):\n            return .Nsp(nsp)\n        case let (\"cookies\", cookies as [NSHTTPCookie]):\n            return .Cookies(cookies)\n        case let (\"log\", log as Bool):\n            return .Log(log)\n        case let (\"logger\", logger as SocketLogger):\n            return .Logger(logger)\n        case let (\"sessionDelegate\", delegate as NSURLSessionDelegate):\n            return .SessionDelegate(delegate)\n        case let (\"path\", path as String):\n            return .Path(path)\n        case let (\"extraHeaders\", headers as [String: String]):\n            return .ExtraHeaders(headers)\n        case let (\"handleQueue\", queue as dispatch_queue_t):\n            return .HandleQueue(queue)\n        case let (\"voipEnabled\", enable as Bool):\n            return .VoipEnabled(enable)\n        case let (\"secure\", secure as Bool):\n            return .Secure(secure)\n        case let (\"selfSigned\", selfSigned as Bool):\n            return .SelfSigned(selfSigned)\n        default:\n            return nil\n        }\n    }\n    \n    func toSocketOptionsSet() -> Set<SocketIOClientOption> {\n        var options = Set<SocketIOClientOption>()\n        \n        for (rawKey, value) in self {\n            if let key = rawKey as? String, opt = NSDictionary.keyValueToSocketIOClientOption(key, value: value) {\n                options.insertIgnore(opt)\n            }\n        }\n        \n        return options\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketIOClientStatus.swift",
    "content": "//\n//  SocketIOClientStatus.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 8/14/15.\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\nimport Foundation\n\n@objc public enum SocketIOClientStatus: Int, CustomStringConvertible {\n    case NotConnected, Closed, Connecting, Connected, Reconnecting\n\n    public var description: String {\n        switch self {\n        case NotConnected:\n            return \"Not Connected\"\n        case Closed:\n            return \"Closed\"\n        case Connecting:\n            return \"Connecting\"\n        case Connected:\n            return \"Connected\"\n        case Reconnecting:\n            return \"Reconnecting\"\n        }\n    }\n}"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketLogger.swift",
    "content": "//\n//  SocketLogger.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 4/11/15.\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\nimport Foundation\n\npublic protocol SocketLogger: class {\n    /// Whether to log or not\n    var log: Bool {get set}\n    \n    /// Normal log messages\n    func log(message: String, type: String, args: AnyObject...)\n    \n    /// Error Messages\n    func error(message: String, type: String, args: AnyObject...)\n}\n\npublic extension SocketLogger {\n    func log(message: String, type: String, args: AnyObject...) {\n        abstractLog(\"LOG\", message: message, type: type, args: args)\n    }\n    \n    func error(message: String, type: String, args: AnyObject...) {\n        abstractLog(\"ERROR\", message: message, type: type, args: args)\n    }\n    \n    private func abstractLog(logType: String, message: String, type: String, args: [AnyObject]) {\n        guard log else { return }\n        \n        let newArgs = args.map({arg -> CVarArgType in String(arg)})\n        let replaced = String(format: message, arguments: newArgs)\n        \n        NSLog(\"%@ %@: %@\", logType, type, replaced)\n    }\n}\n\nclass DefaultSocketLogger: SocketLogger {\n    static var Logger: SocketLogger = DefaultSocketLogger()\n\n    var log = false\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketPacket.swift",
    "content": "//\n//  SocketPacket.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 1/18/15.\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\nimport Foundation\n\nstruct SocketPacket {\n    private let placeholders: Int\n    \n    private static let logType = \"SocketPacket\"\n\n    let nsp: String\n    let id: Int\n    let type: PacketType\n    \n    enum PacketType: Int {\n        case Connect, Disconnect, Event, Ack, Error, BinaryEvent, BinaryAck\n    }\n    \n    var args: [AnyObject] {\n        if type == .Event || type == .BinaryEvent && data.count != 0 {\n            return Array(data.dropFirst())\n        } else {\n            return data\n        }\n    }\n    \n    var binary: [NSData]\n    var data: [AnyObject]\n    var description: String {\n        return \"SocketPacket {type: \\(String(type.rawValue)); data: \" +\n            \"\\(String(data)); id: \\(id); placeholders: \\(placeholders); nsp: \\(nsp)}\"\n    }\n    \n    var event: String {\n        return String(data[0])\n    }\n    \n    var packetString: String {\n        return createPacketString()\n    }\n    \n    init(type: SocketPacket.PacketType, data: [AnyObject] = [AnyObject](), id: Int = -1,\n        nsp: String, placeholders: Int = 0, binary: [NSData] = [NSData]()) {\n        self.data = data\n        self.id = id\n        self.nsp = nsp\n        self.type = type\n        self.placeholders = placeholders\n        self.binary = binary\n    }\n    \n    mutating func addData(data: NSData) -> Bool {\n        if placeholders == binary.count {\n            return true\n        }\n        \n        binary.append(data)\n        \n        if placeholders == binary.count {\n            fillInPlaceholders()\n            return true\n        } else {\n            return false\n        }\n    }\n    \n    private func completeMessage(message: String, ack: Bool) -> String {\n        var restOfMessage = \"\"\n        \n        if data.count == 0 {\n            return message + \"]\"\n        }\n        \n        for arg in data {\n            if arg is NSDictionary || arg is [AnyObject] {\n                do {\n                    let jsonSend = try NSJSONSerialization.dataWithJSONObject(arg,\n                        options: NSJSONWritingOptions(rawValue: 0))\n                    let jsonString = String(data: jsonSend, encoding: NSUTF8StringEncoding)\n                    \n                    restOfMessage += jsonString! + \",\"\n                } catch {\n                    DefaultSocketLogger.Logger.error(\"Error creating JSON object in SocketPacket.completeMessage\",\n                        type: SocketPacket.logType)\n                }\n            } else if let str = arg as? String {\n                restOfMessage += \"\\\"\" + ((str[\"\\n\"] <~ \"\\\\\\\\n\")[\"\\r\"] <~ \"\\\\\\\\r\") + \"\\\",\"\n            } else if arg is NSNull {\n                restOfMessage += \"null,\"\n            } else {\n                restOfMessage += \"\\(arg),\"\n            }\n        }\n        \n        if restOfMessage != \"\" {\n            restOfMessage.removeAtIndex(restOfMessage.endIndex.predecessor())\n        }\n        \n        return message + restOfMessage + \"]\"\n    }\n    \n    private func createAck() -> String {\n        let message: String\n        \n        if type == .Ack {\n            if nsp == \"/\" {\n                message = \"3\\(id)[\"\n            } else {\n                message = \"3\\(nsp),\\(id)[\"\n            }\n        } else {\n            if nsp == \"/\" {\n                message = \"6\\(binary.count)-\\(id)[\"\n            } else {\n                message = \"6\\(binary.count)-\\(nsp),\\(id)[\"\n            }\n        }\n        \n        return completeMessage(message, ack: true)\n    }\n\n    \n    private func createMessageForEvent() -> String {\n        let message: String\n        \n        if type == .Event {\n            if nsp == \"/\" {\n                if id == -1 {\n                    message = \"2[\"\n                } else {\n                    message = \"2\\(id)[\"\n                }\n            } else {\n                if id == -1 {\n                    message = \"2\\(nsp),[\"\n                } else {\n                    message = \"2\\(nsp),\\(id)[\"\n                }\n            }\n        } else {\n            if nsp == \"/\" {\n                if id == -1 {\n                    message = \"5\\(binary.count)-[\"\n                } else {\n                    message = \"5\\(binary.count)-\\(id)[\"\n                }\n            } else {\n                if id == -1 {\n                    message = \"5\\(binary.count)-\\(nsp),[\"\n                } else {\n                    message = \"5\\(binary.count)-\\(nsp),\\(id)[\"\n                }\n            }\n        }\n        \n        return completeMessage(message, ack: false)\n    }\n    \n    private func createPacketString() -> String {\n        let str: String\n        \n        if type == .Event || type == .BinaryEvent {\n            str = createMessageForEvent()\n        } else {\n            str = createAck()\n        }\n        \n        return str\n    }\n    \n    // Called when we have all the binary data for a packet\n    // calls _fillInPlaceholders, which replaces placeholders with the\n    // corresponding binary\n    private mutating func fillInPlaceholders() {\n        data = data.map(_fillInPlaceholders)\n    }\n    \n    // Helper method that looks for placeholder strings\n    // If object is a collection it will recurse\n    // Returns the object if it is not a placeholder string or the corresponding\n    // binary data\n    private func _fillInPlaceholders(object: AnyObject) -> AnyObject {\n        switch object {\n        case let string as String where string[\"~~(\\\\d)\"].groups() != nil:\n            return binary[Int(string[\"~~(\\\\d)\"].groups()![1])!]\n        case let dict as NSDictionary:\n            return dict.reduce(NSMutableDictionary(), combine: {cur, keyValue in\n                cur[keyValue.0 as! NSCopying] = _fillInPlaceholders(keyValue.1)\n                return cur\n            })\n        case let arr as [AnyObject]:\n            return arr.map(_fillInPlaceholders)\n        default:\n            return object\n        }\n    }\n}\n\nextension SocketPacket {\n    private static func findType(binCount: Int, ack: Bool) -> PacketType {\n        switch binCount {\n        case 0 where !ack:\n            return .Event\n        case 0 where ack:\n            return .Ack\n        case _ where !ack:\n            return .BinaryEvent\n        case _ where ack:\n            return .BinaryAck\n        default:\n            return .Error\n        }\n    }\n    \n    static func packetFromEmit(items: [AnyObject], id: Int, nsp: String, ack: Bool) -> SocketPacket {\n        let (parsedData, binary) = deconstructData(items)\n        let packet = SocketPacket(type: findType(binary.count, ack: ack), data: parsedData,\n            id: id, nsp: nsp, placeholders: -1, binary: binary)\n        \n        return packet\n    }\n}\n\nprivate extension SocketPacket {\n    // Recursive function that looks for NSData in collections\n    static func shred(data: AnyObject, inout binary: [NSData]) -> AnyObject {\n        let placeholder = [\"_placeholder\": true, \"num\": binary.count]\n        \n        switch data {\n        case let bin as NSData:\n            binary.append(bin)\n            return placeholder\n        case let arr as [AnyObject]:\n            return arr.map({shred($0, binary: &binary)})\n        case let dict as NSDictionary:\n            return dict.reduce(NSMutableDictionary(), combine: {cur, keyValue in\n                cur[keyValue.0 as! NSCopying] = shred(keyValue.1, binary: &binary)\n                return cur\n            })\n        default:\n            return data\n        }\n    }\n    \n    // Removes binary data from emit data\n    // Returns a type containing the de-binaryed data and the binary\n    static func deconstructData(data: [AnyObject]) -> ([AnyObject], [NSData]) {\n        var binary = [NSData]()\n        \n        return (data.map({shred($0, binary: &binary)}), binary)\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketParsable.swift",
    "content": "//\n//  SocketParsable.swift\n//  Socket.IO-Client-Swift\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\nimport Foundation\n\nprotocol SocketParsable: SocketClientSpec {\n    func parseBinaryData(data: NSData)\n    func parseSocketMessage(message: String)\n}\n\nextension SocketParsable {\n    private func isCorrectNamespace(nsp: String) -> Bool {\n        return nsp == self.nsp\n    }\n    \n    private func handleConnect(p: SocketPacket) {\n        if p.nsp == \"/\" && nsp != \"/\" {\n            joinNamespace(nsp)\n        } else if p.nsp != \"/\" && nsp == \"/\" {\n            didConnect()\n        } else {\n            didConnect()\n        }\n    }\n    \n    private func handlePacket(pack: SocketPacket) {\n        switch pack.type {\n        case .Event where isCorrectNamespace(pack.nsp):\n            handleEvent(pack.event, data: pack.args,\n                isInternalMessage: false, withAck: pack.id)\n        case .Ack where isCorrectNamespace(pack.nsp):\n            handleAck(pack.id, data: pack.data)\n        case .BinaryEvent where isCorrectNamespace(pack.nsp):\n            waitingData.append(pack)\n        case .BinaryAck where isCorrectNamespace(pack.nsp):\n            waitingData.append(pack)\n        case .Connect:\n            handleConnect(pack)\n        case .Disconnect:\n            didDisconnect(\"Got Disconnect\")\n        case .Error:\n            handleEvent(\"error\", data: pack.data, isInternalMessage: true, withAck: pack.id)\n        default:\n            DefaultSocketLogger.Logger.log(\"Got invalid packet: %@\", type: \"SocketParser\", args: pack.description)\n        }\n    }\n    \n    /// Parses a messsage from the engine. Returning either a string error or a complete SocketPacket\n    func parseString(message: String) -> Either<String, SocketPacket> {\n        var parser = SocketStringReader(message: message)\n        \n        guard let type = SocketPacket.PacketType(rawValue: Int(parser.read(1)) ?? -1) else {\n            return .Left(\"Invalid packet type\")\n        }\n        \n        if !parser.hasNext {\n            return .Right(SocketPacket(type: type, nsp: \"/\"))\n        }\n        \n        var namespace: String?\n        var placeholders = -1\n        \n        if type == .BinaryEvent || type == .BinaryAck {\n            if let holders = Int(parser.readUntilStringOccurence(\"-\")) {\n                placeholders = holders\n            } else {\n                return .Left(\"Invalid packet\")\n            }\n        }\n        \n        if parser.currentCharacter == \"/\" {\n            namespace = parser.readUntilStringOccurence(\",\") ?? parser.readUntilEnd()\n        }\n        \n        if !parser.hasNext {\n            return .Right(SocketPacket(type: type, id: -1,\n                nsp: namespace ?? \"/\", placeholders: placeholders))\n        }\n        \n        var idString = \"\"\n        \n        if type == .Error {\n            parser.advanceIndexBy(-1)\n        }\n        \n        while parser.hasNext && type != .Error {\n            if let int = Int(parser.read(1)) {\n                idString += String(int)\n            } else {\n                parser.advanceIndexBy(-2)\n                break\n            }\n        }\n        \n        let d = message[parser.currentIndex.advancedBy(1)..<message.endIndex]\n        let noPlaceholders = d[\"(\\\\{\\\"_placeholder\\\":true,\\\"num\\\":(\\\\d*)\\\\})\"] <~ \"\\\"~~$2\\\"\"\n        \n        switch parseData(noPlaceholders) {\n        case let .Left(err):\n            // If first you don't succeed, try again\n            if case let .Right(data) = parseData(\"\\([noPlaceholders as AnyObject])\") {\n                return .Right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,\n                    nsp: namespace ?? \"/\", placeholders: placeholders))\n            } else {\n                return .Left(err)\n            }\n        case let .Right(data):\n            return .Right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,\n                nsp: namespace ?? \"/\", placeholders: placeholders))\n        }\n    }\n    \n    // Parses data for events\n    private func parseData(data: String) -> Either<String, [AnyObject]> {\n        let stringData = data.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)\n        do {\n            if let arr = try NSJSONSerialization.JSONObjectWithData(stringData!,\n                options: NSJSONReadingOptions.MutableContainers) as? [AnyObject] {\n                    return .Right(arr)\n            } else {\n                return .Left(\"Expected data array\")\n            }\n        } catch {\n            return .Left(\"Error parsing data for packet\")\n        }\n    }\n    \n    // Parses messages recieved\n    func parseSocketMessage(message: String) {\n        guard !message.isEmpty else { return }\n        \n        DefaultSocketLogger.Logger.log(\"Parsing %@\", type: \"SocketParser\", args: message)\n        \n        switch parseString(message) {\n        case let .Left(err):\n            DefaultSocketLogger.Logger.error(\"\\(err): %@\", type: \"SocketParser\", args: message)\n        case let .Right(pack):\n            DefaultSocketLogger.Logger.log(\"Decoded packet as: %@\", type: \"SocketParser\", args: pack.description)\n            handlePacket(pack)\n        }\n    }\n    \n    func parseBinaryData(data: NSData) {\n        guard !waitingData.isEmpty else {\n            DefaultSocketLogger.Logger.error(\"Got data when not remaking packet\", type: \"SocketParser\")\n            return\n        }\n        \n        // Should execute event?\n        guard waitingData[waitingData.count - 1].addData(data) else {\n            return\n        }\n        \n        let packet = waitingData.removeLast()\n        \n        if packet.type != .BinaryAck {\n            handleEvent(packet.event, data: packet.args ?? [],\n                isInternalMessage: false, withAck: packet.id)\n        } else {\n            handleAck(packet.id, data: packet.args)\n        }\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketStringReader.swift",
    "content": "//\n//  SocketStringReader.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Lukas Schmidt on 07.09.15.\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\nstruct SocketStringReader {\n    let message: String\n    var currentIndex: String.Index\n    var hasNext: Bool {\n        return currentIndex != message.endIndex\n    }\n    \n    var currentCharacter: String {\n        return String(message[currentIndex])\n    }\n    \n    init(message: String) {\n        self.message = message\n        currentIndex = message.startIndex\n    }\n    \n    mutating func advanceIndexBy(n: Int) {\n        currentIndex = currentIndex.advancedBy(n)\n    }\n    \n    mutating func read(readLength: Int) -> String {\n        let readString = message[currentIndex..<currentIndex.advancedBy(readLength)]\n        advanceIndexBy(readLength)\n        \n        return readString\n    }\n    \n    mutating func readUntilStringOccurence(string: String) -> String {\n        let substring = message[currentIndex..<message.endIndex]\n        guard let foundRange = substring.rangeOfString(string) else {\n            currentIndex = message.endIndex\n            \n            return substring\n        }\n        \n        advanceIndexBy(message.startIndex.distanceTo(foundRange.startIndex) + 1)\n        \n        return substring.substringToIndex(foundRange.startIndex)\n    }\n    \n    mutating func readUntilEnd() -> String {\n        return read(currentIndex.distanceTo(message.endIndex))\n    }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SocketTypes.swift",
    "content": "//\n//  SocketTypes.swift\n//  Socket.IO-Client-Swift\n//\n//  Created by Erik Little on 4/8/15.\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\nimport Foundation\n\npublic typealias AckCallback = ([AnyObject]) -> Void\npublic typealias NormalCallback = ([AnyObject], SocketAckEmitter) -> Void\npublic typealias OnAckCallback = (timeoutAfter: UInt64, callback: AckCallback) -> Void\n\nenum Either<E, V> {\n    case Left(E)\n    case Right(V)\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/SwiftRegex.swift",
    "content": "//\n//  SwiftRegex.swift\n//  SwiftRegex\n//\n//  Created by John Holdsworth on 26/06/2014.\n//  Copyright (c) 2014 John Holdsworth.\n//\n//  $Id: //depot/SwiftRegex/SwiftRegex.swift#37 $\n//\n//  This code is in the public domain from:\n//  https://github.com/johnno1962/SwiftRegex\n//\n\nimport Foundation\n\ninfix operator <~ { associativity none precedence 130 }\n\nprivate let lock = dispatch_semaphore_create(1)\nprivate var swiftRegexCache = [String: NSRegularExpression]()\n\ninternal final class SwiftRegex: NSObject, BooleanType {\n    var target:String\n    var regex: NSRegularExpression\n    \n    init(target:String, pattern:String, options:NSRegularExpressionOptions?) {\n        self.target = target\n        \n        if dispatch_semaphore_wait(lock, dispatch_time(DISPATCH_TIME_NOW, Int64(10 * NSEC_PER_MSEC))) != 0 {\n            do {\n                let regex = try NSRegularExpression(pattern: pattern, options:\n                    NSRegularExpressionOptions.DotMatchesLineSeparators)\n                self.regex = regex\n            } catch let error as NSError {\n                SwiftRegex.failure(\"Error in pattern: \\(pattern) - \\(error)\")\n                self.regex = NSRegularExpression()\n            }\n            \n            super.init()\n            return\n        }\n        \n        if let regex = swiftRegexCache[pattern] {\n            self.regex = regex\n        } else {\n            do {\n                let regex = try NSRegularExpression(pattern: pattern, options:\n                    NSRegularExpressionOptions.DotMatchesLineSeparators)\n                swiftRegexCache[pattern] = regex\n                self.regex = regex\n            } catch let error as NSError {\n                SwiftRegex.failure(\"Error in pattern: \\(pattern) - \\(error)\")\n                self.regex = NSRegularExpression()\n            }\n        }\n        dispatch_semaphore_signal(lock)\n        super.init()\n    }\n\n    private static func failure(message: String) {\n        fatalError(\"SwiftRegex: \\(message)\")\n    }\n\n    private var targetRange: NSRange {\n        return NSRange(location: 0,length: target.utf16.count)\n    }\n    \n    private func substring(range: NSRange) -> String? {\n        if range.location != NSNotFound {\n            return (target as NSString).substringWithRange(range)\n        } else {\n            return nil\n        }\n    }\n    \n    func doesMatch(options: NSMatchingOptions!) -> Bool {\n        return range(options).location != NSNotFound\n    }\n    \n    func range(options: NSMatchingOptions) -> NSRange {\n        return regex.rangeOfFirstMatchInString(target as String, options: [], range: targetRange)\n    }\n    \n    func match(options: NSMatchingOptions) -> String? {\n        return substring(range(options))\n    }\n    \n    func groups() -> [String]? {\n        return groupsForMatch(regex.firstMatchInString(target as String, options:\n            NSMatchingOptions.WithoutAnchoringBounds, range: targetRange))\n    }\n    \n    private func groupsForMatch(match: NSTextCheckingResult?) -> [String]? {\n        guard let match = match else {\n            return nil\n        }\n        var groups = [String]()\n        for groupno in 0...regex.numberOfCaptureGroups {\n            if let group = substring(match.rangeAtIndex(groupno)) {\n                groups += [group]\n            } else {\n                groups += [\"_\"] // avoids bridging problems\n            }\n        }\n        return groups\n    }\n    \n    subscript(groupno: Int) -> String? {\n        get {\n            return groups()?[groupno]\n        }\n        \n        set(newValue) {\n            if newValue == nil {\n                return\n            }\n            \n            for match in Array(matchResults().reverse()) {\n                let replacement = regex.replacementStringForResult(match,\n                    inString: target as String, offset: 0, template: newValue!)\n                let mut = NSMutableString(string: target)\n                mut.replaceCharactersInRange(match.rangeAtIndex(groupno), withString: replacement)\n                \n                target = mut as String\n            }\n        }\n    }\n    \n    func matchResults() -> [NSTextCheckingResult] {\n        let matches = regex.matchesInString(target as String, options:\n            NSMatchingOptions.WithoutAnchoringBounds, range: targetRange)\n            as [NSTextCheckingResult]\n        \n        return matches\n    }\n    \n    func ranges() -> [NSRange] {\n        return matchResults().map { $0.range }\n    }\n    \n    func matches() -> [String] {\n        return matchResults().map( { self.substring($0.range)!})\n    }\n    \n    func allGroups() -> [[String]?] {\n        return matchResults().map { self.groupsForMatch($0) }\n    }\n    \n    func dictionary(options: NSMatchingOptions!) -> Dictionary<String,String> {\n        var out = Dictionary<String,String>()\n        for match in matchResults() {\n            out[substring(match.rangeAtIndex(1))!] = substring(match.rangeAtIndex(2))!\n        }\n        return out\n    }\n    \n    func substituteMatches(substitution: ((NSTextCheckingResult, UnsafeMutablePointer<ObjCBool>) -> String),\n        options:NSMatchingOptions) -> String {\n            let out = NSMutableString()\n            var pos = 0\n            \n            regex.enumerateMatchesInString(target as String, options: options, range: targetRange ) {match, flags, stop in\n                let matchRange = match!.range\n                out.appendString( self.substring(NSRange(location:pos, length:matchRange.location-pos))!)\n                out.appendString( substitution(match!, stop) )\n                pos = matchRange.location + matchRange.length\n            }\n            \n            out.appendString(substring(NSRange(location:pos, length:targetRange.length-pos))!)\n            \n            return out as String\n    }\n    \n    var boolValue: Bool {\n        return doesMatch(nil)\n    }\n}\n\nextension String {\n    subscript(pattern: String, options: NSRegularExpressionOptions) -> SwiftRegex {\n        return SwiftRegex(target: self, pattern: pattern, options: options)\n    }\n}\n\nextension String {\n    subscript(pattern: String) -> SwiftRegex {\n        return SwiftRegex(target: self, pattern: pattern, options: nil)\n    }\n}\n\nfunc <~ (left: SwiftRegex, right: String) -> String {\n    return left.substituteMatches({match, stop in\n        return left.regex.replacementStringForResult( match,\n            inString: left.target as String, offset: 0, template: right )\n        }, options: [])\n}\n"
  },
  {
    "path": "Carthage/Checkouts/socket.io-client-swift/Source/WebSocket.swift",
    "content": "//////////////////////////////////////////////////////////////////////////////////////////////////\n//\n//  Websocket.swift\n//\n//  Created by Dalton Cherry on 7/16/14.\n//  Copyright (c) 2014-2015 Dalton Cherry.\n//\n//  Licensed under the Apache License, Version 2.0 (the \"License\");\n//  you may not use this file except in compliance with the License.\n//  You may obtain a copy of the License at\n//\n//  http://www.apache.org/licenses/LICENSE-2.0\n//\n//  Unless required by applicable law or agreed to in writing, software\n//  distributed under the License is distributed on an \"AS IS\" BASIS,\n//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//  See the License for the specific language governing permissions and\n//  limitations under the License.\n//\n//////////////////////////////////////////////////////////////////////////////////////////////////\n\nimport Foundation\nimport CoreFoundation\nimport Security\n\npublic protocol WebSocketDelegate: class {\n    func websocketDidConnect(socket: WebSocket)\n    func websocketDidDisconnect(socket: WebSocket, error: NSError?)\n    func websocketDidReceiveMessage(socket: WebSocket, text: String)\n    func websocketDidReceiveData(socket: WebSocket, data: NSData)\n}\n\npublic protocol WebSocketPongDelegate: class {\n    func websocketDidReceivePong(socket: WebSocket)\n}\n\npublic class WebSocket : NSObject, NSStreamDelegate {\n    \n    enum OpCode : UInt8 {\n        case ContinueFrame = 0x0\n        case TextFrame = 0x1\n        case BinaryFrame = 0x2\n        //3-7 are reserved.\n        case ConnectionClose = 0x8\n        case Ping = 0x9\n        case Pong = 0xA\n        //B-F reserved.\n    }\n    \n    public enum CloseCode : UInt16 {\n        case Normal                 = 1000\n        case GoingAway              = 1001\n        case ProtocolError          = 1002\n        case ProtocolUnhandledType  = 1003\n        // 1004 reserved.\n        case NoStatusReceived       = 1005\n        //1006 reserved.\n        case Encoding               = 1007\n        case PolicyViolated         = 1008\n        case MessageTooBig          = 1009\n    }\n    \n    public static let ErrorDomain = \"WebSocket\"\n    \n    enum InternalErrorCode : UInt16 {\n        // 0-999 WebSocket status codes not used\n        case OutputStreamWriteError  = 1\n    }\n    \n    //Where the callback is executed. It defaults to the main UI thread queue.\n    public var queue            = dispatch_get_main_queue()\n    \n    var optionalProtocols       : [String]?\n    //Constant Values.\n    let headerWSUpgradeName     = \"Upgrade\"\n    let headerWSUpgradeValue    = \"websocket\"\n    let headerWSHostName        = \"Host\"\n    let headerWSConnectionName  = \"Connection\"\n    let headerWSConnectionValue = \"Upgrade\"\n    let headerWSProtocolName    = \"Sec-WebSocket-Protocol\"\n    let headerWSVersionName     = \"Sec-WebSocket-Version\"\n    let headerWSVersionValue    = \"13\"\n    let headerWSKeyName         = \"Sec-WebSocket-Key\"\n    let headerOriginName        = \"Origin\"\n    let headerWSAcceptName      = \"Sec-WebSocket-Accept\"\n    let BUFFER_MAX              = 4096\n    let FinMask: UInt8          = 0x80\n    let OpCodeMask: UInt8       = 0x0F\n    let RSVMask: UInt8          = 0x70\n    let MaskMask: UInt8         = 0x80\n    let PayloadLenMask: UInt8   = 0x7F\n    let MaxFrameSize: Int       = 32\n    \n    class WSResponse {\n        var isFin = false\n        var code: OpCode = .ContinueFrame\n        var bytesLeft = 0\n        var frameCount = 0\n        var buffer: NSMutableData?\n    }\n    \n    public weak var delegate: WebSocketDelegate?\n    public weak var pongDelegate: WebSocketPongDelegate?\n    public var onConnect: ((Void) -> Void)?\n    public var onDisconnect: ((NSError?) -> Void)?\n    public var onText: ((String) -> Void)?\n    public var onData: ((NSData) -> Void)?\n    public var onPong: ((Void) -> Void)?\n    public var headers = [String: String]()\n    public var voipEnabled = false\n    public var selfSignedSSL = false\n    private var security: SSLSecurity?\n    public var enabledSSLCipherSuites: [SSLCipherSuite]?\n    public var origin: String?\n    public var isConnected :Bool {\n        return connected\n    }\n    public var currentURL: NSURL {return url}\n    private var url: NSURL\n    private var inputStream: NSInputStream?\n    private var outputStream: NSOutputStream?\n    private var connected = false\n    private var isCreated = false\n    private var writeQueue = NSOperationQueue()\n    private var readStack = [WSResponse]()\n    private var inputQueue = [NSData]()\n    private var fragBuffer: NSData?\n    private var certValidated = false\n    private var didDisconnect = false\n    private var readyToWrite = false\n    private let mutex = NSLock()\n    private var canDispatch: Bool {\n        mutex.lock()\n        let canWork = readyToWrite\n        mutex.unlock()\n        return canWork\n    }\n    //the shared processing queue used for all websocket\n    private static let sharedWorkQueue = dispatch_queue_create(\"com.vluxe.starscream.websocket\", DISPATCH_QUEUE_SERIAL)\n    \n    //used for setting protocols.\n    public init(url: NSURL, protocols: [String]? = nil) {\n        self.url = url\n        self.origin = url.absoluteString\n        writeQueue.maxConcurrentOperationCount = 1\n        optionalProtocols = protocols\n    }\n    \n    ///Connect to the websocket server on a background thread\n    public func connect() {\n        guard !isCreated else { return }\n        didDisconnect = false\n        isCreated = true\n        createHTTPRequest()\n        isCreated = false\n    }\n    \n    /**\n     Disconnect from the server. I send a Close control frame to the server, then expect the server to respond with a Close control frame and close the socket from its end. I notify my delegate once the socket has been closed.\n     \n     If you supply a non-nil `forceTimeout`, I wait at most that long (in seconds) for the server to close the socket. After the timeout expires, I close the socket and notify my delegate.\n     \n     If you supply a zero (or negative) `forceTimeout`, I immediately close the socket (without sending a Close control frame) and notify my delegate.\n     \n     - Parameter forceTimeout: Maximum time to wait for the server to close the socket.\n     */\n    public func disconnect(forceTimeout forceTimeout: NSTimeInterval? = nil) {\n        switch forceTimeout {\n        case .Some(let seconds) where seconds > 0:\n            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(seconds * Double(NSEC_PER_SEC))), queue) { [unowned self] in\n                self.disconnectStream(nil)\n            }\n            fallthrough\n        case .None:\n            writeError(CloseCode.Normal.rawValue)\n            \n        default:\n            self.disconnectStream(nil)\n            break\n        }\n    }\n    \n    ///write a string to the websocket. This sends it as a text frame.\n    public func writeString(str: String) {\n        guard isConnected else { return }\n        dequeueWrite(str.dataUsingEncoding(NSUTF8StringEncoding)!, code: .TextFrame)\n    }\n    \n    ///write binary data to the websocket. This sends it as a binary frame.\n    public func writeData(data: NSData) {\n        guard isConnected else { return }\n        dequeueWrite(data, code: .BinaryFrame)\n    }\n    \n    //write a   ping   to the websocket. This sends it as a  control frame.\n    //yodel a   sound  to the planet.    This sends it as an astroid. http://youtu.be/Eu5ZJELRiJ8?t=42s\n    public func writePing(data: NSData) {\n        guard isConnected else { return }\n        dequeueWrite(data, code: .Ping)\n    }\n    \n    //private method that starts the connection\n    private func createHTTPRequest() {\n        \n        let urlRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, \"GET\",\n            url, kCFHTTPVersion1_1).takeRetainedValue()\n        \n        var port = url.port\n        if port == nil {\n            if [\"wss\", \"https\"].contains(url.scheme) {\n                port = 443\n            } else {\n                port = 80\n            }\n        }\n        addHeader(urlRequest, key: headerWSUpgradeName, val: headerWSUpgradeValue)\n        addHeader(urlRequest, key: headerWSConnectionName, val: headerWSConnectionValue)\n        if let protocols = optionalProtocols {\n            addHeader(urlRequest, key: headerWSProtocolName, val: protocols.joinWithSeparator(\",\"))\n        }\n        addHeader(urlRequest, key: headerWSVersionName, val: headerWSVersionValue)\n        addHeader(urlRequest, key: headerWSKeyName, val: generateWebSocketKey())\n        if let origin = origin {\n            addHeader(urlRequest, key: headerOriginName, val: origin)\n        }\n        addHeader(urlRequest, key: headerWSHostName, val: \"\\(url.host!):\\(port!)\")\n        for (key,value) in headers {\n            addHeader(urlRequest, key: key, val: value)\n        }\n        if let cfHTTPMessage = CFHTTPMessageCopySerializedMessage(urlRequest) {\n            let serializedRequest = cfHTTPMessage.takeRetainedValue()\n            initStreamsWithData(serializedRequest, Int(port!))\n        }\n    }\n    \n    //Add a header to the CFHTTPMessage by using the NSString bridges to CFString\n    private func addHeader(urlRequest: CFHTTPMessage, key: NSString, val: NSString) {\n        CFHTTPMessageSetHeaderFieldValue(urlRequest, key, val)\n    }\n    \n    //generate a websocket key as needed in rfc\n    private func generateWebSocketKey() -> String {\n        var key = \"\"\n        let seed = 16\n        for _ in 0..<seed {\n            let uni = UnicodeScalar(UInt32(97 + arc4random_uniform(25)))\n            key += \"\\(Character(uni))\"\n        }\n        let data = key.dataUsingEncoding(NSUTF8StringEncoding)\n        let baseKey = data?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))\n        return baseKey!\n    }\n    \n    //Start the stream connection and write the data to the output stream\n    private func initStreamsWithData(data: NSData, _ port: Int) {\n        //higher level API we will cut over to at some point\n        //NSStream.getStreamsToHostWithName(url.host, port: url.port.integerValue, inputStream: &inputStream, outputStream: &outputStream)\n        \n        var readStream: Unmanaged<CFReadStream>?\n        var writeStream: Unmanaged<CFWriteStream>?\n        let h: NSString = url.host!\n        CFStreamCreatePairWithSocketToHost(nil, h, UInt32(port), &readStream, &writeStream)\n        inputStream = readStream!.takeRetainedValue()\n        outputStream = writeStream!.takeRetainedValue()\n        guard let inStream = inputStream, let outStream = outputStream else { return }\n        inStream.delegate = self\n        outStream.delegate = self\n        if [\"wss\", \"https\"].contains(url.scheme) {\n            inStream.setProperty(NSStreamSocketSecurityLevelNegotiatedSSL, forKey: NSStreamSocketSecurityLevelKey)\n            outStream.setProperty(NSStreamSocketSecurityLevelNegotiatedSSL, forKey: NSStreamSocketSecurityLevelKey)\n        } else {\n            certValidated = true //not a https session, so no need to check SSL pinning\n        }\n        if voipEnabled {\n            inStream.setProperty(NSStreamNetworkServiceTypeVoIP, forKey: NSStreamNetworkServiceType)\n            outStream.setProperty(NSStreamNetworkServiceTypeVoIP, forKey: NSStreamNetworkServiceType)\n        }\n        if selfSignedSSL {\n            let settings: [NSObject: NSObject] = [kCFStreamSSLValidatesCertificateChain: NSNumber(bool:false), kCFStreamSSLPeerName: kCFNull]\n            inStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as String)\n            outStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as String)\n        }\n        if let cipherSuites = self.enabledSSLCipherSuites {\n            if let sslContextIn = CFReadStreamCopyProperty(inputStream, kCFStreamPropertySSLContext) as! SSLContextRef?,\n                sslContextOut = CFWriteStreamCopyProperty(outputStream, kCFStreamPropertySSLContext) as! SSLContextRef? {\n                    let resIn = SSLSetEnabledCiphers(sslContextIn, cipherSuites, cipherSuites.count)\n                    let resOut = SSLSetEnabledCiphers(sslContextOut, cipherSuites, cipherSuites.count)\n                    if resIn != errSecSuccess {\n                        let error = self.errorWithDetail(\"Error setting ingoing cypher suites\", code: UInt16(resIn))\n                        disconnectStream(error)\n                        return\n                    }\n                    if resOut != errSecSuccess {\n                        let error = self.errorWithDetail(\"Error setting outgoing cypher suites\", code: UInt16(resOut))\n                        disconnectStream(error)\n                        return\n                    }\n            }\n        }\n        CFReadStreamSetDispatchQueue(inStream, WebSocket.sharedWorkQueue)\n        CFWriteStreamSetDispatchQueue(outStream, WebSocket.sharedWorkQueue)\n        inStream.open()\n        outStream.open()\n        \n        self.mutex.lock()\n        self.readyToWrite = true\n        self.mutex.unlock()\n        \n        let bytes = UnsafePointer<UInt8>(data.bytes)\n        var timeout = 5000000 //wait 5 seconds before giving up\n        writeQueue.addOperationWithBlock { [weak self] in\n            guard let this = self else { return }\n            while !outStream.hasSpaceAvailable {\n                usleep(100) //wait until the socket is ready\n                timeout -= 100\n                if timeout < 0 {\n                    this.cleanupStream()\n                    this.doDisconnect(this.errorWithDetail(\"write wait timed out\", code: 2))\n                    return\n                } else if outStream.streamError != nil {\n                    return //disconnectStream will be called.\n                }\n            }\n            outStream.write(bytes, maxLength: data.length)\n        }\n    }\n    //delegate for the stream methods. Processes incoming bytes\n    public func stream(aStream: NSStream, handleEvent eventCode: NSStreamEvent) {\n        \n        if let sec = security where !certValidated && [.HasBytesAvailable, .HasSpaceAvailable].contains(eventCode) {\n            let possibleTrust: AnyObject? = aStream.propertyForKey(kCFStreamPropertySSLPeerTrust as String)\n            if let trust: AnyObject = possibleTrust {\n                let domain: AnyObject? = aStream.propertyForKey(kCFStreamSSLPeerName as String)\n                if sec.isValid(trust as! SecTrustRef, domain: domain as! String?) {\n                    certValidated = true\n                } else {\n                    let error = errorWithDetail(\"Invalid SSL certificate\", code: 1)\n                    disconnectStream(error)\n                    return\n                }\n            }\n        }\n        if eventCode == .HasBytesAvailable {\n            if aStream == inputStream {\n                processInputStream()\n            }\n        } else if eventCode == .ErrorOccurred {\n            disconnectStream(aStream.streamError)\n        } else if eventCode == .EndEncountered {\n            disconnectStream(nil)\n        }\n    }\n    //disconnect the stream object\n    private func disconnectStream(error: NSError?) {\n        writeQueue.waitUntilAllOperationsAreFinished()\n        cleanupStream()\n        doDisconnect(error)\n    }\n    \n    private func cleanupStream() {\n        outputStream?.delegate = nil\n        inputStream?.delegate = nil\n        if let stream = inputStream {\n            CFReadStreamSetDispatchQueue(stream, nil)\n            stream.close()\n        }\n        if let stream = outputStream {\n            CFWriteStreamSetDispatchQueue(stream, nil)\n            stream.close()\n        }\n        outputStream = nil\n        inputStream = nil\n    }\n    \n    ///handles the incoming bytes and sending them to the proper processing method\n    private func processInputStream() {\n        let buf = NSMutableData(capacity: BUFFER_MAX)\n        let buffer = UnsafeMutablePointer<UInt8>(buf!.bytes)\n        let length = inputStream!.read(buffer, maxLength: BUFFER_MAX)\n        \n        guard length > 0 else { return }\n        var process = false\n        if inputQueue.count == 0 {\n            process = true\n        }\n        inputQueue.append(NSData(bytes: buffer, length: length))\n        if process {\n            dequeueInput()\n        }\n    }\n    ///dequeue the incoming input so it is processed in order\n    private func dequeueInput() {\n        guard !inputQueue.isEmpty else { return }\n        \n        let data = inputQueue[0]\n        var work = data\n        if let fragBuffer = fragBuffer {\n            let combine = NSMutableData(data: fragBuffer)\n            combine.appendData(data)\n            work = combine\n            self.fragBuffer = nil\n        }\n        let buffer = UnsafePointer<UInt8>(work.bytes)\n        let length = work.length\n        if !connected {\n            processTCPHandshake(buffer, bufferLen: length)\n        } else {\n            processRawMessage(buffer, bufferLen: length)\n        }\n        inputQueue = inputQueue.filter{$0 != data}\n        dequeueInput()\n    }\n    \n    //handle checking the inital connection status\n    private func processTCPHandshake(buffer: UnsafePointer<UInt8>, bufferLen: Int) {\n        let code = processHTTP(buffer, bufferLen: bufferLen)\n        switch code {\n        case 0:\n            connected = true\n            guard canDispatch else {return}\n            dispatch_async(queue) { [weak self] in\n                guard let s = self else { return }\n                s.onConnect?()\n                s.delegate?.websocketDidConnect(s)\n            }\n        case -1:\n            fragBuffer = NSData(bytes: buffer, length: bufferLen)\n            break //do nothing, we are going to collect more data\n        default:\n            doDisconnect(errorWithDetail(\"Invalid HTTP upgrade\", code: UInt16(code)))\n        }\n    }\n    ///Finds the HTTP Packet in the TCP stream, by looking for the CRLF.\n    private func processHTTP(buffer: UnsafePointer<UInt8>, bufferLen: Int) -> Int {\n        let CRLFBytes = [UInt8(ascii: \"\\r\"), UInt8(ascii: \"\\n\"), UInt8(ascii: \"\\r\"), UInt8(ascii: \"\\n\")]\n        var k = 0\n        var totalSize = 0\n        for i in 0..<bufferLen {\n            if buffer[i] == CRLFBytes[k] {\n                k++\n                if k == 3 {\n                    totalSize = i + 1\n                    break\n                }\n            } else {\n                k = 0\n            }\n        }\n        if totalSize > 0 {\n            let code = validateResponse(buffer, bufferLen: totalSize)\n            if code != 0 {\n                return code\n            }\n            totalSize += 1 //skip the last \\n\n            let restSize = bufferLen - totalSize\n            if restSize > 0 {\n                processRawMessage((buffer+totalSize),bufferLen: restSize)\n            }\n            return 0 //success\n        }\n        return -1 //was unable to find the full TCP header\n    }\n    \n    ///validates the HTTP is a 101 as per the RFC spec\n    private func validateResponse(buffer: UnsafePointer<UInt8>, bufferLen: Int) -> Int {\n        let response = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, false).takeRetainedValue()\n        CFHTTPMessageAppendBytes(response, buffer, bufferLen)\n        let code = CFHTTPMessageGetResponseStatusCode(response)\n        if code != 101 {\n            return code\n        }\n        if let cfHeaders = CFHTTPMessageCopyAllHeaderFields(response) {\n            let headers = cfHeaders.takeRetainedValue() as NSDictionary\n            if let acceptKey = headers[headerWSAcceptName] as? NSString {\n                if acceptKey.length > 0 {\n                    return 0\n                }\n            }\n        }\n        return -1\n    }\n    \n    ///read a 16 bit big endian value from a buffer\n    private static func readUint16(buffer: UnsafePointer<UInt8>, offset: Int) -> UInt16 {\n        return (UInt16(buffer[offset + 0]) << 8) | UInt16(buffer[offset + 1])\n    }\n    \n    ///read a 64 bit big endian value from a buffer\n    private static func readUint64(buffer: UnsafePointer<UInt8>, offset: Int) -> UInt64 {\n        var value = UInt64(0)\n        for i in 0...7 {\n            value = (value << 8) | UInt64(buffer[offset + i])\n        }\n        return value\n    }\n    \n    ///write a 16 bit big endian value to a buffer\n    private static func writeUint16(buffer: UnsafeMutablePointer<UInt8>, offset: Int, value: UInt16) {\n        buffer[offset + 0] = UInt8(value >> 8)\n        buffer[offset + 1] = UInt8(value & 0xff)\n    }\n    \n    ///write a 64 bit big endian value to a buffer\n    private static func writeUint64(buffer: UnsafeMutablePointer<UInt8>, offset: Int, value: UInt64) {\n        for i in 0...7 {\n            buffer[offset + i] = UInt8((value >> (8*UInt64(7 - i))) & 0xff)\n        }\n    }\n    \n    ///process the websocket data\n    private func processRawMessage(buffer: UnsafePointer<UInt8>, bufferLen: Int) {\n        let response = readStack.last\n        if response != nil && bufferLen < 2  {\n            fragBuffer = NSData(bytes: buffer, length: bufferLen)\n            return\n        }\n        if let response = response where response.bytesLeft > 0 {\n            var len = response.bytesLeft\n            var extra = bufferLen - response.bytesLeft\n            if response.bytesLeft > bufferLen {\n                len = bufferLen\n                extra = 0\n            }\n            response.bytesLeft -= len\n            response.buffer?.appendData(NSData(bytes: buffer, length: len))\n            processResponse(response)\n            let offset = bufferLen - extra\n            if extra > 0 {\n                processExtra((buffer+offset), bufferLen: extra)\n            }\n            return\n        } else {\n            let isFin = (FinMask & buffer[0])\n            let receivedOpcode = OpCode(rawValue: (OpCodeMask & buffer[0]))\n            let isMasked = (MaskMask & buffer[1])\n            let payloadLen = (PayloadLenMask & buffer[1])\n            var offset = 2\n            if (isMasked > 0 || (RSVMask & buffer[0]) > 0) && receivedOpcode != .Pong {\n                let errCode = CloseCode.ProtocolError.rawValue\n                doDisconnect(errorWithDetail(\"masked and rsv data is not currently supported\", code: errCode))\n                writeError(errCode)\n                return\n            }\n            let isControlFrame = (receivedOpcode == .ConnectionClose || receivedOpcode == .Ping)\n            if !isControlFrame && (receivedOpcode != .BinaryFrame && receivedOpcode != .ContinueFrame &&\n                receivedOpcode != .TextFrame && receivedOpcode != .Pong) {\n                    let errCode = CloseCode.ProtocolError.rawValue\n                    doDisconnect(errorWithDetail(\"unknown opcode: \\(receivedOpcode)\", code: errCode))\n                    writeError(errCode)\n                    return\n            }\n            if isControlFrame && isFin == 0 {\n                let errCode = CloseCode.ProtocolError.rawValue\n                doDisconnect(errorWithDetail(\"control frames can't be fragmented\", code: errCode))\n                writeError(errCode)\n                return\n            }\n            if receivedOpcode == .ConnectionClose {\n                var code = CloseCode.Normal.rawValue\n                if payloadLen == 1 {\n                    code = CloseCode.ProtocolError.rawValue\n                } else if payloadLen > 1 {\n                    code = WebSocket.readUint16(buffer, offset: offset)\n                    if code < 1000 || (code > 1003 && code < 1007) || (code > 1011 && code < 3000) {\n                        code = CloseCode.ProtocolError.rawValue\n                    }\n                    offset += 2\n                }\n                if payloadLen > 2 {\n                    let len = Int(payloadLen-2)\n                    if len > 0 {\n                        let bytes = UnsafePointer<UInt8>((buffer+offset))\n                        let str: NSString? = NSString(data: NSData(bytes: bytes, length: len), encoding: NSUTF8StringEncoding)\n                        if str == nil {\n                            code = CloseCode.ProtocolError.rawValue\n                        }\n                    }\n                }\n                doDisconnect(errorWithDetail(\"connection closed by server\", code: code))\n                writeError(code)\n                return\n            }\n            if isControlFrame && payloadLen > 125 {\n                writeError(CloseCode.ProtocolError.rawValue)\n                return\n            }\n            var dataLength = UInt64(payloadLen)\n            if dataLength == 127 {\n                dataLength = WebSocket.readUint64(buffer, offset: offset)\n                offset += sizeof(UInt64)\n            } else if dataLength == 126 {\n                dataLength = UInt64(WebSocket.readUint16(buffer, offset: offset))\n                offset += sizeof(UInt16)\n            }\n            if bufferLen < offset || UInt64(bufferLen - offset) < dataLength {\n                fragBuffer = NSData(bytes: buffer, length: bufferLen)\n                return\n            }\n            var len = dataLength\n            if dataLength > UInt64(bufferLen) {\n                len = UInt64(bufferLen-offset)\n            }\n            var data: NSData!\n            if len < 0 {\n                len = 0\n                data = NSData()\n            } else {\n                data = NSData(bytes: UnsafePointer<UInt8>((buffer+offset)), length: Int(len))\n            }\n            if receivedOpcode == .Pong {\n                if canDispatch {\n                    dispatch_async(queue) { [weak self] in\n                        guard let s = self else { return }\n                        s.onPong?()\n                        s.pongDelegate?.websocketDidReceivePong(s)\n                    }\n                }\n                let step = Int(offset+numericCast(len))\n                let extra = bufferLen-step\n                if extra > 0 {\n                    processRawMessage((buffer+step), bufferLen: extra)\n                }\n                return\n            }\n            var response = readStack.last\n            if isControlFrame {\n                response = nil //don't append pings\n            }\n            if isFin == 0 && receivedOpcode == .ContinueFrame && response == nil {\n                let errCode = CloseCode.ProtocolError.rawValue\n                doDisconnect(errorWithDetail(\"continue frame before a binary or text frame\", code: errCode))\n                writeError(errCode)\n                return\n            }\n            var isNew = false\n            if response == nil {\n                if receivedOpcode == .ContinueFrame  {\n                    let errCode = CloseCode.ProtocolError.rawValue\n                    doDisconnect(errorWithDetail(\"first frame can't be a continue frame\",\n                        code: errCode))\n                    writeError(errCode)\n                    return\n                }\n                isNew = true\n                response = WSResponse()\n                response!.code = receivedOpcode!\n                response!.bytesLeft = Int(dataLength)\n                response!.buffer = NSMutableData(data: data)\n            } else {\n                if receivedOpcode == .ContinueFrame  {\n                    response!.bytesLeft = Int(dataLength)\n                } else {\n                    let errCode = CloseCode.ProtocolError.rawValue\n                    doDisconnect(errorWithDetail(\"second and beyond of fragment message must be a continue frame\",\n                        code: errCode))\n                    writeError(errCode)\n                    return\n                }\n                response!.buffer!.appendData(data)\n            }\n            if let response = response {\n                response.bytesLeft -= Int(len)\n                response.frameCount++\n                response.isFin = isFin > 0 ? true : false\n                if isNew {\n                    readStack.append(response)\n                }\n                processResponse(response)\n            }\n            \n            let step = Int(offset+numericCast(len))\n            let extra = bufferLen-step\n            if extra > 0 {\n                processExtra((buffer+step), bufferLen: extra)\n            }\n        }\n        \n    }\n    \n    ///process the extra of a buffer\n    private func processExtra(buffer: UnsafePointer<UInt8>, bufferLen: Int) {\n        if bufferLen < 2 {\n            fragBuffer = NSData(bytes: buffer, length: bufferLen)\n        } else {\n            processRawMessage(buffer, bufferLen: bufferLen)\n        }\n    }\n    \n    ///process the finished response of a buffer\n    private func processResponse(response: WSResponse) -> Bool {\n        if response.isFin && response.bytesLeft <= 0 {\n            if response.code == .Ping {\n                let data = response.buffer! //local copy so it is perverse for writing\n                dequeueWrite(data, code: OpCode.Pong)\n            } else if response.code == .TextFrame {\n                let str: NSString? = NSString(data: response.buffer!, encoding: NSUTF8StringEncoding)\n                if str == nil {\n                    writeError(CloseCode.Encoding.rawValue)\n                    return false\n                }\n                if canDispatch {\n                    dispatch_async(queue) { [weak self] in\n                        guard let s = self else { return }\n                        s.onText?(str! as String)\n                        s.delegate?.websocketDidReceiveMessage(s, text: str! as String)\n                    }\n                }\n            } else if response.code == .BinaryFrame {\n                if canDispatch {\n                    let data = response.buffer! //local copy so it is perverse for writing\n                    dispatch_async(queue) { [weak self] in\n                        guard let s = self else { return }\n                        s.onData?(data)\n                        s.delegate?.websocketDidReceiveData(s, data: data)\n                    }\n                }\n            }\n            readStack.removeLast()\n            return true\n        }\n        return false\n    }\n    \n    ///Create an error\n    private func errorWithDetail(detail: String, code: UInt16) -> NSError {\n        var details = [String: String]()\n        details[NSLocalizedDescriptionKey] =  detail\n        return NSError(domain: WebSocket.ErrorDomain, code: Int(code), userInfo: details)\n    }\n    \n    ///write a an error to the socket\n    private func writeError(code: UInt16) {\n        let buf = NSMutableData(capacity: sizeof(UInt16))\n        let buffer = UnsafeMutablePointer<UInt8>(buf!.bytes)\n        WebSocket.writeUint16(buffer, offset: 0, value: code)\n        dequeueWrite(NSData(bytes: buffer, length: sizeof(UInt16)), code: .ConnectionClose)\n    }\n    ///used to write things to the stream\n    private func dequeueWrite(data: NSData, code: OpCode) {\n        writeQueue.addOperationWithBlock { [weak self] in\n            //stream isn't ready, let's wait\n            guard let s = self else { return }\n            var offset = 2\n            let bytes = UnsafeMutablePointer<UInt8>(data.bytes)\n            let dataLength = data.length\n            let frame = NSMutableData(capacity: dataLength + s.MaxFrameSize)\n            let buffer = UnsafeMutablePointer<UInt8>(frame!.mutableBytes)\n            buffer[0] = s.FinMask | code.rawValue\n            if dataLength < 126 {\n                buffer[1] = CUnsignedChar(dataLength)\n            } else if dataLength <= Int(UInt16.max) {\n                buffer[1] = 126\n                WebSocket.writeUint16(buffer, offset: offset, value: UInt16(dataLength))\n                offset += sizeof(UInt16)\n            } else {\n                buffer[1] = 127\n                WebSocket.writeUint64(buffer, offset: offset, value: UInt64(dataLength))\n                offset += sizeof(UInt64)\n            }\n            buffer[1] |= s.MaskMask\n            let maskKey = UnsafeMutablePointer<UInt8>(buffer + offset)\n            SecRandomCopyBytes(kSecRandomDefault, Int(sizeof(UInt32)), maskKey)\n            offset += sizeof(UInt32)\n            \n            for i in 0..<dataLength {\n                buffer[offset] = bytes[i] ^ maskKey[i % sizeof(UInt32)]\n                offset += 1\n            }\n            var total = 0\n            while true {\n                guard let outStream = s.outputStream else { break }\n                let writeBuffer = UnsafePointer<UInt8>(frame!.bytes+total)\n                let len = outStream.write(writeBuffer, maxLength: offset-total)\n                if len < 0 {\n                    var error: NSError?\n                    if let streamError = outStream.streamError {\n                        error = streamError\n                    } else {\n                        let errCode = InternalErrorCode.OutputStreamWriteError.rawValue\n                        error = s.errorWithDetail(\"output stream error during write\", code: errCode)\n                    }\n                    s.doDisconnect(error)\n                    break\n                } else {\n                    total += len\n                }\n                if total >= offset {\n                    break\n                }\n            }\n            \n        }\n    }\n    \n    ///used to preform the disconnect delegate\n    private func doDisconnect(error: NSError?) {\n        guard !didDisconnect else { return }\n        didDisconnect = true\n        connected = false\n        guard canDispatch else {return}\n        dispatch_async(queue) { [weak self] in\n            guard let s = self else { return }\n            s.onDisconnect?(error)\n            s.delegate?.websocketDidDisconnect(s, error: error)\n        }\n    }\n    \n    deinit {\n        mutex.lock()\n        readyToWrite = false\n        mutex.unlock()\n        cleanupStream()\n    }\n    \n}\n\nprivate class SSLCert {\n    var certData: NSData?\n    var key: SecKeyRef?\n    \n    /**\n     Designated init for certificates\n     \n     - parameter data: is the binary data of the certificate\n     \n     - returns: a representation security object to be used with\n     */\n    init(data: NSData) {\n        self.certData = data\n    }\n    \n    /**\n     Designated init for public keys\n     \n     - parameter key: is the public key to be used\n     \n     - returns: a representation security object to be used with\n     */\n    init(key: SecKeyRef) {\n        self.key = key\n    }\n}\n\nprivate class SSLSecurity {\n    var validatedDN = true //should the domain name be validated?\n    \n    var isReady = false //is the key processing done?\n    var certificates: [NSData]? //the certificates\n    var pubKeys: [SecKeyRef]? //the public keys\n    var usePublicKeys = false //use public keys or certificate validation?\n    \n    /**\n    Use certs from main app bundle\n    \n    - parameter usePublicKeys: is to specific if the publicKeys or certificates should be used for SSL pinning validation\n    \n    - returns: a representation security object to be used with\n    */\n    convenience init(usePublicKeys: Bool = false) {\n        let paths = NSBundle.mainBundle().pathsForResourcesOfType(\"cer\", inDirectory: \".\")\n        \n        let certs = paths.reduce([SSLCert]()) { (var certs: [SSLCert], path: String) -> [SSLCert] in\n            if let data = NSData(contentsOfFile: path) {\n                certs.append(SSLCert(data: data))\n            }\n            return certs\n        }\n        \n        self.init(certs: certs, usePublicKeys: usePublicKeys)\n    }\n    \n    /**\n     Designated init\n     \n     - parameter keys: is the certificates or public keys to use\n     - parameter usePublicKeys: is to specific if the publicKeys or certificates should be used for SSL pinning validation\n     \n     - returns: a representation security object to be used with\n     */\n    init(certs: [SSLCert], usePublicKeys: Bool) {\n        self.usePublicKeys = usePublicKeys\n        \n        if self.usePublicKeys {\n            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)) {\n                let pubKeys = certs.reduce([SecKeyRef]()) { (var pubKeys: [SecKeyRef], cert: SSLCert) -> [SecKeyRef] in\n                    if let data = cert.certData where cert.key == nil {\n                        cert.key = self.extractPublicKey(data)\n                    }\n                    if let key = cert.key {\n                        pubKeys.append(key)\n                    }\n                    return pubKeys\n                }\n                \n                self.pubKeys = pubKeys\n                self.isReady = true\n            }\n        } else {\n            let certificates = certs.reduce([NSData]()) { (var certificates: [NSData], cert: SSLCert) -> [NSData] in\n                if let data = cert.certData {\n                    certificates.append(data)\n                }\n                return certificates\n            }\n            self.certificates = certificates\n            self.isReady = true\n        }\n    }\n    \n    /**\n     Valid the trust and domain name.\n     \n     - parameter trust: is the serverTrust to validate\n     - parameter domain: is the CN domain to validate\n     \n     - returns: if the key was successfully validated\n     */\n    func isValid(trust: SecTrustRef, domain: String?) -> Bool {\n        \n        var tries = 0\n        while(!self.isReady) {\n            usleep(1000)\n            tries += 1\n            if tries > 5 {\n                return false //doesn't appear it is going to ever be ready...\n            }\n        }\n        var policy: SecPolicyRef\n        if self.validatedDN {\n            policy = SecPolicyCreateSSL(true, domain)\n        } else {\n            policy = SecPolicyCreateBasicX509()\n        }\n        SecTrustSetPolicies(trust,policy)\n        if self.usePublicKeys {\n            if let keys = self.pubKeys {\n                let serverPubKeys = publicKeyChainForTrust(trust)\n                for serverKey in serverPubKeys as [AnyObject] {\n                    for key in keys as [AnyObject] {\n                        if serverKey.isEqual(key) {\n                            return true\n                        }\n                    }\n                }\n            }\n        } else if let certs = self.certificates {\n            let serverCerts = certificateChainForTrust(trust)\n            var collect = [SecCertificate]()\n            for cert in certs {\n                collect.append(SecCertificateCreateWithData(nil,cert)!)\n            }\n            SecTrustSetAnchorCertificates(trust,collect)\n            var result: SecTrustResultType = 0\n            SecTrustEvaluate(trust,&result)\n            let r = Int(result)\n            if r == kSecTrustResultUnspecified || r == kSecTrustResultProceed {\n                var trustedCount = 0\n                for serverCert in serverCerts {\n                    for cert in certs {\n                        if cert == serverCert {\n                            trustedCount++\n                            break\n                        }\n                    }\n                }\n                if trustedCount == serverCerts.count {\n                    return true\n                }\n            }\n        }\n        return false\n    }\n    \n    /**\n     Get the public key from a certificate data\n     \n     - parameter data: is the certificate to pull the public key from\n     \n     - returns: a public key\n     */\n    func extractPublicKey(data: NSData) -> SecKeyRef? {\n        guard let cert = SecCertificateCreateWithData(nil, data) else { return nil }\n        \n        return extractPublicKeyFromCert(cert, policy: SecPolicyCreateBasicX509())\n    }\n    \n    /**\n     Get the public key from a certificate\n     \n     - parameter data: is the certificate to pull the public key from\n     \n     - returns: a public key\n     */\n    func extractPublicKeyFromCert(cert: SecCertificate, policy: SecPolicy) -> SecKeyRef? {\n        var possibleTrust: SecTrust?\n        SecTrustCreateWithCertificates(cert, policy, &possibleTrust)\n        \n        guard let trust = possibleTrust else { return nil }\n        \n        var result: SecTrustResultType = 0\n        SecTrustEvaluate(trust, &result)\n        return SecTrustCopyPublicKey(trust)\n    }\n    \n    /**\n     Get the certificate chain for the trust\n     \n     - parameter trust: is the trust to lookup the certificate chain for\n     \n     - returns: the certificate chain for the trust\n     */\n    func certificateChainForTrust(trust: SecTrustRef) -> [NSData] {\n        let certificates = (0..<SecTrustGetCertificateCount(trust)).reduce([NSData]()) { (var certificates: [NSData], index: Int) -> [NSData] in\n            let cert = SecTrustGetCertificateAtIndex(trust, index)\n            certificates.append(SecCertificateCopyData(cert!))\n            return certificates\n        }\n        \n        return certificates\n    }\n    \n    /**\n     Get the public key chain for the trust\n     \n     - parameter trust: is the trust to lookup the certificate chain and extract the public keys\n     \n     - returns: the public keys from the certifcate chain for the trust\n     */\n    func publicKeyChainForTrust(trust: SecTrustRef) -> [SecKeyRef] {\n        let policy = SecPolicyCreateBasicX509()\n        let keys = (0..<SecTrustGetCertificateCount(trust)).reduce([SecKeyRef]()) { (var keys: [SecKeyRef], index: Int) -> [SecKeyRef] in\n            let cert = SecTrustGetCertificateAtIndex(trust, index)\n            if let key = extractPublicKeyFromCert(cert!, policy: policy) {\n                keys.append(key)\n            }\n            \n            return keys\n        }\n        \n        return keys\n    }\n    \n    \n}"
  },
  {
    "path": "README.md",
    "content": "# BrewMobile\n\n[![Bitrise](https://www.bitrise.io/app/276d8847158110d2.svg?token=aYjuPeusfMeRdDn_eDksIg&branch=master)](https://www.bitrise.io/) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n\niOS client for the [Brewfactory](https://github.com/brewfactory/BrewCore) project. \n\nRead the [stories of upgrading BrewMobile to ReactiveCocoa & Swift on AllTheFlow](https://blog.alltheflow.com/reactive-swift-upgrading-to-reactivecocoa-3-0/).\n\nWhat is this?\n-------------\nApp for managing the brewing process from your iPhone.\n\n - continuous temperature updates\n - displays current phases with necessary info\n - gives visual feedback of the current state\n - brew designer - ability of composing new brew\n - stopping current process\n \n## Used technologies\n\n - Swift 2.1.x\n - iOS >= 8.1\n - socket.io\n - [ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa)\n\nRequired minimum Xcode version: 7.1\n\n## Setting up the project with [Carthage](https://github.com/Carthage/Carthage)\nIn case you don't have Carthage installed, run:\n\n```\n$ brew update && brew install carthage\n```\nthen:\n```\n$ carthage update --platform iOS\n\n$ open BrewMobile.xcworkspace/\n```\n\n## The UI\n\n![Brewing a beer](http://brewfactory.org/BrewMobile/img/9_small.png)![Designing a brew](http://brewfactory.org/BrewMobile/img/8_small.png)\n"
  }
]