[
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n## 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*.moved-aside\n*.xcuserstate\n*.orig\n\n## Obj-C/Swift specific\n*.hmap\n*.ipa\n*.dSYM.zip\n*.dSYM\n\n## Playgrounds\ntimeline.xctimeline\nplayground.xcworkspace\n\n# Swift Package Manager\n#\n# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.\n# Packages/\n.build/\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# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-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# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md\n\nfastlane/report.xml\nfastlane/Preview.html\nfastlane/screenshots\nfastlane/test_output\n"
  },
  {
    "path": ".swift-version",
    "content": "4.0\n"
  },
  {
    "path": ".swiftlint.yml",
    "content": "disabled_rules: # rule identifiers to exclude from running\n  - line_length\n  - trailing_whitespace\n  - trailing_newline\n  - vertical_whitespace\n  - unused_closure_parameter\n  - nesting\n\nopt_in_rules:\n  - empty_count\n  - explicit_init\n  - closure_spacing\n  - overridden_super_call\n  - redundant_nil_coalescing\n  - private_outlet\n  - nimble_operator\n  - closure_end_indentation\n  - first_where\n  - object_literal\n  - number_separator\n  - prohibited_super_call\n  - fatal_error_message\n  - vertical_parameter_alignment_on_call\n  - extension_access_modifier\n  - array_init\n  - literal_expression_end_indentation\n\nforce_cast: warning # implicitly. Give warning only for force casting\n\nforce_try:\n  severity: warning # explicitly. Give warning only for force try\n\nfunction_body_length:\n  - 300 # warning\n  - 400 # error\n\nfile_length:\n  warning: 500\n  error: 800\n\nlarge_tuple: # warn user when using 3 values in tuple, give error if there are 4\n  - 3\n  - 4\n\nexcluded:\n  - fastlane\n  - Pods\n\n# naming rules can set warnings/errors for min_length and max_length\ntype_name:\n  min_length: 4 # only warning\n  max_length: # warning and error\n    warning: 30\n    error: 35\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: swift\nosx_image: xcode9.1\nscript:\n- xcodebuild -workspace Archit.xcworkspace -scheme Archit -destination \"platform=iOS\n  Simulator,name=iPhone X,OS=11.1\" -configuration Debug -enableCodeCoverage YES clean\n  build test\nafter_success:\n- bash <(curl -s https://codecov.io/bash)\n"
  },
  {
    "path": "Archit/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"iTunesArtWork@1x.png\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Archit/Resources/Assets/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Archit/Resources/Assets/Assets.xcassets/Logo.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"archit-logo.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"archit-logo@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"archit-logo@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Archit/Source/Base/Controllers/BaseController.swift",
    "content": "//  BaseController.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\nprotocol BaseController {\n\n    associatedtype ViewControllerClass: AnyObject\n\n    weak var viewController: ViewControllerClass? { get }\n\n    init(_ viewController: ViewControllerClass)\n\n    func load()\n\n    func unload()\n\n    func memoryWarning()\n\n    func willAppear(_ animated: Bool)\n\n    func didAppear(_ animated: Bool)\n\n    func willDisappear(_ animated: Bool)\n\n    func didDisappear(_ animated: Bool)\n\n    func prepareSegue(identifier: String?, destination: AnyObject)\n\n}\n\nextension BaseController {\n\n    func load() {}\n\n    func unload() {}\n\n    func memoryWarning() {}\n\n    func willAppear(_ animated: Bool) {}\n\n    func didAppear(_ animated: Bool) {}\n\n    func willDisappear(_ animated: Bool) {}\n\n    func didDisappear(_ animated: Bool) {}\n\n    func prepareSegue(identifier: String?, destination: AnyObject) {}\n\n}\n\n"
  },
  {
    "path": "Archit/Source/Base/Extensions/UITableView+Reusable.swift",
    "content": "//  UITableView+Reusable.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport UIKit\nimport Reusable\n\nextension UITableViewCell: Reusable {}\n\nextension UITableViewHeaderFooterView: Reusable {}\n"
  },
  {
    "path": "Archit/Source/Base/Interactors/BaseInteractor.swift",
    "content": "//  BaseInteractor.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\nprotocol BaseInteractorProtocol {\n\n}\n\nclass BaseInteractor: BaseInteractorProtocol {\n\n}\n"
  },
  {
    "path": "Archit/Source/Base/ViewControllers/BaseNavigationController.swift",
    "content": "//  BaseNavigationController.swift\n//  Created by Alex Rupérez on 6/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport UIKit\n\nclass BaseNavigationController: UINavigationController {\n\n    override var preferredStatusBarStyle: UIStatusBarStyle {\n        return visibleViewController?.preferredStatusBarStyle ?? .lightContent\n    }\n\n    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {\n        return visibleViewController?.supportedInterfaceOrientations ?? .portrait\n    }\n\n    override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {\n        return visibleViewController?.preferredInterfaceOrientationForPresentation ?? .portrait\n    }\n\n    override var shouldAutorotate: Bool {\n        return visibleViewController?.shouldAutorotate ?? true\n    }\n\n    override var childViewControllerForStatusBarStyle: UIViewController? {\n        return visibleViewController\n    }\n\n    override var childViewControllerForStatusBarHidden: UIViewController? {\n        return visibleViewController\n    }\n\n}\n"
  },
  {
    "path": "Archit/Source/Base/ViewControllers/BaseViewController.swift",
    "content": "//  BaseViewController.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport UIKit\nimport Reusable\n\nclass BaseViewController<ControllerClass: BaseController>: UIViewController, StoryboardSceneBased {\n\n    class var sceneStoryboard: UIStoryboard {\n        return UIStoryboard(name: \"Main\", bundle: nil)\n    }\n\n    var controller: ControllerClass!\n\n    override func viewDidLoad() {\n        assert(controller != nil, \"You must set a BaseController for \\(type(of: self)) in init?(coder: NSCoder)\")\n        super.viewDidLoad()\n        controller.load()\n    }\n\n    deinit {\n        controller.unload()\n        controller = nil\n    }\n\n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        controller.memoryWarning()\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        controller.willAppear(animated)\n    }\n\n    override func viewDidAppear(_ animated: Bool) {\n        super.viewDidAppear(animated)\n        controller.didAppear(animated)\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        controller.willDisappear(animated)\n    }\n\n    override func viewDidDisappear(_ animated: Bool) {\n        super.viewDidDisappear(animated)\n        controller.didDisappear(animated)\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        super.prepare(for: segue, sender: sender)\n        controller.prepareSegue(identifier: segue.identifier, destination: segue.destination)\n    }\n\n    func showAlert(_ title: String?, message: String? = nil, buttons: [String] = [\"OK\"], handler: ((UIAlertAction) -> Void)? = nil, animated: Bool = true, completion: (() -> Void)? = nil) {\n        let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)\n        buttons.forEach { title in\n            alertController.addAction(UIAlertAction(title: title, style: .cancel, handler: handler))\n        }\n        present(alertController, animated: animated, completion: completion)\n    }\n\n}\n\n"
  },
  {
    "path": "Archit/Source/FilmDetail/FilmDetailController.swift",
    "content": "//  FilmDetailController.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\nimport Domain\nimport Kommander\n\nprotocol FilmDetailControllerProtocol: BaseController {\n    var film: Film? { get }\n}\n\nclass FilmDetailController: FilmDetailControllerProtocol {\n    weak var viewController: FilmDetailViewController?\n    var film: Film? {\n        didSet {\n            viewController?.reloadData()\n        }\n    }\n    private let filmsInteractor: FilmsInteractorProtocol = FilmsInteractor()\n    private weak var filmSearchKommand: Kommand<Film>?\n\n    convenience init(_ viewController: FilmDetailViewController, film: Film) {\n        self.init(viewController)\n        self.film = film\n    }\n\n    required init(_ viewController: FilmDetailViewController) {\n        self.viewController = viewController\n    }\n\n    func willAppear(_ animated: Bool) {\n        refresh()\n    }\n\n    func willDisappear(_ animated: Bool) {\n        filmSearchKommand?.cancel()\n    }\n\n    func refresh() {\n        guard let imdbID = film?.imdbID, let type = film?.type else {\n            return\n        }\n        filmSearchKommand = filmsInteractor.film(imdbID, type: FilmsInteractorSearchType(rawValue: type), onSuccess: { film in\n            self.film = film\n        }, onError: { error in\n            self.viewController?.showAlert(error.localizedDescription, completion: {\n                self.viewController?.reloadData()\n            })\n        }).execute()\n    }\n\n}\n"
  },
  {
    "path": "Archit/Source/FilmDetail/FilmDetailViewController.swift",
    "content": "//  FilmDetailViewController.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport UIKit\nimport Kingfisher\nimport SafariServices\n\nclass FilmDetailViewController: BaseViewController<FilmDetailController> {\n\n    @IBOutlet private weak var posterImageView: UIImageView!\n    @IBOutlet private weak var titleLabel: UILabel!\n    @IBOutlet private weak var yearLabel: UILabel!\n    @IBOutlet private weak var plotTextView: UITextView!\n\n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        controller = FilmDetailController(self)\n    }\n\n    func reloadData() {\n        loadViewIfNeeded()\n        title = controller.film?.title\n        titleLabel.text = controller.film?.title\n        yearLabel.text = controller.film?.year\n        plotTextView.text = controller.film?.plot\n        posterImageView.kf.setImage(with: controller.film?.poster)\n        navigationItem.rightBarButtonItem = controller.film?.website != nil ? UIBarButtonItem(title: \"Website\", style: .done, target: self, action: #selector(websiteAction(_:))) : nil\n    }\n\n    @objc func websiteAction(_ sender: Any) {\n        guard let website = controller.film?.website else {\n            return\n        }\n        present(SFSafariViewController(url: website), animated: true)\n    }\n\n}\n"
  },
  {
    "path": "Archit/Source/Films/FilmCell.swift",
    "content": "//  FilmCell.swift\n//  Created by Diego Manuel Molina Canedo on 11/12/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport UIKit\n\nclass FilmCell: UITableViewCell {\n\n    @IBOutlet weak private var posterImageView: UIImageView!\n    @IBOutlet weak private var titleLabel: UILabel!\n    @IBOutlet weak private var yearLabel: UILabel!\n\n    public func configure(imageUrl: URL?, title: String?, year: String?) {\n        posterImageView?.kf.setImage(with: imageUrl, completionHandler: { (image, error, cache, url) in\n            if image != nil, error == nil {\n                self.layoutSubviews()\n            }\n        })\n        titleLabel.text = title\n        yearLabel.text = year\n    }\n\n}\n"
  },
  {
    "path": "Archit/Source/Films/FilmsController.swift",
    "content": "//  FilmsController.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\nimport Domain\nimport Kommander\n\nprotocol FilmsControllerProtocol: BaseController {\n    var films: [Film] { get }\n    var query: String { get }\n    var type: String { get }\n    var page: Int { get }\n    func search(_ query: String, type: String, page: Int)\n    func refresh()\n    func loadMore()\n}\n\nclass FilmsController: FilmsControllerProtocol {\n    weak var viewController: FilmsViewController?\n    private(set) var films = [Film]() {\n        didSet {\n            viewController?.reloadData()\n        }\n    }\n    private let filmsInteractor: FilmsInteractorProtocol = FilmsInteractor()\n    private weak var filmsSearchKommand: Kommand<(films: [Film], total: Int)>?\n    private(set) var query = \"Star Wars\" {\n        didSet {\n            viewController?.title = query\n        }\n    }\n    private(set) var type: String = \"all\"\n    private(set) var page: Int = 1\n    private var total: Int?\n\n    required init(_ viewController: FilmsViewController) {\n        self.viewController = viewController\n    }\n\n    func load() {\n        refresh()\n    }\n\n    func willDisappear(_ animated: Bool) {\n        filmsSearchKommand?.cancel()\n    }\n\n    func search(_ query: String, type: String, page: Int = 1) {\n        guard filmsSearchKommand?.state != .running else {\n            return\n        }\n        filmsSearchKommand = filmsInteractor.films(query, type: FilmsInteractorSearchType(rawValue: type), page: page, onSuccess: { films, total in\n            self.query = query\n            self.type = type\n            self.page = page\n            self.total = total\n            if page == 1 {\n                self.films = films\n            } else {\n                self.films.append(contentsOf: films)\n            }\n        }, onError: { error in\n            self.viewController?.showAlert(error.localizedDescription, completion: {\n                self.viewController?.reloadData()\n            })\n        }).execute()\n    }\n\n    func refresh() {\n        search(query, type: type)\n    }\n\n    func loadMore() {\n        guard let total = total, films.count < total else {\n            return\n        }\n        search(query, type: type, page: page + 1)\n    }\n\n}\n"
  },
  {
    "path": "Archit/Source/Films/FilmsInteractor.swift",
    "content": "//  FilmsInteractor.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\nimport Kommander\nimport Domain\nimport Core\n\nenum FilmsInteractorError: Error {\n    case filmsError(message: String, underlying: Error?)\n\n    public var localizedDescription: String {\n        switch self {\n        case .filmsError(let message, let underlying):\n            guard let serviceError = underlying as? NetworkServiceError else {\n                guard let localizedDescription = underlying?.localizedDescription else {\n                    return message\n                }\n                return localizedDescription\n            }\n            return serviceError.localizedDescription\n        }\n    }\n}\n\ntypealias FilmsInteractorFilmBlock = (Film) -> Void\ntypealias FilmsInteractorFilmsBlock = ([Film], Int) -> Void\ntypealias FilmsInteractorErrorBlock = (FilmsInteractorError) -> Void\n\nenum FilmsInteractorSearchType: String {\n    case movie, series, episode\n}\n\nprotocol FilmsInteractorProtocol {\n    func film(_ imdbID: String, type: FilmsInteractorSearchType?, onSuccess: FilmsInteractorFilmBlock?, onError: FilmsInteractorErrorBlock?) -> Kommand<Film>\n    func films(_ query: String, type: FilmsInteractorSearchType?, page: Int, onSuccess: FilmsInteractorFilmsBlock?, onError: FilmsInteractorErrorBlock?) -> Kommand<(films: [Film], total: Int)>\n}\n\nclass FilmsInteractor: BaseInteractor, FilmsInteractorProtocol {\n\n    private static let kommander = Kommander.default\n    private let filmsService = FilmsService()\n\n    func film(_ imdbID: String, type: FilmsInteractorSearchType?, onSuccess: FilmsInteractorFilmBlock?, onError: FilmsInteractorErrorBlock?) -> Kommand<Film> {\n        return FilmsInteractor.kommander.makeKommand({\n            return try self.filmsService.searchFilm(imdbID, type: type?.rawValue)\n        }).onSuccess({ film in\n            onSuccess?(film)\n        }).onError({ error in\n            onError?(.filmsError(message: \"Error requesting films.\", underlying: error))\n        })\n    }\n\n    func films(_ query: String, type: FilmsInteractorSearchType?, page: Int, onSuccess: FilmsInteractorFilmsBlock?, onError: FilmsInteractorErrorBlock?) -> Kommand<(films: [Film], total: Int)> {\n        return FilmsInteractor.kommander.makeKommand({\n            return try self.filmsService.searchFilms(query, type: type?.rawValue, page: page)\n        }).onSuccess({ result in\n            onSuccess?(result.films, result.total)\n        }).onError({ error in\n            onError?(.filmsError(message: \"Error requesting films.\", underlying: error))\n        })\n    }\n\n}\n"
  },
  {
    "path": "Archit/Source/Films/FilmsViewController.swift",
    "content": "//  FilmsViewController.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport UIKit\nimport Kingfisher\nimport Domain\n\nclass FilmsViewController: BaseViewController<FilmsController> {\n\n    @IBOutlet private weak var tableView: UITableView!\n    private let searchController = UISearchController(searchResultsController: nil)\n\n    private var selectedFilm: Film? {\n        guard let row = tableView.indexPathForSelectedRow?.row else {\n            return nil\n        }\n        return controller.films[row]\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        controller = FilmsController(self)\n    }\n\n    private func configView() {\n        tableView.tableFooterView = UIView()\n        let refreshControl = UIRefreshControl()\n        refreshControl.addTarget(self, action: #selector(refreshControlAction(_:)), for: .valueChanged)\n        tableView.refreshControl = refreshControl\n        let searchBar = searchController.searchBar\n        searchBar.delegate = self\n        searchBar.scopeButtonTitles = [\"All\", \"Movie\", \"Series\", \"Episode\"]\n        tableView.tableHeaderView = searchBar\n        tableView.selectRow(at: IndexPath(row: 0, section: 0), animated: true, scrollPosition: .none)\n        if splitViewController?.isCollapsed == false {\n            performSegue(withIdentifier: \"showDetail\", sender: self)\n        }\n    }\n\n    func reloadData() {\n        if let refreshControl = tableView.refreshControl {\n            refreshControl.endRefreshing()\n            searchController.isActive = false\n        } else {\n            configView()\n        }\n        tableView.reloadData()\n    }\n\n    @objc private func refreshControlAction(_ sender: Any) {\n        controller.refresh()\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        super.prepare(for: segue, sender: sender)\n        searchController.isActive = false\n        if segue.identifier == \"showDetail\",\n            let navigationController = segue.destination as? BaseNavigationController,\n            let filmViewController = navigationController.topViewController as? FilmDetailViewController {\n            filmViewController.controller.film = selectedFilm\n            filmViewController.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem\n            filmViewController.navigationItem.leftItemsSupplementBackButton = true\n        }\n    }\n\n    func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) {\n        let posters = indexPaths.flatMap { controller.films[$0.row].poster }\n        ImagePrefetcher(urls: posters).start()\n    }\n\n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return controller.films.count\n    }\n\n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell: FilmCell = tableView.dequeueReusableCell(for: indexPath)\n        let film = controller.films[indexPath.row]\n        cell.configure(imageUrl: film.poster, title: film.title, year: film.year)\n        return cell\n    }\n\n    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        if controller.films.count >= 10 && indexPath.row > controller.films.count * 8 / 10 {\n            controller.loadMore()\n        }\n    }\n\n    func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        cell.imageView?.kf.cancelDownloadTask()\n    }\n\n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        tableView.deselectRow(at: indexPath, animated: true)\n    }\n\n    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {\n        if let query = searchBar.text, !query.isEmpty {\n            let scope = searchBar.scopeButtonTitles?[searchBar.selectedScopeButtonIndex].lowercased() ?? \"all\"\n            controller.search(query, type: scope)\n        }\n    }\n\n}\n\nextension FilmsViewController: UITableViewDataSourcePrefetching {}\n\nextension FilmsViewController: UITableViewDataSource {}\n\nextension FilmsViewController: UITableViewDelegate {}\n\nextension FilmsViewController: UISearchBarDelegate {}\n"
  },
  {
    "path": "Archit/Source/Managers/AppManager.swift",
    "content": "//  AppManager.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport UIKit\n\nopen class AppManager: AppManagerProtocol {\n\n    open static let shared: AppManagerProtocol = AppManager()\n    fileprivate var splitViewController: UISplitViewController? {\n        return application.appDelegate?.window??.rootViewController as? UISplitViewController\n    }\n\n    open func didFinishLaunching(launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        // Override point for customization after application launch.\n\n        if let splitViewController = splitViewController,\n            let navigationController = splitViewController.viewControllers.last as? BaseNavigationController {\n            navigationController.topViewController?.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem\n            splitViewController.delegate = self\n            splitViewController.preferredDisplayMode = .allVisible\n        }\n\n        return true\n    }\n\n    open func willResignActive() {\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 invalidate graphics rendering callbacks. Games should use this method to pause the game.\n    }\n\n    open func didEnterBackground() {\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    open func willEnterForeground() {\n        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.\n    }\n\n    open func didBecomeActive() {\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    open func willTerminate() {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    }\n\n\n}\n\npublic protocol AppDelegateProtocol: UIApplicationDelegate {\n\n    var appManager: AppManagerProtocol { get set }\n}\n\npublic protocol AppProtocol {\n\n    weak var appDelegate: AppDelegateProtocol? { get }\n}\n\nextension UIApplication: AppProtocol {\n\n    open weak var appDelegate: AppDelegateProtocol? { return delegate as? AppDelegateProtocol }\n}\n\npublic protocol AppManagerProtocol {\n\n    static var shared: AppManagerProtocol { get }\n    var application: AppProtocol { get }\n\n    func didFinishLaunching(launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool\n\n    func willResignActive()\n\n    func didEnterBackground()\n\n    func willEnterForeground()\n\n    func didBecomeActive()\n\n    func willTerminate()\n}\n\npublic extension AppManagerProtocol {\n\n    var application: AppProtocol { return UIApplication.shared }\n}\n\nextension AppManager: UISplitViewControllerDelegate {\n\n    public func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {\n        guard let navigationController = secondaryViewController as? BaseNavigationController else { return false }\n        guard let filmViewController = navigationController.topViewController as? FilmDetailViewController else { return false }\n        return filmViewController.controller.film == nil\n    }\n\n}\n"
  },
  {
    "path": "Archit/Source/Managers/LogManager.swift",
    "content": "//  LogManager.swift\n//  Created by Alex Rupérez on 16/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport XCGLogger\n\nlet log: XCGLogger = {\n    let log = XCGLogger(identifier: \"advancedLogger\", includeDefaultDestinations: false)\n    log.levelDescriptions[.verbose] = \"💜\"\n    log.levelDescriptions[.debug] = \"💚\"\n    log.levelDescriptions[.info] = \"💙\"\n    log.levelDescriptions[.warning] = \"💛\"\n    log.levelDescriptions[.error] = \"❤️\"\n    log.levelDescriptions[.severe] = \"🖤\"\n\n    let consoleDestination = ConsoleDestination(identifier: \"advancedLogger.consoleDestination\")\n    #if DEBUG\n        consoleDestination.outputLevel = .debug\n    #else\n        consoleDestination.outputLevel = .severe\n    #endif\n    consoleDestination.showFunctionName = false\n    consoleDestination.showFileName = false\n    consoleDestination.showLineNumber = false\n    log.add(destination: consoleDestination)\n\n    return log\n}()\n"
  },
  {
    "path": "Archit/Supporting Files/AppDelegate.swift",
    "content": "//  AppDelegate.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, AppDelegateProtocol {\n\n    lazy var appManager: AppManagerProtocol = AppManager.shared\n    var window: UIWindow?\n\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        return appManager.didFinishLaunching(launchOptions: launchOptions)\n    }\n\n    func applicationWillResignActive(_ application: UIApplication) {\n        appManager.willResignActive()\n    }\n\n    func applicationDidEnterBackground(_ application: UIApplication) {\n        appManager.didEnterBackground()\n    }\n\n    func applicationWillEnterForeground(_ application: UIApplication) {\n        appManager.willEnterForeground()\n    }\n\n    func applicationDidBecomeActive(_ application: UIApplication) {\n        appManager.didBecomeActive()\n    }\n\n    func applicationWillTerminate(_ application: UIApplication) {\n        appManager.willTerminate()\n    }\n\n\n}\n\n"
  },
  {
    "path": "Archit/Supporting Files/Archit.entitlements",
    "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>aps-environment</key>\n\t<string>$(APSEnvironment)</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Archit/Supporting Files/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>APSEnvironment</key>\n\t<string>$(APS_ENVIRONMENT)</string>\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>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>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": "Archit/UI/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13529\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13527\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"Logo\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"aPR-Qf-yOI\">\n                                <rect key=\"frame\" x=\"87\" y=\"218\" width=\"200\" height=\"230\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"230\" id=\"M6F-YG-iXE\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"200\" id=\"cWz-Ux-NMv\"/>\n                                </constraints>\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"aPR-Qf-yOI\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"UEB-OO-ku3\"/>\n                            <constraint firstItem=\"aPR-Qf-yOI\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"t3c-0b-hcR\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"Logo\" width=\"200\" height=\"230\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "Archit/UI/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"QDw-Op-zfs\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"Aspect ratio constraints\" minToolsVersion=\"5.1\"/>\n        <capability name=\"Constraints to layout margins\" minToolsVersion=\"6.0\"/>\n        <capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Content-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"FilmsViewController\" customModule=\"Archit\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"128\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"qcl-Vq-tRJ\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"FilmCell\" id=\"Ngr-Go-cqh\" customClass=\"FilmCell\" customModule=\"Archit\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"375\" height=\"128\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Ngr-Go-cqh\" id=\"yaJ-dn-Ij5\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"127.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Title\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4py-1c-vJX\">\n                                                    <rect key=\"frame\" x=\"101.5\" y=\"52\" width=\"265.5\" height=\"23\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" weight=\"medium\" pointSize=\"19\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dIe-Mg-pVe\">\n                                                    <rect key=\"frame\" x=\"4\" y=\"4\" width=\"89.5\" height=\"119.5\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" secondItem=\"dIe-Mg-pVe\" secondAttribute=\"height\" multiplier=\"3:4\" id=\"xiP-06-bQa\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Year\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Axd-Bn-HRE\">\n                                                    <rect key=\"frame\" x=\"101.5\" y=\"79\" width=\"250.5\" height=\"17\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <color key=\"textColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"trailingMargin\" secondItem=\"Axd-Bn-HRE\" secondAttribute=\"trailing\" constant=\"8\" id=\"AxG-Gu-CLu\"/>\n                                                <constraint firstItem=\"4py-1c-vJX\" firstAttribute=\"leading\" secondItem=\"dIe-Mg-pVe\" secondAttribute=\"trailing\" constant=\"8\" id=\"BXm-NG-3Lt\"/>\n                                                <constraint firstItem=\"4py-1c-vJX\" firstAttribute=\"centerY\" secondItem=\"dIe-Mg-pVe\" secondAttribute=\"centerY\" id=\"EUC-l8-9qb\"/>\n                                                <constraint firstItem=\"Axd-Bn-HRE\" firstAttribute=\"leading\" secondItem=\"4py-1c-vJX\" secondAttribute=\"leading\" id=\"KPN-9O-dWe\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"dIe-Mg-pVe\" secondAttribute=\"bottom\" constant=\"4\" id=\"QUB-NC-A9N\"/>\n                                                <constraint firstItem=\"dIe-Mg-pVe\" firstAttribute=\"leading\" secondItem=\"yaJ-dn-Ij5\" secondAttribute=\"leading\" constant=\"4\" id=\"b66-vw-tGx\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"4py-1c-vJX\" secondAttribute=\"trailing\" constant=\"8\" id=\"e1e-rP-HkR\"/>\n                                                <constraint firstItem=\"Axd-Bn-HRE\" firstAttribute=\"top\" secondItem=\"4py-1c-vJX\" secondAttribute=\"bottom\" constant=\"4\" id=\"fNY-pf-rhA\"/>\n                                                <constraint firstItem=\"dIe-Mg-pVe\" firstAttribute=\"top\" secondItem=\"yaJ-dn-Ij5\" secondAttribute=\"top\" constant=\"4\" id=\"g4C-Qi-bnC\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"posterImageView\" destination=\"dIe-Mg-pVe\" id=\"fZK-0n-7Jt\"/>\n                                            <outlet property=\"titleLabel\" destination=\"4py-1c-vJX\" id=\"MLK-FA-Qea\"/>\n                                            <outlet property=\"yearLabel\" destination=\"Axd-Bn-HRE\" id=\"RPC-qM-3lz\"/>\n                                            <segue destination=\"fdZ-nR-DyF\" kind=\"showDetail\" identifier=\"showDetail\" id=\"7ib-zC-pd1\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"BYZ-38-t0r\" id=\"DQp-9N-9DA\"/>\n                                    <outlet property=\"delegate\" destination=\"BYZ-38-t0r\" id=\"3Nv-66-DGV\"/>\n                                    <outlet property=\"prefetchDataSource\" destination=\"BYZ-38-t0r\" id=\"Dmt-jp-GpR\"/>\n                                </connections>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                    <navigationItem key=\"navigationItem\" title=\"Content\" id=\"XvA-8J-for\"/>\n                    <connections>\n                        <outlet property=\"tableView\" destination=\"qcl-Vq-tRJ\" id=\"r0d-Nv-XtB\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1653.5999999999999\" y=\"-450.22488755622192\"/>\n        </scene>\n        <!--Select content...-->\n        <scene sceneID=\"Gee-mi-8tL\">\n            <objects>\n                <viewController id=\"pbU-6g-k6R\" customClass=\"FilmDetailViewController\" customModule=\"Archit\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Enz-7I-S76\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"ZRw-nw-mxu\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"duk-b5-WvN\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"nMg-g7-KdA\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"116\" width=\"375\" height=\"551\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Year\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zRS-Fr-oW8\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"316\" width=\"375\" height=\"11\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"11\" id=\"RW4-Dl-cF0\"/>\n                                        </constraints>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"12\"/>\n                                        <color key=\"textColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                    </label>\n                                    <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" bounces=\"NO\" scrollEnabled=\"NO\" showsHorizontalScrollIndicator=\"NO\" showsVerticalScrollIndicator=\"NO\" bouncesZoom=\"NO\" editable=\"NO\" textAlignment=\"justified\" selectable=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Dxx-6C-5yK\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"335\" width=\"375\" height=\"33\"/>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <inset key=\"scrollIndicatorInsets\" minX=\"8\" minY=\"0.0\" maxX=\"8\" maxY=\"0.0\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                        <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\"/>\n                                    </textView>\n                                    <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"tgu-db-0Gg\">\n                                        <rect key=\"frame\" x=\"54\" y=\"16\" width=\"267\" height=\"267\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"width\" secondItem=\"tgu-db-0Gg\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"g2y-m0-XrA\"/>\n                                        </constraints>\n                                    </imageView>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Title\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"SbY-iD-JR5\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"291\" width=\"375\" height=\"21\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" weight=\"medium\" pointSize=\"17\"/>\n                                        <nil key=\"textColor\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                    </label>\n                                </subviews>\n                                <constraints>\n                                    <constraint firstItem=\"tgu-db-0Gg\" firstAttribute=\"top\" secondItem=\"nMg-g7-KdA\" secondAttribute=\"top\" constant=\"16\" id=\"03x-ly-Hte\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"Dxx-6C-5yK\" secondAttribute=\"bottom\" constant=\"8\" id=\"1yc-OP-Xfr\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"Dxx-6C-5yK\" secondAttribute=\"trailing\" id=\"3Js-0u-QbZ\"/>\n                                    <constraint firstItem=\"zRS-Fr-oW8\" firstAttribute=\"leading\" secondItem=\"nMg-g7-KdA\" secondAttribute=\"leading\" id=\"9Sl-Mi-zqm\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"SbY-iD-JR5\" secondAttribute=\"trailing\" id=\"EKb-3O-5dP\"/>\n                                    <constraint firstItem=\"tgu-db-0Gg\" firstAttribute=\"centerX\" secondItem=\"nMg-g7-KdA\" secondAttribute=\"centerX\" id=\"Jm5-AW-aHj\"/>\n                                    <constraint firstItem=\"zRS-Fr-oW8\" firstAttribute=\"top\" secondItem=\"SbY-iD-JR5\" secondAttribute=\"bottom\" constant=\"4\" id=\"P8S-ah-r2K\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"zRS-Fr-oW8\" secondAttribute=\"trailing\" id=\"Zg9-fU-Cdh\"/>\n                                    <constraint firstItem=\"SbY-iD-JR5\" firstAttribute=\"width\" secondItem=\"nMg-g7-KdA\" secondAttribute=\"width\" id=\"dHT-oe-0yo\"/>\n                                    <constraint firstItem=\"Dxx-6C-5yK\" firstAttribute=\"top\" secondItem=\"zRS-Fr-oW8\" secondAttribute=\"bottom\" constant=\"8\" id=\"rzu-pc-6yG\"/>\n                                    <constraint firstItem=\"Dxx-6C-5yK\" firstAttribute=\"leading\" secondItem=\"nMg-g7-KdA\" secondAttribute=\"leading\" id=\"tfD-Wb-yxs\"/>\n                                    <constraint firstItem=\"SbY-iD-JR5\" firstAttribute=\"top\" secondItem=\"tgu-db-0Gg\" secondAttribute=\"bottom\" constant=\"8\" id=\"vs6-qc-tce\"/>\n                                    <constraint firstItem=\"SbY-iD-JR5\" firstAttribute=\"leading\" secondItem=\"nMg-g7-KdA\" secondAttribute=\"leading\" id=\"zOs-HM-NBz\"/>\n                                </constraints>\n                            </scrollView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"nMg-g7-KdA\" secondAttribute=\"trailing\" id=\"4R6-Tq-LfZ\"/>\n                            <constraint firstItem=\"nMg-g7-KdA\" firstAttribute=\"width\" secondItem=\"duk-b5-WvN\" secondAttribute=\"width\" id=\"CIL-XX-ATq\"/>\n                            <constraint firstItem=\"nMg-g7-KdA\" firstAttribute=\"top\" secondItem=\"Enz-7I-S76\" secondAttribute=\"bottom\" id=\"N1b-zY-GZa\"/>\n                            <constraint firstItem=\"ZRw-nw-mxu\" firstAttribute=\"top\" secondItem=\"nMg-g7-KdA\" secondAttribute=\"bottom\" id=\"RII-Ac-NCh\"/>\n                            <constraint firstItem=\"nMg-g7-KdA\" firstAttribute=\"leading\" secondItem=\"duk-b5-WvN\" secondAttribute=\"leading\" id=\"TNb-lp-nwa\"/>\n                            <constraint firstItem=\"tgu-db-0Gg\" firstAttribute=\"height\" secondItem=\"duk-b5-WvN\" secondAttribute=\"height\" multiplier=\"2/5\" id=\"osZ-6P-ZWc\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" title=\"Select content...\" id=\"Ndj-em-dhP\"/>\n                    <connections>\n                        <outlet property=\"plotTextView\" destination=\"Dxx-6C-5yK\" id=\"gr4-PG-MIi\"/>\n                        <outlet property=\"posterImageView\" destination=\"tgu-db-0Gg\" id=\"3nU-4i-9ru\"/>\n                        <outlet property=\"titleLabel\" destination=\"SbY-iD-JR5\" id=\"6LK-91-ymx\"/>\n                        <outlet property=\"yearLabel\" destination=\"zRS-Fr-oW8\" id=\"6Xe-iT-Ho5\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"fc5-lG-UmZ\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1653.5999999999999\" y=\"315.29235382308849\"/>\n        </scene>\n        <!--Base Navigation Controller-->\n        <scene sceneID=\"J24-dY-CR6\">\n            <objects>\n                <navigationController id=\"Zuo-cZ-xWg\" customClass=\"BaseNavigationController\" customModule=\"Archit\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" insetsLayoutMarginsFromSafeArea=\"NO\" largeTitles=\"YES\" id=\"qi8-4I-3hw\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"20\" width=\"375\" height=\"96\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"BYZ-38-t0r\" kind=\"relationship\" relationship=\"rootViewController\" id=\"hhy-YS-fH9\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dGr-6g-MI3\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"703\" y=\"-450\"/>\n        </scene>\n        <!--Split View Controller-->\n        <scene sceneID=\"w3j-Fp-C0v\">\n            <objects>\n                <splitViewController id=\"QDw-Op-zfs\" sceneMemberID=\"viewController\">\n                    <connections>\n                        <segue destination=\"Zuo-cZ-xWg\" kind=\"relationship\" relationship=\"masterViewController\" id=\"M3S-se-Zxe\"/>\n                        <segue destination=\"fdZ-nR-DyF\" kind=\"relationship\" relationship=\"detailViewController\" id=\"YyA-mF-10A\"/>\n                    </connections>\n                </splitViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"kU9-wo-5DS\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-249\" y=\"-118\"/>\n        </scene>\n        <!--Base Navigation Controller-->\n        <scene sceneID=\"fHi-e8-nQE\">\n            <objects>\n                <navigationController automaticallyAdjustsScrollViewInsets=\"NO\" id=\"fdZ-nR-DyF\" customClass=\"BaseNavigationController\" customModule=\"Archit\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <toolbarItems/>\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" insetsLayoutMarginsFromSafeArea=\"NO\" id=\"qKS-fc-l5b\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"20\" width=\"375\" height=\"96\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <nil name=\"viewControllers\"/>\n                    <connections>\n                        <segue destination=\"pbU-6g-k6R\" kind=\"relationship\" relationship=\"rootViewController\" id=\"7UG-IW-6xx\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"CuZ-rc-H5X\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"702\" y=\"316\"/>\n        </scene>\n    </scenes>\n    <inferredMetricsTieBreakers>\n        <segue reference=\"7ib-zC-pd1\"/>\n    </inferredMetricsTieBreakers>\n</document>\n"
  },
  {
    "path": "Archit.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 48;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t3EEB7D682D5B0E595955661E /* Pods_DomainTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A73079477914B6D127E59CB7 /* Pods_DomainTests.framework */; };\n\t\t5DDD960198C32755578FCC06 /* Pods_ArchitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE55A12BF45485A5033F2DAC /* Pods_ArchitTests.framework */; };\n\t\t7ACA6D27D75176DE3C94E936 /* Pods_ArchitUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BBCEB415324D3D8E20DD0FF /* Pods_ArchitUITests.framework */; };\n\t\t810823341FB0C594009F0C43 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8108232B1FB0C594009F0C43 /* Core.framework */; };\n\t\t8108233B1FB0C594009F0C43 /* CoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8108233A1FB0C594009F0C43 /* CoreTests.swift */; };\n\t\t8108233D1FB0C594009F0C43 /* Core.h in Headers */ = {isa = PBXBuildFile; fileRef = 8108232D1FB0C594009F0C43 /* Core.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t810823401FB0C594009F0C43 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8108232B1FB0C594009F0C43 /* Core.framework */; };\n\t\t810823411FB0C594009F0C43 /* Core.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8108232B1FB0C594009F0C43 /* Core.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t810823571FB0C5AA009F0C43 /* Domain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8108234E1FB0C5AA009F0C43 /* Domain.framework */; };\n\t\t8108235E1FB0C5AA009F0C43 /* DomainTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8108235D1FB0C5AA009F0C43 /* DomainTests.swift */; };\n\t\t810823601FB0C5AA009F0C43 /* Domain.h in Headers */ = {isa = PBXBuildFile; fileRef = 810823501FB0C5AA009F0C43 /* Domain.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t810963D21FB0C42E00B35959 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 810963D01FB0C42E00B35959 /* Main.storyboard */; };\n\t\t810963D61FB0C42E00B35959 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 810963D51FB0C42E00B35959 /* Assets.xcassets */; };\n\t\t810963D91FB0C42E00B35959 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 810963D71FB0C42E00B35959 /* LaunchScreen.storyboard */; };\n\t\t810963DC1FB0C42E00B35959 /* AppManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 810963DB1FB0C42E00B35959 /* AppManager.swift */; };\n\t\t810963E51FB0C42E00B35959 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 810963E41FB0C42E00B35959 /* AppDelegate.swift */; };\n\t\t810963F81FB0C42E00B35959 /* ArchitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 810963F71FB0C42E00B35959 /* ArchitTests.swift */; };\n\t\t810964031FB0C42E00B35959 /* ArchitUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 810964021FB0C42E00B35959 /* ArchitUITests.swift */; };\n\t\t817ED3511FBDE6D90066A679 /* LogManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817ED3501FBDE6D90066A679 /* LogManager.swift */; };\n\t\t817ED3541FBDE7BE0066A679 /* LogManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817ED3501FBDE6D90066A679 /* LogManager.swift */; };\n\t\t817ED3551FBDE7C00066A679 /* LogManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817ED3501FBDE6D90066A679 /* LogManager.swift */; };\n\t\t829582401FDEC1F900DFD9BA /* FilmCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8295823F1FDEC1F900DFD9BA /* FilmCell.swift */; };\n\t\t8374FD19ACE27BF2EEF1BADF /* Pods_Domain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5070463760B7BEFCBFA8995E /* Pods_Domain.framework */; };\n\t\t9AC00EF4802746D651A3FFE3 /* Pods_CoreTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B55B0227AAC528CF431AFE3 /* Pods_CoreTests.framework */; };\n\t\tA4D041333F586D156E01B44E /* Pods_Archit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51036FE5FB812710D2B3A0F7 /* Pods_Archit.framework */; };\n\t\tD238D4DBD18E34740087505B /* Pods_Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB2BFE8043D3AABD5254FEFC /* Pods_Core.framework */; };\n\t\tD5283FA51FB637F7008DCA34 /* FilmSearchNetworkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5283FA41FB637F7008DCA34 /* FilmSearchNetworkModel.swift */; };\n\t\tD5283FA61FB65079008DCA34 /* Domain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8108234E1FB0C5AA009F0C43 /* Domain.framework */; };\n\t\tD5283FA71FB65079008DCA34 /* Domain.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8108234E1FB0C5AA009F0C43 /* Domain.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\tD5283FAB1FB71A0E008DCA34 /* SearchFilmServiceTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5283FAA1FB71A0E008DCA34 /* SearchFilmServiceTask.swift */; };\n\t\tD582F4311FB2273A002BDB91 /* FilmsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F42F1FB2273A002BDB91 /* FilmsViewController.swift */; };\n\t\tD582F4321FB2273A002BDB91 /* FilmsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4301FB2273A002BDB91 /* FilmsController.swift */; };\n\t\tD582F4341FB22761002BDB91 /* UITableView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4331FB22761002BDB91 /* UITableView+Reusable.swift */; };\n\t\tD582F4381FB22822002BDB91 /* FilmDetailController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4361FB22821002BDB91 /* FilmDetailController.swift */; };\n\t\tD582F4391FB22822002BDB91 /* FilmDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4371FB22821002BDB91 /* FilmDetailViewController.swift */; };\n\t\tD582F43C1FB239C4002BDB91 /* BaseInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F43B1FB239C4002BDB91 /* BaseInteractor.swift */; };\n\t\tD582F43E1FB23A8D002BDB91 /* FilmsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F43D1FB23A8D002BDB91 /* FilmsInteractor.swift */; };\n\t\tD582F4481FB38CF1002BDB91 /* NetworkServiceTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F43F1FB38CF1002BDB91 /* NetworkServiceTransformer.swift */; };\n\t\tD582F4491FB38CF1002BDB91 /* NetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4401FB38CF1002BDB91 /* NetworkService.swift */; };\n\t\tD582F44A1FB38CF1002BDB91 /* NetworkServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4411FB38CF1002BDB91 /* NetworkServiceProtocol.swift */; };\n\t\tD582F44B1FB38CF1002BDB91 /* ServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4421FB38CF1002BDB91 /* ServiceProtocol.swift */; };\n\t\tD582F44C1FB38CF1002BDB91 /* TaskProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4441FB38CF1002BDB91 /* TaskProtocol.swift */; };\n\t\tD582F44D1FB38CF1002BDB91 /* ServiceTaskProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4451FB38CF1002BDB91 /* ServiceTaskProtocol.swift */; };\n\t\tD582F44E1FB38CF1002BDB91 /* ServiceTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4461FB38CF1002BDB91 /* ServiceTask.swift */; };\n\t\tD582F44F1FB38CF1002BDB91 /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4471FB38CF1002BDB91 /* Transformer.swift */; };\n\t\tD582F4561FB61B5B002BDB91 /* FilmsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4551FB61B5B002BDB91 /* FilmsService.swift */; };\n\t\tD582F4581FB61C56002BDB91 /* FilmsNetworkTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4571FB61C56002BDB91 /* FilmsNetworkTransformer.swift */; };\n\t\tD582F45A1FB61D2F002BDB91 /* SearchFilmsServiceTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F4591FB61D2F002BDB91 /* SearchFilmsServiceTask.swift */; };\n\t\tD582F45C1FB61D91002BDB91 /* FilmNetworkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F45B1FB61D91002BDB91 /* FilmNetworkModel.swift */; };\n\t\tD582F45E1FB620D5002BDB91 /* FilmRatingNetworkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F45D1FB620D5002BDB91 /* FilmRatingNetworkModel.swift */; };\n\t\tD582F4601FB62207002BDB91 /* Film.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F45F1FB62207002BDB91 /* Film.swift */; };\n\t\tD582F4631FB62376002BDB91 /* Domain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8108234E1FB0C5AA009F0C43 /* Domain.framework */; };\n\t\tD58D1AA01FB2172000721663 /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D58D1A9A1FB2172000721663 /* BaseViewController.swift */; };\n\t\tD58D1AA21FB2172000721663 /* BaseNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D58D1A9C1FB2172000721663 /* BaseNavigationController.swift */; };\n\t\tD58D1AA31FB2172000721663 /* BaseController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D58D1A9E1FB2172000721663 /* BaseController.swift */; };\n\t\tD5FF818E1FB8AFD600EAC050 /* NetworkServiceConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5FF818D1FB8AFD600EAC050 /* NetworkServiceConstants.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t810823351FB0C594009F0C43 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 810963BD1FB0C42E00B35959 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8108232A1FB0C594009F0C43;\n\t\t\tremoteInfo = Core;\n\t\t};\n\t\t810823371FB0C594009F0C43 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 810963BD1FB0C42E00B35959 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 810963C61FB0C42E00B35959;\n\t\t\tremoteInfo = Archit;\n\t\t};\n\t\t8108233E1FB0C594009F0C43 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 810963BD1FB0C42E00B35959 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8108232A1FB0C594009F0C43;\n\t\t\tremoteInfo = Core;\n\t\t};\n\t\t810823581FB0C5AA009F0C43 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 810963BD1FB0C42E00B35959 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8108234D1FB0C5AA009F0C43;\n\t\t\tremoteInfo = Domain;\n\t\t};\n\t\t8108235A1FB0C5AA009F0C43 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 810963BD1FB0C42E00B35959 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 810963C61FB0C42E00B35959;\n\t\t\tremoteInfo = Archit;\n\t\t};\n\t\t810963F41FB0C42E00B35959 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 810963BD1FB0C42E00B35959 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 810963C61FB0C42E00B35959;\n\t\t\tremoteInfo = Archit;\n\t\t};\n\t\t810963FF1FB0C42E00B35959 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 810963BD1FB0C42E00B35959 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 810963C61FB0C42E00B35959;\n\t\t\tremoteInfo = Archit;\n\t\t};\n\t\tD5283FA81FB65079008DCA34 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 810963BD1FB0C42E00B35959 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8108234D1FB0C5AA009F0C43;\n\t\t\tremoteInfo = Domain;\n\t\t};\n\t\tD582F4611FB6236F002BDB91 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 810963BD1FB0C42E00B35959 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8108234D1FB0C5AA009F0C43;\n\t\t\tremoteInfo = Domain;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t810823471FB0C594009F0C43 /* 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\tD5283FA71FB65079008DCA34 /* Domain.framework in Embed Frameworks */,\n\t\t\t\t810823411FB0C594009F0C43 /* Core.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\t0C965850A085A5CD8D2663C6 /* Pods-ArchitUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ArchitUITests.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t1D22BA66BB0A3D7C4662F2DE /* Pods-Archit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Archit.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-Archit/Pods-Archit.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t2174FBEAD5708D26C3821F32 /* Pods-DomainTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-DomainTests.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t31086010F280804A3BB3FD52 /* Pods-CoreTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-CoreTests.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t4D1AEE1B204D4544AAF01F78 /* Pods-Archit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Archit.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-Archit/Pods-Archit.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t5070463760B7BEFCBFA8995E /* Pods_Domain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Domain.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t51036FE5FB812710D2B3A0F7 /* Pods_Archit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Archit.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6419E04F0343B79EE7457FE5 /* Pods-Core.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Core.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-Core/Pods-Core.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6B55B0227AAC528CF431AFE3 /* Pods_CoreTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CoreTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6C57BC3580C21A4356BEF996 /* Pods-Domain.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Domain.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-Domain/Pods-Domain.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t718EE189F41C5809037880C9 /* Pods-Core.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Core.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-Core/Pods-Core.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t72C16377B21D535A1403C99E /* Pods-DomainTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-DomainTests.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t7BBCEB415324D3D8E20DD0FF /* Pods_ArchitUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ArchitUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t8108232B1FB0C594009F0C43 /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t8108232D1FB0C594009F0C43 /* Core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Core.h; sourceTree = \"<group>\"; };\n\t\t8108232E1FB0C594009F0C43 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t810823331FB0C594009F0C43 /* CoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t8108233A1FB0C594009F0C43 /* CoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreTests.swift; sourceTree = \"<group>\"; };\n\t\t8108233C1FB0C594009F0C43 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t8108234E1FB0C5AA009F0C43 /* Domain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Domain.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t810823501FB0C5AA009F0C43 /* Domain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Domain.h; sourceTree = \"<group>\"; };\n\t\t810823511FB0C5AA009F0C43 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t810823561FB0C5AA009F0C43 /* DomainTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DomainTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t8108235D1FB0C5AA009F0C43 /* DomainTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainTests.swift; sourceTree = \"<group>\"; };\n\t\t8108235F1FB0C5AA009F0C43 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t810963C71FB0C42E00B35959 /* Archit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Archit.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t810963D11FB0C42E00B35959 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = UI/Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t810963D51FB0C42E00B35959 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Resources/Assets/Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t810963D81FB0C42E00B35959 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = UI/Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t810963DB1FB0C42E00B35959 /* AppManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppManager.swift; path = Source/Managers/AppManager.swift; sourceTree = \"<group>\"; };\n\t\t810963DE1FB0C42E00B35959 /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; name = .gitignore; path = ../.gitignore; sourceTree = \"<group>\"; };\n\t\t810963DF1FB0C42E00B35959 /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text; name = .swiftlint.yml; path = ../.swiftlint.yml; sourceTree = \"<group>\"; };\n\t\t810963E01FB0C42E00B35959 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = \"<group>\"; };\n\t\t810963E11FB0C42E00B35959 /* Podfile */ = {isa = PBXFileReference; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t810963E21FB0C42E00B35959 /* Gemfile */ = {isa = PBXFileReference; lastKnownFileType = text; name = Gemfile; path = ../Gemfile; sourceTree = \"<group>\"; };\n\t\t810963E31FB0C42E00B35959 /* Rakefile */ = {isa = PBXFileReference; lastKnownFileType = text; name = Rakefile; path = ../Rakefile; sourceTree = \"<group>\"; };\n\t\t810963E41FB0C42E00B35959 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = \"Supporting Files/AppDelegate.swift\"; sourceTree = \"<group>\"; };\n\t\t810963E61FB0C42E00B35959 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = \"Supporting Files/Info.plist\"; sourceTree = \"<group>\"; };\n\t\t810963E71FB0C42E00B35959 /* Archit.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Archit.entitlements; path = \"Supporting Files/Archit.entitlements\"; sourceTree = \"<group>\"; };\n\t\t810963E91FB0C42E00B35959 /* bootstrap.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = bootstrap.sh; path = ../Scripts/bootstrap.sh; sourceTree = \"<group>\"; };\n\t\t810963EA1FB0C42E00B35959 /* install_pre_commit.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = install_pre_commit.sh; path = ../Scripts/install_pre_commit.sh; sourceTree = \"<group>\"; };\n\t\t810963EB1FB0C42E00B35959 /* pre_commit.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = pre_commit.sh; path = ../Scripts/pre_commit.sh; sourceTree = \"<group>\"; };\n\t\t810963EC1FB0C42E00B35959 /* highlight_TODOs.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = highlight_TODOs.sh; path = ../Scripts/highlight_TODOs.sh; sourceTree = \"<group>\"; };\n\t\t810963ED1FB0C42E00B35959 /* symbolicate_crash.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = symbolicate_crash.sh; path = ../Scripts/symbolicate_crash.sh; sourceTree = \"<group>\"; };\n\t\t810963F31FB0C42E00B35959 /* ArchitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ArchitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t810963F71FB0C42E00B35959 /* ArchitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArchitTests.swift; sourceTree = \"<group>\"; };\n\t\t810963F91FB0C42E00B35959 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t810963FE1FB0C42E00B35959 /* ArchitUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ArchitUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t810964021FB0C42E00B35959 /* ArchitUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArchitUITests.swift; sourceTree = \"<group>\"; };\n\t\t810964041FB0C42E00B35959 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t817ED3501FBDE6D90066A679 /* LogManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = LogManager.swift; path = Source/Managers/LogManager.swift; sourceTree = \"<group>\"; };\n\t\t8295823F1FDEC1F900DFD9BA /* FilmCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilmCell.swift; sourceTree = \"<group>\"; };\n\t\t9E13B6F1A1B652AB4AD62B18 /* Pods-Domain.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Domain.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-Domain/Pods-Domain.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA73079477914B6D127E59CB7 /* Pods_DomainTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DomainTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tAE55A12BF45485A5033F2DAC /* Pods_ArchitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ArchitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tBB2BFE8043D3AABD5254FEFC /* Pods_Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Core.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC5889FE77A4B48F977D2820C /* Pods-ArchitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ArchitTests.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD22F048FB77CEBE13E984EDB /* Pods-CoreTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-CoreTests.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD5283FA41FB637F7008DCA34 /* FilmSearchNetworkModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilmSearchNetworkModel.swift; sourceTree = \"<group>\"; };\n\t\tD5283FAA1FB71A0E008DCA34 /* SearchFilmServiceTask.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchFilmServiceTask.swift; sourceTree = \"<group>\"; };\n\t\tD582F42F1FB2273A002BDB91 /* FilmsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilmsViewController.swift; sourceTree = \"<group>\"; };\n\t\tD582F4301FB2273A002BDB91 /* FilmsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilmsController.swift; sourceTree = \"<group>\"; };\n\t\tD582F4331FB22761002BDB91 /* UITableView+Reusable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UITableView+Reusable.swift\"; sourceTree = \"<group>\"; };\n\t\tD582F4361FB22821002BDB91 /* FilmDetailController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilmDetailController.swift; sourceTree = \"<group>\"; };\n\t\tD582F4371FB22821002BDB91 /* FilmDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilmDetailViewController.swift; sourceTree = \"<group>\"; };\n\t\tD582F43B1FB239C4002BDB91 /* BaseInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseInteractor.swift; sourceTree = \"<group>\"; };\n\t\tD582F43D1FB23A8D002BDB91 /* FilmsInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilmsInteractor.swift; sourceTree = \"<group>\"; };\n\t\tD582F43F1FB38CF1002BDB91 /* NetworkServiceTransformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkServiceTransformer.swift; sourceTree = \"<group>\"; };\n\t\tD582F4401FB38CF1002BDB91 /* NetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkService.swift; sourceTree = \"<group>\"; };\n\t\tD582F4411FB38CF1002BDB91 /* NetworkServiceProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkServiceProtocol.swift; sourceTree = \"<group>\"; };\n\t\tD582F4421FB38CF1002BDB91 /* ServiceProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceProtocol.swift; sourceTree = \"<group>\"; };\n\t\tD582F4441FB38CF1002BDB91 /* TaskProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TaskProtocol.swift; sourceTree = \"<group>\"; };\n\t\tD582F4451FB38CF1002BDB91 /* ServiceTaskProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceTaskProtocol.swift; sourceTree = \"<group>\"; };\n\t\tD582F4461FB38CF1002BDB91 /* ServiceTask.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceTask.swift; sourceTree = \"<group>\"; };\n\t\tD582F4471FB38CF1002BDB91 /* Transformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Transformer.swift; sourceTree = \"<group>\"; };\n\t\tD582F4551FB61B5B002BDB91 /* FilmsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilmsService.swift; sourceTree = \"<group>\"; };\n\t\tD582F4571FB61C56002BDB91 /* FilmsNetworkTransformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilmsNetworkTransformer.swift; sourceTree = \"<group>\"; };\n\t\tD582F4591FB61D2F002BDB91 /* SearchFilmsServiceTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchFilmsServiceTask.swift; sourceTree = \"<group>\"; };\n\t\tD582F45B1FB61D91002BDB91 /* FilmNetworkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilmNetworkModel.swift; sourceTree = \"<group>\"; };\n\t\tD582F45D1FB620D5002BDB91 /* FilmRatingNetworkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilmRatingNetworkModel.swift; sourceTree = \"<group>\"; };\n\t\tD582F45F1FB62207002BDB91 /* Film.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Film.swift; sourceTree = \"<group>\"; };\n\t\tD58D1A9A1FB2172000721663 /* BaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseViewController.swift; sourceTree = \"<group>\"; };\n\t\tD58D1A9C1FB2172000721663 /* BaseNavigationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseNavigationController.swift; sourceTree = \"<group>\"; };\n\t\tD58D1A9E1FB2172000721663 /* BaseController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseController.swift; sourceTree = \"<group>\"; };\n\t\tD5FF818D1FB8AFD600EAC050 /* NetworkServiceConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkServiceConstants.swift; sourceTree = \"<group>\"; };\n\t\tDC7AA124EFC32130BD7EE6D3 /* Pods-ArchitUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ArchitUITests.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tF2239F4AAFF95EF0825F673A /* Pods-ArchitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ArchitTests.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t810823271FB0C594009F0C43 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD582F4631FB62376002BDB91 /* Domain.framework in Frameworks */,\n\t\t\t\tD238D4DBD18E34740087505B /* Pods_Core.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t810823301FB0C594009F0C43 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t810823341FB0C594009F0C43 /* Core.framework in Frameworks */,\n\t\t\t\t9AC00EF4802746D651A3FFE3 /* Pods_CoreTests.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8108234A1FB0C5AA009F0C43 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8374FD19ACE27BF2EEF1BADF /* Pods_Domain.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t810823531FB0C5AA009F0C43 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t810823571FB0C5AA009F0C43 /* Domain.framework in Frameworks */,\n\t\t\t\t3EEB7D682D5B0E595955661E /* Pods_DomainTests.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t810963C21FB0C42E00B35959 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD5283FA61FB65079008DCA34 /* Domain.framework in Frameworks */,\n\t\t\t\tA4D041333F586D156E01B44E /* Pods_Archit.framework in Frameworks */,\n\t\t\t\t810823401FB0C594009F0C43 /* Core.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t810963F01FB0C42E00B35959 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5DDD960198C32755578FCC06 /* Pods_ArchitTests.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t810963FB1FB0C42E00B35959 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7ACA6D27D75176DE3C94E936 /* Pods_ArchitUITests.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\t0C50E9DAB7125D9762128E54 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t51036FE5FB812710D2B3A0F7 /* Pods_Archit.framework */,\n\t\t\t\tAE55A12BF45485A5033F2DAC /* Pods_ArchitTests.framework */,\n\t\t\t\t7BBCEB415324D3D8E20DD0FF /* Pods_ArchitUITests.framework */,\n\t\t\t\tBB2BFE8043D3AABD5254FEFC /* Pods_Core.framework */,\n\t\t\t\t6B55B0227AAC528CF431AFE3 /* Pods_CoreTests.framework */,\n\t\t\t\t5070463760B7BEFCBFA8995E /* Pods_Domain.framework */,\n\t\t\t\tA73079477914B6D127E59CB7 /* Pods_DomainTests.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t453EC2F772010FFBE0B63D78 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1D22BA66BB0A3D7C4662F2DE /* Pods-Archit.debug.xcconfig */,\n\t\t\t\t4D1AEE1B204D4544AAF01F78 /* Pods-Archit.release.xcconfig */,\n\t\t\t\tF2239F4AAFF95EF0825F673A /* Pods-ArchitTests.debug.xcconfig */,\n\t\t\t\tC5889FE77A4B48F977D2820C /* Pods-ArchitTests.release.xcconfig */,\n\t\t\t\tDC7AA124EFC32130BD7EE6D3 /* Pods-ArchitUITests.debug.xcconfig */,\n\t\t\t\t0C965850A085A5CD8D2663C6 /* Pods-ArchitUITests.release.xcconfig */,\n\t\t\t\t718EE189F41C5809037880C9 /* Pods-Core.debug.xcconfig */,\n\t\t\t\t6419E04F0343B79EE7457FE5 /* Pods-Core.release.xcconfig */,\n\t\t\t\t31086010F280804A3BB3FD52 /* Pods-CoreTests.debug.xcconfig */,\n\t\t\t\tD22F048FB77CEBE13E984EDB /* Pods-CoreTests.release.xcconfig */,\n\t\t\t\t6C57BC3580C21A4356BEF996 /* Pods-Domain.debug.xcconfig */,\n\t\t\t\t9E13B6F1A1B652AB4AD62B18 /* Pods-Domain.release.xcconfig */,\n\t\t\t\t72C16377B21D535A1403C99E /* Pods-DomainTests.debug.xcconfig */,\n\t\t\t\t2174FBEAD5708D26C3821F32 /* Pods-DomainTests.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8108232C1FB0C594009F0C43 /* Core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F4501FB61AA7002BDB91 /* Services */,\n\t\t\t\tD582F4431FB38CF1002BDB91 /* Tasks */,\n\t\t\t\tD582F4401FB38CF1002BDB91 /* NetworkService.swift */,\n\t\t\t\tD582F4411FB38CF1002BDB91 /* NetworkServiceProtocol.swift */,\n\t\t\t\tD582F4421FB38CF1002BDB91 /* ServiceProtocol.swift */,\n\t\t\t\tD582F43F1FB38CF1002BDB91 /* NetworkServiceTransformer.swift */,\n\t\t\t\tD582F4471FB38CF1002BDB91 /* Transformer.swift */,\n\t\t\t\t8108232D1FB0C594009F0C43 /* Core.h */,\n\t\t\t\t8108232E1FB0C594009F0C43 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Core;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810823391FB0C594009F0C43 /* CoreTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8108233A1FB0C594009F0C43 /* CoreTests.swift */,\n\t\t\t\t8108233C1FB0C594009F0C43 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = CoreTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8108234F1FB0C5AA009F0C43 /* Domain */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F45F1FB62207002BDB91 /* Film.swift */,\n\t\t\t\t810823501FB0C5AA009F0C43 /* Domain.h */,\n\t\t\t\t810823511FB0C5AA009F0C43 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Domain;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8108235C1FB0C5AA009F0C43 /* DomainTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8108235D1FB0C5AA009F0C43 /* DomainTests.swift */,\n\t\t\t\t8108235F1FB0C5AA009F0C43 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = DomainTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963BC1FB0C42E00B35959 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t810963C91FB0C42E00B35959 /* Archit */,\n\t\t\t\t810963F61FB0C42E00B35959 /* ArchitTests */,\n\t\t\t\t810964011FB0C42E00B35959 /* ArchitUITests */,\n\t\t\t\t8108232C1FB0C594009F0C43 /* Core */,\n\t\t\t\t810823391FB0C594009F0C43 /* CoreTests */,\n\t\t\t\t8108234F1FB0C5AA009F0C43 /* Domain */,\n\t\t\t\t8108235C1FB0C5AA009F0C43 /* DomainTests */,\n\t\t\t\t810963C81FB0C42E00B35959 /* Products */,\n\t\t\t\t453EC2F772010FFBE0B63D78 /* Pods */,\n\t\t\t\t0C50E9DAB7125D9762128E54 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963C81FB0C42E00B35959 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t810963C71FB0C42E00B35959 /* Archit.app */,\n\t\t\t\t810963F31FB0C42E00B35959 /* ArchitTests.xctest */,\n\t\t\t\t810963FE1FB0C42E00B35959 /* ArchitUITests.xctest */,\n\t\t\t\t8108232B1FB0C594009F0C43 /* Core.framework */,\n\t\t\t\t810823331FB0C594009F0C43 /* CoreTests.xctest */,\n\t\t\t\t8108234E1FB0C5AA009F0C43 /* Domain.framework */,\n\t\t\t\t810823561FB0C5AA009F0C43 /* DomainTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963C91FB0C42E00B35959 /* Archit */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t810963CA1FB0C42E00B35959 /* Source */,\n\t\t\t\t810963CF1FB0C42E00B35959 /* UI */,\n\t\t\t\t810963D31FB0C42E00B35959 /* Resources */,\n\t\t\t\t810963E81FB0C42E00B35959 /* Scripts */,\n\t\t\t\t810963DD1FB0C42E00B35959 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = Archit;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963CA1FB0C42E00B35959 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F4351FB22821002BDB91 /* FilmDetail */,\n\t\t\t\tD582F42E1FB2273A002BDB91 /* Films */,\n\t\t\t\t810963CB1FB0C42E00B35959 /* Base */,\n\t\t\t\t810963DA1FB0C42E00B35959 /* Managers */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963CB1FB0C42E00B35959 /* Base */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F43A1FB239C4002BDB91 /* Interactors */,\n\t\t\t\tD582F42D1FB22731002BDB91 /* Extensions */,\n\t\t\t\tD58D1A9D1FB2172000721663 /* Controllers */,\n\t\t\t\tD58D1A991FB2172000721663 /* ViewControllers */,\n\t\t\t);\n\t\t\tname = Base;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963CF1FB0C42E00B35959 /* UI */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t810963D01FB0C42E00B35959 /* Main.storyboard */,\n\t\t\t\t810963D71FB0C42E00B35959 /* LaunchScreen.storyboard */,\n\t\t\t);\n\t\t\tname = UI;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963D31FB0C42E00B35959 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t810963D41FB0C42E00B35959 /* Assets */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963D41FB0C42E00B35959 /* Assets */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t810963D51FB0C42E00B35959 /* Assets.xcassets */,\n\t\t\t);\n\t\t\tname = Assets;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963DA1FB0C42E00B35959 /* Managers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t810963DB1FB0C42E00B35959 /* AppManager.swift */,\n\t\t\t\t817ED3501FBDE6D90066A679 /* LogManager.swift */,\n\t\t\t);\n\t\t\tname = Managers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963DD1FB0C42E00B35959 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t810963DE1FB0C42E00B35959 /* .gitignore */,\n\t\t\t\t810963DF1FB0C42E00B35959 /* .swiftlint.yml */,\n\t\t\t\t810963E01FB0C42E00B35959 /* README.md */,\n\t\t\t\t810963E11FB0C42E00B35959 /* Podfile */,\n\t\t\t\t810963E21FB0C42E00B35959 /* Gemfile */,\n\t\t\t\t810963E31FB0C42E00B35959 /* Rakefile */,\n\t\t\t\t810963E41FB0C42E00B35959 /* AppDelegate.swift */,\n\t\t\t\t810963E61FB0C42E00B35959 /* Info.plist */,\n\t\t\t\t810963E71FB0C42E00B35959 /* Archit.entitlements */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963E81FB0C42E00B35959 /* Scripts */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t810963E91FB0C42E00B35959 /* bootstrap.sh */,\n\t\t\t\t810963EA1FB0C42E00B35959 /* install_pre_commit.sh */,\n\t\t\t\t810963EB1FB0C42E00B35959 /* pre_commit.sh */,\n\t\t\t\t810963EC1FB0C42E00B35959 /* highlight_TODOs.sh */,\n\t\t\t\t810963ED1FB0C42E00B35959 /* symbolicate_crash.sh */,\n\t\t\t);\n\t\t\tname = Scripts;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963F61FB0C42E00B35959 /* ArchitTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t810963F71FB0C42E00B35959 /* ArchitTests.swift */,\n\t\t\t\t810963F91FB0C42E00B35959 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = ArchitTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810964011FB0C42E00B35959 /* ArchitUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t810964021FB0C42E00B35959 /* ArchitUITests.swift */,\n\t\t\t\t810964041FB0C42E00B35959 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = ArchitUITests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD582F42D1FB22731002BDB91 /* Extensions */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F4331FB22761002BDB91 /* UITableView+Reusable.swift */,\n\t\t\t);\n\t\t\tname = Extensions;\n\t\t\tpath = Source/Base/Extensions;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD582F42E1FB2273A002BDB91 /* Films */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F43D1FB23A8D002BDB91 /* FilmsInteractor.swift */,\n\t\t\t\tD582F4301FB2273A002BDB91 /* FilmsController.swift */,\n\t\t\t\tD582F42F1FB2273A002BDB91 /* FilmsViewController.swift */,\n\t\t\t\t8295823F1FDEC1F900DFD9BA /* FilmCell.swift */,\n\t\t\t);\n\t\t\tname = Films;\n\t\t\tpath = Source/Films;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD582F4351FB22821002BDB91 /* FilmDetail */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F4361FB22821002BDB91 /* FilmDetailController.swift */,\n\t\t\t\tD582F4371FB22821002BDB91 /* FilmDetailViewController.swift */,\n\t\t\t);\n\t\t\tname = FilmDetail;\n\t\t\tpath = Source/FilmDetail;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD582F43A1FB239C4002BDB91 /* Interactors */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F43B1FB239C4002BDB91 /* BaseInteractor.swift */,\n\t\t\t);\n\t\t\tname = Interactors;\n\t\t\tpath = Source/Base/Interactors;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD582F4431FB38CF1002BDB91 /* Tasks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F4441FB38CF1002BDB91 /* TaskProtocol.swift */,\n\t\t\t\tD582F4451FB38CF1002BDB91 /* ServiceTaskProtocol.swift */,\n\t\t\t\tD582F4461FB38CF1002BDB91 /* ServiceTask.swift */,\n\t\t\t);\n\t\t\tpath = Tasks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD582F4501FB61AA7002BDB91 /* Services */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F4511FB61AA7002BDB91 /* Films */,\n\t\t\t\tD5FF818D1FB8AFD600EAC050 /* NetworkServiceConstants.swift */,\n\t\t\t);\n\t\t\tpath = Services;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD582F4511FB61AA7002BDB91 /* Films */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F4531FB61B20002BDB91 /* NetworkModels */,\n\t\t\t\tD582F4521FB61ADC002BDB91 /* Tasks */,\n\t\t\t\tD582F4551FB61B5B002BDB91 /* FilmsService.swift */,\n\t\t\t);\n\t\t\tpath = Films;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD582F4521FB61ADC002BDB91 /* Tasks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD5283FAA1FB71A0E008DCA34 /* SearchFilmServiceTask.swift */,\n\t\t\t\tD582F4591FB61D2F002BDB91 /* SearchFilmsServiceTask.swift */,\n\t\t\t);\n\t\t\tpath = Tasks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD582F4531FB61B20002BDB91 /* NetworkModels */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F4541FB61B20002BDB91 /* Transformers */,\n\t\t\t\tD5283FA41FB637F7008DCA34 /* FilmSearchNetworkModel.swift */,\n\t\t\t\tD582F45B1FB61D91002BDB91 /* FilmNetworkModel.swift */,\n\t\t\t\tD582F45D1FB620D5002BDB91 /* FilmRatingNetworkModel.swift */,\n\t\t\t);\n\t\t\tpath = NetworkModels;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD582F4541FB61B20002BDB91 /* Transformers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD582F4571FB61C56002BDB91 /* FilmsNetworkTransformer.swift */,\n\t\t\t);\n\t\t\tpath = Transformers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD58D1A991FB2172000721663 /* ViewControllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD58D1A9A1FB2172000721663 /* BaseViewController.swift */,\n\t\t\t\tD58D1A9C1FB2172000721663 /* BaseNavigationController.swift */,\n\t\t\t);\n\t\t\tname = ViewControllers;\n\t\t\tpath = Source/Base/ViewControllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD58D1A9D1FB2172000721663 /* Controllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD58D1A9E1FB2172000721663 /* BaseController.swift */,\n\t\t\t);\n\t\t\tname = Controllers;\n\t\t\tpath = Source/Base/Controllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t810823281FB0C594009F0C43 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8108233D1FB0C594009F0C43 /* Core.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8108234B1FB0C5AA009F0C43 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t810823601FB0C5AA009F0C43 /* Domain.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\t8108232A1FB0C594009F0C43 /* Core */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 810823461FB0C594009F0C43 /* Build configuration list for PBXNativeTarget \"Core\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA70251AF5242BB1FB4D76DC4 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t810823261FB0C594009F0C43 /* Sources */,\n\t\t\t\t810823271FB0C594009F0C43 /* Frameworks */,\n\t\t\t\t810823281FB0C594009F0C43 /* Headers */,\n\t\t\t\t810823291FB0C594009F0C43 /* Resources */,\n\t\t\t\t89B60B53987246746319F05E /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD582F4621FB6236F002BDB91 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Core;\n\t\t\tproductName = Core;\n\t\t\tproductReference = 8108232B1FB0C594009F0C43 /* Core.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t810823321FB0C594009F0C43 /* CoreTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 810823481FB0C594009F0C43 /* Build configuration list for PBXNativeTarget \"CoreTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t452642ACA2C3428799FC033D /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t8108232F1FB0C594009F0C43 /* Sources */,\n\t\t\t\t810823301FB0C594009F0C43 /* Frameworks */,\n\t\t\t\t810823311FB0C594009F0C43 /* Resources */,\n\t\t\t\t0F37892F8817CE819F40D9A6 /* [CP] Embed Pods Frameworks */,\n\t\t\t\t636D67D5F6390556A8BD50DD /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t810823361FB0C594009F0C43 /* PBXTargetDependency */,\n\t\t\t\t810823381FB0C594009F0C43 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = CoreTests;\n\t\t\tproductName = CoreTests;\n\t\t\tproductReference = 810823331FB0C594009F0C43 /* CoreTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t8108234D1FB0C5AA009F0C43 /* Domain */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 810823651FB0C5AA009F0C43 /* Build configuration list for PBXNativeTarget \"Domain\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE2136BF17F8A3DEF9F4A1195 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t810823491FB0C5AA009F0C43 /* Sources */,\n\t\t\t\t8108234A1FB0C5AA009F0C43 /* Frameworks */,\n\t\t\t\t8108234B1FB0C5AA009F0C43 /* Headers */,\n\t\t\t\t8108234C1FB0C5AA009F0C43 /* Resources */,\n\t\t\t\tE91F414484FC9B3AA62D4E29 /* [CP] Copy Pods 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 = Domain;\n\t\t\tproductName = Domain;\n\t\t\tproductReference = 8108234E1FB0C5AA009F0C43 /* Domain.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t810823551FB0C5AA009F0C43 /* DomainTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 810823681FB0C5AA009F0C43 /* Build configuration list for PBXNativeTarget \"DomainTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t41A442F7078D29AA5D1A5918 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t810823521FB0C5AA009F0C43 /* Sources */,\n\t\t\t\t810823531FB0C5AA009F0C43 /* Frameworks */,\n\t\t\t\t810823541FB0C5AA009F0C43 /* Resources */,\n\t\t\t\t7F81C44A7B1C126DC779A3DC /* [CP] Embed Pods Frameworks */,\n\t\t\t\t23CDF29E49343CB6508661F9 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t810823591FB0C5AA009F0C43 /* PBXTargetDependency */,\n\t\t\t\t8108235B1FB0C5AA009F0C43 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = DomainTests;\n\t\t\tproductName = DomainTests;\n\t\t\tproductReference = 810823561FB0C5AA009F0C43 /* DomainTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t810963C61FB0C42E00B35959 /* Archit */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 810964071FB0C42E00B35959 /* Build configuration list for PBXNativeTarget \"Archit\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD54E865DFBE4F5F4CC7E544F /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t810963C51FB0C42E00B35959 /* SwiftLint */,\n\t\t\t\t810963C11FB0C42E00B35959 /* Sources */,\n\t\t\t\t810963C21FB0C42E00B35959 /* Frameworks */,\n\t\t\t\t810963C31FB0C42E00B35959 /* Resources */,\n\t\t\t\t810963C41FB0C42E00B35959 /* Warn for TODO comments */,\n\t\t\t\t3B4FD5073CD38F0F60C345E8 /* [CP] Embed Pods Frameworks */,\n\t\t\t\t35C5FB7F0755D3EFAA4635EE /* [CP] Copy Pods Resources */,\n\t\t\t\t810823471FB0C594009F0C43 /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t8108233F1FB0C594009F0C43 /* PBXTargetDependency */,\n\t\t\t\tD5283FA91FB65079008DCA34 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Archit;\n\t\t\tproductName = Archit;\n\t\t\tproductReference = 810963C71FB0C42E00B35959 /* Archit.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t810963F21FB0C42E00B35959 /* ArchitTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 8109640A1FB0C42E00B35959 /* Build configuration list for PBXNativeTarget \"ArchitTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tAC65870F4B808B6F1D6ACFC2 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t810963EF1FB0C42E00B35959 /* Sources */,\n\t\t\t\t810963F01FB0C42E00B35959 /* Frameworks */,\n\t\t\t\t810963F11FB0C42E00B35959 /* Resources */,\n\t\t\t\t9ADDCB0970EBE40438EF37CC /* [CP] Embed Pods Frameworks */,\n\t\t\t\t3268D978B2F1F7A8A29C903E /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t810963F51FB0C42E00B35959 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = ArchitTests;\n\t\t\tproductName = ArchitTests;\n\t\t\tproductReference = 810963F31FB0C42E00B35959 /* ArchitTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t810963FD1FB0C42E00B35959 /* ArchitUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 8109640D1FB0C42E00B35959 /* Build configuration list for PBXNativeTarget \"ArchitUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t4D84A2421C75345F1C6DCE15 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t810963FA1FB0C42E00B35959 /* Sources */,\n\t\t\t\t810963FB1FB0C42E00B35959 /* Frameworks */,\n\t\t\t\t810963FC1FB0C42E00B35959 /* Resources */,\n\t\t\t\tF8FD364DD128DF2C62AABF3E /* [CP] Embed Pods Frameworks */,\n\t\t\t\t0C9C06862454884A9ECA317F /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t810964001FB0C42E00B35959 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = ArchitUITests;\n\t\t\tproductName = ArchitUITests;\n\t\t\tproductReference = 810963FE1FB0C42E00B35959 /* ArchitUITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t810963BD1FB0C42E00B35959 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0910;\n\t\t\t\tLastUpgradeCheck = 0910;\n\t\t\t\tORGANIZATIONNAME = Intelygenz;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t8108232A1FB0C594009F0C43 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.1;\n\t\t\t\t\t\tLastSwiftMigration = 0910;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t810823321FB0C594009F0C43 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.1;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = 810963C61FB0C42E00B35959;\n\t\t\t\t\t};\n\t\t\t\t\t8108234D1FB0C5AA009F0C43 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.1;\n\t\t\t\t\t\tLastSwiftMigration = 0910;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t810823551FB0C5AA009F0C43 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.1;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = 810963C61FB0C42E00B35959;\n\t\t\t\t\t};\n\t\t\t\t\t810963C61FB0C42E00B35959 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.1;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t810963F21FB0C42E00B35959 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.1;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = 810963C61FB0C42E00B35959;\n\t\t\t\t\t};\n\t\t\t\t\t810963FD1FB0C42E00B35959 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.1;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = 810963C61FB0C42E00B35959;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 810963C01FB0C42E00B35959 /* Build configuration list for PBXProject \"Archit\" */;\n\t\t\tcompatibilityVersion = \"Xcode 8.0\";\n\t\t\tdevelopmentRegion = en;\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 = 810963BC1FB0C42E00B35959;\n\t\t\tproductRefGroup = 810963C81FB0C42E00B35959 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t810963C61FB0C42E00B35959 /* Archit */,\n\t\t\t\t810963F21FB0C42E00B35959 /* ArchitTests */,\n\t\t\t\t810963FD1FB0C42E00B35959 /* ArchitUITests */,\n\t\t\t\t8108232A1FB0C594009F0C43 /* Core */,\n\t\t\t\t810823321FB0C594009F0C43 /* CoreTests */,\n\t\t\t\t8108234D1FB0C5AA009F0C43 /* Domain */,\n\t\t\t\t810823551FB0C5AA009F0C43 /* DomainTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t810823291FB0C594009F0C43 /* 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\t810823311FB0C594009F0C43 /* 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\t8108234C1FB0C5AA009F0C43 /* 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\t810823541FB0C5AA009F0C43 /* 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\t810963C31FB0C42E00B35959 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t810963D91FB0C42E00B35959 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t810963D61FB0C42E00B35959 /* Assets.xcassets in Resources */,\n\t\t\t\t810963D21FB0C42E00B35959 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t810963F11FB0C42E00B35959 /* 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\t810963FC1FB0C42E00B35959 /* 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 PBXShellScriptBuildPhase section */\n\t\t0C9C06862454884A9ECA317F /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t0F37892F8817CE819F40D9A6 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${SRCROOT}/Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/NetClient/Net.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjcExceptionBridging.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/XCGLogger.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Net.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t23CDF29E49343CB6508661F9 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t3268D978B2F1F7A8A29C903E /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t35C5FB7F0755D3EFAA4635EE /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-Archit/Pods-Archit-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t3B4FD5073CD38F0F60C345E8 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${SRCROOT}/Pods/Target Support Files/Pods-Archit/Pods-Archit-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Kommander/Kommander.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Reusable/Reusable.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/NetClient/Net.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kommander.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjcExceptionBridging.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reusable.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/XCGLogger.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Net.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-Archit/Pods-Archit-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t41A442F7078D29AA5D1A5918 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-DomainTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t452642ACA2C3428799FC033D /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-CoreTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t4D84A2421C75345F1C6DCE15 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-ArchitUITests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t636D67D5F6390556A8BD50DD /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t7F81C44A7B1C126DC779A3DC /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${SRCROOT}/Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjcExceptionBridging.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/XCGLogger.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t810963C41FB0C42E00B35959 /* Warn for TODO comments */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Warn for TODO comments\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Scripts/highlight_TODOs.sh\\\"\";\n\t\t};\n\t\t810963C51FB0C42E00B35959 /* SwiftLint */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = SwiftLint;\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/SwiftLint/swiftlint\\\"\";\n\t\t};\n\t\t89B60B53987246746319F05E /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-Core/Pods-Core-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t9ADDCB0970EBE40438EF37CC /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${SRCROOT}/Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjcExceptionBridging.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/XCGLogger.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tA70251AF5242BB1FB4D76DC4 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-Core-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tAC65870F4B808B6F1D6ACFC2 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-ArchitTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tD54E865DFBE4F5F4CC7E544F /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-Archit-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tE2136BF17F8A3DEF9F4A1195 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-Domain-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tE91F414484FC9B3AA62D4E29 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-Domain/Pods-Domain-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tF8FD364DD128DF2C62AABF3E /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${SRCROOT}/Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Cucumberish/Cucumberish.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjcExceptionBridging.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/XCGLogger.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Cucumberish.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t810823261FB0C594009F0C43 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t817ED3541FBDE7BE0066A679 /* LogManager.swift in Sources */,\n\t\t\t\tD5FF818E1FB8AFD600EAC050 /* NetworkServiceConstants.swift in Sources */,\n\t\t\t\tD582F4581FB61C56002BDB91 /* FilmsNetworkTransformer.swift in Sources */,\n\t\t\t\tD582F4491FB38CF1002BDB91 /* NetworkService.swift in Sources */,\n\t\t\t\tD582F4481FB38CF1002BDB91 /* NetworkServiceTransformer.swift in Sources */,\n\t\t\t\tD582F4561FB61B5B002BDB91 /* FilmsService.swift in Sources */,\n\t\t\t\tD582F45C1FB61D91002BDB91 /* FilmNetworkModel.swift in Sources */,\n\t\t\t\tD5283FAB1FB71A0E008DCA34 /* SearchFilmServiceTask.swift in Sources */,\n\t\t\t\tD582F44E1FB38CF1002BDB91 /* ServiceTask.swift in Sources */,\n\t\t\t\tD582F44D1FB38CF1002BDB91 /* ServiceTaskProtocol.swift in Sources */,\n\t\t\t\tD582F45A1FB61D2F002BDB91 /* SearchFilmsServiceTask.swift in Sources */,\n\t\t\t\tD582F45E1FB620D5002BDB91 /* FilmRatingNetworkModel.swift in Sources */,\n\t\t\t\tD582F44A1FB38CF1002BDB91 /* NetworkServiceProtocol.swift in Sources */,\n\t\t\t\tD582F44B1FB38CF1002BDB91 /* ServiceProtocol.swift in Sources */,\n\t\t\t\tD582F44C1FB38CF1002BDB91 /* TaskProtocol.swift in Sources */,\n\t\t\t\tD5283FA51FB637F7008DCA34 /* FilmSearchNetworkModel.swift in Sources */,\n\t\t\t\tD582F44F1FB38CF1002BDB91 /* Transformer.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8108232F1FB0C594009F0C43 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8108233B1FB0C594009F0C43 /* CoreTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t810823491FB0C5AA009F0C43 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t817ED3551FBDE7C00066A679 /* LogManager.swift in Sources */,\n\t\t\t\tD582F4601FB62207002BDB91 /* Film.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t810823521FB0C5AA009F0C43 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8108235E1FB0C5AA009F0C43 /* DomainTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t810963C11FB0C42E00B35959 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD582F4311FB2273A002BDB91 /* FilmsViewController.swift in Sources */,\n\t\t\t\t810963E51FB0C42E00B35959 /* AppDelegate.swift in Sources */,\n\t\t\t\t817ED3511FBDE6D90066A679 /* LogManager.swift in Sources */,\n\t\t\t\tD582F4321FB2273A002BDB91 /* FilmsController.swift in Sources */,\n\t\t\t\t810963DC1FB0C42E00B35959 /* AppManager.swift in Sources */,\n\t\t\t\tD582F4341FB22761002BDB91 /* UITableView+Reusable.swift in Sources */,\n\t\t\t\tD582F4381FB22822002BDB91 /* FilmDetailController.swift in Sources */,\n\t\t\t\t829582401FDEC1F900DFD9BA /* FilmCell.swift in Sources */,\n\t\t\t\tD58D1AA21FB2172000721663 /* BaseNavigationController.swift in Sources */,\n\t\t\t\tD58D1AA31FB2172000721663 /* BaseController.swift in Sources */,\n\t\t\t\tD582F43C1FB239C4002BDB91 /* BaseInteractor.swift in Sources */,\n\t\t\t\tD582F4391FB22822002BDB91 /* FilmDetailViewController.swift in Sources */,\n\t\t\t\tD582F43E1FB23A8D002BDB91 /* FilmsInteractor.swift in Sources */,\n\t\t\t\tD58D1AA01FB2172000721663 /* BaseViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t810963EF1FB0C42E00B35959 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t810963F81FB0C42E00B35959 /* ArchitTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t810963FA1FB0C42E00B35959 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t810964031FB0C42E00B35959 /* ArchitUITests.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\t810823361FB0C594009F0C43 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 8108232A1FB0C594009F0C43 /* Core */;\n\t\t\ttargetProxy = 810823351FB0C594009F0C43 /* PBXContainerItemProxy */;\n\t\t};\n\t\t810823381FB0C594009F0C43 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 810963C61FB0C42E00B35959 /* Archit */;\n\t\t\ttargetProxy = 810823371FB0C594009F0C43 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8108233F1FB0C594009F0C43 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 8108232A1FB0C594009F0C43 /* Core */;\n\t\t\ttargetProxy = 8108233E1FB0C594009F0C43 /* PBXContainerItemProxy */;\n\t\t};\n\t\t810823591FB0C5AA009F0C43 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 8108234D1FB0C5AA009F0C43 /* Domain */;\n\t\t\ttargetProxy = 810823581FB0C5AA009F0C43 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8108235B1FB0C5AA009F0C43 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 810963C61FB0C42E00B35959 /* Archit */;\n\t\t\ttargetProxy = 8108235A1FB0C5AA009F0C43 /* PBXContainerItemProxy */;\n\t\t};\n\t\t810963F51FB0C42E00B35959 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 810963C61FB0C42E00B35959 /* Archit */;\n\t\t\ttargetProxy = 810963F41FB0C42E00B35959 /* PBXContainerItemProxy */;\n\t\t};\n\t\t810964001FB0C42E00B35959 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 810963C61FB0C42E00B35959 /* Archit */;\n\t\t\ttargetProxy = 810963FF1FB0C42E00B35959 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD5283FA91FB65079008DCA34 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 8108234D1FB0C5AA009F0C43 /* Domain */;\n\t\t\ttargetProxy = D5283FA81FB65079008DCA34 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD582F4621FB6236F002BDB91 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 8108234D1FB0C5AA009F0C43 /* Domain */;\n\t\t\ttargetProxy = D582F4611FB6236F002BDB91 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t810963D01FB0C42E00B35959 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t810963D11FB0C42E00B35959 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t810963D71FB0C42E00B35959 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t810963D81FB0C42E00B35959 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t810823421FB0C594009F0C43 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 718EE189F41C5809037880C9 /* Pods-Core.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\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\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\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_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = Core/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 = com.intelygenz.Archit.Core;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t810823431FB0C594009F0C43 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6419E04F0343B79EE7457FE5 /* Pods-Core.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\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\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\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_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = Core/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 = com.intelygenz.Archit.Core;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 4.0;\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 = Release;\n\t\t};\n\t\t810823441FB0C594009F0C43 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 31086010F280804A3BB3FD52 /* Pods-CoreTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 3VW789WSMP;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = CoreTests/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.intelygenz.Archit.CoreTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/Archit.app/Archit\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t810823451FB0C594009F0C43 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D22F048FB77CEBE13E984EDB /* Pods-CoreTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 3VW789WSMP;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = CoreTests/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.intelygenz.Archit.CoreTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/Archit.app/Archit\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t810823661FB0C5AA009F0C43 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6C57BC3580C21A4356BEF996 /* Pods-Domain.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\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\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\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_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = Domain/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 = com.intelygenz.Archit.Domain;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t810823671FB0C5AA009F0C43 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9E13B6F1A1B652AB4AD62B18 /* Pods-Domain.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\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\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\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_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = Domain/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 = com.intelygenz.Archit.Domain;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 4.0;\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 = Release;\n\t\t};\n\t\t810823691FB0C5AA009F0C43 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 72C16377B21D535A1403C99E /* Pods-DomainTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 3VW789WSMP;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = DomainTests/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.intelygenz.Archit.DomainTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/Archit.app/Archit\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t8108236A1FB0C5AA009F0C43 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 2174FBEAD5708D26C3821F32 /* Pods-DomainTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 3VW789WSMP;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = DomainTests/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.intelygenz.Archit.DomainTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/Archit.app/Archit\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t810964051FB0C42E00B35959 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tAPS_ENVIRONMENT = development;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_OBJC_DEALLOC = 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_CODE_COVERAGE = YES;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_ASSIGN_ENUM = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CXX0X_EXTENSIONS = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = 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_IMPLICIT_SIGN_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCLANG_WARN__EXIT_TIME_DESTRUCTORS = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Archit/Supporting Files/Archit.entitlements\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\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_GENERATE_TEST_COVERAGE_FILES = YES;\n\t\t\t\tGCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;\n\t\t\t\tGCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;\n\t\t\t\tGCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;\n\t\t\t\tGCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;\n\t\t\t\tGCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;\n\t\t\t\tGCC_WARN_SHADOW = YES;\n\t\t\t\tGCC_WARN_SIGN_COMPARE = YES;\n\t\t\t\tGCC_WARN_STRICT_SELECTOR_MATCH = YES;\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_UNKNOWN_PRAGMAS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_LABEL = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tINFOPLIST_FILE = \"Archit/Supporting Files/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.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\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_SWIFT_FLAGS = \"-Xfrontend -warn-long-function-bodies=200 -Xfrontend -warn-long-expression-type-checking=200\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.intelygenz.Archit;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t810964061FB0C42E00B35959 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tAPS_ENVIRONMENT = production;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_OBJC_DEALLOC = 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_CODE_COVERAGE = YES;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_ASSIGN_ENUM = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CXX0X_EXTENSIONS = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = 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_IMPLICIT_SIGN_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCLANG_WARN__EXIT_TIME_DESTRUCTORS = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Archit/Supporting Files/Archit.entitlements\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_GENERATE_TEST_COVERAGE_FILES = YES;\n\t\t\t\tGCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;\n\t\t\t\tGCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;\n\t\t\t\tGCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;\n\t\t\t\tGCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;\n\t\t\t\tGCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;\n\t\t\t\tGCC_WARN_SHADOW = YES;\n\t\t\t\tGCC_WARN_SIGN_COMPARE = YES;\n\t\t\t\tGCC_WARN_STRICT_SELECTOR_MATCH = YES;\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_UNKNOWN_PRAGMAS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_LABEL = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tINFOPLIST_FILE = \"Archit/Supporting Files/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.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\tOTHER_SWIFT_FLAGS = \"-Xfrontend -warn-long-function-bodies=200 -Xfrontend -warn-long-expression-type-checking=200\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.intelygenz.Archit;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t810964081FB0C42E00B35959 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 1D22BA66BB0A3D7C4662F2DE /* Pods-Archit.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 3VW789WSMP;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t810964091FB0C42E00B35959 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 4D1AEE1B204D4544AAF01F78 /* Pods-Archit.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 3VW789WSMP;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t8109640B1FB0C42E00B35959 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = F2239F4AAFF95EF0825F673A /* Pods-ArchitTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 3VW789WSMP;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = ArchitTests/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.intelygenz.ArchitTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/Archit.app/Archit\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t8109640C1FB0C42E00B35959 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = C5889FE77A4B48F977D2820C /* Pods-ArchitTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 3VW789WSMP;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = ArchitTests/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.intelygenz.ArchitTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/Archit.app/Archit\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t8109640E1FB0C42E00B35959 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = DC7AA124EFC32130BD7EE6D3 /* Pods-ArchitUITests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 3VW789WSMP;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = ArchitUITests/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.intelygenz.ArchitUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = Archit;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t8109640F1FB0C42E00B35959 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 0C965850A085A5CD8D2663C6 /* Pods-ArchitUITests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 3VW789WSMP;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = ArchitUITests/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.intelygenz.ArchitUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = Archit;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t810823461FB0C594009F0C43 /* Build configuration list for PBXNativeTarget \"Core\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t810823421FB0C594009F0C43 /* Debug */,\n\t\t\t\t810823431FB0C594009F0C43 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t810823481FB0C594009F0C43 /* Build configuration list for PBXNativeTarget \"CoreTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t810823441FB0C594009F0C43 /* Debug */,\n\t\t\t\t810823451FB0C594009F0C43 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t810823651FB0C5AA009F0C43 /* Build configuration list for PBXNativeTarget \"Domain\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t810823661FB0C5AA009F0C43 /* Debug */,\n\t\t\t\t810823671FB0C5AA009F0C43 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t810823681FB0C5AA009F0C43 /* Build configuration list for PBXNativeTarget \"DomainTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t810823691FB0C5AA009F0C43 /* Debug */,\n\t\t\t\t8108236A1FB0C5AA009F0C43 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t810963C01FB0C42E00B35959 /* Build configuration list for PBXProject \"Archit\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t810964051FB0C42E00B35959 /* Debug */,\n\t\t\t\t810964061FB0C42E00B35959 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t810964071FB0C42E00B35959 /* Build configuration list for PBXNativeTarget \"Archit\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t810964081FB0C42E00B35959 /* Debug */,\n\t\t\t\t810964091FB0C42E00B35959 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t8109640A1FB0C42E00B35959 /* Build configuration list for PBXNativeTarget \"ArchitTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t8109640B1FB0C42E00B35959 /* Debug */,\n\t\t\t\t8109640C1FB0C42E00B35959 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t8109640D1FB0C42E00B35959 /* Build configuration list for PBXNativeTarget \"ArchitUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t8109640E1FB0C42E00B35959 /* Debug */,\n\t\t\t\t8109640F1FB0C42E00B35959 /* 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 = 810963BD1FB0C42E00B35959 /* Project object */;\n}\n"
  },
  {
    "path": "Archit.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Archit.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Archit.xcodeproj/xcshareddata/xcschemes/Archit.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0910\"\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 = \"810963C61FB0C42E00B35959\"\n               BuildableName = \"Archit.app\"\n               BlueprintName = \"Archit\"\n               ReferencedContainer = \"container:Archit.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      language = \"\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      codeCoverageEnabled = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"810963F21FB0C42E00B35959\"\n               BuildableName = \"ArchitTests.xctest\"\n               BlueprintName = \"ArchitTests\"\n               ReferencedContainer = \"container:Archit.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"810963FD1FB0C42E00B35959\"\n               BuildableName = \"ArchitUITests.xctest\"\n               BlueprintName = \"ArchitUITests\"\n               ReferencedContainer = \"container:Archit.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"810823321FB0C594009F0C43\"\n               BuildableName = \"CoreTests.xctest\"\n               BlueprintName = \"CoreTests\"\n               ReferencedContainer = \"container:Archit.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"810823551FB0C5AA009F0C43\"\n               BuildableName = \"DomainTests.xctest\"\n               BlueprintName = \"DomainTests\"\n               ReferencedContainer = \"container:Archit.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"810963C61FB0C42E00B35959\"\n            BuildableName = \"Archit.app\"\n            BlueprintName = \"Archit\"\n            ReferencedContainer = \"container:Archit.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      language = \"\"\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 = \"810963C61FB0C42E00B35959\"\n            BuildableName = \"Archit.app\"\n            BlueprintName = \"Archit\"\n            ReferencedContainer = \"container:Archit.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\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 = \"810963C61FB0C42E00B35959\"\n            BuildableName = \"Archit.app\"\n            BlueprintName = \"Archit\"\n            ReferencedContainer = \"container:Archit.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": "Archit.xcodeproj/xcshareddata/xcschemes/Core.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0910\"\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 = \"8108232A1FB0C594009F0C43\"\n               BuildableName = \"Core.framework\"\n               BlueprintName = \"Core\"\n               ReferencedContainer = \"container:Archit.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      language = \"\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      codeCoverageEnabled = \"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      language = \"\"\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 = \"8108232A1FB0C594009F0C43\"\n            BuildableName = \"Core.framework\"\n            BlueprintName = \"Core\"\n            ReferencedContainer = \"container:Archit.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 = \"8108232A1FB0C594009F0C43\"\n            BuildableName = \"Core.framework\"\n            BlueprintName = \"Core\"\n            ReferencedContainer = \"container:Archit.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": "Archit.xcodeproj/xcshareddata/xcschemes/Domain.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0910\"\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 = \"8108234D1FB0C5AA009F0C43\"\n               BuildableName = \"Domain.framework\"\n               BlueprintName = \"Domain\"\n               ReferencedContainer = \"container:Archit.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      language = \"\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      codeCoverageEnabled = \"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      language = \"\"\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 = \"8108234D1FB0C5AA009F0C43\"\n            BuildableName = \"Domain.framework\"\n            BlueprintName = \"Domain\"\n            ReferencedContainer = \"container:Archit.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 = \"8108234D1FB0C5AA009F0C43\"\n            BuildableName = \"Domain.framework\"\n            BlueprintName = \"Domain\"\n            ReferencedContainer = \"container:Archit.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": "Archit.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Archit.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Archit.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Bucket\n   type = \"3\"\n   version = \"2.0\">\n   <Breakpoints>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.ExceptionBreakpoint\">\n         <BreakpointContent\n            shouldBeEnabled = \"Yes\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\"\n            scope = \"0\"\n            stopOnStyle = \"0\">\n         </BreakpointContent>\n      </BreakpointProxy>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.SymbolicBreakpoint\">\n         <BreakpointContent\n            shouldBeEnabled = \"Yes\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\"\n            symbolName = \"UIViewAlertForUnsatisfiableConstraints\"\n            moduleName = \"\">\n            <Locations>\n               <Location\n                  shouldBeEnabled = \"Yes\"\n                  ignoreCount = \"0\"\n                  continueAfterRunningActions = \"No\"\n                  symbolName = \"UIViewAlertForUnsatisfiableConstraints\"\n                  moduleName = \"UIKit\"\n                  usesParentBreakpointCondition = \"Yes\"\n                  offsetFromSymbolStart = \"0\">\n               </Location>\n            </Locations>\n         </BreakpointContent>\n      </BreakpointProxy>\n   </Breakpoints>\n</Bucket>\n"
  },
  {
    "path": "ArchitTests/ArchitTests.swift",
    "content": "//  ArchitTests.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport XCTest\n@testable import Archit\n\nclass ArchitTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    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 testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  },
  {
    "path": "ArchitTests/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>$(DEVELOPMENT_LANGUAGE)</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>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "ArchitUITests/ArchitUITests.swift",
    "content": "//  ArchitUITests.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport XCTest\n\nclass ArchitUITests: XCTestCase {\n        \n    override func setUp() {\n        super.setUp()\n        \n        // Put setup code here. This method is called before the invocation of each test method in the class.\n        \n        // In UI tests it is usually best to stop immediately when a failure occurs.\n        continueAfterFailure = false\n        // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.\n        XCUIApplication().launch()\n\n        // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.\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 testExample() {\n        // Use recording to get started writing UI tests.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n}\n"
  },
  {
    "path": "ArchitUITests/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>$(DEVELOPMENT_LANGUAGE)</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>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at info@intelygenz.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "Core/Core.h",
    "content": "//  Core.h\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for Core.\nFOUNDATION_EXPORT double CoreVersionNumber;\n\n//! Project version string for Core.\nFOUNDATION_EXPORT const unsigned char CoreVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <Core/PublicHeader.h>\n\n\n"
  },
  {
    "path": "Core/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>$(DEVELOPMENT_LANGUAGE)</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>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Core/NetworkService.swift",
    "content": "//  NetworkService.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\npublic class NetworkService: NetworkServiceProtocol {\n\n    public init() {}\n\n}\n"
  },
  {
    "path": "Core/NetworkServiceProtocol.swift",
    "content": "//  NetworkServiceProtocol.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\npublic enum NetworkServiceError: Error {\n    case serviceError(message: String, underlying: ServiceTaskError)\n\n    public var localizedDescription: String {\n        switch self {\n        case .serviceError(_, let underlying):\n            return underlying.localizedDescription\n        }\n    }\n}\n\npublic protocol NetworkServiceProtocol: ServiceProtocol {\n    func cancel(_ tasks: [TaskProtocol])\n}\n\npublic extension NetworkServiceProtocol {\n    func cancel(_ tasks: [TaskProtocol]) {\n        tasks.forEach { task in\n            task.cancel()\n        }\n    }\n}\n"
  },
  {
    "path": "Core/NetworkServiceTransformer.swift",
    "content": "//  NetworkServiceTransformer.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\nclass NetworkServiceTransformer<Source: Codable, Result>: Transformer {\n    func transform(source: Source) -> Result? {\n        assertionFailure(\"You should use your own NetworkServiceTransformer subclass.\")\n        return nil\n    }\n\n    func transform(result: Result) -> Source? {\n        assertionFailure(\"You should use your own NetworkServiceTransformer subclass.\")\n        return nil\n    }\n}\n"
  },
  {
    "path": "Core/ServiceProtocol.swift",
    "content": "//  ServiceProtocol.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\npublic protocol ServiceProtocol {}\n"
  },
  {
    "path": "Core/Services/Films/FilmsService.swift",
    "content": "//  FilmsService.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\nimport Domain\n\npublic protocol FilmsServiceProtocol: NetworkServiceProtocol {\n    func searchFilm(_ imdbID: String, type: String?) throws -> Film\n    func searchFilms(_ query: String, type: String?, page: Int) throws -> (films: [Film], total: Int)\n}\n\npublic class FilmsService: NetworkService, FilmsServiceProtocol {\n\n    private var transformer = FilmsNetworkTransformer()\n\n    public func searchFilm(_ imdbID: String, type: String?) throws -> Film {\n        let searchFilmServiceTask = SearchFilmServiceTask(imdbID, type: type)\n        do {\n            guard let film = try searchFilmServiceTask.execute() as? FilmNetworkModel else {\n                throw ServiceTaskError.parserError(message: \"Service task parsing error.\", underlying: nil)\n            }\n            guard let result = transformer.transform(source: film) else {\n                throw ServiceTaskError.parserError(message: \"Not found.\", underlying: nil)\n            }\n            return result\n        } catch {\n            guard let serviceTaskError = error as? ServiceTaskError else {\n                throw NetworkServiceError.serviceError(message: \"Service error.\", underlying: ServiceTaskError.parserError(message: \"Service task error.\", underlying: nil))\n            }\n            throw NetworkServiceError.serviceError(message: \"Can't find films.\", underlying: serviceTaskError)\n        }\n    }\n\n    public func searchFilms(_ query: String, type: String?, page: Int) throws -> (films: [Film], total: Int) {\n        let searchFilmsServiceTask = SearchFilmsServiceTask(query, type: type, page: page)\n        do {\n            guard let search = try searchFilmsServiceTask.execute() as? FilmSearchNetworkModel else {\n                throw ServiceTaskError.parserError(message: \"Service task parsing error.\", underlying: nil)\n            }\n            guard let results = search.results, let total = search.total, let totalInt = Int(total) else {\n                throw ServiceTaskError.parserError(message: search.error ?? \"No results.\", underlying: nil)\n            }\n            return (transformer.transform(source: results), totalInt)\n        } catch {\n            guard let serviceTaskError = error as? ServiceTaskError else {\n                throw NetworkServiceError.serviceError(message: \"Service error.\", underlying: ServiceTaskError.parserError(message: \"Service task error.\", underlying: nil))\n            }\n            throw NetworkServiceError.serviceError(message: \"Can't find films.\", underlying: serviceTaskError)\n        }\n    }\n\n}\n"
  },
  {
    "path": "Core/Services/Films/NetworkModels/FilmNetworkModel.swift",
    "content": "//  FilmNetworkModel.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\nstruct FilmNetworkModel: Codable {\n    let title: String\n    let year: String\n    let poster: String\n    let imdbID: String\n    let type: String\n    let rated: String?\n    let released: String?\n    let runtime: String?\n    let genre: String?\n    let director: String?\n    let writer: String?\n    let actors: String?\n    let plot: String?\n    let language: String?\n    let country: String?\n    let awards: String?\n    let ratings: [FilmRatingNetworkModel]?\n    let metascore: String?\n    let imdbRating: String?\n    let imdbVotes: String?\n    let dvd: String?\n    let boxOffice: String?\n    let production: String?\n    let website: String?\n\n    enum CodingKeys: String, CodingKey {\n        case title = \"Title\"\n        case year = \"Year\"\n        case poster = \"Poster\"\n        case imdbID = \"imdbID\"\n        case type = \"Type\"\n        case rated = \"Rated\"\n        case released = \"Released\"\n        case runtime = \"Runtime\"\n        case genre = \"Genre\"\n        case director = \"Director\"\n        case writer = \"Writer\"\n        case actors = \"Actors\"\n        case plot = \"Plot\"\n        case language = \"Language\"\n        case country = \"Country\"\n        case awards = \"Awards\"\n        case ratings = \"Ratings\"\n        case metascore = \"Metascore\"\n        case imdbRating = \"imdbRating\"\n        case imdbVotes = \"imdbVotes\"\n        case dvd = \"DVD\"\n        case boxOffice = \"BoxOffice\"\n        case production = \"Production\"\n        case website = \"Website\"\n    }\n}\n"
  },
  {
    "path": "Core/Services/Films/NetworkModels/FilmRatingNetworkModel.swift",
    "content": "//  FilmRatingNetworkModel.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\nstruct FilmRatingNetworkModel: Codable {\n    let source: String\n    let value: String\n\n    enum CodingKeys: String, CodingKey {\n        case source = \"Source\"\n        case value = \"Value\"\n    }\n}\n"
  },
  {
    "path": "Core/Services/Films/NetworkModels/FilmSearchNetworkModel.swift",
    "content": "//  FilmSearchNetworkModel.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\nstruct FilmSearchNetworkModel: Codable {\n    let results: [FilmNetworkModel]?\n    let total: String?\n    let response: String\n    let error: String?\n\n    enum CodingKeys: String, CodingKey {\n        case results = \"Search\"\n        case total = \"totalResults\"\n        case response = \"Response\"\n        case error = \"Error\"\n    }\n}\n"
  },
  {
    "path": "Core/Services/Films/NetworkModels/Transformers/FilmsNetworkTransformer.swift",
    "content": "//  FilmsNetworkTransformer.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\nimport Domain\n\nclass FilmsNetworkTransformer: NetworkServiceTransformer<FilmNetworkModel, Film> {\n\n    private static let dateFormatter: DateFormatter = {\n        let dateFormatter = DateFormatter()\n        dateFormatter.dateFormat = \"d MMM yyyy\"\n        return dateFormatter\n    }()\n\n    override func transform(source: FilmNetworkModel) -> Film? {\n        var ratings = [String: String]()\n        source.ratings?.forEach({ rating in\n            ratings[rating.source] = rating.value\n        })\n        var releasedDate: Date?\n        if let released = source.released {\n            releasedDate = FilmsNetworkTransformer.dateFormatter.date(from: released)\n        }\n        var runtimeInterval: TimeInterval?\n        if let runtime = source.runtime, runtime.contains(\" min\"), let timeInterval = TimeInterval(runtime.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()) {\n            runtimeInterval = timeInterval * 60\n        }\n        var dvdDate: Date?\n        if let dvd = source.dvd {\n            dvdDate = FilmsNetworkTransformer.dateFormatter.date(from: dvd)\n        }\n        var websiteURL: URL?\n        if let website = source.website, website != \"N/A\" {\n            websiteURL = URL(string: website)\n        }\n        var posterURL: URL?\n        if source.poster != \"N/A\" {\n            posterURL = URL(string: source.poster)\n        }\n        return Film(imdbID: source.imdbID, title: source.title, year: source.year, type: source.type, ratings: ratings, poster: posterURL, rated: source.rated, released: releasedDate, runtime: runtimeInterval, genre: source.genre, director: source.director, writer: source.writer, actors: source.actors, plot: source.plot, language: source.language, country: source.country, awards: source.awards, metascore: source.metascore, imdbRating: source.imdbRating, imdbVotes: source.imdbVotes, dvd: dvdDate, boxOffice: source.boxOffice, production: source.production, website: websiteURL)\n    }\n\n}\n"
  },
  {
    "path": "Core/Services/Films/Tasks/SearchFilmServiceTask.swift",
    "content": "//  SearchFilmServiceTask.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\nimport Net\n\nclass SearchFilmServiceTask: ServiceTask {\n\n    let imdbID: String\n    let type: String?\n\n    init(_ imdbID: String, type: String?) {\n        self.imdbID = imdbID\n        self.type = type\n    }\n\n    override func parse(_ response: NetResponse) throws -> Any? {\n        return try response.decode() as FilmNetworkModel\n    }\n\n    override func execute() throws -> Any? {\n        requestBuilder = NetRequest.builder(NetworkServiceConstants.Host.api)?\n            .addURLParameter(NetworkServiceConstants.Parameters.Search.imdbID.rawValue, value: imdbID)\n            .addURLParameter(NetworkServiceConstants.Parameters.Search.plot.rawValue, value: NetworkServiceConstants.Values.Search.Plot.full.rawValue)\n        if let type = type {\n            requestBuilder?.addURLParameter(NetworkServiceConstants.Parameters.Search.type.rawValue, value: NetworkServiceConstants.Values.Search.SearchType(rawValue: type))\n        }\n        return try super.execute()\n    }\n\n}\n"
  },
  {
    "path": "Core/Services/Films/Tasks/SearchFilmsServiceTask.swift",
    "content": "//  SearchFilmsServiceTask.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\nimport Net\n\nclass SearchFilmsServiceTask: ServiceTask {\n\n    let query: String\n    let type: String?\n    let page: Int\n\n    init(_ query: String, type: String?, page: Int) {\n        self.query = query\n        self.type = type\n        self.page = page\n    }\n\n    override func parse(_ response: NetResponse) throws -> Any? {\n        return try response.decode() as FilmSearchNetworkModel\n    }\n\n    override func execute() throws -> Any? {\n        guard NetworkServiceConstants.Values.Search.PageRange.contains(page) else {\n            throw ServiceTaskError.netError(message: \"Service task pagination error.\", underlying: nil)\n        }\n        requestBuilder = NetRequest.builder(NetworkServiceConstants.Host.api)?\n            .addURLParameter(NetworkServiceConstants.Parameters.Search.title.rawValue, value: query)\n            .addURLParameter(NetworkServiceConstants.Parameters.Search.page.rawValue, value: page)\n        if let type = type {\n            requestBuilder?.addURLParameter(NetworkServiceConstants.Parameters.Search.type.rawValue, value: NetworkServiceConstants.Values.Search.SearchType(rawValue: type))\n        }\n        return try super.execute()\n    }\n\n}\n"
  },
  {
    "path": "Core/Services/NetworkServiceConstants.swift",
    "content": "//  NetworkServiceConstants.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\nstruct NetworkServiceConstants {\n    struct Host {\n        static let api = \"http://www.omdbapi.com/\"\n        static let poster = \"http://img.omdbapi.com/\"\n    }\n    struct Parameters {\n        enum Search: String {\n            case imdbID = \"i\"\n            case title = \"s\"\n            case type\n            case year = \"y\"\n            case plot\n            case page\n            case callback\n        }\n        static let key = \"apikey\"\n        static let version = \"v\"\n        static let format = \"r\"\n    }\n    struct Values {\n        struct Search {\n            enum SearchType: String {\n                case movie, series, episode\n            }\n            enum Plot: String {\n                case short, full\n            }\n            static let PageRange = 1...100\n        }\n        static let key = \"25a206c6\"\n        static let version = \"1\"\n        enum Format: String {\n            case json, xml\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Tasks/ServiceTask.swift",
    "content": "//  ServiceTask.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\nimport Net\n\nopen class ServiceTask: ServiceTaskProtocol {\n    private static let net: Net = {\n        let net = NetURLSession()\n        net.addRequestInterceptor { requestBuilder in\n            requestBuilder.addURLParameter(NetworkServiceConstants.Parameters.key, value: NetworkServiceConstants.Values.key)\n                .addURLParameter(NetworkServiceConstants.Parameters.format, value: NetworkServiceConstants.Values.Format.json.rawValue)\n                .addURLParameter(NetworkServiceConstants.Parameters.version, value: NetworkServiceConstants.Values.version)\n            log.debug(requestBuilder.build().debugDescription)\n            return requestBuilder\n        }\n        net.addResponseInterceptor { responseBuilder in\n            let response = responseBuilder.build()\n            log.debug(response.debugDescription)\n            do {\n                if let responseObject: [AnyHashable: Any] = try response.object() {\n                    log.verbose(responseObject)\n                }\n            } catch {}\n            return responseBuilder\n        }\n        return net\n    }()\n    var requestBuilder: NetRequest.Builder?\n    private var task: NetTask?\n\n    @discardableResult open func execute() throws -> Any? {\n        guard let request = requestBuilder?.build() else {\n            throw ServiceTaskError.netError(message: \"Service task request missing.\", underlying: nil)\n        }\n        task = ServiceTask.net.data(request)\n        guard let task = task else {\n            throw ServiceTaskError.netError(message: \"Service task building error.\", underlying: nil)\n        }\n        var response: NetResponse\n        do {\n            response = try task.sync()\n        } catch {\n            guard let serviceTaskError = error as? ServiceTaskError else {\n                throw ServiceTaskError.netError(message: \"Network error.\", underlying: error)\n            }\n            throw serviceTaskError\n        }\n        do {\n            return try parse(response)\n        } catch {\n            guard let serviceTaskError = error as? ServiceTaskError else {\n                throw ServiceTaskError.parserError(message: \"Parser error.\", underlying: error)\n            }\n            throw serviceTaskError\n        }\n    }\n\n    @discardableResult open func parse(_ response: NetResponse) throws -> Any? {\n        return try response.object() as [AnyHashable: Any]\n    }\n\n    open func cancel() {\n        task?.cancel()\n    }\n\n}\n\nextension ServiceTask: Hashable {\n    public var hashValue: Int {\n        return task?.identifier ?? NSNotFound\n    }\n\n    public static func == (lhs: ServiceTask, rhs: ServiceTask) -> Bool {\n        return lhs.hashValue != NSNotFound && lhs.hashValue == rhs.hashValue\n    }\n\n}\n\n"
  },
  {
    "path": "Core/Tasks/ServiceTaskProtocol.swift",
    "content": "//  ServiceTaskProtocol.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\npublic enum ServiceTaskError: Error {\n    case netError(message: String, underlying: Error?),\n    serverError(message: String, underlying: Error?),\n    unauthorizedError(message: String, underlying: Error?),\n    parserError(message: String, underlying: Error?)\n\n    public var localizedDescription: String {\n        switch self {\n        case .netError(let message, let underlying), .serverError(let message, let underlying), .parserError(let message, let underlying), .unauthorizedError(let message, let underlying):\n            if let localizedDescription = underlying?.localizedDescription {\n                return message + \" \" + localizedDescription\n            }\n            return message\n        }\n    }\n}\n\npublic protocol ServiceTaskProtocol: TaskProtocol {}\n"
  },
  {
    "path": "Core/Tasks/TaskProtocol.swift",
    "content": "//  TaskProtocol.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\npublic protocol TaskProtocol {\n    @discardableResult func execute() throws -> Any?\n    func cancel()\n}\n"
  },
  {
    "path": "Core/Transformer.swift",
    "content": "//  Transformer.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\npublic protocol Transformer {\n    associatedtype Source\n    associatedtype Result\n    func transform(source: Source) -> Result?\n    func transform(source: [Source]) -> [Result]\n    func transform(result: Result) -> Source?\n    func transform(result: [Result]) -> [Source]\n}\n\npublic extension Transformer {\n    func transform(source: [Source]) -> [Result] {\n        return source.flatMap({ return transform(source: $0) })\n    }\n\n    func transform(result: [Result]) -> [Source] {\n        return result.flatMap({ return transform(result: $0) })\n    }\n}\n"
  },
  {
    "path": "CoreTests/CoreTests.swift",
    "content": "//  CoreTests.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport XCTest\n@testable import Core\n\nclass CoreTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    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 testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  },
  {
    "path": "CoreTests/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>$(DEVELOPMENT_LANGUAGE)</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>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Dangerfile",
    "content": "# Sometimes it's a README fix, or something like that - which isn't relevant for\n# including in a project's CHANGELOG for example\ndeclared_trivial = github.pr_title.include? \"#trivial\"\n\n# Make it more obvious that a PR is a work in progress and shouldn't be merged yet\nwarn(\"PR is classed as Work in Progress\") if github.pr_title.include? \"[WIP]\"\n\n# Warn when there is a big PR\nwarn(\"Big PR\") if git.lines_of_code > 500\n\n# Don't let testing shortcuts get into master by accident\nfail(\"fdescribe left in tests\") if `grep -r fdescribe specs/ `.length > 1\nfail(\"fit left in tests\") if `grep -r fit specs/ `.length > 1\n"
  },
  {
    "path": "Domain/Domain.h",
    "content": "//  Domain.h\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for Domain.\nFOUNDATION_EXPORT double DomainVersionNumber;\n\n//! Project version string for Domain.\nFOUNDATION_EXPORT const unsigned char DomainVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <Domain/PublicHeader.h>\n\n\n"
  },
  {
    "path": "Domain/Film.swift",
    "content": "//  Film.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport Foundation\n\npublic struct Film {\n    public let imdbID: String\n    public let title: String\n    public let year: String\n    public let type: String\n    public let ratings: [String: String]\n    public let poster: URL?\n    public let rated: String?\n    public let released: Date?\n    public let runtime: TimeInterval?\n    public let genre: String?\n    public let director: String?\n    public let writer: String?\n    public let actors: String?\n    public let plot: String?\n    public let language: String?\n    public let country: String?\n    public let awards: String?\n    public let metascore: String?\n    public let imdbRating: String?\n    public let imdbVotes: String?\n    public let dvd: Date?\n    public let boxOffice: String?\n    public let production: String?\n    public let website: URL?\n\n    public init(imdbID: String, title: String, year: String, type: String, ratings: [String: String], poster: URL?, rated: String?, released: Date?, runtime: TimeInterval?, genre: String?, director: String?, writer: String?, actors: String?, plot: String?, language: String?, country: String?, awards: String?, metascore: String?, imdbRating: String?, imdbVotes: String?, dvd: Date?, boxOffice: String?, production: String?, website: URL?) {\n        self.imdbID = imdbID\n        self.title = title\n        self.year = year\n        self.type = type\n        self.ratings = ratings\n        self.poster = poster\n        self.rated = rated\n        self.released = released\n        self.runtime = runtime\n        self.genre = genre\n        self.director = director\n        self.writer = writer\n        self.actors = actors\n        self.plot = plot\n        self.language = language\n        self.country = country\n        self.awards = awards\n        self.metascore = metascore\n        self.imdbRating = imdbRating\n        self.imdbVotes = imdbVotes\n        self.dvd = dvd\n        self.boxOffice = boxOffice\n        self.production = production\n        self.website = website\n    }\n}\n"
  },
  {
    "path": "Domain/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>$(DEVELOPMENT_LANGUAGE)</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>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "DomainTests/DomainTests.swift",
    "content": "//  DomainTests.swift\n//  Created by Alex Rupérez on 7/11/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n\nimport XCTest\n@testable import Domain\n\nclass DomainTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    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 testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  },
  {
    "path": "DomainTests/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>$(DEVELOPMENT_LANGUAGE)</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>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Gemfile",
    "content": "# encoding: UTF-8\nsource 'https://rubygems.org'\n\ngem 'rake'\ngem 'cocoapods'\ngem 'xcode-install'\ngem 'fastlane'\ngem 'danger-gitlab'\ngem 'danger-swiftlint'\n\nplugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')\neval(File.read(plugins_path), binding) if File.exist?(plugins_path)\n"
  },
  {
    "path": "ISSUE_TEMPLATE.md",
    "content": "> ℹ Please fill out this template when filing an issue.\n> All lines beginning with an ℹ symbol instruct you with what info we expect. You can delete those lines once you've filled in the info.\n>\n> Please remove this line and everything above it before submitting.\n\n## What did you do?\n\nℹ Please replace this with what you did.\n\n## What did you expect to happen?\n\nℹ Please replace this with what you expected to happen.\n\n## What happened instead?\n\nℹ Please replace this with of what happened instead.\n\n## Archit Environment\n\n**Xcode version:**\n**Swift version:**\n**Platform(s) running Archit:**\n**macOS version running Xcode:**\n\n## Demo Project\n\nℹ Please link to or upload a project we can download that reproduces the issue.\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 Intelygenz <alejandro.ruperez@intelygenz.com>\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": "PULL_REQUEST_TEMPLATE.md",
    "content": "### Issue Link :link:\n<!-- What issue does this fix? If an issue doesn't exist, remove this section. -->\n\n### Goals :soccer:\n<!-- List the high-level objectives of this pull request. -->\n<!-- Include any relevant context. -->\n\n### Implementation Details :construction:\n<!-- Explain the reasoning behind any architectural changes. -->\n<!-- Highlight any new functionality. -->\n\n### Testing Details :mag:\n<!-- Describe what tests you've added for your changes. -->\n"
  },
  {
    "path": "Podfile",
    "content": "platform :ios, '11.0'\nuse_frameworks!\ninhibit_all_warnings!\n\npod 'SwiftLint'\npod 'XCGLogger'\n\ntarget 'Archit' do\n\npod 'Reusable'\npod 'Kingfisher'\npod 'Kommander'\n\nend\n\ntarget 'ArchitTests' do\n\nend\n\ntarget 'ArchitUITests' do\n\npod 'Cucumberish'\n\nend\n\ntarget 'Core' do\n\npod 'NetClient'\n\nend\n\ntarget 'CoreTests' do\n\nend\n\ntarget 'Domain' do\n\nend\n\ntarget 'DomainTests' do\n\nend\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/CCIBlockDefinitions.h",
    "content": "//\n//  CCIBlockDefinitions.h\n//  Pods\n//\n//  Created by Ahmed Ali on 23/01/16.\n//\n//\n\n#import <Foundation/Foundation.h>\n@class CCIScenarioDefinition;\n\nextern const NSString * kDataTableKey;\nextern const NSString * kDocStringKey;\nextern const NSString * kXCTestCaseKey;\n\n#pragma mark - Block types\n/**\n You pass this block when ever you define an implementation for a step.\n \n @param args strings array which corresponds to your regular express capturing groups.\n @param userInfo is a dictionary that currently can have one of two keys kDataTableKey or kDocStringKey. If your step definition is expected to match a data table or a doc string, then you can expect this user info dictionary to contain kDataTableKey or kDocStringKey key respectively. Moreover, it will contain the key kXCTestCaseKey which will hold reference to the XCTestCase that currently executing this step. The value of kXCTestCaseKey will be nil if the step is being executed by a call of \"step\" or \"SStep\" C functions and you did not pass a reference to the XCTestCase.\n */\ntypedef void(^CCIStepBody)(NSArray <NSString *>* args, NSDictionary * userInfo);\n\n/**\n This block is passed to all the hocks (except around hock).\n @param scenario the scenario the current scenario\n */\ntypedef void (^CCIScenarioHockBlock)(CCIScenarioDefinition * scenario);\n\n/**\n This block is passed to around hocks.\n @param scenario the scenario the current scenario.\n @param scenarioExectionBlock the block that will execute the scenario. If you did not call it, the scenario will never bee executed.\n */\ntypedef void (^CCIScenarioExecutionHockBlock)(CCIScenarioDefinition * scenario, void (^scenarioExectionBlock)(void) );\n\n\n#pragma mark - Step definitions and prepositions\n\n@class CCIStep;\n@class CCIStepDefinition;\n\n/**\n Defines a Given implementations.\n \n @code\n Given(@\"the app is running\" ,  ^void(NSArray *args, id userInfo) {\n     //Your step implementation goes here\n     //The definition string in this case will match only the following step\n     //Given the app is running\n });\n @endcode\n \n @Note\n Step definitions are checked in a \"Last In First Out\" order. If it happens that there are more than one definition matches a step, the last registered definition will be used.\n \n @param definitionString the regular expression that will checked against each Given step line.\n @param body the code block that will be executed if match is occured.\n */\nOBJC_EXTERN void Given(NSString * definitionString, CCIStepBody body);\n\n/**\n Defines a When step implementations.\n \n @b Example:\n @code\n When(@\"^I tap (?:the )?\\\"([^\\\\\\\"]*)\\\" (?:button|view|label)$\" ,  ^void(NSArray *args, id userInfo) {\n     //Step implementation goes here\n     //The definition string in this case can match all the following steps\n     //When I tap the \"MyButton\" button\n     //When I tap \"MyButton\" button\n     //When I tap \"Header\" view\n     //When I tap \"FAQ\" label\n });\n @endcode\n \n @Note\n Step definitions are checked in a \"Last In First Out\" order. If it happens that there are more than one definition matches a step, the last registered definition will be used.\n \n @param definitionString the regular expression that will checked against each Given step line.\n @param body the code block that will be executed if match is occured.\n */\nOBJC_EXTERN void When(NSString * definitionString, CCIStepBody body);\n\n/**\n Defines a Then step implementations.\n \n @b Example:\n @code\n Then(@\"^I should see \\\"([^\\\\\\\"]*)\\\" in (?:the )?\\\"([^\\\\\\\"]*)\\\" (?:button|view|label)$\" ,  ^void(NSArray *args, id userInfo) {\n     //Step implementation goes here\n     //The definition string in this case can match all the following steps\n     //Then I should see \"Button Title\" in \"MyButton\" button\n     //Then I should see \"Button Title\" in the \"MyButton\" Button\n     //Then I should see \"The Screen Title\" in \"Header\" view\n     //Then I should see \"FAQ\" in \"FAQ\" label\n });\n @endcode\n \n @Note\n Step definitions are checked in a \"Last In First Out\" order. If it happens that there are more than one definition matches a step, the last registered definition will be used.\n \n @param definitionString the regular expression that will checked against each Given step line.\n @param body the code block that will be executed if match is occured.\n */\nOBJC_EXTERN void Then(NSString * definitionString, CCIStepBody body);\n\n/**\n Defines an And step implementations.\n \n @b Example:\n @code\n And(@\"^I should see \\\"([^\\\\\\\"]*)\\\" in (?:the )?\\\"([^\\\\\\\"]*)\\\" (?:button|view|label)$\" ,  ^void(NSArray *args, id userInfo) {\n     //Step implementation goes here\n     //The definition string in this case can match all the following steps\n     //And I should see \"Button Title\" in \"MyButton\" button\n     //And I should see \"Button Title\" in the \"MyButton\" Button\n     //And I should see \"The Screen Title\" in \"Header\" view\n     //And I should see \"FAQ\" in \"FAQ\" label\n });\n @endcode\n \n @Note\n Step definitions are checked in a \"Last In First Out\" order. If it happens that there are more than one definition matches a step, the last registered definition will be used.\n\n @param definitionString the regular expression that will checked against each Given step line.\n @param body the code block that will be executed if match is occured.\n */\n__attribute__((deprecated(\"And is deprecated. Implement Given, When, Then or But instead\")))\nOBJC_EXTERN void And(NSString * definitionString, CCIStepBody body);\n\n/**\n Defines a But step implementations.\n \n @code\n But(@\"^I should see \\\"([^\\\\\\\"]*)\\\" in (?:the )?\\\"([^\\\\\\\"]*)\\\" (?:button|view|label)$\" ,  ^void(NSArray *args, id userInfo) {\n     //Step implementation goes here\n     //The definition string in this case can match all the following steps\n     //But I should see \"Button Title\" in \"MyButton\" button\n     //But I should see \"Button Title\" in the \"MyButton\" Button\n     //But I should see \"The Screen Title\" in \"Header\" view\n     //But I should see \"FAQ\" in \"FAQ\" label\n });\n @endcode\n \n @Note\n Step definitions are checked in a \"Last In First Out\" order. If it happens that there are more than one definition matches a step, the last registered definition will be used.\n \n @param definitionString the regular expression that will checked against each Given step line.\n @param body the code block that will be executed if match is occured.\n */\nOBJC_EXTERN void But(NSString * definitionString, CCIStepBody body);\n\n/**\n Defines a step implementations that will be registered with When, Then, And, and But.\n The implementation of this function simply calls:\n @code\n When(definitionString, body);\n Then(definitionString, body);\n And(definitionString, body);\n But(definitionString, body);\n @endcode\n Which concluds that the registered definitions will be checked with any of these four prepositions.\n \n @b Example:\n @code\n MatchAll(@\"^I should see \\\"([^\\\\\\\"]*)\\\" in (?:the )?\\\"([^\\\\\\\"]*)\\\" (?:button|view|label)$\" ,  ^void(NSArray *args, id userInfo) {\n     //Step implementation goes here\n     //The definition string in this case can match all the following steps\n     //When I should see \"Button Title\" in \"MyButton\" button\n     //Then I should see \"Button Title\" in \"MyButton\" button\n     //And I should see \"Button Title\" in \"MyButton\" button\n     //But I should see \"Button Title\" in \"MyButton\" button\n });\n @endcode\n \n @Note\n Step definitions are checked in a \"Last In First Out\" order. If it happens that there are more than one definition matches a step, the last registered definition will be used.\n \n @param definitionString the regular expression that will checked against each Given step line.\n @param body the code block that will be executed if match is occured.\n */\nOBJC_EXTERN void MatchAll(NSString * definitionString, CCIStepBody body);\n\n/**\n Defines a step implementations that will be registered with specified prepositions.\n \n @b Example:\n @code\n Match(@[@\"When\", @\"And\", @\"Then\"], @\"^I should see \\\"([^\\\\\\\"]*)\\\" in (?:the )?\\\"([^\\\\\\\"]*)\\\" (?:button|view|label)$\" ,  ^void(NSArray *args, id userInfo) {\n     //Step implementation goes here\n     //The definition string in this case can match all the following steps\n     //When I should see \"Button Title\" in \"MyButton\" button\n     //And I should see \"Button Title\" in \"MyButton\" button\n     //Then I should see \"Button Title\" in \"MyButton\" button\n });\n @endcode\n \n @Note\n Step definitions are checked in a \"Last In First Out\" order. If it happens that there are more than one definition matches a step, the last registered definition will be used.\n \n @param prepositions array of strings to be used as the preposition of the step definiton\n @param definitionString the regular expression that will checked against each Given step line.\n @param body the code block that will be executed if match is occured.\n */\nOBJC_EXTERN void Match(NSArray *prepositions, NSString * definitionString, CCIStepBody body);\n\n/**\n Step implementation can be also a useable code.\n If it the case that you want to call a previously defined step implementation, you can call this definition using this special step function.\n \n @Note\n Using this function, you do not need to worry about the preposition of the step; you just pass in the step line without defining the preposition.\n \n @b Example:\n @code\n     //The first step definiton\n Match(@[@\"When\", @\"And\", @\"Then\"], @\"^I should see \\\"([^\\\\\\\"]*)\\\" in (?:the )?\\\"([^\\\\\\\"]*)\\\" (?:button|view|label)$\" ,  ^void(NSArray *args, id userInfo) {\n     //Step implementation goes here\n });\n \n     //The another step definiton that will make use of the previousely defined step\n When(@\"^I write \\\"([^\\\\\\\"]*)\\\" (?:in|into) \\\"([^\\\\\\\"]*)\\\" field$\" ,  ^void(NSArray *args, id userInfo) {\n     //Step implementation goes here\n     //Here you can call the previously defined step.\n step(@\"I should see \\\"%@\\\" in the \\\"%@\\\" label\", args[0], args[1]);\n });\n @endcode\n\n @param testCase the test case that will execute this step. Can be nil.\n @param stepLine the step line string to be executed\n */\nOBJC_EXPORT void step(id testCase, NSString * stepLine, ...);\n\n/**\n Swift alias for step(stepLine) function.\n @param testCase the test case that will execute this step. Can be nil.\n @param stepLine the step line string to be executed\n */\nOBJC_EXTERN void SStep(id testCase, NSString * stepLine);\n\n\n#pragma mark - Hocks\n/**\n C function that registers a code block to be called only once before executing any test case.\n You can call this function as much as you want, but only the last registerd code block will be used.\n \n @Note\n This function should not be called after calling @a beginExecution.\n \n @param beforeStartBlock code block that will be executed once before any test cases.\n */\nOBJC_EXTERN void beforeStart(void(^beforeStartBlock)(void));\n\n\n/**\n C function that registers a code block to be called only once after executing all test cases.\n You can call this function as much as you want, but only the last registerd code block will be used.\n \n @Note\n This function should not be called after calling @a beginExecution.\n \n @param afterFinishBlock code block that will be executed once after all test cases finish execution.\n */\nOBJC_EXTERN void afterFinish(void(^afterFinishBlock)(void));\n\n\n/**\n C function that registers a code block to be called before each scenario.\n Code blocks registerd with this function will run before each scenario in the same order they were orignally registered; that's it, FIFO (First In First Out).\n \n @Note\n This function should not be called after calling @a beginExecution.\n \n @param beforeEachBlock code block that will be executed before executing the scenario, this block receives an instance of the scenario that will be executed.\n */\nOBJC_EXTERN void before(CCIScenarioHockBlock beforeEachBlock);\n\n\n/**\n C function that registers a code block to be called after each scenario.\n Code blocks registerd with this function will run after each scenario in reversed order compared to the order they were orignally registered; that's it, LIFO (Last In First Out)\n \n @Note\n All code blocks registerd with this function, will run regardless the scenario has been passed or not\n \n @Note\n This function should not be called after calling @a beginExecution.\n \n @param afterEachBlock code block that will be executed after executing the scenario, this block receives an instance of the scenario that has been executed.\n */\nOBJC_EXTERN void after(CCIScenarioHockBlock afterEachBlock);\n\n\n/**\n C function that registers a code block to be called before each scenario that has one or more tag that matches one or more tags passed to this function.\n Code blocks registerd with this function will run before each matching scenario in the same order they were orignally registered; that's it, FIFO (First In First Out)\n \n @Note\n Do not prefix any tag you pass with @ symbol\n \n @Note\n This function should not be called after calling @a beginExecution.\n \n @param tags array of strings that will be used to match specific scenarios\n @param beforeTaggedBlock code block that will be executed before executing the scenario, this block receives an instance of the scenario that will be executed.\n */\nOBJC_EXTERN void beforeTagged(NSArray * tags, CCIScenarioHockBlock beforeTaggedBlock);\n\n\n/**\n C function that registers a code block to be called after each scenario that has one or more tag that matches one or more tags passed to this function.\n Code blocks registerd with this function will run after each matching scenario in reversed order compared to the order they were orignally registered; that's it, LIFO (Last In First Out)\n \n @Note\n This function should not be called after calling @a beginExecution.\n \n @Note\n All code blocks registerd with this function, will run regardless the matching scenario has been passed or not\n \n @Note\n Do not prefix any tag you pass with @ symbol\n \n @param tags array of strings that will be used to match specific scenarios\n @param afterTaggedBlock code block that will be executed after executing the scenario, this block receives an instance of the scenario that has been executed.\n */\nOBJC_EXTERN void afterTagged(NSArray * tags, CCIScenarioHockBlock afterTaggedBlock);\n\n\n/**\n C function that registers a code block to be used to call the scenario execution block.\n Code blocks registerd with this function will receive two parameters: scenario instance and scenario execution block as a parameter.\n \n @Note\n This function should not be called after calling @a beginExecution. \n \n @param aroundScenarioBlock code block that will be executed for each scenario, this block receives an instance of the scenario and the scenario execution block.\n */\nOBJC_EXTERN void around(CCIScenarioExecutionHockBlock aroundScenarioBlock);\n\n/**\n C function that registers a code block to be used to call the scenario execution block.\n Code blocks registerd with this function will receive two parameters: scenario instance and scenario execution block as a parameter.\n\n If more than one code block matches the scenario, you are still required to call the scenario execution from each registered code block. However, your scenario will be executed once as it is supposed to be.\n\n Matching against around blocks happens in FIFO (First In First Out) order; in case more than one block has matched the same scenario, then they are nested.\n\n @Note\n Failing to call the scenario execution block, will prevent the scenario from being executed.\n\n @b Example of more than one match\n\n There are three registerd blocks with tags that matches the same scenario, the followin nesting calls will happen:\n\n @code\n Third Around Match\n Block = contains code block that executes the Second Around Match\n Second Around Match\n Block = contains code block that executes the First Around Match\n First Around Match\n Block = A call Scenario Exection Block@endcode\n\n\n @Note\n Do not prefix any tag you pass with @@ symbol\n\n @Note\n This function should not be called after calling @a beginExecution.\n\n\n @param tags array of strings that will be used to match specific scenarios\n @param aroundScenarioBlock code block that will be executed for each scenario, this block receives an instance of the scenario and the scenario execution block.\n */\nOBJC_EXTERN void aroundTagged(NSArray * tags, CCIScenarioExecutionHockBlock aroundScenarioBlock);\n\n#pragma mark - Assertion and Errors\n/**\n Boolean assertion function. Use it where you usually use NSAssert or assert.\n \n Using this assertion function in your step implementations, guarantees proper error reporting\n \n @param expression boolean expression\n @param failureMessage formatted a string describe what went wrong in case expression is evaluated to false\n */\nOBJC_EXTERN void CCIAssert(BOOL expression, NSString * failureMessage, ...);\n\n/**\n Swift alias for CCIAssert\n @param expression boolean expression\n @param failureMessage a string describe what went wrong in case expression is evaluated to false\n */\nOBJC_EXTERN void CCISAssert(BOOL expression, NSString * failureMessage);\n\n\n/**\n Throws an exception with the specified reason.\n Cucumberish will handle this exception and show it as an issue with executing the current step\n \n @param reason the failure reason\n */\n\nOBJC_EXTERN void throwCucumberishException(NSString *reason, ...);\n\n\n/**\n Swift alias for throwCucumberishException;\n @param reason the failure reason\n */\nOBJC_EXTERN void SThrowCucumberishException(NSString *reason);\n\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Managers/CCIFeaturesManager.h",
    "content": "//\n//  CCIFeaturesManager.h\n\n//\n//  Created by Ahmed Ali on 02/01/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n@class CCIFeature;\n\n/**\n CCIFeaturesManager is a singleton class and its main purpose is to parse feature files and map them to their associated Classes.\n This class is utilized by Cucumberish main class. Useually you do not need to deal with it manually.\n */\n@interface CCIFeaturesManager : NSObject\n\n/**\n After calling parseFeatureFiles:withTags: this array will contain all the parsed features.\n */\n@property (nonatomic, readonly) NSArray<CCIFeature *> * features;\n\n/**\n Returns the singleton class of CCIFeaturesManager\n */\n+ (instancetype)instance;\n\n/**\n Parses the feature files that matches one or more of the passed tags if any.\n \n @Note tags should not be prefixed with @@ symbole\n \n @param featureFiles array of NSURL that presents the feature file paths\n @param bundle array of strings to filter which the features that will be parsed to be executed, if nil then all feature files will be parsed.\n @param tags specifity the tags that will be used to select which features to execute\n @param execludedFeatures array of string to filter which features should not be executed.\n \n @Note tags in featureTags parameter should not exist in the execludedTags parameter as it doesn't make any sense.\n */\n- (void)parseFeatureFiles:(NSArray *)featureFiles bundle:(NSBundle *)bundle withTags:(NSArray *)tags execludeFeaturesWithTags:(NSArray *)execludedFeatures;\n\n/**\n Associates the passed class with the passed feature instance for later usage.\n It is mainly used to eliminate the need create a class for a feature multiple times.\n @param klass used to specify the class for the passed feature.\n @param feature the feature to associate with the passed class\n */\n- (void)setClass:(Class)klass forFeature:(CCIFeature *)feature;\n\n/**\n Returns the passed class that is associated with the passed feature.\n @param klass to fetch its features\n */\n- (CCIFeature *)getFeatureForClass:(Class)klass;\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Managers/CCIFeaturesManager.m",
    "content": "//\n//  CCIFeaturesManager.m\n\n//\n//  Created by Ahmed Ali on 02/01/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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 \"CCIFeaturesManager.h\"\n#import \"GHParser+Extensions.h\"\n#import \"NSObject+Dictionary.h\"\n#import \"CCIFeature.h\"\n#import \"CCIStepsManager.h\"\n#import \"Cucumberish.h\"\n#import \"CCIStepDefinition.h\"\n\n\n\n@interface CCIFeaturesManager()\n\n@property NSMutableDictionary * featureClassMap;\n\n@end\n\n@implementation CCIFeaturesManager\n+ (instancetype)instance {\n    static CCIFeaturesManager * instance = nil;\n    @synchronized(self) {\n        if(instance == nil){\n            instance = [[CCIFeaturesManager alloc] init];\n        }\n    }\n    return instance;\n}\n\n\n- (instancetype) init\n{\n    self = [super init];\n    self.featureClassMap = [@{} mutableCopy];\n    return self;\n}\n\n- (void)parseFeatureFiles:(NSArray *)featureFiles bundle:(NSBundle *)bundle withTags:(NSArray *)tags execludeFeaturesWithTags:(NSArray *)execludedFeatures\n{\n    NSMutableArray * parsedFeatures = [NSMutableArray array];\n\n    GHParser * featureParser = [[GHParser alloc] init];\n    for (NSURL * filePath in featureFiles) {\n\n        id result = [featureParser parse:filePath.path];\n        if(result == nil){\n            //Nothing to do here...\n            //Need to think about how to report this error in non-blocker way\n            continue;\n        }\n        NSMutableDictionary * featureData = [[result dictionary] mutableCopy];\n\n        NSString * testBundlePath = [bundle bundlePath];\n        NSString * localPath = [[[filePath.absoluteString stringByRemovingPercentEncoding]\n                                 stringByReplacingOccurrencesOfString:testBundlePath withString:@\"\"]\n                                stringByReplacingOccurrencesOfString:@\"file://\" withString:@\"\"];\n\n        featureData[@\"location\"][@\"filePath\"] = localPath;\n\n        CCIFeature * feature = [[CCIFeature alloc] initWithDictionary:featureData];\n        feature = [self cleanedUpFeature:feature includeTags:tags excludeTags:execludedFeatures];\n\n        if(feature != nil){\n            [parsedFeatures addObject:feature];\n        }\n\n    }\n\n    _features = parsedFeatures;\n}\n\n- (NSArray * __nullable)cleanedUpExcludedExamples:(NSArray *)examples excludeTags:(NSArray<NSString *> *)excludeTags\n{\n    NSMutableArray * cleanedUpExamples = [NSMutableArray new];\n\n    // Won't be called unless there are excludeTags\n    for(CCIExample * example in examples) {\n        if([self tags:example.tags doesNotIntersectWithTags:excludeTags]){\n            [cleanedUpExamples addObject:example];\n        }\n    }\n    return cleanedUpExamples;\n}\n\n- (NSArray * __nullable)cleanedUpIncludedExamples:(NSArray *)examples includeTags:(NSArray<NSString *> *)includeTags\n{\n    NSMutableArray * cleanedUpExamples = [NSMutableArray new];\n\n    // Will only be called if there are includeTags\n    for(CCIExample * example in examples) {\n        if([self tags:example.tags intersectWithTags:includeTags]) {\n            [cleanedUpExamples addObject:example];\n        }\n    }\n    return cleanedUpExamples;\n}\n\n- (NSArray * __nullable)cleanedUpScenarios:(NSArray *)scenarios includeTags:(NSArray<NSString *> *)includeTags excludeTags:(NSArray<NSString *> *)excludeTags\n{\n    NSMutableArray * cleanedUpScenarios = [NSMutableArray new];\n\n    if(excludeTags.count > 0){\n        for(CCIScenarioDefinition * s in scenarios){\n            if([self tags:s.tags doesNotIntersectWithTags:excludeTags]){\n                // The scenario has not been excluded, but perhaps some (or all) of the examples have\n                if([s.keyword isEqualToString:(NSString *)kScenarioOutlineKeyword]) {\n                    s.examples = [self cleanedUpExcludedExamples:s.examples excludeTags:excludeTags];\n                    if(s.examples.count > 0) {\n                        [cleanedUpScenarios addObject:s];\n                    }\n                }else{\n                    [cleanedUpScenarios addObject:s];\n                }\n            }\n        }\n    }else{\n        //If there is no excluding tags, nothing should be excluded\n        cleanedUpScenarios = [scenarios mutableCopy];\n    }\n\n    //At this point, cleanedUpScenarios holds the scenarios that have not been excluded\n    //Now we need to include only the scenarios that should be included\n    if(includeTags.count > 0){\n        NSMutableArray * matchingScnarios = [NSMutableArray new];\n        for(CCIScenarioDefinition * s in cleanedUpScenarios){\n            if([self tags:s.tags intersectWithTags:includeTags]){\n                [matchingScnarios addObject:s];\n            }else{\n                // The scenario has not been included, but perhaps some (or all) of the examples have\n                if([s.keyword isEqualToString:(NSString *)kScenarioOutlineKeyword]) {\n                    s.examples = [self cleanedUpIncludedExamples:s.examples includeTags:includeTags];\n                    if (s.examples.count > 0) {\n                        [matchingScnarios addObject:s];\n                    }\n                }\n            }\n        }\n        cleanedUpScenarios = matchingScnarios;\n    }\n\n    return cleanedUpScenarios;\n}\n\n- (CCIFeature * __nullable)cleanedUpFeature:(CCIFeature *)feature includeTags:(NSArray<NSString *> *)includeTags excludeTags:(NSArray<NSString *> *)excludeTags\n{\n    if(excludeTags.count > 0){\n        if([self tags:feature.tags intersectWithTags:excludeTags]){\n            //No need to check on the scenario level here, as the scenarios will inherit all the feature tags anyway.\n            feature = nil;\n        }\n    }\n\n    feature.scenarioDefinitions = [self cleanedUpScenarios:feature.scenarioDefinitions includeTags:includeTags excludeTags:excludeTags];\n    if(feature.scenarioDefinitions.count == 0){\n        feature = nil;\n    }\n    return feature;\n}\n\n- (BOOL)tags:(NSArray *)tags intersectWithTags:(NSArray *)tagsToCheckAgainst\n{\n    BOOL intersect = NO;\n    for(NSString * t in tags){\n        if([tagsToCheckAgainst containsObject:t]){\n            intersect = YES;\n            break;\n        }\n    }\n\n    return intersect;\n}\n\n- (BOOL)tags:(NSArray *)tags doesNotIntersectWithTags:(NSArray *)tagsToCheckAgainst\n{\n    return ![self tags:tags intersectWithTags:tagsToCheckAgainst];\n}\n\n\n- (void)setClass:(Class)klass forFeature:(CCIFeature *)feature\n{\n    NSString * className = NSStringFromClass(klass);\n    self.featureClassMap[className] = feature;\n}\n\n- (CCIFeature *)getFeatureForClass:(Class)klass\n{\n    NSString * className = NSStringFromClass(klass);\n    return self.featureClassMap[className];\n}\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Managers/CCILoggingManager.h",
    "content": "//\n//  CCILoggingManager.h\n//  CucumberishLibrary\n//\n//  Created by Titouan van Belle on 15.07.17.\n//  Copyright © 2017 Ahmed Ali. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\nvoid CCILog(NSString *format, ...);\n\n\n@protocol CCILogger<NSObject>\n\n- (void)logFormat:(NSString *)format arguments:(va_list)arguments;\n\n@end\n\n\n@interface CCILoggingManager : NSObject\n\n+ (CCILoggingManager *)sharedInstance;\n- (void)addLogger:(id<CCILogger>)logger;\n- (void)logFormat:(NSString *)format arguments:(va_list)arguments;\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Managers/CCILoggingManager.m",
    "content": "//\n//  CCILoggingManager.h\n//  CucumberishLibrary\n//\n//  Created by Titouan van Belle on 15.07.17.\n//  Copyright © 2017 Ahmed Ali. All rights reserved.\n//\n\n#import \"CCILoggingManager.h\"\n\nvoid CCILog(NSString *format, ...)\n{\n    va_list args;\n    va_start(args, format);\n    [[CCILoggingManager sharedInstance] logFormat:format arguments:args];\n    va_end(args);\n}\n\n\n@interface CCIConsoleLogger : NSObject<CCILogger>\n\n@end\n\n@implementation CCIConsoleLogger\n\n- (void)logFormat:(NSString *)format arguments:(va_list)arguments\n{\n    NSLogv(format, arguments);\n}\n\n@end\n\n\n\n@interface CCILoggingManager ()\n\n@property (nonatomic, strong) NSSet<CCILogger> *loggers;\n\n@end\n\n@implementation CCILoggingManager\n\n+ (CCILoggingManager *)sharedInstance\n{\n    static CCILoggingManager *sharedInstance;\n    static dispatch_once_t onceToken;\n\n    dispatch_once(&onceToken, ^{\n        sharedInstance = [[CCILoggingManager alloc] init];\n        sharedInstance.loggers = (NSSet<CCILogger> *)[NSSet new];\n        id<CCILogger> consoleLogger = [[CCIConsoleLogger alloc] init];\n        [sharedInstance addLogger:consoleLogger];\n    });\n\n    return sharedInstance;\n}\n\n- (void)addLogger:(id<CCILogger>)logger\n{\n    NSMutableSet *mutableLoggers = [self.loggers mutableCopy];\n    [mutableLoggers addObject:logger];\n    self.loggers = [mutableLoggers copy];\n}\n\n- (void)logFormat:(NSString *)format arguments:(va_list)arguments\n{\n    NSSet *loggers = [self.loggers copy];\n    for (id<CCILogger> logger in loggers) {\n        va_list args_copy;\n        va_copy(args_copy, arguments);\n\n        [logger logFormat:format arguments:args_copy];\n        va_end(args_copy);\n    };\n}\n\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Managers/CCIStepsManager.h",
    "content": "//\n//  CCIStepsManager.h\n\n//\n//  Created by Ahmed Ali on 03/01/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n\n\n\n@class CCIStep;\n\n/**\n CCIStepsManager is a singleton class and its main purpose is to manage all step definitions and execute steps.\n */\n@interface CCIStepsManager : NSObject\n\n/**\n A set containing all the steps that are not defined when dry run is enabled\n */\n@property (nonatomic, strong) NSMutableSet<CCIStep *> *undefinedSteps;\n\n/**\n Returns the singleton class of CCIStepsManager\n */\n+ (instancetype)instance;\n\n/**\n Executes the passed step if it matches any previously defined implementation. Or throw an error if there is no matching definiton.\n \n @param step the to be executed\n @param testCase the test case that is being executed when this step implementation is being called\n */\n- (void)executeStep:(CCIStep *)step inTestCase:(id)testCase;\n\n- (BOOL)executeStepInDryRun:(CCIStep *)step inTestCase:(id)testCase;\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Managers/CCIStepsManager.m",
    "content": "//\n//  CCIStepsManager.m\n\n//\n//  Created by Ahmed Ali on 03/01/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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 \"CCIStepsManager.h\"\n#import \"Cucumberish.h\"\n#import \"CCIStep.h\"\n#import \"CCIStepDefinition.h\"\n\ntypedef void (^XCTContextActivityBlock)(id _Nullable activity);\n\nstatic CCIStepsManager * instance = nil;\n\n\nconst NSString * kDataTableKey = @\"DataTable\";\nconst NSString * kDocStringKey = @\"DocString\";\nconst NSString * kXCTestCaseKey = @\"XCTestCase\";\n\n@interface CCIStepsManager()\n\n@property NSMutableDictionary * definitions;\n@property (copy) NSString *currentContextKeyword;\n\n@end\n\n@implementation CCIStepsManager\n\n+ (instancetype)instance {\n    \n    @synchronized(self) {\n        if(instance == nil){\n            instance = [[CCIStepsManager alloc] init];\n        }\n    }\n    return instance;\n}\n\n- (instancetype)init\n{\n    self = [super init];\n   \n    self.definitions = [NSMutableDictionary dictionary];\n    self.undefinedSteps = [NSMutableSet new];\n    \n    return self;\n}\n\n\n- (NSMutableArray *)definitionsCluster:(NSString *)type\n{\n    NSMutableArray * cluster = self.definitions[type];\n    if(cluster == nil){\n        cluster = [NSMutableArray array];\n        self.definitions[type] = cluster;\n    }\n    \n    return cluster;\n}\n\n- (CCIStepDefinition *)findMatchDefinitionForStep:(CCIStep *)step inTestCase:(id)testCase\n{\n    if(step.keyword == nil){\n        //We should try to match it using all available definitions\n        NSMutableArray * allDefinitions = [NSMutableArray array];\n        for(NSArray * definitions in self.definitions.allValues){\n            [allDefinitions addObjectsFromArray:definitions];\n        }\n        return [self findDefinitionForStep:step amongDefinitions:allDefinitions inTestCase:testCase];\n    }\n\n    return [self findDefinitionForStep:step amongDefinitions:[self definitionGroupForStep:step] inTestCase:testCase];\n}\n\n- (NSArray *)definitionGroupForStep:(CCIStep *)step\n{\n    NSArray *definitionGroup = self.definitions[step.keyword] ?: @[];\n    if ([step.keyword isEqualToString:@\"And\"]) {\n        step.contextualKeyword = self.currentContextKeyword;\n        NSArray *contextDefinitionGroup = self.definitions[self.currentContextKeyword];\n        definitionGroup = [definitionGroup arrayByAddingObjectsFromArray:contextDefinitionGroup];\n    }\n\n    return definitionGroup;\n}\n\n- (CCIStepDefinition *)findDefinitionForStep:(CCIStep *)step amongDefinitions:(NSArray *)definitions inTestCase:(id)testCase\n{\n    NSError * error;\n    CCIStepDefinition * retDefinition = nil;\n    \n    for(CCIStepDefinition * d in definitions){\n        NSString * pattern = d.regexString;\n        \n        if ([d.regexString isEqualToString:step.text]) {\n            //It has no params, it is just plain perfect match\n            retDefinition = [d copy];\n            break;\n        }\n        NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionAnchorsMatchLines error:&error];\n        if(error && d == definitions.lastObject){\n            //Only return nil if we reached the last definition without finding a match\n            break;\n        }\n        NSRange searchRange = NSMakeRange(0, [step.text length]);\n        NSTextCheckingResult * match = [[regex matchesInString:step.text options:NSMatchingReportCompletion range:searchRange] firstObject];\n        \n        if (match.numberOfRanges > 1) {\n            //Looks like a perfect match!\n            CCIStepDefinition * definition = [d copy];\n            NSMutableArray * values = [NSMutableArray arrayWithCapacity:match.numberOfRanges - 1];\n            for(int i = 1; i < match.numberOfRanges; i++){\n                NSRange range = [match rangeAtIndex:i];\n                if (range.location != NSNotFound) {\n                    NSString * value = [step.text substringWithRange:range];\n                    [values addObject:value];\n                }\n            }\n            \n            definition.matchedValues = values;\n            retDefinition = definition;\n            break;\n        } else if (match != nil && match.numberOfRanges == 1) {\n            //this case means there was a match of just the text. This can occur if the regex has the start and end characters ^foobar$\n            retDefinition = [d copy];\n            break;\n        }\n    }\n    \n    if (retDefinition) {\n        if(step.argument.rows.count > 0){\n            retDefinition.additionalContent = @{kDataTableKey : step.argument.rows};\n        }else if(step.argument.content.length > 0){\n            retDefinition.additionalContent = @{kDocStringKey : step.argument.content};\n        }\n    }\n    if([testCase isKindOfClass:[XCTestCase class]]){\n        NSMutableDictionary * additionalContent = [retDefinition.additionalContent mutableCopy] ? :[NSMutableDictionary new];\n        additionalContent[kXCTestCaseKey] = testCase;\n        retDefinition.additionalContent = additionalContent;\n    }\n    \n    \n    return retDefinition;\n}\n\n- (BOOL)executeStepInDryRun:(CCIStep *)step inTestCase:(id)testCase\n{\n    if (![step.keyword isEqualToString:@\"And\"]) {\n        self.currentContextKeyword = step.keyword;\n    }\n\n    return [self findMatchDefinitionForStep:step inTestCase:testCase] != nil;\n}\n\n\n- (void)executeStep:(CCIStep *)step inTestCase:(id)testCase\n{\n    if (step.keyword && ![step.keyword isEqualToString:@\"And\"]) {\n        self.currentContextKeyword = step.keyword;\n    }\n\n    CCIStepDefinition * implementation = [self findMatchDefinitionForStep:step inTestCase:testCase];\n    NSString * errorMessage = nil;\n    if(step.keyword.length > 0){\n        errorMessage = [NSString stringWithFormat:@\"The step \\\"%@ %@\\\" is not implemented\", step.keyword, [step.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];\n    }else{\n        //It is a step that is called from an step definition\n        errorMessage = [NSString stringWithFormat:@\"The implementation of this step, calls another step that is not implemented: %@\", [step.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];\n    }\n    CCIAssert(implementation != nil, errorMessage);\n\n    if(step.keyword.length > 0){\n        NSLog(@\"Currently executing: \\\"%@ %@\\\"\", step.keyword, step.text);\n    }\n\n    if ([step.keyword isEqualToString:@\"And\"]) {\n        implementation.type = @\"And\";\n    }\n\n    XCTContextActivityBlock activityBlock = ^(id activity) {\n        implementation.body(implementation.matchedValues, implementation.additionalContent);\n    };\n\n    id xctContextClass = NSClassFromString(@\"XCTContext\");\n    if (xctContextClass) {\n        SEL aSelector = NSSelectorFromString(@\"runActivityNamed:block:\");\n\n        if ([xctContextClass respondsToSelector:aSelector]) {\n            NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[xctContextClass methodSignatureForSelector:aSelector]];\n            [inv setSelector:aSelector];\n            [inv setTarget:xctContextClass];\n\n            NSString *name = [NSString stringWithFormat:@\"%@ %@\", implementation.type, step.text];\n            [inv setArgument:&(name) atIndex:2];\n            [inv setArgument:&(activityBlock) atIndex:3];\n\n            [inv invoke];\n        }\n    } else {\n        activityBlock(nil);\n    }\n\n    //Clean up the step additional content to avoid keeping unwanted objects in memory\n    implementation.additionalContent = nil;\n    if(step.keyword.length > 0){\n        NSLog(@\"Step: \\\"%@ %@\\\" passed\", step.keyword, step.text);\n    }\n    step.status = CCIStepStatusPassed;\n}\n\n\n\n@end\n\n\nvoid addDefinition(NSString * definitionString, CCIStepBody body, NSString * type);\n\n#pragma mark - C Routines\n\nvoid Given(NSString * definitionString, CCIStepBody body)\n{\n    addDefinition(definitionString, body, @\"Given\");\n}\nvoid When(NSString * definitionString, CCIStepBody body)\n{\n    addDefinition(definitionString, body, @\"When\");\n}\nvoid Then(NSString * definitionString, CCIStepBody body)\n{\n    addDefinition(definitionString, body, @\"Then\");\n}\nvoid And(NSString * definitionString, CCIStepBody body)\n{\n    addDefinition(definitionString, body, @\"And\");\n}\nvoid But(NSString * definitionString, CCIStepBody body)\n{\n    addDefinition(definitionString, body, @\"But\");\n}\n\nvoid MatchAll(NSString * definitionString, CCIStepBody body)\n{\n    When(definitionString, body);\n    Then(definitionString, body);\n    But(definitionString, body);\n}\n\nvoid Match(NSArray *types, NSString * definitionString, CCIStepBody body)\n{\n    for (NSString * type in types) {\n        addDefinition(definitionString, body, type);\n    }\n}\nvoid addDefinition(NSString * definitionString, CCIStepBody body, NSString * type)\n{\n    CCIStepDefinition * definition = [CCIStepDefinition definitionWithType:type regexString:definitionString implementationBody:body];\n    NSMutableArray * cluster = [[CCIStepsManager instance] definitionsCluster:type];\n    [cluster insertObject:definition atIndex:0];\n}\n\nvoid step(id testCase, NSString * stepLine, ...)\n{\n    va_list args;\n    va_start(args, stepLine);\n    NSString * line = [[NSString alloc] initWithFormat:stepLine arguments:args];\n    va_end(args);\n    \n    CCIStep * step = [CCIStep new];\n    step.text = line;\n    [[CCIStepsManager instance] executeStep:step inTestCase:testCase];\n}\n\nvoid SStep(id testCase, NSString * stepLine)\n{\n    step(testCase, stepLine);\n}\n\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIArgument.h",
    "content": "//\n//\tCCIArgument.h\n//\n//\tCreated by Ahmed Ali on 2/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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//\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n#import <Foundation/Foundation.h>\n\n/**\n Represents a DocString arguemnt or a DataTable argument passed to a step\n */\n@interface CCIArgument : NSObject\n\n\n/**\n In case this is a DataTable arguemnt, then this property will contain array of arrays where each item in the array is a row, that has an array of cells \n */\n@property (nonatomic, strong) NSArray<NSArray *> * rows;\n\n\n/**\n The string content in case it is a DocString argument\n */\n@property (nonatomic, copy) NSString * content;\n\n/**\n Creates an instance with properties filled from the passed dictionary\n \n @param dictionary the dictionary that contains all the argument data\n \n @return argument instance\n */\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary;\n\n/**\n Creates a dictionary from the class properties\n \n @return the created dictionary\n */\n-(NSDictionary *)toDictionary;\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIArgument.m",
    "content": "//\n//\tCCIArgument.m\n//\n//\tCreated by Ahmed Ali on 2/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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\n// THE SOFTWARE.\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n\n\n#import \"CCIArgument.h\"\n\n@interface CCIArgument ()\n@end\n@implementation CCIArgument\n\n\n\n\n/**\n * Instantiate the instance using the passed dictionary values to set the properties values\n */\n\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary\n{\n\tself = [super init];\n\n\t\n    if(dictionary[@\"content\"] != nil && ![dictionary[@\"content\"] isKindOfClass:[NSNull class]]){\n        self.content = dictionary[@\"content\"];\n    }\n    if(dictionary[@\"parsedRows\"] != nil){\n        self.rows = dictionary[@\"parsedRows\"];\n    }else if(dictionary[@\"rows\"] != nil && [dictionary[@\"rows\"] isKindOfClass:[NSArray class]]){\n        NSArray * rowsDictionaries = dictionary[@\"rows\"];\n        NSMutableArray * rows = [NSMutableArray array];\n        for(NSDictionary * rowsDictionary in rowsDictionaries){\n            NSMutableArray * row = [NSMutableArray array];\n            for(NSDictionary * cell in rowsDictionary[@\"cells\"]){\n                [row addObject:cell[@\"value\"]];\n            }\n            [rows addObject:row];\n        }\n        if(rows.count > 0){\n            self.rows = rows;\n        }\n    }\n\treturn self;\n}\n\n\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n-(NSDictionary *)toDictionary\n{\n\tNSMutableDictionary * dictionary = [NSMutableDictionary dictionary];\n\n\tif(self.rows != nil){\n\t\tdictionary[@\"parsedRows\"] = self.rows;\n\t}\n\t\n    if(self.content != nil){\n        dictionary[@\"content\"] = self.content;\n    }\n\treturn dictionary;\n\n}\n\n/**\n * Implementation of NSCoding encoding method\n */\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n- (void)encodeWithCoder:(NSCoder *)aCoder\n{\n\tif(self.rows != nil){\n\t\t[aCoder encodeObject:self.rows forKey:@\"rows\"];\n\t}\n\n    if(self.content != nil){\n        [aCoder encodeObject:self.content forKey:@\"content\"];\n    }\n\n}\n\n/**\n * Implementation of NSCoding initWithCoder: method\n */\n- (instancetype)initWithCoder:(NSCoder *)aDecoder\n{\n\tself = [super init];\n\tself.rows = [aDecoder decodeObjectForKey:@\"rows\"];\n    self.content = [aDecoder decodeObjectForKey:@\"content\"];\n\treturn self;\n\n}\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIAroundHock.h",
    "content": "//\n//  CCIAroundHock.h\n//\n//\tCreated by Ahmed Ali on 19/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import \"CCIBlockDefinitions.h\"\n@class CCIScenarioDefinition;\n\n\n@interface CCIAroundHock : NSObject\n\n@property (nonatomic, strong) NSArray * tags;\n@property (nonatomic, copy) CCIScenarioExecutionHockBlock block;\n\n+ (instancetype)hockWithTags:(NSArray *)tags block:(CCIScenarioExecutionHockBlock)block;\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIAroundHock.m",
    "content": "//\n//  CCIAroundHock.m\n//\n//\tCreated by Ahmed Ali on 19/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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\n#import \"CCIAroundHock.h\"\n\n@implementation CCIAroundHock\n+ (instancetype)hockWithTags:(NSArray *)tags block:(CCIScenarioExecutionHockBlock)block\n{\n    CCIAroundHock * hock = [CCIAroundHock new];\n    hock.block = block;\n    hock.tags = tags;\n    return hock;\n}\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIBackground.h",
    "content": "//\n//\tCCIBackground.h\n//\n//\tCreated by Ahmed Ali on 2/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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//\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n#import <Foundation/Foundation.h>\n#import \"CCILocation.h\"\n#import \"CCIStep.h\"\n\n/**\n Represents a feature background\n \n Check the Backgroun wiki for detailed information https://github.com/Ahmed-Ali/Cucumberish/wiki/Background\n */\n@interface CCIBackground : NSObject\n\n@property (nonatomic, strong) CCILocation * location;\n\n@property (nonatomic, strong) NSArray * steps;\n\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary;\n\n-(NSDictionary *)toDictionary;\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIBackground.m",
    "content": "//\n//\tCCIBackground.m\n//\n//\tCreated by Ahmed Ali on 2/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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.\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n\n\n#import \"CCIBackground.h\"\n\n@interface CCIBackground ()\n@end\n@implementation CCIBackground\n\n\n\n\n/**\n * Instantiate the instance using the passed dictionary values to set the properties values\n */\n\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary\n{\n\tself = [super init];\n\n\n\tif(dictionary[@\"location\"] != nil && ![dictionary[@\"location\"] isKindOfClass:[NSNull class]]){\n\t\tself.location = [[CCILocation alloc] initWithDictionary:dictionary[@\"location\"]];\n\t}\n\n\n\tif(dictionary[@\"steps\"] != nil && [dictionary[@\"steps\"] isKindOfClass:[NSArray class]]){\n\t\tNSArray * stepsDictionaries = dictionary[@\"steps\"];\n\t\tNSMutableArray * stepsItems = [NSMutableArray array];\n\t\tfor(NSDictionary * stepsDictionary in stepsDictionaries){\n\t\t\tCCIStep * stepsItem = [[CCIStep alloc] initWithDictionary:stepsDictionary];\n\t\t\t[stepsItems addObject:stepsItem];\n\t\t}\n\t\tself.steps = stepsItems;\n\t}\n\n\treturn self;\n}\n\n\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n-(NSDictionary *)toDictionary\n{\n\tNSMutableDictionary * dictionary = [NSMutableDictionary dictionary];\n\n\tif(self.location != nil){\n\t\tdictionary[@\"location\"] = [self.location toDictionary];\n\t}\n\n\tif(self.steps != nil){\n\t\tNSMutableArray * dictionaryElements = [NSMutableArray array];\n\t\tfor(CCIStep * stepsElement in self.steps){\n\t\t\t[dictionaryElements addObject:[stepsElement toDictionary]];\n\t\t}\n\t\tdictionary[@\"steps\"] = dictionaryElements;\n\t}\n\treturn dictionary;\n\n}\n\n/**\n * Implementation of NSCoding encoding method\n */\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n- (void)encodeWithCoder:(NSCoder *)aCoder\n{\n\n\tif(self.location != nil){\n\t\t[aCoder encodeObject:self.location forKey:@\"location\"];\n\t}\n\n\tif(self.steps != nil){\n\t\t[aCoder encodeObject:self.steps forKey:@\"steps\"];\n\t}\n\n}\n\n/**\n * Implementation of NSCoding initWithCoder: method\n */\n- (instancetype)initWithCoder:(NSCoder *)aDecoder\n{\n\tself = [super init];\n\tself.location = [aDecoder decodeObjectForKey:@\"location\"];\n\tself.steps = [aDecoder decodeObjectForKey:@\"steps\"];\n\treturn self;\n\n}\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIExample.h",
    "content": "//\n//\tCCIExample.h\n//\n//\tCreated by Ahmed Ali on 17/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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//\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n#import \"CCILocation.h\"\n\n/**\n Represents and example of a scanrio outline\n */\n@interface CCIExample : NSObject\n\n/**\n The location of the example in its file\n */\n@property (nonatomic, strong) CCILocation * location;\n\n/**\n Representaion of the example data where the dictionary keys are the table headers\n each key will contain array of example column. E. g\n @code\n | Field 1 | Field 2 | Field 3 |\n |  C1Ro1  |  C2Ro1  |  C3Ro1  |\n |  C1Ro2  |  C2Ro2  |  C3Ro2  |\n |  C1Ro3  |  C2Ro3  |  C3Ro3  |\n\n @endcode\n\n This will end up with the example data with the following structure\n @code\n {\n    Field 1 : [\n        C1Ro1,\n        C1Ro2,\n        C1Ro3\n    ],\n    Field 2 : [\n        C2Ro1,\n        C2Ro2,\n        C2Ro3\n    ],\n    Field 3 : [\n        C3Ro1,\n        C3Ro2,\n        C3Ro3\n    ]\n }\n @endcode\n */\n@property (nonatomic, strong) NSDictionary * exampleData;\n\n\n/**\n Array of tags found on top of this example table\n */\n@property (nonatomic, strong) NSArray <NSString *> * tags;\n\n@property (nonatomic, strong) NSArray<NSDictionary*>* rawTags;\n\n\n/**\n Creates an instance with properties filled from the passed dictionary\n\n @param dictionary the dictionary that contains all the example data\n\n @return example instance\n */\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary;\n\n/**\n Creates a dictionary from the class properties\n\n @return the created dictionary\n */\n-(NSDictionary *)toDictionary;\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIExample.m",
    "content": "//\n//\tCCIExample.m\n//\n//\tCreated by Ahmed Ali on 17/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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.\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n\n\n#import \"CCIExample.h\"\n\n@interface CCIExample ()\n@end\n\n\n@implementation CCIExample\n\n\n/**\n * Instantiate the instance using the passed dictionary values to set the properties values\n */\n\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary\n{\n    self = [super init];\n\n    if(dictionary[@\"location\"] != nil && ![dictionary[@\"location\"] isKindOfClass:[NSNull class]]){\n        self.location = [[CCILocation alloc] initWithDictionary:dictionary[@\"location\"]];\n    }\n    if(dictionary[@\"exampleData\"] != nil){\n        self.exampleData = dictionary[@\"exampleData\"];\n    }else{\n        NSMutableDictionary * exampleData = [NSMutableDictionary dictionary];\n        NSMutableArray * headers = [NSMutableArray array];\n        if(dictionary[@\"tableHeader\"] != nil && ![dictionary[@\"tableHeader\"] isKindOfClass:[NSNull class]]){\n            NSArray * cells = dictionary[@\"tableHeader\"][@\"cells\"];\n            for(NSDictionary * cell in cells){\n                NSString * cellValue = cell[@\"value\"];\n                [headers addObject:cellValue];\n                exampleData[cellValue] = [NSMutableArray array];\n            }\n\n        }\n        if(dictionary[@\"tableBody\"] != nil && [dictionary[@\"tableBody\"] isKindOfClass:[NSArray class]]){\n            NSArray * rows = dictionary[@\"tableBody\"];\n\n            for(NSDictionary * row in rows){\n                NSArray * columns = row[@\"cells\"];\n                for(int i = 0; i < columns.count; i++){\n                    NSString * header = headers[i];\n                    NSMutableArray * tableColumn = exampleData[header];\n                    NSDictionary * column = columns[i];\n                    [tableColumn addObject:column[@\"value\"]];\n                }\n            }\n\n        }\n\n        if(dictionary[@\"parsedTags\"] != nil){\n            self.tags = dictionary[@\"parsedTags\"];\n        }else if(dictionary[@\"tags\"] != nil && [dictionary[@\"tags\"] isKindOfClass:[NSArray class]]){\n            NSArray * tagsDictionaries = dictionary[@\"tags\"];\n            self.rawTags = dictionary[@\"tags\"];\n            NSMutableArray * tagsItems = [NSMutableArray array];\n            for(NSDictionary * tagDictionary in tagsDictionaries){\n                NSString * tagName = tagDictionary[@\"name\"];\n                if([tagName hasPrefix:@\"@\"]){\n                    tagName = [tagName stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:@\"\"];\n                }\n                [tagsItems addObject:tagName];\n            }\n            self.tags = tagsItems;\n        }\n\n        self.exampleData = exampleData;\n    }\n\n    return self;\n}\n\n\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n-(NSDictionary *)toDictionary\n{\n    NSMutableDictionary * dictionary = [NSMutableDictionary dictionary];\n\n    if(self.location != nil){\n        dictionary[@\"location\"] = [self.location toDictionary];\n    }\n\n    dictionary[@\"exampleData\"] = self.exampleData;\n\n    return dictionary;\n\n}\n\n/**\n * Implementation of NSCoding encoding method\n */\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n- (void)encodeWithCoder:(NSCoder *)aCoder\n{\n    if(self.location != nil){\n        [aCoder encodeObject:self.location forKey:@\"location\"];\n    }\n    [aCoder encodeObject:self.exampleData forKey:@\"exampleData\"];\n\n\n}\n\n/**\n * Implementation of NSCoding initWithCoder: method\n */\n- (instancetype)initWithCoder:(NSCoder *)aDecoder\n{\n    self = [super init];\n    self.location = [aDecoder decodeObjectForKey:@\"location\"];\n    self.exampleData = [aDecoder decodeObjectForKey:@\"exampleData\"];\n    return self;\n\n}\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIFeature.h",
    "content": "//\n//\tCCIFeature.h\n//\n//\tCreated by Ahmed Ali on 2/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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//\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n#import <Foundation/Foundation.h>\n#import \"CCIBackground.h\"\n#import \"CCILocation.h\"\n#import \"CCIScenarioDefinition.h\"\n\n/**\n Reperesents a feautre information\n \n Checkout the Feaure wiki for more information: https://github.com/Ahmed-Ali/Cucumberish/wiki/Feature\n \n */\n@interface CCIFeature : NSObject\n\n@property (nonatomic, strong) CCIBackground * background;\n@property (nonatomic, strong) CCILocation * location;\n@property (nonatomic, copy) NSString * name;\n@property (nonatomic, copy) NSString * docDescription;//this property saves the description of the feature from the parsed feature to save it for JSON output\n@property (nonatomic, strong) NSArray<CCIScenarioDefinition *> * scenarioDefinitions;\n@property (nonatomic, strong) NSArray <NSString *> * tags;\n@property (nonatomic, strong, readonly) NSArray <NSDictionary *> * rawTags;//the tags property loses information needed for the JSON output. This preserves the raw tag formatting\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary;\n\n-(NSDictionary *)toDictionary;\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIFeature.m",
    "content": "//\n//\tCCIFeature.m\n//\n//\tCreated by Ahmed Ali on 2/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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.\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n\n\n#import \"CCIFeature.h\"\n\n@interface CCIFeature ()\n@property (nonatomic, strong) NSArray<NSDictionary *>* rawTags;\n@end\n@implementation CCIFeature\n\n\n\n\n/**\n * Instantiate the instance using the passed dictionary values to set the properties values\n */\n\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary\n{\n    self = [super init];\n    \n    \n    if(dictionary[@\"location\"] != nil && ![dictionary[@\"location\"] isKindOfClass:[NSNull class]]){\n        self.location = [[CCILocation alloc] initWithDictionary:dictionary[@\"location\"]];\n    }\n    \n    if(dictionary[@\"name\"] != nil && ![dictionary[@\"name\"] isKindOfClass:[NSNull class]]){\n        self.name = dictionary[@\"name\"];\n    }\n    if(dictionary[@\"description\"] != nil && ![dictionary[@\"description\"] isKindOfClass:[NSNull class]]){\n        self.docDescription = dictionary[@\"description\"];\n    }\n    if(dictionary[@\"parsedTags\"] != nil){\n        self.tags = dictionary[@\"parsedTags\"];\n    }else if(dictionary[@\"tags\"] != nil && [dictionary[@\"tags\"] isKindOfClass:[NSArray class]]){\n        NSArray * tagsDictionaries = dictionary[@\"tags\"];\n        [self setRawTags:dictionary[@\"tags\"]];\n        NSMutableArray * tagsItems = [NSMutableArray array];\n        for(NSDictionary * tagDictionary in tagsDictionaries){\n            NSString * tagName = tagDictionary[@\"name\"];\n            if([tagName hasPrefix:@\"@\"]){\n                tagName = [tagName stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:@\"\"];\n            }\n            [tagsItems addObject:tagName];\n            \n        }\n        self.tags = tagsItems;\n    }\n\tif(dictionary[@\"children\"] != nil && [dictionary[@\"children\"] isKindOfClass:[NSArray class]]){\n\t\tNSArray * scenarioDefinitionsDictionaries = dictionary[@\"children\"];\n\t\tNSMutableArray * scenarioDefinitionsItems = [NSMutableArray array];\n\t\tfor(NSDictionary * scenarioDefinitionsDictionary in scenarioDefinitionsDictionaries){\n            NSMutableDictionary * scenarioData = [scenarioDefinitionsDictionary mutableCopy];\n            if(self.location.filePath.length > 0){\n                scenarioData[@\"location\"][@\"filePath\"] = self.location.filePath;\n            }\n            if([[scenarioData[@\"keyword\"] lowercaseString] isEqualToString:@\"background\"]){\n                self.background = [[CCIBackground alloc] initWithDictionary:scenarioData];\n            }\n\t\t\tCCIScenarioDefinition * scenarioDefinitionsItem = [[CCIScenarioDefinition alloc] initWithDictionary:scenarioData];\n            if(scenarioDefinitionsItem.tags.count > 0 && self.tags.count > 0){\n                NSMutableArray * allTags = [scenarioDefinitionsItem.tags mutableCopy];\n                [allTags addObjectsFromArray:self.tags];\n                scenarioDefinitionsItem.tags = allTags;\n            }else if(self.tags.count > 0){\n                scenarioDefinitionsItem.tags = self.tags;\n            }\n\t\t\t[scenarioDefinitionsItems addObject:scenarioDefinitionsItem];\n\t\t}\n\t\tself.scenarioDefinitions = scenarioDefinitionsItems;\n\t}\n    \n    \n\n\treturn self;\n}\n\n\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n-(NSDictionary *)toDictionary\n{\n\tNSMutableDictionary * dictionary = [NSMutableDictionary dictionary];\n\tif(self.background != nil){\n\t\tdictionary[@\"background\"] = [self.background toDictionary];\n\t}\n\n\tif(self.location != nil){\n\t\tdictionary[@\"location\"] = [self.location toDictionary];\n\t}\n\tif(self.name != nil){\n\t\tdictionary[@\"name\"] = self.name;\n\t}\n\tif(self.scenarioDefinitions != nil){\n\t\tNSMutableArray * dictionaryElements = [NSMutableArray array];\n\t\tfor(CCIScenarioDefinition * scenarioDefinitionsElement in self.scenarioDefinitions){\n\t\t\t[dictionaryElements addObject:[scenarioDefinitionsElement toDictionary]];\n\t\t}\n\t\tdictionary[@\"scenarioDefinitions\"] = dictionaryElements;\n\t}\n    if(self.tags.count > 0){\n        dictionary[@\"parsedTags\"] = self.tags;\n    }\n    if (self.docDescription != nil)\n    {\n        dictionary[@\"description\"]= self.docDescription;\n    }\n    \n    \n    return dictionary;\n    \n}\n\n/**\n * Implementation of NSCoding encoding method\n */\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n- (void)encodeWithCoder:(NSCoder *)aCoder\n{\n\tif(self.background != nil){\n\t\t[aCoder encodeObject:self.background forKey:@\"background\"];\n\t}\n\t\n\tif(self.location != nil){\n\t\t[aCoder encodeObject:self.location forKey:@\"location\"];\n\t}\n\tif(self.name != nil){\n\t\t[aCoder encodeObject:self.name forKey:@\"name\"];\n\t}\n\tif(self.scenarioDefinitions != nil){\n\t\t[aCoder encodeObject:self.scenarioDefinitions forKey:@\"scenarioDefinitions\"];\n\t}\n\tif(self.tags != nil){\n\t\t[aCoder encodeObject:self.tags forKey:@\"tags\"];\n\t}\n\t\n\n}\n\n/**\n * Implementation of NSCoding initWithCoder: method\n */\n- (instancetype)initWithCoder:(NSCoder *)aDecoder\n{\n\tself = [super init];\n\tself.background = [aDecoder decodeObjectForKey:@\"background\"];\n\tself.location = [aDecoder decodeObjectForKey:@\"location\"];\n\tself.name = [aDecoder decodeObjectForKey:@\"name\"];\n\tself.scenarioDefinitions = [aDecoder decodeObjectForKey:@\"scenarioDefinitions\"];\n\tself.tags = [aDecoder decodeObjectForKey:@\"tags\"];\n\treturn self;\n\n}\n\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIHock.h",
    "content": "//\n//  CCIHock.h\n//\tCreated by Ahmed Ali on 19/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import \"CCIBlockDefinitions.h\"\n@class CCIScenarioDefinition;\n\n\n@interface CCIHock : NSObject\n\n@property (nonatomic, copy) CCIScenarioHockBlock block;\n@property (nonatomic, strong) NSArray * tags;\n\n+ (instancetype)hockWithTags:(NSArray *)tags block:(CCIScenarioHockBlock)block;\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIHock.m",
    "content": "//\n//  CCIHock.m\n//\tCreated by Ahmed Ali on 19/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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#import \"CCIHock.h\"\n\n@implementation CCIHock\n+ (instancetype)hockWithTags:(NSArray *)tags block:(CCIScenarioHockBlock)block\n{\n    CCIHock * hock = [CCIHock new];\n    hock.block = block;\n    hock.tags = tags;\n    return hock;\n}\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIJSONDumper.h",
    "content": "//\n//  CCIJSONDumper.h\n//  AMBluetooth\n//\n//  Created by ereynolds on 11/11/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n@class CCIFeature;\n@interface CCIJSONDumper : NSObject\n\n/*!\n *   @author Erik Call Reynolds \n *   @date 16-11-15 12:11:00\n *\n *   @brief creates the Cucumber JSON Output String similar to the ruby/cucumber JSON output option\n *\n *   @param features The array of features to output as JSON\n *\n *   @return JSON String\n *\n *   @note Omitted the Match Dictionary for each Step definition as it no longer applies in Objective-C\n *   @note Omitted the Execution Duration of each Step due to the complexity level   \n */\n+(NSString*)buildJSONOutputString:(NSArray<CCIFeature*>*)features;\n+(NSData*)buildJSONOutputData:(NSArray<CCIFeature*>*)features;\n\n+(NSString*)writeJSONToFile:(NSString*)filename\n           forFeatures:(NSArray<CCIFeature*>*)features;\n\n+(NSString*)writeJSONToFile:(NSString*)filename\n                inDirectory:(NSString*) directory\n                forFeatures:(NSArray<CCIFeature*>*)features;\n\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIJSONDumper.m",
    "content": "//\n//  CCIJSONDumper.m\n//  AMBluetooth\n//\n//  Created by ereynolds on 11/11/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\n\n#import \"CCIJSONDumper.h\"\n#import \"CCIFeature.h\"\n\n#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR\n#import <UIKit/UIKit.h>\n#endif\n\n@import Darwin;\n@implementation CCIJSONDumper\n+ (instancetype)instance {\n    static CCIJSONDumper * instance = nil;\n    @synchronized(self) {\n        if(instance == nil){\n            instance = [[CCIJSONDumper alloc] init];\n        }\n    }\n    return instance;\n}\n\n+(NSString*)testEnv\n{\n#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR\n    return [[UIDevice currentDevice] systemVersion];\n#elif TARGET_OS_OSX\n    NSOperatingSystemVersion version = [[NSProcessInfo processInfo] operatingSystemVersion];\n    return ([NSString stringWithFormat:@\"%ld.%ld.%ld\", version.majorVersion, version.minorVersion, version.patchVersion]);\n#endif\n    \n}\n+(NSData*)buildJSONOutputData:(NSArray<CCIFeature *> *)features\n{\n    NSArray*rawOutput = [self convertMultipleFeaturesToJSONDictionary:features];\n    return [NSJSONSerialization dataWithJSONObject:rawOutput options:NSJSONWritingPrettyPrinted error:nil];\n}\n\n+(NSString*)buildJSONOutputString:(NSArray<CCIFeature*> *)features\n{\n    NSString* retVal = [[NSString alloc] initWithData:[self buildJSONOutputData:features] encoding:NSUTF8StringEncoding];\n    NSLog(@\"%@\", retVal);\n    return retVal;\n}\n\n+(NSString*)writeJSONToFile:(NSString*)filename\n                forFeatures:(NSArray<CCIFeature*>*)features\n{\n    \n    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);\n    NSString *documentsDirectory = [paths objectAtIndex:0];\n\n    return [self writeJSONToFile:filename inDirectory:documentsDirectory forFeatures:features];\n    \n}\n\n+(NSString*)writeJSONToFile:(NSString*)filename\n                inDirectory:(NSString *)directory\n                forFeatures:(NSArray<CCIFeature*>*)features\n{\n    \n    NSData *data = [self buildJSONOutputData:features];\n    NSString* fileName = [NSString stringWithFormat:@\"%@.json\", filename];\n    NSString *dataPath = [directory stringByAppendingPathComponent:fileName];\n    \n    if (![self directoryExists:directory]) {\n        [self createDirectory:directory];\n    }\n    \n    [data writeToFile:dataPath atomically:YES];\n    return dataPath;\n}\n\n+(NSArray*)convertMultipleFeaturesToJSONDictionary:(NSArray<CCIFeature*>*)features\n{\n    NSMutableArray *retVal = [NSMutableArray array];\n    for (CCIFeature *feature in features) {\n        [retVal addObject:[self convertFeatureToJSONDictionary:feature]];\n    }\n    return retVal;\n}\n\n+(NSDictionary*)convertFeatureToJSONDictionary:(CCIFeature*)feature\n{\n    \n    NSDictionary *retVal = [NSDictionary dictionary];\n    \n    retVal = [self addKeywordToDictionary:retVal forFeature:feature];\n    retVal = [self addTagsToDictionary:retVal forFeature:feature];\n    retVal = [self addNameToDictionary:retVal forFeature:feature];\n    retVal = [self addDescriptionToDictionary:retVal forFeature:feature];\n    retVal = [self addURIToDictionary:retVal forFeature:feature];\n    retVal = [self addLineToDictionary:retVal forFeature:feature];\n    retVal = [self addIdToDictionary:retVal forFeature:feature];\n    \n    retVal = [self addElementsToDictionary:retVal forFeature:feature];\n    \n    \n    \n    \n    return retVal;\n    \n}\n\n#pragma mark - private functions\n+(BOOL)directoryExists:(NSString *)path {\n    bool isDir;\n    return ([[NSFileManager defaultManager]\n             fileExistsAtPath:path isDirectory:&isDir] && isDir) ;\n}\n\n+(void)createDirectory:(NSString *)path {\n    [[NSFileManager defaultManager] createDirectoryAtPath: path\n                              withIntermediateDirectories:YES\n                                               attributes:nil\n                                                    error:NULL];\n}\n\n#pragma mark - ID Formatting\n+(NSDictionary*)addIdToDictionary:(NSDictionary*)currentDictionary forFeature:(CCIFeature*)feature\n{\n    NSDictionary * idDictionary= [self convertIdToOutputDictionaryForFeature:feature];\n    if (!idDictionary)\n    {\n        return currentDictionary;\n    }\n    else\n    {\n        NSMutableDictionary* retVal = [currentDictionary mutableCopy];\n        [retVal addEntriesFromDictionary:idDictionary];\n        return retVal;\n    }\n}\n\n+(NSDictionary*)convertIdToOutputDictionaryForFeature:(CCIFeature*)feature\n{\n    if (feature.name != nil && feature.name.length > 0)\n    {\n        NSDictionary *keywordDictionary = @{@\"id\":[feature.name.lowercaseString stringByReplacingOccurrencesOfString:@\" \" withString:@\"-\"]};\n        return keywordDictionary;\n    }\n    return nil;\n}\n\n\n#pragma mark - Keyword Formatting\n+(NSDictionary*)addKeywordToDictionary:(NSDictionary*)currentDictionary forFeature:(CCIFeature*)feature\n{\n    NSDictionary * keywordDictionary= [self convertKeywordToOutputDictionaryForFeature:feature];\n    if (!keywordDictionary)\n    {\n        return currentDictionary;\n    }\n    else\n    {\n        NSMutableDictionary* retVal = [currentDictionary mutableCopy];\n        [retVal addEntriesFromDictionary:keywordDictionary];\n        return retVal;\n    }\n}\n\n+(NSDictionary*)convertKeywordToOutputDictionaryForFeature:(CCIFeature*)feature\n{\n    NSDictionary *keywordDictionary = @{@\"keyword\":@\"Feature\"};\n    return keywordDictionary;\n}\n\n#pragma mark - Name Formatting\n+(NSDictionary*)addNameToDictionary:(NSDictionary*)currentDictionary forFeature:(CCIFeature*)feature\n{\n    NSDictionary * nameDictionary= [self convertNameToOutputDictionary:feature];\n    if (!nameDictionary)\n    {\n        return currentDictionary;\n    }\n    else\n    {\n        NSMutableDictionary* retVal = [currentDictionary mutableCopy];\n        [retVal addEntriesFromDictionary:nameDictionary];\n        return retVal;\n    }\n}\n\n+(NSDictionary*)convertNameToOutputDictionary:(CCIFeature*)feature\n{\n    if ((feature.name != nil) && (feature.name.length > 0))\n    {\n        NSDictionary *nameDictionary = @{@\"name\":feature.name};\n        return nameDictionary;\n    }\n    return nil;\n    \n}\n\n#pragma mark - Description Formatting\n+(NSDictionary*)addDescriptionToDictionary:(NSDictionary*)currentDictionary forFeature:(CCIFeature*)feature\n{\n    NSDictionary * descriptionDictionary= [self convertDescriptionToOutputDictionary:feature];\n    if (!descriptionDictionary)\n    {\n        return currentDictionary;\n    }\n    else\n    {\n        NSMutableDictionary* retVal = [currentDictionary mutableCopy];\n        [retVal addEntriesFromDictionary:descriptionDictionary];\n        return retVal;\n    }\n}\n\n+(NSDictionary*)convertDescriptionToOutputDictionary:(CCIFeature*)feature\n{\n    if ((feature.docDescription != nil) && (feature.docDescription.length > 0))\n    {\n        NSDictionary *descriptionDictionary = @{@\"description\":feature.docDescription};\n        return descriptionDictionary;\n    }\n    return nil;\n    \n}\n\n#pragma mark - URI Formatting\n+(NSDictionary*)addURIToDictionary:(NSDictionary*)currentDictionary forFeature:(CCIFeature*)feature\n{\n    NSDictionary * uriDictionary= [self convertURIToOutputDictionary:feature];\n    if (!uriDictionary)\n    {\n        return currentDictionary;\n    }\n    else\n    {\n        NSMutableDictionary* retVal = [currentDictionary mutableCopy];\n        [retVal addEntriesFromDictionary:uriDictionary];\n        return retVal;\n    }\n}\n\n+(NSDictionary*)convertURIToOutputDictionary:(CCIFeature*)feature\n{\n    \n    NSDictionary *uriDictionary = @{@\"uri\":[feature.location.filePath stringByReplacingOccurrencesOfString:@\"\\\\/\" withString:@\"/\"]};\n    return uriDictionary;\n    \n    \n}\n\n#pragma mark - Line Formatting\n+(NSDictionary*)addLineToDictionary:(NSDictionary*)currentDictionary forFeature:(CCIFeature*)feature\n{\n    NSDictionary * lineDictionary= [self convertURIToOutputDictionary:feature];\n    if (!lineDictionary)\n    {\n        return currentDictionary;\n    }\n    else\n    {\n        NSMutableDictionary* retVal = [currentDictionary mutableCopy];\n        [retVal addEntriesFromDictionary:lineDictionary];\n        return retVal;\n    }\n}\n\n+(NSDictionary*)convertLineToOutputDictionary:(CCIFeature*)feature\n{\n    \n    NSDictionary *lineDictionary = @{@\"uri\":[NSNumber numberWithInteger:feature.location.line]};\n    return lineDictionary;\n    \n    \n}\n\n#pragma mark - Tag Formatting\n+(NSDictionary*)addTagsToDictionary:(NSDictionary*)currentDictionary forFeature:(CCIFeature*)feature\n{\n    NSDictionary * tagsDictionary = [self convertTagsToOutputDictionaryFromFeature:feature];\n    if (!tagsDictionary)\n    {\n        return currentDictionary;\n    }\n    else\n    {\n        NSMutableDictionary* retVal = [currentDictionary mutableCopy];\n        [retVal addEntriesFromDictionary:tagsDictionary];\n        return retVal;\n    }\n}\n+(NSDictionary*)convertTagsToOutputDictionaryFromFeature:(CCIFeature*)feature\n{\n    NSArray *tagDictionaries = [self convertTagsToOutputArrayFromFeature:feature];\n    if (tagDictionaries)\n    {\n        NSDictionary *retVal = @{@\"tags\":tagDictionaries};\n        return retVal;\n    }\n    return nil;\n}\n+(NSArray*)convertTagsToOutputArrayFromFeature:(CCIFeature*)feature\n{\n    NSMutableArray *retVal= [NSMutableArray array];\n    if ([feature.rawTags count] > 0)\n    {\n        for(NSDictionary*tag in feature.rawTags)\n        {\n            [retVal addObject:[self convertRawTagToOutputDictionary:tag]];\n        }\n    }\n    else if ([feature.tags count] > 0)\n    {\n        for(NSString*strTag in feature.rawTags)\n        {\n            [retVal addObject:[self convertTagToOutputDictionary:strTag]];\n        }\n    }\n    if ([retVal count] >0)\n    {\n        return retVal;\n    }\n    return nil;\n    \n}\n+(NSDictionary*)convertTagsToOutputDictionaryFromScenario:(CCIScenarioDefinition*)scenario\n{\n    NSArray *tagDictionaries = [self convertTagsToOutputArrayFromScenario:scenario];\n    if (tagDictionaries)\n    {\n        NSDictionary *retVal = @{@\"tags\":tagDictionaries};\n        return retVal;\n    }\n    return nil;\n}\n+(NSArray*)convertTagsToOutputArrayFromScenario:(CCIScenarioDefinition*)scenario\n{\n    NSMutableArray *retVal= [NSMutableArray array];\n    if ([scenario.rawTags count] > 0)\n    {\n        for(NSDictionary*tag in scenario.rawTags)\n        {\n            [retVal addObject:[self convertRawTagToOutputDictionary:tag]];\n        }\n    }\n    else if ([scenario.tags count] > 0)\n    {\n        for(NSString*strTag in scenario.rawTags)\n        {\n            [retVal addObject:[self convertTagToOutputDictionary:strTag]];\n        }\n    }\n    if ([retVal count] >0)\n    {\n        return retVal;\n    }\n    return nil;\n    \n}\n\n+(NSDictionary*)convertRawTagToOutputDictionary:(NSDictionary*)tag\n{\n    return @{@\"name\": tag[@\"name\"],\n             @\"line\": tag[@\"location\"][@\"line\"]};\n}\n+(NSDictionary*)convertTagToOutputDictionary:(NSString*)tag\n{\n    return @{@\"name\": tag};\n    \n}\n\n#pragma mark - Elements Formatting\n+(NSDictionary*)addElementsToDictionary:(NSDictionary*)currentDictionary forFeature:(CCIFeature*)feature\n{\n    NSDictionary * elementsDictionary = [self convertElementsToOutputDictionary:feature];\n    if (!elementsDictionary)\n    {\n        return currentDictionary;\n    }\n    else\n    {\n        NSMutableDictionary* retVal = [currentDictionary mutableCopy];\n        [retVal addEntriesFromDictionary:elementsDictionary];\n        return retVal;\n    }\n}\n\n+(NSDictionary*)convertElementsToOutputDictionary:(CCIFeature*)feature\n{\n    NSArray *elementDictionaries = [self convertElementsToOutputArray:feature];\n    if (elementDictionaries)\n    {\n        NSDictionary *retVal = @{@\"elements\":elementDictionaries};\n        return retVal;\n    }\n    return nil;\n}\n+(NSArray*)convertElementsToOutputArray:(CCIFeature*)feature\n{\n    NSMutableArray *retVal= [NSMutableArray array];\n    \n    if ([feature.scenarioDefinitions count] > 0)\n    {\n        for(CCIScenarioDefinition*scenario in feature.scenarioDefinitions)\n        {\n            if ([scenario.type isEqualToString:@\"Scenario\"])\n            {\n                [retVal addObject:[self convertScenarioToJSONDictionary:scenario inFeature: (CCIFeature*)feature]];\n            }\n            else\n            {\n                [retVal addObjectsFromArray:[self convertScenarioOutlineToJSONDictionary:scenario inFeature: (CCIFeature*)feature]];\n            }\n        }\n    }\n    if ([retVal count] >0)\n    {\n        return retVal;\n    }\n    return nil;\n}\n\n+(NSDictionary*)convertScenarioToJSONDictionary:(CCIScenarioDefinition*)scenario inFeature: (CCIFeature*)feature\n{\n    NSMutableDictionary* retVal = [NSMutableDictionary dictionary];\n    \n    [retVal addEntriesFromDictionary:@{@\"name\":scenario.name}];\n    [retVal addEntriesFromDictionary:@{@\"keyword\":scenario.keyword}];\n    [retVal addEntriesFromDictionary:@{@\"line\": @(scenario.location.line)}];\n    [retVal addEntriesFromDictionary:@{@\"description\":@\"\"}];\n    [retVal addEntriesFromDictionary:@{@\"id\":[[feature.name.lowercaseString stringByReplacingOccurrencesOfString:@\" \"\n                                                                                                      withString:@\"-\"]\n                                              stringByAppendingString:[NSString stringWithFormat:@\";%@\",[scenario.name.lowercaseString\n                                                                                                         stringByReplacingOccurrencesOfString:@\" \"\n                                                                                                         withString:@\"-\"]]]}];\n\n    [retVal addEntriesFromDictionary:@{@\"type\": [scenario.keyword.lowercaseString stringByReplacingOccurrencesOfString:@\" \" withString:@\"_\"]}];\n    \n    [retVal addEntriesFromDictionary:[self convertTagsToOutputDictionaryFromScenario:scenario]];\n    [retVal addEntriesFromDictionary:@{@\"test_env\":[self testEnv]}];\n    \n    \n    [retVal addEntriesFromDictionary:[self convertStepsToOutputDictionary:scenario]];\n    \n    return retVal;\n}\n+(NSDictionary*)convertStepsToOutputDictionary:(CCIScenarioDefinition*)scenario\n{\n    NSArray* stepsArray = [self convertStepsToOutputArray:scenario];\n    if (!stepsArray)\n    {\n        return nil;\n    }\n    return @{@\"steps\":stepsArray};\n}\n+(NSArray*)convertStepsToOutputArray:(CCIScenarioDefinition*)scenario\n{\n    NSMutableArray *retVal= [NSMutableArray array];\n    \n    if ([scenario.steps count] > 0)\n    {\n        for(CCIStep*step in scenario.steps)\n        {\n            [retVal addObject:[self convertStepToOutputDictionary:step fromScenario:scenario]];\n            \n        }\n    }\n    if ([retVal count] >0)\n    {\n        return retVal;\n    }\n    return nil;\n}\n\n+(NSDictionary*)convertStepToOutputDictionary:(CCIStep*)step fromScenario:(CCIScenarioDefinition*)scenario\n{\n    NSMutableDictionary *retVal= [NSMutableDictionary dictionary];\n    \n    [retVal addEntriesFromDictionary:@{@\"keyword\": step.keyword}];\n    [retVal addEntriesFromDictionary:@{@\"name\": step.text}];\n    [retVal addEntriesFromDictionary:@{@\"line\": @(step.location.line)}];\n    NSString* resultStatus = @\"\";\n    switch ([step status])\n    {\n        case CCIStepStatusNotExecuted:\n            resultStatus = @\"skipped\";\n            break;\n            \n        case CCIStepStatusPassed:\n            resultStatus = @\"passed\";\n            break;\n            \n        case CCIStepStatusFailed:\n            resultStatus = @\"failed\";\n            break;\n    }\n    \n    [retVal addEntriesFromDictionary:@{@\"result\":@{@\"status\": resultStatus}}];\n    \n    return retVal;\n}\n+(NSArray*)convertScenarioOutlineToJSONDictionary:(CCIScenarioDefinition*)scenarioOutline inFeature: (CCIFeature*)feature\n{\n    NSArray * scenarios = [scenarioOutline outlineChildScenarios];\n    NSMutableArray* retVal = [NSMutableArray array];\n    for (CCIScenarioDefinition* scenario in scenarios)\n    {\n        NSMutableDictionary * jsonDict =[[self convertScenarioToJSONDictionary:scenario inFeature: (CCIFeature*)feature] mutableCopy];\n        jsonDict[@\"type\"] = @\"scenario\";\n        [retVal addObject:jsonDict];\n    }\n    \n    return retVal;\n}\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCILocation.h",
    "content": "//\n//\tCCILocation.h\n//\n//\tCreated by Ahmed Ali on 2/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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//\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n#import <Foundation/Foundation.h>\n\n/**\n Represents a location of a step, scenario or a feature\n */\n@interface CCILocation : NSObject\n\n/**\n The line where the associate node (step, scenario or a feature) is located\n */\n@property (nonatomic, assign) NSInteger line;\n\n/**\n The exact file path where the node exists\n */\n@property (nonatomic, strong) NSString * filePath;\n\n\n/**\n Creates an instance with properties filled from the passed dictionary\n \n @param dictionary the dictionary that contains all the location data\n \n @return location instance\n */\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary;\n\n/**\n Creates a dictionary from the class properties\n \n @return the created dictionary\n */\n-(NSDictionary *)toDictionary;\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCILocation.m",
    "content": "//\n//\tCCILocation.m\n//\n//\tCreated by Ahmed Ali on 2/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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.\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n\n\n#import \"CCILocation.h\"\n\n@interface CCILocation ()\n@end\n@implementation CCILocation\n\n\n\n\n/**\n * Instantiate the instance using the passed dictionary values to set the properties values\n */\n\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary\n{\n\tself = [super init];\n\tif(dictionary[@\"filePath\"] != nil && ![dictionary[@\"filePath\"] isKindOfClass:[NSNull class]]){\n        self.filePath = dictionary[@\"filePath\"];\n\t}\n\n\tif(dictionary[@\"line\"] != nil && ![dictionary[@\"line\"] isKindOfClass:[NSNull class]]){\n\t\tself.line = [dictionary[@\"line\"] integerValue];\n\t}\n\n\treturn self;\n}\n\n\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n-(NSDictionary *)toDictionary\n{\n\tNSMutableDictionary * dictionary = [NSMutableDictionary dictionary];\n\tdictionary[@\"filePath\"] = self.filePath;\n\tdictionary[@\"line\"] = @(self.line);\n\treturn dictionary;\n\n}\n\n/**\n * Implementation of NSCoding encoding method\n */\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n- (void)encodeWithCoder:(NSCoder *)aCoder\n{\n\t[aCoder encodeObject:self.filePath forKey:@\"filePath\"];\n    [aCoder encodeObject:@(self.line) forKey:@\"line\"];\n}\n\n/**\n * Implementation of NSCoding initWithCoder: method\n */\n- (instancetype)initWithCoder:(NSCoder *)aDecoder\n{\n\tself = [super init];\n    self.filePath = [aDecoder decodeObjectForKey:@\"filePath\"];\n\tself.line = [[aDecoder decodeObjectForKey:@\"line\"] integerValue];\n\treturn self;\n\n}\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIScenarioDefinition.h",
    "content": "//\n//\tCCIScenarioDefinition.h\n//\n//\tCreated by Ahmed Ali on 17/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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//\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n#import <Foundation/Foundation.h>\n#import \"CCIExample.h\"\n#import \"CCIStep.h\"\n\nextern const NSString * kScenarioOutlineKeyword;\nextern const NSString * kBackgroundKeyword;\n\n/**\n Represents one scenario or one outline with its example found in your .feature file\n */\n@interface CCIScenarioDefinition : NSObject <NSCopying>\n\n/**\n Array of found examples in case it is an outline\n */\n@property (nonatomic, strong) NSArray<CCIExample *> * examples;\n\n@property (nonatomic, strong, readonly) NSArray<CCIScenarioDefinition*> *outlineChildScenarios;//this is necessary to output each executed scenario from the scenario outline in the JSON. This keeps track of the individual tests cases generated from an outline to ensure proper JSON output\n\n-(void)addOutlineChildScenario:(CCIScenarioDefinition*)scenario;\n\n/**\n Keyword is usually Scenario or Scenario Outline\n */\n@property (nonatomic, copy) NSString * keyword;\n\n/**\n The location of this scenario in its file\n */\n@property (nonatomic, strong) CCILocation * location;\n\n/**\n The name of the scenario\n */\n@property (nonatomic, copy) NSString * name;\n\n/**\n Array of steps the defines the scenario, in the same order they originally found in the scenario\n */\n@property (nonatomic, strong) NSArray <CCIStep *> * steps;\n\n/**\n Array of tags found on top of this scenario\n */\n@property (nonatomic, strong) NSArray <NSString *> * tags;\n\n@property (nonatomic, strong) NSArray<NSDictionary*>* rawTags;\n\n/**\n Can be Scenario or ScenarioOutline\n */\n@property (nonatomic, copy) NSString * type;\n\n/**\n In case the execution of this scenario is failed, this property will have the failure message\n */\n@property (nonatomic, strong) NSString * failureReason;\n\n/**\n Bool determines the success or failure of the scenario.\n */\n@property (nonatomic, assign) BOOL success;\n\n/**\n Creates an instance with properties filled from the passed dictionary\n \n @param dictionary the dictionary that contains all the scenario data\n \n @return scenario instance\n */\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary;\n\n/**\n Creates a dictionary from the class properties\n \n @return the created dictionary\n */\n-(NSDictionary *)toDictionary;\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIScenarioDefinition.m",
    "content": "//\n//\tCCIScenarioDefinition.m\n//\n//\tCreated by Ahmed Ali on 17/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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.\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n\n\n#import \"CCIScenarioDefinition.h\"\n\nconst NSString * kScenarioOutlineKeyword = @\"Scenario Outline\";\nconst NSString * kBackgroundKeyword = @\"Background\";\n\n@interface CCIScenarioDefinition ()\n@property (nonatomic, strong) NSArray<CCIScenarioDefinition*> * outlineChildScenarios;\n@end\n@implementation CCIScenarioDefinition\n\n\n\n\n/**\n * Instantiate the instance using the passed dictionary values to set the properties values\n */\n\n-(void)addOutlineChildScenario:(CCIScenarioDefinition*)scenario\n{\n    if (![self outlineChildScenarios])\n    {\n        [self setOutlineChildScenarios:[NSMutableArray array]];\n    }\n    [(NSMutableArray*)self.outlineChildScenarios addObject:scenario];\n}\n\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary\n{\n\tself = [super init];\n    \n    if(dictionary[@\"examples\"] != nil && [dictionary[@\"examples\"] isKindOfClass:[NSArray class]]){\n        NSArray * examplesDictionaries = dictionary[@\"examples\"];\n        NSMutableArray * examplesItems = [NSMutableArray array];\n        for(NSDictionary * examplesDictionary in examplesDictionaries){\n            CCIExample * examplesItem = [[CCIExample alloc] initWithDictionary:examplesDictionary];\n            [examplesItems addObject:examplesItem];\n        }\n        self.examples = examplesItems;\n    }\n\tif(dictionary[@\"keyword\"] != nil && ![dictionary[@\"keyword\"] isKindOfClass:[NSNull class]]){\n\t\tself.keyword = dictionary[@\"keyword\"];\n\t}\n\n\tif(dictionary[@\"location\"] != nil && ![dictionary[@\"location\"] isKindOfClass:[NSNull class]]){\n\t\tself.location = [[CCILocation alloc] initWithDictionary:dictionary[@\"location\"]];\n\t}\n\n\tif(dictionary[@\"name\"] != nil && ![dictionary[@\"name\"] isKindOfClass:[NSNull class]]){\n\t\tself.name = dictionary[@\"name\"];\n\t}\n  \n\n\tif(dictionary[@\"steps\"] != nil && [dictionary[@\"steps\"] isKindOfClass:[NSArray class]]){\n\t\tNSArray * stepDictionaries = dictionary[@\"steps\"];\n\t\tNSMutableArray * stepsItems = [NSMutableArray array];\n\t\tfor(NSDictionary * stepDictionary in stepDictionaries){\n            NSMutableDictionary * stepData = [stepDictionary mutableCopy];\n            if(self.location.filePath.length > 0){\n                stepData[@\"location\"][@\"filePath\"] = self.location.filePath;\n            }\n\t\t\tCCIStep * stepsItem = [[CCIStep alloc] initWithDictionary:stepData];\n\t\t\t[stepsItems addObject:stepsItem];\n\t\t}\n\t\tself.steps = stepsItems;\n\t}\n    if(dictionary[@\"parsedTags\"] != nil){\n        self.tags = dictionary[@\"parsedTags\"];\n    }else if(dictionary[@\"tags\"] != nil && [dictionary[@\"tags\"] isKindOfClass:[NSArray class]]){\n        NSArray * tagsDictionaries = dictionary[@\"tags\"];\n        self.rawTags = dictionary[@\"tags\"];\n        NSMutableArray * tagsItems = [NSMutableArray array];\n        for(NSDictionary * tagDictionary in tagsDictionaries){\n            NSString * tagName = tagDictionary[@\"name\"];\n            if([tagName hasPrefix:@\"@\"]){\n                tagName = [tagName stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:@\"\"];\n            }\n            [tagsItems addObject:tagName];\n            \n        }\n        self.tags = tagsItems;\n    }\n\n\tif(dictionary[@\"type\"] != nil && ![dictionary[@\"type\"] isKindOfClass:[NSNull class]]){\n\t\tself.type = dictionary[@\"type\"];\n\t}\n    \n    \n    if(dictionary[@\"success\"] != nil && ![dictionary[@\"success\"] isKindOfClass:[NSNull class]]){\n        self.success = [dictionary[@\"success\"] boolValue];\n    }else{\n        //By default scenario considered as success\n        self.success = YES;\n    }\n    if(dictionary[@\"failureReason\"] != nil && ![dictionary[@\"failureReason\"] isKindOfClass:[NSNull class]]){\n        self.failureReason = dictionary[@\"failureReason\"];\n    }\n\treturn self;\n}\n\n\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n-(NSDictionary *)toDictionary\n{\n    NSMutableDictionary * dictionary = [NSMutableDictionary dictionary];\n    if(self.examples != nil){\n        NSMutableArray * dictionaryElements = [NSMutableArray array];\n        for(CCIExample * examplesElement in self.examples){\n            [dictionaryElements addObject:[examplesElement toDictionary]];\n        }\n        dictionary[@\"examples\"] = dictionaryElements;\n    }\n    if(self.keyword != nil){\n        dictionary[@\"keyword\"] = self.keyword;\n    }\n    if(self.location != nil){\n        dictionary[@\"location\"] = [self.location toDictionary];\n    }\n    if(self.name != nil){\n        dictionary[@\"name\"] = self.name;\n    }\n    if(self.steps != nil){\n        NSMutableArray * dictionaryElements = [NSMutableArray array];\n        for(CCIStep * stepsElement in self.steps){\n            [dictionaryElements addObject:[stepsElement toDictionary]];\n        }\n        dictionary[@\"steps\"] = dictionaryElements;\n    }\n    if(self.tags.count > 0 ){\n        \n        dictionary[@\"parsedTags\"] = self.tags;\n    }\n    if(self.type != nil){\n        dictionary[@\"type\"] = self.type;\n    }\n    \n    \n    \n    dictionary[@\"success\"] = @(self.success);\n    if(self.failureReason.length > 0){\n        dictionary[@\"failureReason\"] = self.failureReason;\n    }\n    \n    \n    return dictionary;\n    \n}\n\n/**\n * Implementation of NSCoding encoding method\n */\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n- (void)encodeWithCoder:(NSCoder *)aCoder\n{\n    if(self.examples != nil){\n        [aCoder encodeObject:self.examples forKey:@\"examples\"];\n    }\n    if(self.keyword != nil){\n        [aCoder encodeObject:self.keyword forKey:@\"keyword\"];\n    }\n    if(self.location != nil){\n        [aCoder encodeObject:self.location forKey:@\"location\"];\n    }\n    if(self.name != nil){\n        [aCoder encodeObject:self.name forKey:@\"name\"];\n    }\n    if(self.steps != nil){\n        [aCoder encodeObject:self.steps forKey:@\"steps\"];\n    }\n    if(self.tags != nil){\n        [aCoder encodeObject:self.tags forKey:@\"tags\"];\n    }\n    if(self.type != nil){\n        [aCoder encodeObject:self.type forKey:@\"type\"];\n    }\n    [aCoder encodeObject:@(self.success) forKey:@\"success\"];\n    if(self.failureReason.length > 0){\n        [aCoder encodeObject:self.failureReason forKey:@\"failureReason\"];\n    }\n    \n}\n\n/**\n * Implementation of NSCoding initWithCoder: method\n */\n- (instancetype)initWithCoder:(NSCoder *)aDecoder\n{\n    self = [super init];\n    self.examples = [aDecoder decodeObjectForKey:@\"examples\"];\n    self.keyword = [aDecoder decodeObjectForKey:@\"keyword\"];\n    self.location = [aDecoder decodeObjectForKey:@\"location\"];\n    self.name = [aDecoder decodeObjectForKey:@\"name\"];\n    self.steps = [aDecoder decodeObjectForKey:@\"steps\"];\n    self.tags = [aDecoder decodeObjectForKey:@\"tags\"];\n    self.type = [aDecoder decodeObjectForKey:@\"type\"];\n    self.success = [[aDecoder decodeObjectForKey:@\"success\"] boolValue];\n    self.failureReason = [aDecoder decodeObjectForKey:@\"failureReason\"];\n    \n    return self;\n}\n\n#pragma mark - NSCopying\n- (instancetype)copyWithZone:(NSZone *)zone\n{\n    CCIScenarioDefinition * copy = [[CCIScenarioDefinition alloc] initWithDictionary:[self toDictionary]];\n    return copy;\n}\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIStep.h",
    "content": "//\n//\tCCIStep.h\n//\n//\tCreated by Ahmed Ali on 2/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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//\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n#import <Foundation/Foundation.h>\n#import \"CCILocation.h\"\n#import \"CCIArgument.h\"\n\ntypedef NS_ENUM(NSInteger,CCIStepStatus) {\n    CCIStepStatusNotExecuted = 0,\n    CCIStepStatusPassed,\n    CCIStepStatusFailed\n};\n\n/**\n Represents a step in a scenario\n Step contains information about its argument, location and keyword (When, Then, Given, etc...)\n */\n@interface CCIStep : NSObject<NSCopying>\n\n/**\n Step argument in case it is a DocString or DataTable step\n */\n@property (nonatomic, strong) CCIArgument * argument;\n\n/**\n Set to the keyword of the previous step when the keyword for this step is And\n */\n@property (nonatomic, copy) NSString * contextualKeyword;\n\n/**\n Can be  When, Then, Given, etc...\n */\n@property (nonatomic, copy) NSString * keyword;\n\n/**\n The location where this step has been written\n */\n@property (nonatomic, strong) CCILocation * location;\n\n/**\n The text of the step that comes after the keyword\n */\n@property (nonatomic, copy) NSString * text;\n\n/**\n The step status\n */\n@property (nonatomic,assign) CCIStepStatus status;\n\n\n/**\n Creates an instance with properties filled from the passed dictionary\n \n @param dictionary the dictionary that contains all the step data\n \n @return step instance\n */\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary;\n\n/**\n Creates a dictionary from the class properties\n \n @return the created dictionary\n */\n-(NSDictionary *)toDictionary;\n\n/**\n @return a string composed of the keyword and the text of the step\n */\n- (NSString *)fullName;\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIStep.m",
    "content": "//\n//\tCCIStep.m\n//\n//\tCreated by Ahmed Ali on 2/1/2016\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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.\tModel file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport\n\n\n\n#import \"CCIStep.h\"\n\n\n@interface CCIStep ()\n@end\n@implementation CCIStep\n\n\n\n\n/**\n * Instantiate the instance using the passed dictionary values to set the properties values\n */\n\n-(instancetype)initWithDictionary:(NSDictionary *)dictionary\n{\n\tself = [super init];\n\tif(dictionary[@\"keyword\"] != nil && ![dictionary[@\"keyword\"] isKindOfClass:[NSNull class]]){\n        self.keyword = [dictionary[@\"keyword\"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];\n\t}\n\n\tif(dictionary[@\"location\"] != nil && ![dictionary[@\"location\"] isKindOfClass:[NSNull class]]){\n\t\tself.location = [[CCILocation alloc] initWithDictionary:dictionary[@\"location\"]];\n\t}\n\n\tif(dictionary[@\"text\"] != nil && ![dictionary[@\"text\"] isKindOfClass:[NSNull class]]){\n\t\tself.text = dictionary[@\"text\"];\n\t}\n\n    \n    if(dictionary[@\"argument\"] != nil && ![dictionary[@\"argument\"] isKindOfClass:[NSNull class]]){\n        self.argument = [[CCIArgument alloc] initWithDictionary:dictionary[@\"argument\"]];\n    }\n\treturn self;\n}\n\n\n/**\n * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property\n */\n-(NSDictionary *)toDictionary\n{\n\tNSMutableDictionary * dictionary = [NSMutableDictionary dictionary];\n\tif(self.keyword != nil){\n\t\tdictionary[@\"keyword\"] = self.keyword;\n\t}\n\tif(self.location != nil){\n\t\tdictionary[@\"location\"] = [self.location toDictionary];\n\t}\n\tif(self.text != nil){\n\t\tdictionary[@\"text\"] = self.text;\n\t}\n    \n    if(self.argument != nil){\n        dictionary[@\"argument\"] = [self.argument toDictionary];\n    }\n\treturn dictionary;\n\n}\n\n- (NSString *)fullName\n{\n    return [NSString stringWithFormat:@\"%@ %@\", self.contextualKeyword ?: self.keyword, self.text];\n}\n\n\n- (NSString *)description\n{\n    return [NSString stringWithFormat:@\"Step text: %@\", self.text];\n}\n\n- (id)copyWithZone:(NSZone *)zone\n{\n    return [[CCIStep alloc] initWithDictionary:[self toDictionary]];\n}\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIStepDefinition.h",
    "content": "//\n//  CCIStepDefinition.h\n\n//\n//  Created by Ahmed Ali on 02/01/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import \"CCIBlockDefinitions.h\"\n\n@class CCIStep;\n\n\n\n@interface CCIStepDefinition : NSObject<NSCopying>\n\n@property NSString * regexString;\n@property NSString * type;\n@property NSArray * matchedValues;\n@property NSDictionary * additionalContent;\n@property (nonatomic, copy) CCIStepBody body;\n\n+ (instancetype)definitionWithType:(NSString *)type regexString:(NSString *)regexString implementationBody:(CCIStepBody)body;\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Core/Models/CCIStepDefinition.m",
    "content": "//\n//  CCIStepDefinition.m\n\n//\n//  Created by Ahmed Ali on 02/01/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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 \"CCIStepDefinition.h\"\n#import \"GHParser+Extensions.h\"\n#import \"NSObject+Dictionary.h\"\n#import \"CCIFeature.h\"\n#import \"CCILocation.h\"\n#include <stdio.h>\n\n\n@implementation CCIStepDefinition\n\n\n+ (instancetype)definitionWithType:(NSString *)type regexString:(NSString *)regex implementationBody:(CCIStepBody)body\n{\n    CCIStepDefinition * definition = [CCIStepDefinition new];\n    definition.type = type;\n    definition.regexString = regex;\n    definition.body = body;\n    return definition;\n}\n\n\n\n- (NSString *)description\n{\n    return [NSString stringWithFormat:@\"Definition type: %@, regexString: %@, matchedValues: %@\", self.type, self.regexString, self.matchedValues];\n}\n\n\n\n#pragma mark - NSCopying\n- (id)copyWithZone:(nullable NSZone *)zone\n{\n    CCIStepDefinition * stepDefinition = [CCIStepDefinition definitionWithType:self.type regexString:self.regexString implementationBody:self.body];\n    stepDefinition.matchedValues = self.matchedValues;\n\n    return stepDefinition;\n}\n@end\n\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Cucumberish.h",
    "content": "//\n//  Cucumberish.h\n\n//\n//  Created by Ahmed Ali on 03/01/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import <XCTest/XCTest.h>\n#import \"CCIStepsManager.h\"\n#import \"CCIBlockDefinitions.h\"\n#import \"CCIFeature.h\"\n\ntypedef NS_ENUM(NSInteger, CCILanguage) {\n    CCILanguageSwift = 0,\n    CCILanguageObjectiveC = 1\n};\n\n/**\n Cucumberish is the main class you will need to parse your feature files and execute them.\n You should not create instances of this class directly, instead you need to use the instance method.\n \n @see +[Cucumberish instance]\n*/\n@interface Cucumberish : NSObject\n\n/**\n As this being written, there is an issue with Xcode that causes the last scenario to disappear once it is done.\n If this causes an issue for your test report, change the value of this property to YES before calling beginExecution.\n \n @Note\n Though the default value of this property is NO, it is highly recommended to set the value of this property to YES.\n \n @Note\n This will cause Cucumberish to execute an additional scenario called cucumberishCleanupScenario which will immediately disappear instead of your real last scenario.\n Also this will increase the number of executed scenarios by 1. If you only have 6 scenarios, you will see 7 scenarios in the console message, and in your report navigator.\n \n */\n@property (nonatomic) BOOL fixMissingLastScenario;\n\n/**\n If you change this property value to YES, feature names and scenarios will appear in Xcode Test Navigator as is (allowing spaces and special characters).\n However, allowing pretty names might cause some issues with some tools like XCTool\n */\n@property (nonatomic) BOOL prettyNamesAllowed;\n\n/**\n If you change this property value to YES, feature names will appear in Xcode Test Navigator as is (allowing spaces and special characters).\n However, allowing pretty names might cause some issues with some tools like XCTool\n */\n@property (nonatomic) BOOL prettyFeatureNamesAllowed;\n\n/**\n If you change this property value to YES, scenario names will appear in Xcode Test Navigator as is (allowing spaces and special characters).\n However, allowing pretty names might cause some issues with some tools like XCTool\n */\n@property (nonatomic) BOOL prettyScenarioNamesAllowed;\n\n/**\n You can set it to the value you want to have as a prefix for the auto-generated classes that represents your features in the test navigator.\n Default value is \"CCI\".\n \n @note The idea of having a prefix, is to avoid conflicts between the generated classes and existing classes (either classes you created or exist in any built-in/third-party framework. So if you decide you really don't want a prefix, easier use an empty space or an _ in case you are using tools that doesn't allow spaces in class names such as XCTool\n */\n@property (nonatomic) NSString * featureNamesPrefix;\n\n/**\n If the name of folder that contains your test target files is different than the test target it self, then tell Cucumber the name of the folder through this property.\n This is important for proper error reporting.\n */\n@property (nonatomic) NSString * testTargetFolderName;\n\n\n/**\n Choose path of directory where cucumber JSON results file will be written to.\n Default path is NSDocumentDirectory\n **/\n@property (nonatomic) NSString * resultsDirectory;\n\n\n/**\n If Cucumberish is installed with Carthage, set the value of this property to be SRC_ROOT which is the preprocessor macro you defined in your build settings\n */\n@property (nonatomic, strong) NSString * testTargetSrcRoot;\n\n/**\n If set to true, Cucumberish will scan all your feature files without actually running them and detect steps that are not yet defined. Before, after and around blocks are not\n executed when using this feature. Default is false.\n */\n@property (nonatomic, assign) BOOL dryRun;\n\n/**\n The language used to write the step definition when using the dryRun feature. Default is set to CCILanguageSwift\n */\n@property (nonatomic, assign) CCILanguage dryRunLanguage;\n\n/**\n After executing parserFeaturesInDirectory:fromBundle:includeTags:excludeTags: this array will contain all the parsed features.\n */\n@property (nonatomic, readonly) NSArray<CCIFeature *> * features;\n\n/**\n Retuans a singleton instance of Cucumberish\n \n @return singleton instance of Cucumberish\n */\n+ (instancetype)instance;\n\n/**\n Parses all the .feature files so they can be executed once you call beginExecution\n \n @note The features directory has to be a real physical folder. Also when adding this folder to your test target, and get the prompt on how you would like to add it from Xcode, choose \"Create Folder Reference\" @b Instead @b of \"Create Groups\".\n\n @note When working with tags, the following should be considered:\n\n    - The tags passed to includeTags or excludeTags should not be prefixed with @@ symbole\n \n    - If a the same tag exist in both includeTags and excludeTags, the excludeTags overrides the includeTags; so any feature with that tag will not be executed.\n \n    - When the includeTags has value (and not nil), Cucumberish will excute only the scenarios that has at least one of these tags and dosn't have any tags that that exist in the excludeTags parameter.\n \n    - Since scenarios inherit the tags from its feature, if a feature has a tag that exist in the excludeTags parameter, then this feature will be ignored completely.\n \n \n @param directory the name of your features' folder that exists in your test target root folder.\n @param bundle the main bundle of your test target\n @param includeTags array of strings to filter which scenarios to be executed, if nil then all features will be considered to be executed if there they don't have any tag that exists in the array of the excludeTags.\n @param excludeTags array of strings to filter which features/scenarios should not be executed. This parameter have precedence over the includeTags parameter\n \n \n \n  @return the singleton instance of Cucumberish so you can call beginExecution immediately if you want.\n */\n- (Cucumberish *)parserFeaturesInDirectory:(NSString *)directory\n                       fromBundle:(NSBundle *)bundle\n                      includeTags:(NSArray<NSString *> *)includeTags\n                      excludeTags:(NSArray<NSString *> *)excludeTags;\n\n\n\n\n\n/**\n Fires the execution of all the previously parsed features in an alphabetic ascending order.\n */\n- (void)beginExecution;\n\n\n\n/**\n Conventient method that calls parserFeaturesInDirectory:fromBundle:includeTags:excludeTags: followed by an immediate call to beginExecution\n \n */\n+ (void)executeFeaturesInDirectory:(NSString *)featuresDirectory fromBundle:(NSBundle *)bundle includeTags:(NSArray *)tags excludeTags:(NSArray *)excludedTags;\n\n\n\n@end\n\n\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Cucumberish.m",
    "content": "//\n//  Cucumberish.m\n//\n//  Created by Ahmed Ali on 03/01/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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 <XCTest/XCTest.h>\n#import <objc/runtime.h>\n\n#import \"Cucumberish.h\"\n#import \"CCIFeature.h\"\n#import \"CCIFeaturesManager.h\"\n#import \"CCIStepsManager.h\"\n#import \"NSString+Formatter.h\"\n#import \"CCIStepDefinition.h\"\n#import \"CCIScenarioDefinition.h\"\n#import \"CCILoggingManager.h\"\n#import \"CCIHock.h\"\n#import \"CCIAroundHock.h\"\n\n#import \"CCIJSONDumper.h\"\n\n\n@interface CCIExeption : NSException @end\n@implementation CCIExeption @end\n\nOBJC_EXTERN void executeScenario(XCTestCase * self, SEL _cmd, CCIScenarioDefinition * scenario, CCIFeature * feature);\nOBJC_EXTERN void executeSteps(XCTestCase * testCase, NSArray * steps, id parentScenario, NSString * filePathPrefix);\nOBJC_EXTERN NSString * stepDefinitionLineForStep(CCIStep * step);\n\n@interface Cucumberish()\n@property (nonatomic, copy) void(^beforeStartHock)(void);\n@property (nonatomic, copy) void(^afterFinishHock)(void);\n\n@property (nonatomic, strong) NSMutableArray<CCIHock *> * beforeHocks;\n@property (nonatomic, strong) NSMutableArray<CCIHock *> * afterHocks;\n@property (nonatomic, strong) NSMutableArray<CCIAroundHock *> * aroundHocks;\n\n@property (nonatomic, copy) NSString* beforeStartFailureReason;\n\n@property (nonatomic, assign) NSInteger scenariosRun;\n@property (nonatomic, assign) NSInteger scenarioCount;\n\n@property (nonatomic, strong) NSBundle * containerBundle;\n\n@end\n@implementation Cucumberish\n\n+ (instancetype)instance {\n    static Cucumberish * instance = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        instance = [[Cucumberish alloc] init];\n    });\n    return instance;\n}\n\n- (instancetype)init\n{\n    self = [super init];\n    self.fixMissingLastScenario = NO;\n    self.featureNamesPrefix = @\"CCI\";\n    self.beforeHocks = [NSMutableArray array];\n    self.afterHocks = [NSMutableArray array];\n    self.aroundHocks = [NSMutableArray array];\n    self.dryRun = NO;\n    self.dryRunLanguage = CCILanguageSwift;\n\n#ifdef SRC_ROOT\n    self.testTargetSrcRoot = SRC_ROOT;\n    //Clean up unwanted /Pods path caused by cocoa pods\n    if([self.testTargetSrcRoot hasSuffix:@\"/Pods\"]){\n        self.testTargetSrcRoot = [self.testTargetSrcRoot stringByReplacingCharactersInRange:NSMakeRange(self.testTargetSrcRoot.length - 5, 5) withString:@\"\"];\n    }\n#endif\n    return self;\n}\n\n\n- (NSArray<CCIFeature *> *)features\n{\n    return [[CCIFeaturesManager instance] features];\n}\n\n- (Cucumberish *)parserFeaturesInDirectory:(NSString *)directory fromBundle:(NSBundle *)bundle includeTags:(NSArray<NSString *> *)includeTags excludeTags:(NSArray<NSString *> *)excludeTags\n{\n    NSArray * featureFiles = [self recursivelyFindFeatureFilesInBundle:bundle subDirectory:directory];\n    self.containerBundle = bundle;\n\n    [[CCIFeaturesManager instance] parseFeatureFiles:featureFiles bundle:bundle withTags:includeTags execludeFeaturesWithTags:excludeTags];\n\n    return self;\n}\n\n-(NSArray *)recursivelyFindFeatureFilesInBundle:(NSBundle *)bundle subDirectory:(NSString *)subdirectory\n{\n    NSMutableArray *matches = [[NSMutableArray alloc]init];\n    NSFileManager *manager = [NSFileManager defaultManager];\n    NSString * basePath = [[bundle bundlePath] stringByAppendingPathComponent:subdirectory];\n    NSArray *contents = [manager contentsOfDirectoryAtPath: basePath error:nil];\n    for (NSString * item in contents)\n    {\n        NSString * fullPath = [basePath stringByAppendingPathComponent:item];\n        if ([[fullPath pathExtension] isEqualToString:@\"feature\"])\n        {\n            [matches addObject:[NSURL fileURLWithPath:fullPath]];\n        }else{\n            BOOL isDir = NO;\n            [manager fileExistsAtPath:fullPath isDirectory:&isDir];\n            if(isDir){\n                //Recursive...\n                NSArray * subFiles = [self recursivelyFindFeatureFilesInBundle:bundle subDirectory:[subdirectory stringByAppendingPathComponent:item]];\n                [matches addObjectsFromArray:subFiles];\n            }\n        }\n    }\n\n    return matches;\n}\n\n+ (void)executeFeaturesInDirectory:(NSString *)featuresDirectory fromBundle:(NSBundle *)bundle includeTags:(NSArray *)tags excludeTags:(NSArray *)excludedTags\n{\n    [[[Cucumberish instance] parserFeaturesInDirectory:featuresDirectory\n                                            fromBundle:bundle\n                                           includeTags:tags\n                                           excludeTags:excludedTags] beginExecution];\n}\n\n- (void)beginExecution\n{\n\n    for(CCIFeature * feature in [[CCIFeaturesManager instance] features]){\n        Class featureClass = [Cucumberish featureTestCaseClass:feature];\n        [[CCIFeaturesManager instance] setClass:featureClass forFeature:feature];\n        [Cucumberish swizzleTestInvocationsImplementationForClass:featureClass];\n        [Cucumberish swizzleFailureRecordingImplementationForClass:featureClass];\n        [Cucumberish swizzleTestCaseWithSelectorImplementationForClass:featureClass];\n    }\n}\n\n#pragma mark - Deprecated\n- (Cucumberish *)parserFeaturesInDirectory:(NSString *)featuresDirectory includeTags:(NSArray<NSString *> *)tags excludeTags:(NSArray<NSString *> *)excludedTags\n{\n    [self parserFeaturesInDirectory:featuresDirectory\n                         fromBundle:[NSBundle bundleForClass:[Cucumberish class]]\n                        includeTags:tags\n                        excludeTags:excludedTags];\n    return self;\n}\n\n+ (void)executeFeaturesInDirectory:(NSString *)featuresDirectory includeTags:(NSArray *)tags excludeTags:(NSArray *)excludedTags\n{\n    [[[Cucumberish instance] parserFeaturesInDirectory:featuresDirectory\n                                           includeTags:tags\n                                           excludeTags:excludedTags] beginExecution];\n}\n\n#pragma mark - Manage hocks\n/**\n Adds an after hock to the after hocks chain in LIFO order.\n @param hock the after hock to be registerd\n */\n- (void)addAfterHock:(CCIHock *)hock\n{\n    [self.afterHocks insertObject:hock atIndex:0];\n}\n/**\n Adds a before hock to the before hocks chain in FIFO order.\n @param hock the before hock to be registerd\n */\n- (void)addBeforeHock:(CCIHock *)hock\n{\n    [self.beforeHocks addObject:hock];\n}\n\n/**\n Adds an around hock to the around hocks chain in FIFO order.\n @param hock the before hock to be registerd\n */\n- (void)addAroundHock:(CCIAroundHock *)hock\n{\n    [self.aroundHocks addObject:hock];\n}\n\n/**\n Executes all the hocks that matches tags with the passed scenario.\n Hocks may optionally be tagged, if an hock is tagged, then it will only be executed if the scenario has a matching tag.\n\n @param hocks array of CCIHock to be executed\n @param scenario the scenario that will be passed to each matching hocks.\n */\n\n- (void)executeMatchingHocksInHocks:(NSArray<CCIHock *> *)hocks forScenario:(CCIScenarioDefinition *)scenario\n{\n    for(CCIHock * hock in hocks){\n        if(hock.tags.count > 0){\n            if(scenario.tags.count > 0){\n                for (NSString * tag in scenario.tags) {\n                    if([hock.tags containsObject:tag]){\n                        hock.block(scenario);\n                        break;\n                    }\n                }\n            }\n        }else{\n            hock.block(scenario);\n        }\n    }\n}\n\n\n/**\n Executes all the before hocks that matches tags with the passed scenario.\n Hocks may optionally be tagged, if an hock is tagged, then it will only be executed if the scenario has a matching tag.\n\n @param scenario the scenario that will be passed to each matching hocks.\n */\n- (void)executeBeforeHocksWithScenario:(CCIScenarioDefinition *)scenario\n{\n    [self executeMatchingHocksInHocks:self.beforeHocks forScenario:scenario];\n}\n\n/**\n Executes all the after hocks that matches tags with the passed scenario.\n Hocks may optionally be tagged, if an hock is tagged, then it will only be executed if the scenario has a matching tag.\n\n @param scenario the scenario that will be passed to each matching hocks.\n */\n- (void)executeAfterHocksWithScenario:(CCIScenarioDefinition *)scenario\n{\n    [self executeMatchingHocksInHocks:self.afterHocks forScenario:scenario];\n}\n\n/**\n Executes all the around hocks that matches tags with the passed scenario.\n Hocks may optionally be tagged, if an hock is tagged, then it will only be executed if the scenario has a matching tag.\n\n @param scenario the scenario that will be passed to each matching hocks.\n @param executionBlock a block that when called, will execute the scenario. Around hocks are supposed to determine when this block will be executed.\n */\n- (void)executeAroundHocksWithScenario:(CCIScenarioDefinition *)scenario executionBlock:(void(^)(void))executionBlock\n{\n\n    void(^executionChain)(void) = NULL;\n\n    for (CCIAroundHock *around in self.aroundHocks) {\n        if (!around.tags) {\n            if (executionChain == NULL) {\n                executionChain = ^{\n                    around.block(scenario, executionBlock);\n                };\n            } else {\n                executionChain = ^{\n                    around.block(scenario, executionChain);\n                };\n            }\n        } else {\n            for (NSString *tag in scenario.tags) {\n                if ([around.tags containsObject:tag]) {\n                    if (executionChain == NULL) {\n                        executionChain = ^{\n                            around.block(scenario, executionBlock);\n                        };\n                    } else {\n                        executionChain = ^{\n                            around.block(scenario, executionChain);\n                        };\n                    }\n                }\n            }\n        }\n    }\n\n\n    if (![Cucumberish instance].dryRun && executionChain != NULL) {\n        executionChain();\n    } else {\n        executionBlock();\n    }\n}\n\n\n#pragma mark - Runtime hacks\n\n+ (void)swizzleOrignalSelector:(SEL)originalSelector swizzledSelector:(SEL)swizzledSelector originalClass:(Class)originalClass targetClass:(Class)targetClass classMethod:(BOOL)classMethod\n{\n    Class class = classMethod ? object_getClass((id)originalClass) : originalClass;\n    Method originalMethod = nil;\n    if(classMethod){\n        originalMethod = class_getClassMethod(class, originalSelector);\n    }else{\n        originalMethod = class_getInstanceMethod(class, originalSelector);\n    }\n    Method swizzledMethod = class_getClassMethod(targetClass, swizzledSelector);\n    BOOL didAddMethod =\n    class_addMethod(class,\n                    originalSelector,\n                    method_getImplementation(swizzledMethod),\n                    method_getTypeEncoding(swizzledMethod));\n\n    if (didAddMethod) {\n        class_replaceMethod(class,\n                            swizzledSelector,\n                            method_getImplementation(originalMethod),\n                            method_getTypeEncoding(originalMethod));\n    } else {\n        method_exchangeImplementations(originalMethod, swizzledMethod);\n    }\n}\n\n\n+ (void)swizzleFailureRecordingImplementationForClass:(Class)class\n{\n    SEL originalSelector = @selector(recordFailureWithDescription:inFile:atLine:expected:);\n    SEL swizzledSelector = @selector(cucumberish_recordFailureWithDescription:inFile:atLine:expected:);\n    [Cucumberish swizzleOrignalSelector:originalSelector swizzledSelector:swizzledSelector originalClass:class targetClass:[Cucumberish class] classMethod:NO];\n}\n\n\n\n+ (void)swizzleTestInvocationsImplementationForClass:(Class)class\n{\n    SEL originalSelector = @selector(testInvocations);\n    SEL swizzledSelector = @selector(cucumberish_testInvocations);\n    [Cucumberish swizzleOrignalSelector:originalSelector swizzledSelector:swizzledSelector originalClass:class targetClass:[Cucumberish class] classMethod:YES];\n}\n+ (void)swizzleTestCaseWithSelectorImplementationForClass:(Class)class\n{\n    //cucumberish_testCaseWithSelector\n    SEL originalSelector = @selector(testCaseWithSelector:);\n    SEL swizzledSelector = @selector(cucumberish_testCaseWithSelector:);\n    [Cucumberish swizzleOrignalSelector:originalSelector swizzledSelector:swizzledSelector originalClass:class targetClass:[Cucumberish class] classMethod:YES];\n}\n\n+ (NSString *)exampleScenarioNameForScenarioName:(NSString *)scenarioName exampleAtIndex:(NSInteger)index example:(CCIExample*)example\n{\n  NSMutableArray * nameExpansion = [NSMutableArray array];\n  for(NSString * variable in example.exampleData.allKeys){\n    NSString * replacement = example.exampleData[variable][index];\n    [nameExpansion addObject:replacement];\n  }\n\n    return [scenarioName stringByAppendingFormat:@\" %@ Example %lu\", [nameExpansion componentsJoinedByString:@\"-\"], (unsigned long)(index + 1)];\n}\n\n+ (NSInvocation *)invocationForScenarioOutline:(CCIScenarioDefinition *)outline example:(CCIExample*)example exampleIndex:(NSInteger)index feature:(CCIFeature *)feature featureClass:(Class)featureClass\n{\n    //Scenario for each body\n    CCIScenarioDefinition * scenario = [outline copy];\n\n    scenario.keyword = (NSString *)kScenarioOutlineKeyword;\n    scenario.examples = nil;\n    scenario.name = [self exampleScenarioNameForScenarioName:scenario.name exampleAtIndex:index example:example];\n\n    for(NSString * variable in example.exampleData.allKeys){\n        NSString * replacement = example.exampleData[variable][index];\n\n        //now loop on each step in the scenario to replace the place holders with their values\n        for(CCIStep * step in scenario.steps){\n            NSString * placeHolder = [NSString stringWithFormat:@\"<%@>\", variable];\n            step.text = [step.text stringByReplacingOccurrencesOfString:placeHolder withString:replacement];\n            if (step.argument.rows) {\n                NSMutableArray *modifiedRows = [NSMutableArray arrayWithCapacity:step.argument.rows.count];\n                for (NSArray *row in step.argument.rows) {\n                    NSMutableArray *array = [row mutableCopy];\n                    [row enumerateObjectsUsingBlock:^(NSString *value, NSUInteger idx, BOOL * _Nonnull stop) {\n                        if ([value isEqualToString:placeHolder]){\n                            array[idx] = replacement;\n                        }\n                    }];\n                    [modifiedRows addObject:array];\n                }\n                step.argument.rows = modifiedRows;\n            }\n        }\n    }\n\n    [outline addOutlineChildScenario:scenario];\n\n    return [self invocationForScenario:scenario feature:feature featureClass:featureClass];\n}\n\n+ (NSArray<NSInvocation *> *)invocationsForScenarioOutline:(CCIScenarioDefinition *)outline feature:(CCIFeature *)feature featureClass:(Class)featureClass\n{\n    NSMutableArray<NSInvocation *> * invocations = [NSMutableArray new];\n    for(CCIExample * example in outline.examples){\n\n        //Loop on the example bod(y|ies)\n        NSUInteger numberOfIndexes = [(NSArray *)example.exampleData[example.exampleData.allKeys.firstObject] count];\n        for(int index = 0; index < numberOfIndexes; index++){\n            [Cucumberish instance].scenarioCount++;\n            NSInvocation * inv = [self invocationForScenarioOutline:outline example:example exampleIndex:index  feature:feature featureClass:featureClass];\n\n            [invocations addObject:inv];\n        }\n    }\n\n    return invocations;\n}\n\n+ (Class)featureTestCaseClass:(CCIFeature *)feature\n{\n    //Prefix it with CCI to avoit any name collision\n    //Prefix it with CCI to avoit any name collision\n    NSString * className = [[[Cucumberish instance] featureNamesPrefix] stringByAppendingString:feature.name];\n    if(![[Cucumberish instance] prettyNamesAllowed] && ![[Cucumberish instance] prettyFeatureNamesAllowed]){\n        className = [className camleCaseStringWithFirstUppercaseCharacter:YES];\n    }\n    Class featureClass = objc_allocateClassPair([XCTestCase class], [className UTF8String], 0);\n    if(featureClass == nil){\n        featureClass = NSClassFromString(className);\n        NSUInteger availableClassesWithTheSameName = 1;\n        while (featureClass == nil) {\n            className = [className stringByAppendingFormat:@\"%lu\", (long unsigned)availableClassesWithTheSameName];\n            featureClass = objc_allocateClassPair([XCTestCase class], [className UTF8String], 0);\n        }\n    }\n    objc_registerClassPair(featureClass);\n    return featureClass;\n}\n\n+ (NSInvocation *)invocationForScenario:(CCIScenarioDefinition *)scenario feature:(CCIFeature *)feature featureClass:(Class)klass\n{\n    NSString * methodName = scenario.name;\n\n    if(![[Cucumberish instance] prettyNamesAllowed] && ![[Cucumberish instance] prettyScenarioNamesAllowed]){\n        methodName = [methodName camleCaseStringWithFirstUppercaseCharacter:NO];\n    }\n    SEL sel = NSSelectorFromString(methodName);\n\n    //Prefered to forward the implementation to a C function instead of Objective-C method, to avoid confusion with the type of \"self\" object that is being to the implementation\n    class_addMethod(klass, sel, (IMP)executeScenario, [@\"v@:@:@\" UTF8String]);\n\n    NSMethodSignature *signature = [klass instanceMethodSignatureForSelector:sel];\n\n    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];\n\n    [invocation setSelector:sel];\n\n\n    [invocation setArgument:&scenario atIndex:2];\n    [invocation setArgument:&feature atIndex:3];\n    [invocation retainArguments];\n    return invocation;\n}\n\n\n#pragma mark - Swizzled methods\n\n\n+ (nullable XCTestCase *)cucumberish_testCaseWithSelector:(SEL)selector\n{\n    CCIFeature * feature = [[CCIFeaturesManager instance] getFeatureForClass:[self class]];\n    XCTestCase * invocationTest;\n\n    for(CCIScenarioDefinition * s in feature.scenarioDefinitions){\n        NSString * scenarioName = NSStringFromSelector(selector);\n        if ([s.name isEqualToString:scenarioName]){\n            [Cucumberish instance].scenarioCount++;\n            NSInvocation * inv = [Cucumberish invocationForScenario:s feature:feature featureClass:[self class]];\n            invocationTest =  [[self alloc] initWithInvocation:inv];\n            break;\n        }else if([s.keyword isEqualToString:(NSString *)kScenarioOutlineKeyword]){\n          NSRange range = [scenarioName rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet] options:NSBackwardsSearch];\n            NSInteger exampleIndex = [[scenarioName substringWithRange:range] integerValue] - 1;\n            NSString * scenarioOutlineName = [Cucumberish exampleScenarioNameForScenarioName:s.name exampleAtIndex:exampleIndex example:s.examples.firstObject];\n            if([scenarioName isEqualToString:scenarioOutlineName]){\n                CCIExample * example = s.examples.firstObject;\n                NSInvocation * inv = [Cucumberish invocationForScenarioOutline:s example:example exampleIndex:exampleIndex feature:feature featureClass:[self class]];\n                invocationTest =  [[self alloc] initWithInvocation:inv];\n                break;\n            }\n        }\n    }\n    return invocationTest;\n}\n\n/**\n Swizzled method, inside its implementation @b self does not refer to Cucumberish class.\n Records a failure in the execution of the test and is used by all test assertions.\n\n @param description The description of the failure being reported.\n\n @param filePath The file path to the source file where the failure being reported was encountered.\n @param lineNumber The line number in the source file at filePath where the failure being reported was encountered.\n\n @param expected YES if the failure being reported was the result of a failed assertion, NO if it was the result of an uncaught exception.\n */\n\n+ (void)cucumberish_recordFailureWithDescription:(NSString *)description inFile:(NSString *)filePath atLine:(NSUInteger)lineNumber expected:(BOOL)expected\n{\n    //If exception already thrown and handled by executeSteps function, then report it immediately.\n    if([filePath hasSuffix:@\".feature\"]){\n        [self cucumberish_recordFailureWithDescription:description inFile:filePath atLine:lineNumber expected:expected];\n    }else{\n        //Throw the exception so proper error report takes place.\n        throwCucumberishException(description);\n    }\n\n}\n\n+ (NSArray <NSInvocation *> *)cucumberish_testInvocations\n{\n    NSMutableArray<NSInvocation *> * invocations = [NSMutableArray new];\n\n    CCIFeature * feature = [[CCIFeaturesManager instance] getFeatureForClass:self];\n\n    for (CCIScenarioDefinition * scenario in feature.scenarioDefinitions) {\n\n        if([scenario.keyword isEqualToString:(NSString *)kScenarioOutlineKeyword]){\n\n            NSArray<NSInvocation *> * invs = [Cucumberish invocationsForScenarioOutline:scenario feature:feature featureClass:self];\n            [invocations addObjectsFromArray:invs];\n        }else{\n            if([scenario.keyword isEqualToString:(NSString *)kBackgroundKeyword]){\n                //Do not add a scenario for a background steps\n                feature.background = (CCIBackground *)scenario;\n                continue;\n            }\n            [Cucumberish instance].scenarioCount++;\n            [invocations addObject:[Cucumberish invocationForScenario:scenario feature:feature featureClass:self]];\n        }\n\n    }\n\n    CCIFeature * lastFeature = [CCIFeaturesManager instance].features.lastObject;\n    if([Cucumberish instance].fixMissingLastScenario && feature == lastFeature){\n        CCIScenarioDefinition * cleanupScenario = [[CCIScenarioDefinition alloc] init];\n        cleanupScenario.name = @\"cucumberishCleanupScenario\";\n        [Cucumberish instance].scenarioCount++;\n        [invocations addObject:[Cucumberish invocationForScenario:cleanupScenario feature:lastFeature featureClass:self]];\n    }\n\n\n    return invocations;\n}\n\n\n@end\n\n\n#pragma mark - C Functions\n\nvoid executeDryRun(XCTestCase * self, NSArray <CCIStep *> * steps)\n{\n    for (CCIStep *step in steps) {\n        if (![[CCIStepsManager instance] executeStepInDryRun:step inTestCase:self]) {\n            NSSet *objects = [[CCIStepsManager instance].undefinedSteps objectsPassingTest:^BOOL(CCIStep * _Nonnull obj, BOOL * _Nonnull stop) {\n                return [step.text isEqualToString:obj.text];\n            }];\n            if (objects.count == 0) {\n                [[CCIStepsManager instance].undefinedSteps addObject:step];\n            }\n        }\n    }\n}\n\nvoid executeScenario(XCTestCase * self, SEL _cmd, CCIScenarioDefinition * scenario, CCIFeature * feature)\n{\n    self.continueAfterFailure = YES;\n\n    NSString * targetName = [[Cucumberish instance] testTargetFolderName] ? : [[[Cucumberish instance] containerBundle] infoDictionary][@\"CFBundleName\"];\n    NSString * filePathPrefix = [NSString stringWithFormat:@\"%@/%@\", [Cucumberish instance].testTargetSrcRoot, targetName];\n\n    @try {\n\n        if ([Cucumberish instance].scenariosRun == 0) {\n\n            NSString * resultsDirectory = [Cucumberish instance].resultsDirectory;\n            NSFileManager *fileManager= [NSFileManager defaultManager];\n            NSError *error = nil;\n\n            if([resultsDirectory length] > 0 && ![fileManager createDirectoryAtPath:resultsDirectory withIntermediateDirectories:YES attributes:nil error:&error]) {\n                // An error has occurred, do something to handle it\n                NSString * errorMsg = [NSString stringWithFormat:@\"Failed to create directory \\\"%@\\\". Error: %@\", resultsDirectory, error];\n                [Cucumberish instance].beforeStartFailureReason = errorMsg;\n            }\n\n        }\n        if(![Cucumberish instance].dryRun && [Cucumberish instance].scenariosRun == 0 && [Cucumberish instance].beforeStartHock){\n            [Cucumberish instance].beforeStartHock();\n        }\n    }\n    @catch (CCIExeption *exception) {\n        // This catches assert failures in before start hook\n        [Cucumberish instance].beforeStartFailureReason = exception.reason;\n    }\n\n    if([Cucumberish instance].beforeStartFailureReason){\n        // If we failed our before start we should auto-fail all scenarios\n        NSString * reason = [Cucumberish instance].beforeStartFailureReason;\n        NSString * filePath = [NSString stringWithFormat:@\"%@%@\", filePathPrefix, scenario.location.filePath];\n        [self recordFailureWithDescription:reason inFile:filePath atLine:scenario.location.line expected:YES];\n        scenario.success = NO;\n        scenario.failureReason = reason;\n        [Cucumberish instance].scenariosRun++;\n        return;\n    }\n\n    @try {\n        if (![Cucumberish instance].dryRun) {\n            [[Cucumberish instance] executeBeforeHocksWithScenario:scenario];\n        }\n        if (feature.background != nil && scenario.steps.count > 0) {\n            if ([Cucumberish instance].dryRun) {\n                executeDryRun(self, feature.background.steps);\n            } else {\n                executeSteps(self, feature.background.steps, feature.background, filePathPrefix);\n            }\n\n        }\n\n        [[Cucumberish instance] executeAroundHocksWithScenario:scenario executionBlock:^{\n            if ([Cucumberish instance].dryRun) {\n                executeDryRun(self, scenario.steps);\n            } else {\n                executeSteps(self, scenario.steps, scenario, filePathPrefix);\n            }\n        }];\n        if (![Cucumberish instance].dryRun) {\n            [[Cucumberish instance] executeAfterHocksWithScenario:scenario];\n        }\n    }\n    @catch (CCIExeption *exception) {\n        // This catches assert failures in scenario before/around/after hooks\n        NSString * filePath = [NSString stringWithFormat:@\"%@%@\", filePathPrefix, scenario.location.filePath];\n        [self recordFailureWithDescription:exception.reason inFile:filePath atLine:scenario.location.line expected:YES];\n        scenario.success = NO;\n        scenario.failureReason = exception.reason;\n    }\n\n    [Cucumberish instance].scenariosRun++;\n\n    if ([Cucumberish instance].scenariosRun == [Cucumberish instance].scenarioCount) {\n\n        // Print dry run result\n        if ([CCIStepsManager instance].undefinedSteps.count > 0) {\n            NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@\"fullName\" ascending:YES];\n            NSArray *sortedUndefinedSteps = [[CCIStepsManager instance].undefinedSteps sortedArrayUsingDescriptors:@[sort]];\n\n            NSMutableString *dryRunResult = [@\"\\n\\nDry Run Results\" mutableCopy];\n            [dryRunResult appendFormat:@\"\\n=====================================================\"];\n\n            [dryRunResult appendFormat:@\"\\nFound the following undefined steps:\\n\\n\"];\n            for (CCIStep *step in sortedUndefinedSteps) {\n                if ([Cucumberish instance].dryRunLanguage == CCILanguageSwift) {\n                    NSString *keyword = step.keyword;\n                    if ([keyword isEqualToString:@\"And\"]) {\n                        keyword = step.contextualKeyword;\n                    }\n                    [dryRunResult appendFormat:@\"%@(\\\"^%@$\\\") { (args, userInfo) in\\n\\n}\\n\\n\", keyword, step.text];\n                } else if ([Cucumberish instance].dryRunLanguage == CCILanguageObjectiveC) {\n                    [dryRunResult appendFormat:@\"%@(@\\\"^%@$\\\", ^(NSArray<NSString *> *args, NSDictionary *userInfo) {\\n\\n});\\n\\n\", step.keyword, step.text];\n                }\n            }\n\n            [dryRunResult appendFormat:@\"=====================================================\\n\\n\"];\n\n            CCILog(@\"%@\", dryRunResult);\n        }\n\n        NSString * resultsDir = [Cucumberish instance].resultsDirectory;\n        NSString * fileName = [NSString stringWithFormat:@\"CucumberishTestResults-%@\",targetName];\n\n        if ([resultsDir length] == 0) {\n            [CCIJSONDumper writeJSONToFile: fileName\n                       forFeatures: [[CCIFeaturesManager instance] features]];\n        }\n        else {\n            [CCIJSONDumper writeJSONToFile:fileName\n                        inDirectory:resultsDir\n                        forFeatures: [[CCIFeaturesManager instance] features]];\n\n        }\n\n \t\tif(![Cucumberish instance].dryRun && [Cucumberish instance].afterFinishHock){\n        \t[Cucumberish instance].afterFinishHock();\n    \t}\n\t}\n}\n\nvoid executeSteps(XCTestCase * testCase, NSArray * steps, id parentScenario, NSString * filePathPrefix)\n{\n    for (CCIStep * step in steps) {\n\n        @try {\n            [[CCIStepsManager instance] executeStep:step inTestCase:testCase];\n        }\n        @catch (CCIExeption *exception) {\n            NSString * filePath = [NSString stringWithFormat:@\"%@%@\", filePathPrefix, step.location.filePath];\n            [testCase recordFailureWithDescription:exception.reason inFile:filePath atLine:step.location.line expected:YES];\n            if([parentScenario isKindOfClass:[CCIScenarioDefinition class]]){\n                CCIScenarioDefinition * scenario = (CCIScenarioDefinition *)parentScenario;\n                if(step.keyword.length > 0){\n                    NSLog(@\"Step: \\\"%@ %@\\\" failed\", step.keyword, step.text);\n                }\n                step.status = CCIStepStatusFailed;\n                scenario.success = NO;\n                scenario.failureReason = exception.reason;\n            }\n            break;\n        }\n    }\n}\n\n\nvoid CCIAssert(BOOL expression, NSString * failureMessage, ...)\n{\n    if(!expression){\n        va_list args;\n        va_start(args, failureMessage);\n        NSString *description = [[NSString alloc] initWithFormat:failureMessage arguments:args];\n        va_end(args);\n        throwCucumberishException(description);\n    }\n}\n\nvoid CCISAssert(BOOL expression, NSString * failureMessage)\n{\n    CCIAssert(expression, failureMessage);\n}\n\nvoid throwCucumberishException(NSString *reason, ...)\n{\n    va_list args;\n    va_start(args, reason);\n    NSString *description = [[NSString alloc] initWithFormat:reason arguments:args];\n    va_end(args);\n    [[CCIExeption exceptionWithName:@\"CCIException\" reason:description userInfo:nil] raise];\n}\n\nvoid SThrowCucumberishException(NSString * reason)\n{\n    throwCucumberishException(reason);\n}\n#pragma mark - Hooks\nvoid beforeStart(void(^beforeStartBlock)(void))\n{\n    [Cucumberish instance].beforeStartHock = beforeStartBlock;\n}\n\nvoid afterFinish(void(^afterFinishBlock)(void))\n{\n    [Cucumberish instance].afterFinishHock = afterFinishBlock;\n}\n\nvoid before(CCIScenarioHockBlock beforeEachBlock)\n{\n    [[Cucumberish instance] addBeforeHock:[CCIHock hockWithTags:nil block:beforeEachBlock]];\n}\n\nvoid after(CCIScenarioHockBlock afterEachBlock)\n{\n    [[Cucumberish instance] addAfterHock:[CCIHock hockWithTags:nil block:afterEachBlock]];\n}\n\nvoid beforeTagged(NSArray * tags, CCIScenarioHockBlock beforeTaggedBlock)\n{\n    [[Cucumberish instance] addBeforeHock:[CCIHock hockWithTags:tags block:beforeTaggedBlock]];\n}\n\nvoid afterTagged(NSArray * tags, CCIScenarioHockBlock afterTaggedBlock)\n{\n    [[Cucumberish instance] addAfterHock:[CCIHock hockWithTags:tags block:afterTaggedBlock]];\n}\n\nvoid around(CCIScenarioExecutionHockBlock aroundScenarioBlock)\n{\n    [[Cucumberish instance] addAroundHock:[CCIAroundHock hockWithTags:nil block:aroundScenarioBlock]];\n}\n\nvoid aroundTagged(NSArray * tags, CCIScenarioExecutionHockBlock aroundScenarioBlock)\n{\n    [[Cucumberish instance] addAroundHock:[CCIAroundHock hockWithTags:tags block:aroundScenarioBlock]];\n}\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHAstBuilder.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n#import \"GHAstNode.h\"\r\n#import \"GHParser.h\"\r\n\r\n@class GHToken;\r\n\r\n@interface GHAstBuilder<GHAstBuilderProtocol> : NSObject\r\n\r\n- (id)init;\r\n- (void)reset;\r\n- (void)buildWithToken:(GHToken *)theToken;\r\n- (void)startRuleWithType:(GHRuleType)theRuleType;\r\n- (void)endRuleWithType:(GHRuleType)theRuleType;\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHAstBuilder.m",
    "content": "﻿#import \"GHAstBuilder.h\"\r\n\r\n#import \"GHTag.h\"\r\n#import \"GHToken.h\"\r\n#import \"GHComment.h\"\r\n#import \"GHTableRow.h\"\r\n#import \"GHStep.h\"\r\n#import \"GHDataTable.h\"\r\n#import \"GHDocString.h\"\r\n#import \"GHBackground.h\"\r\n#import \"GHScenario.h\"\r\n#import \"GHScenarioOutline.h\"\r\n#import \"GHExamples.h\"\r\n#import \"GHGherkinDialect.h\"\r\n#import \"GHFeature.h\"\r\n#import \"GHLocation.h\"\r\n#import \"GHGherkinLanguageConstants.h\"\r\n#import \"GHTableCell.h\"\r\n#import \"GHGherkinLineSpan.h\"\r\n\r\n#import \"GHParser.h\"\r\n\r\n@interface GHAstBuilder ()\r\n\r\n+ (NSString *)descriptionForScenarioDefinitionNode:(GHAstNode *)theScenarioDefinitionNode;\r\n+ (NSArray<GHStep *> *)stepsWithScenarioDefinitionNode:(GHAstNode *)theScenarioDefinitionNode;\r\n- (NSArray<GHTableCell *> *)cellsWithToken:(GHToken *)theTableRowToken;\r\n- (NSArray<GHTableRow *> *)tableRowsForNode:(GHAstNode *)theNode;\r\n- (NSArray<GHTag *> *)tagsForNode:(GHAstNode *)theNode;\r\n- (GHLocation *)locationForToken:(GHToken *)theToken column:(NSUInteger)column;\r\n- (GHLocation *)locationForToken:(GHToken *)theToken;\r\n\r\n@end\r\n\r\n@implementation GHAstBuilder\r\n{\r\n    NSMutableArray<GHAstNode *> * stack;\r\n    NSMutableArray<GHComment *> * comments;\r\n}\r\n\r\n- (id)init\r\n{\r\n    if (self = [super init])\r\n    {\r\n        [self reset];\r\n    }\r\n\r\n    return self;\r\n}\r\n\r\n- (void)reset\r\n{\r\n    stack = [[NSMutableArray alloc] init];\r\n    [stack addObject: [[GHAstNode alloc] initWithRuleType: GHRuleTypeNone]];\r\n    comments = [[NSMutableArray alloc] init];\r\n}\r\n\r\n- (void)buildWithToken:(GHToken *)theToken\r\n{\r\n    if ([theToken matchedType] == GHTokenTypeComment)\r\n    {\r\n        [comments addObject: [[GHComment alloc] initWithLocation: [theToken location] text: [theToken matchedText]]];\r\n    }\r\n    else\r\n    {\r\n        [[stack lastObject] addObject: theToken withRuleType: (GHRuleType)[theToken matchedType]];\r\n    }\r\n}\r\n\r\n- (void)startRuleWithType:(GHRuleType)theRuleType\r\n{\r\n    [stack addObject: [[GHAstNode alloc] initWithRuleType: theRuleType]];\r\n}\r\n\r\n- (void)endRuleWithType:(GHRuleType)theRuleType\r\n{\r\n    GHAstNode * node = [stack lastObject];\r\n    [stack removeLastObject];\r\n    id transformedNode = [self transformNode: node];\r\n\r\n    [[stack lastObject] addObject: transformedNode withRuleType: [node ruleType]];\r\n}\r\n\r\n- (id)result\r\n{\r\n    return [[stack lastObject] singleWithRuleType: GHRuleTypeFeature];\r\n}\r\n\r\n- (id)transformNode:(GHAstNode *)theNode\r\n{\r\n    switch ([theNode ruleType])\r\n    {\r\n        case GHRuleTypeStep:\r\n        {\r\n            GHToken * stepLine = [theNode tokenWithType: GHTokenTypeStepLine];\r\n            GHStepArgument * dataTableStepArgument = [theNode singleWithRuleType: GHRuleTypeDataTable];\r\n            GHStepArgument * stepArg = nil;\r\n            if (dataTableStepArgument)\r\n                stepArg = dataTableStepArgument;\r\n            else\r\n                stepArg = [theNode singleWithRuleType: GHRuleTypeDocString];\r\n\r\n            return [[GHStep alloc] initWithLocation: [stepLine location] keyword: [stepLine matchedKeyword] text: [stepLine matchedText] stepArgument:stepArg];\r\n        }\r\n        case GHRuleTypeDocString:\r\n        {\r\n            GHToken * separatorToken = [[theNode tokensWithType: GHTokenTypeDocStringSeparator] firstObject];\r\n            NSString * contentType = [[separatorToken matchedText] length] == 0 ? nil : [separatorToken matchedText];\r\n            NSArray<GHToken *> * lineTokens = [theNode tokensWithType: GHTokenTypeOther];\r\n\r\n            NSString * content = [[lineTokens valueForKey: @\"matchedText\"] componentsJoinedByString: @\"\\n\"];\r\n\r\n            return [[GHDocString alloc] initWithLocation: [separatorToken location] contentType: contentType content: content];\r\n        }\r\n        case GHRuleTypeDataTable:\r\n        {\r\n            NSArray<GHTableRow *> * rows = [self tableRowsForNode: theNode];\r\n\r\n            return [[GHDataTable alloc] initWithTableRows: rows];\r\n        }\r\n        case GHRuleTypeBackground:\r\n        {\r\n            GHToken * backgroundLine = [theNode tokenWithType: GHTokenTypeBackgroundLine];\r\n            NSString * description = [GHAstBuilder descriptionForScenarioDefinitionNode: theNode];\r\n            NSArray<GHStep *> * steps = [GHAstBuilder stepsWithScenarioDefinitionNode: theNode];\r\n\r\n            return [[GHBackground alloc] initWithLocation: [backgroundLine location] keyword: [backgroundLine matchedKeyword] name: [backgroundLine matchedText] description: description steps: steps];\r\n        }\r\n        case GHRuleTypeScenario_Definition:\r\n        {\r\n            NSArray<GHTag *> * tags = [self tagsForNode: theNode];\r\n\r\n            id scenarioNode = [theNode singleWithRuleType: GHRuleTypeScenario];\r\n            if (scenarioNode != nil)\r\n            {\r\n                GHToken * scenarioLine = [scenarioNode tokenWithType: GHTokenTypeScenarioLine];\r\n\r\n                NSString * description = [GHAstBuilder descriptionForScenarioDefinitionNode: scenarioNode];\r\n                NSArray<GHStep *> * steps = [GHAstBuilder stepsWithScenarioDefinitionNode: scenarioNode];\r\n\r\n                return [[GHScenario alloc] initWithTags: tags location: [scenarioLine location] keyword: [scenarioLine matchedKeyword] name: [scenarioLine matchedText] description: description steps: steps];\r\n            }\r\n            else\r\n            {\r\n                id scenarioOutlineNode = [theNode singleWithRuleType: GHRuleTypeScenarioOutline];\r\n                if (scenarioOutlineNode == nil)\r\n                    @throw [NSException exceptionWithName: NSParseErrorException reason: @\"Internal gramar error\" userInfo: nil];\r\n\r\n                GHToken * scenarioOutlineLine = [scenarioOutlineNode tokenWithType: GHTokenTypeScenarioOutlineLine];\r\n\r\n                NSString * description = [GHAstBuilder descriptionForScenarioDefinitionNode: scenarioOutlineNode];\r\n                NSArray<GHStep *> * steps = [GHAstBuilder stepsWithScenarioDefinitionNode: scenarioOutlineNode];\r\n                NSArray<GHExamples *> * examples = (NSArray<GHExamples *> *)[scenarioOutlineNode itemsWithRuleType: GHRuleTypeExamples_Definition];\r\n\r\n                return [[GHScenarioOutline alloc] initWithTags: tags location: [scenarioOutlineLine location] keyword: [scenarioOutlineLine matchedKeyword] name: [scenarioOutlineLine matchedText] description: description steps: steps examples: examples];\r\n            }\r\n        }\r\n        case GHRuleTypeExamples_Definition:\r\n        {\r\n            NSArray<GHTag *> * tags = [self tagsForNode: theNode];\r\n            id examplesNode = [theNode singleWithRuleType: GHRuleTypeExamples];\r\n\r\n            GHToken * examplesLine = [examplesNode tokenWithType: GHTokenTypeExamplesLine];\r\n            NSString * description = [GHAstBuilder descriptionForScenarioDefinitionNode: examplesNode];\r\n\r\n            NSArray<GHTableRow *> * allRows = [examplesNode singleWithRuleType: GHRuleTypeExamples_Table];\r\n\r\n            GHTableRow * header = nil;\r\n            NSArray<GHTableRow *> * rows = nil;\r\n            if (allRows)\r\n            {\r\n                header = [allRows firstObject];\r\n                NSMutableArray<GHTableRow *> * allRowsBuffer = [allRows mutableCopy];\r\n                [allRowsBuffer removeObject: header];\r\n                rows = [[NSArray<GHTableRow *> alloc] initWithArray: allRowsBuffer];\r\n            }\r\n\r\n            return [[GHExamples alloc] initWithTags: tags location: [examplesLine location] keyword: [examplesLine matchedKeyword] name: [examplesLine matchedText] description: description header: header body: rows];\r\n        }\r\n        case GHRuleTypeExamples_Table:\r\n        {\r\n            NSArray<GHTableRow *> * allRows = [self tableRowsForNode: theNode];\r\n\r\n            return allRows;\r\n        }\r\n        case GHRuleTypeDescription:\r\n        {\r\n            NSArray<GHToken *> * lineTokens = (NSArray<GHToken *> *)[theNode tokensWithType: GHTokenTypeOther];\r\n\r\n            NSMutableArray<GHToken *> * lineTokensBuffer = [lineTokens mutableCopy];\r\n            NSEnumerator * reverseObjectEnumerator = [lineTokens reverseObjectEnumerator];\r\n            for (GHToken * lineToken in reverseObjectEnumerator)\r\n            {\r\n                if (![[[lineToken matchedText] stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]] length])\r\n                    [lineTokensBuffer removeObject: lineToken];\r\n                else\r\n                    break;\r\n            }\r\n            return [[lineTokensBuffer valueForKey: @\"matchedText\"] componentsJoinedByString: @\"\\n\"];\r\n        }\r\n        case GHRuleTypeFeature:\r\n        {\r\n            id header = [theNode singleWithRuleType: GHRuleTypeFeature_Header];\r\n            if (!header)\r\n                return nil;\r\n\r\n            NSArray<GHTag *> * tags = [self tagsForNode: header];\r\n            GHToken * featureLine = [header tokenWithType: GHTokenTypeFeatureLine];\r\n            if (featureLine == nil)\r\n                return nil;\r\n\r\n            GHBackground * background = [theNode singleWithRuleType: GHRuleTypeBackground];\r\n            NSMutableArray<GHScenarioDefinition *> * children = [(NSArray<GHScenarioDefinition *> *)[theNode itemsWithRuleType: GHRuleTypeScenario_Definition] mutableCopy];\r\n            if(background != nil){\r\n                [children insertObject:background atIndex:0];\r\n            }\r\n            NSString * description = [GHAstBuilder descriptionForScenarioDefinitionNode: header];\r\n\r\n            if ([featureLine matchedGherkinDialect] == nil)\r\n                return nil;\r\n\r\n            NSString * language = [[featureLine matchedGherkinDialect] language];\r\n\r\n            return [[GHFeature alloc] initWithTags: tags location: [featureLine location] language: language keyword: [featureLine matchedKeyword] name: [featureLine matchedText] description: description children: children comments: comments];\r\n        }\r\n        default:\r\n        break;\r\n    }\r\n\r\n    return theNode;\r\n}\r\n\r\n- (GHLocation *)locationForToken:(GHToken *)theToken\r\n{\r\n    return [self locationForToken: theToken column: 0];\r\n}\r\n\r\n- (GHLocation *)locationForToken:(GHToken *)theToken column:(NSUInteger)column\r\n{\r\n    return column == 0 ? [theToken location] : [[GHLocation alloc] initWithLine: [[theToken location] line] column: column];\r\n}\r\n\r\n- (NSArray<GHTag *> *)tagsForNode:(GHAstNode *)theNode\r\n{\r\n    GHAstNode * tagsNode = [theNode singleWithRuleType: GHRuleTypeTags];\r\n    if (tagsNode == nil)\r\n        return [[NSArray<GHTag *> alloc] init];\r\n\r\n\r\n    NSArray<GHToken *> * tokens = [tagsNode tokensWithType: GHTokenTypeTagLine];\r\n\r\n    NSMutableArray<GHTag *> * tagsBuffer = [[NSMutableArray<GHTag *> alloc] init];\r\n    for (GHToken * token in tokens)\r\n    {\r\n        for (GHGherkinLineSpan * lineSpan in [token matchedItems])\r\n        {\r\n            [tagsBuffer addObject: [[GHTag alloc] initWithLocation: [self locationForToken: token column: [lineSpan column]] name: [lineSpan text]]];\r\n        }\r\n    }\r\n    return [[NSArray<GHTag *> alloc] initWithArray: tagsBuffer];\r\n}\r\n\r\n- (NSArray<GHTableRow *> *)tableRowsForNode:(GHAstNode *)theNode\r\n{\r\n    NSArray<GHToken *> * tokens = [theNode tokensWithType: GHTokenTypeTableRow];\r\n    NSMutableArray<GHTableRow *> * tableRowsBuffer = [[NSMutableArray<GHTableRow *> alloc] initWithCapacity: [tokens count]];\r\n    for (GHToken * token in tokens)\r\n    {\r\n        [tableRowsBuffer addObject: [[GHTableRow alloc] initWithLocation: [self locationForToken: token] cells: [self cellsWithToken: token]]];\r\n    }\r\n    NSArray<GHTableRow *> * tableRows = [[NSArray<GHTableRow *> alloc] initWithArray: tableRowsBuffer];\r\n\r\n    [self ensureCellCountForRows: tableRows];\r\n\r\n    return tableRows;\r\n}\r\n\r\n- (void)ensureCellCountForRows:(NSArray<GHTableRow *> *)theRows\r\n{\r\n    if ([theRows count])\r\n    {\r\n        NSUInteger cellCount = [[theRows[0] cells] count];\r\n        for (GHTableRow * row in theRows)\r\n        {\r\n            if ([[row cells] count] != cellCount)\r\n            {\r\n                @throw [[GHAstBuilderException alloc] initWithMessage: @\"inconsistent cell count within the table\" location: [row location]];\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n- (NSArray<GHTableCell *> *)cellsWithToken:(GHToken *)theTableRowToken\r\n{\r\n    NSArray<GHGherkinLineSpan *> * matchedItems = [theTableRowToken matchedItems];\r\n    NSMutableArray<GHTableCell *> * cellsBuffer = [[NSMutableArray<GHTableCell *> alloc] initWithCapacity: [matchedItems count]];\r\n    for (GHGherkinLineSpan * matchedItem in matchedItems)\r\n    {\r\n        [cellsBuffer addObject: [[GHTableCell alloc] initWithLocation: [self locationForToken: theTableRowToken column: [matchedItem column]] value: [matchedItem text]]];\r\n    }\r\n    return [[NSArray<GHTableCell *> alloc] initWithArray: cellsBuffer];\r\n}\r\n\r\n+ (NSArray<GHStep *> *)stepsWithScenarioDefinitionNode:(GHAstNode *)theScenarioDefinitionNode\r\n{\r\n    return (NSArray<GHStep *> *)[theScenarioDefinitionNode itemsWithRuleType: GHRuleTypeStep];\r\n}\r\n\r\n+ (NSString *)descriptionForScenarioDefinitionNode:(GHAstNode *)theScenarioDefinitionNode\r\n{\r\n    return [theScenarioDefinitionNode singleWithRuleType: GHRuleTypeDescription];\r\n}\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHAstNode.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n@class GHToken;\r\n\r\ntypedef enum GHRuleType GHRuleType;\r\ntypedef enum GHTokenType GHTokenType;\r\n\r\n@interface GHAstNode<ObjectType> : NSObject\r\n\r\n@property (nonatomic, readonly) GHRuleType  ruleType;\r\n\r\n- (id)initWithRuleType:(GHRuleType)theRuleType;\r\n- (GHToken *)tokenWithType:(GHTokenType)theTokenType;\r\n- (NSArray<GHToken *> *)tokensWithType:(GHTokenType)theTokenType;\r\n- (id)singleWithRuleType:(GHRuleType)theRuleType;\r\n- (NSArray<NSObject *> *)itemsWithRuleType:(GHRuleType)theRuleType;\r\n- (void)setSingleWithRuleType:(GHRuleType)theRuleType value:(ObjectType)theValue;\r\n- (void)addRange:(GHRuleType)theRuleType values:(NSArray<NSObject *> *)theValues;\r\n- (void)addObject:(NSObject *)theObject withRuleType:(GHRuleType)theRuleType;\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHAstNode.m",
    "content": "﻿#import \"GHAstNode.h\"\r\n\r\n#import \"GHToken.h\"\r\n#import \"GHParser.h\"\r\n\r\n@interface GHAstNode ()\r\n\r\n@property (nonatomic, assign) GHRuleType    ruleType;\r\n\r\n@end\r\n\r\n@implementation GHAstNode\r\n{\r\n    NSMutableDictionary<NSNumber *, NSMutableArray<NSObject *> *> * subitems;\r\n}\r\n\r\n@synthesize ruleType;\r\n\r\n- (id)initWithRuleType:(GHRuleType)theRuleType\r\n{\r\n    if (self = [super init])\r\n    {\r\n        ruleType = theRuleType;\r\n        subitems = [[NSMutableDictionary<NSNumber *, NSMutableArray<NSObject *> *> alloc] init];\r\n    }\r\n    return self;\r\n}\r\n\r\n- (GHToken *)tokenWithType:(GHTokenType)theTokenType\r\n{\r\n    return [self singleWithRuleType: (GHRuleType)theTokenType];\r\n}\r\n\r\n- (NSArray<GHToken *> *)tokensWithType:(GHTokenType)theTokenType\r\n{\r\n    return (NSArray<GHToken *> *)[self itemsWithRuleType: (GHRuleType)theTokenType];\r\n}\r\n\r\n- (id)singleWithRuleType:(GHRuleType)theRuleType\r\n{\r\n    return [[self itemsWithRuleType: theRuleType] firstObject];\r\n}\r\n\r\n- (NSArray<NSObject *> *)itemsWithRuleType:(GHRuleType)theRuleType\r\n{\r\n    NSArray<NSObject *> * items = subitems[@(theRuleType)];\r\n    if (items)\r\n        return items;\r\n    \r\n    return [[NSArray<NSObject *> alloc] init];\r\n}\r\n\r\n- (void)setSingleWithRuleType:(GHRuleType)theRuleType value:(NSObject *)theValue\r\n{\r\n    NSMutableArray<NSObject *> * valueArray = [[NSMutableArray<NSObject *> alloc] initWithObjects: theValue ? theValue : [NSNull null], nil];\r\n    \r\n    subitems[@(theRuleType)] = valueArray;\r\n}\r\n\r\n- (void)addRange:(GHRuleType)theRuleType values:(NSArray<NSObject *> *)theValues\r\n{\r\n    for (id value in theValues)\r\n    {\r\n        [self addObject: value withRuleType: theRuleType];\r\n    }\r\n}\r\n\r\n- (void)addObject:(NSObject *)theObject withRuleType:(GHRuleType)theRuleType\r\n{\r\n    NSMutableArray<NSObject *> * items = subitems[@(theRuleType)];\r\n    if (!items)\r\n    {\r\n        items = [[NSMutableArray<NSObject *> alloc] init];\r\n        subitems[@(theRuleType)] = items;\r\n    }\r\n    [items addObject: theObject ? theObject : [NSNull null]];\r\n}\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHBackground.h",
    "content": "#import <Foundation/Foundation.h>\r\n#import \"GHHasDescriptionProtocol.h\"\r\n#import \"GHHasLocationProtocol.h\"\r\n#import \"GHHasStepsProtocol.h\"\r\n#import \"GHScenarioDefinition.h\"\r\n@class GHLocation;\r\n\r\n@interface GHBackground : GHScenarioDefinition\r\n\r\n\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHBackground.m",
    "content": "#import \"GHBackground.h\"\r\n\r\n#import \"GHLocation.h\"\r\n\r\n@interface GHBackground ()\r\n\r\n\r\n@end\r\n\r\n@implementation GHBackground\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray *)theSteps\r\n{\r\n    self = [super initWithLocation:theLocation keyword:theKeyword name:theName description:theDescription steps:theSteps];\r\n    return self;\r\n}\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHComment.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n#import \"GHHasLocationProtocol.h\"\r\n\r\n@interface GHComment : NSObject <GHHasLocationProtocol>\r\n\r\n@property (nonatomic, readonly) GHLocation  * location;\r\n@property (nonatomic, readonly) NSString    * text;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation text:(NSString *)theText;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHComment.m",
    "content": "﻿#import \"GHComment.h\"\r\n\r\n@interface GHComment ()\r\n\r\n@property (nonatomic, strong) GHLocation    * location;\r\n@property (nonatomic, strong) NSString      * text;\r\n\r\n@end\r\n\r\n@implementation GHComment\r\n\r\n@synthesize location;\r\n@synthesize text;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation text:(NSString *)theText\r\n{\r\n    if (self = [super init])\r\n    {\r\n        location = theLocation;\r\n        text = theText;\r\n        \r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHDataTable.h",
    "content": "#import <Foundation/Foundation.h>\r\n#import \"GHStepArgument.h\"\r\n\r\n#import \"GHHasRowsProtocol.h\"\r\n#import \"GHHasLocationProtocol.h\"\r\n\r\n@interface GHDataTable : GHStepArgument <GHHasLocationProtocol, GHHasLocationProtocol>\r\n\r\n@property (nonatomic, readonly) GHLocation              * location;\r\n@property (nonatomic, readonly) NSArray<GHTableRow *>   * rows;\r\n\r\n- (id)initWithTableRows:(NSArray<GHTableRow *> *)theRows;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHDataTable.m",
    "content": "﻿#import \"GHDataTable.h\"\r\n\r\n#import \"GHTableRow.h\"\r\n\r\n@interface GHDataTable ()\r\n\r\n@property (nonatomic, strong) GHLocation            * location;\r\n@property (nonatomic, strong) NSArray<GHTableRow *> * rows;\r\n\r\n@end\r\n\r\n@implementation GHDataTable\r\n\r\n@synthesize location;\r\n@synthesize rows;\r\n\r\n- (id)initWithTableRows:(NSArray<GHTableRow *> *)theRows\r\n{\r\n    NSAssert([theRows count], @\"Rows argument cannot not be nil or empty\");\r\n    \r\n    if (self = [super init])\r\n    {\r\n        rows = theRows;\r\n        location = [[rows firstObject] location];\r\n    }\r\n\r\n    return self;\r\n}\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHDocString.h",
    "content": "#import <Foundation/Foundation.h>\r\n#import \"GHStepArgument.h\"\r\n\r\n#import \"GHHasLocationProtocol.h\"\r\n        \r\n@interface GHDocString : GHStepArgument <GHHasLocationProtocol>\r\n\r\n@property (nonatomic, readonly) GHLocation    * location;\r\n@property (nonatomic, readonly) NSString      * contentType;\r\n@property (nonatomic, readonly) NSString      * content;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation contentType:(NSString *)theContentType content:(NSString *)theContent;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHDocString.m",
    "content": "﻿#import \"GHDocString.h\"\r\n\r\n@interface GHDocString ()\r\n\r\n@property (nonatomic, strong) GHLocation    * location;\r\n@property (nonatomic, strong) NSString      * contentType;\r\n@property (nonatomic, strong) NSString      * content;\r\n\r\n@end\r\n\r\n@implementation GHDocString\r\n\r\n@synthesize location;\r\n@synthesize contentType;\r\n@synthesize content;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation contentType:(NSString *)theContentType content:(NSString *)theContent\r\n{\r\n    if (self = [super init])\r\n    {\r\n        location = theLocation;\r\n        contentType = theContentType;\r\n        content = theContent;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHExamples.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n#import <Foundation/Foundation.h>\r\n#import \"GHHasLocationProtocol.h\"\r\n#import \"GHHasDescriptionProtocol.h\"\r\n#import \"GHHasRowsProtocol.h\"\r\n#import \"GHHasTagsProtocol.h\"\r\n\r\n@class GHTag;\r\n@class GHTableRow;\r\n\r\n@interface GHExamples : NSObject <GHHasLocationProtocol, GHHasDescriptionProtocol, GHHasRowsProtocol, GHHasTagsProtocol>\r\n\r\n@property (nonatomic, readonly) NSArray<GHTag *>        * tags;\r\n@property (nonatomic, readonly) GHLocation              * location;\r\n@property (nonatomic, readonly) NSString                * keyword;\r\n@property (nonatomic, readonly) NSString                * name;\r\n@property (nonatomic, readonly) NSString                * desc;\r\n@property (nonatomic, readonly) GHTableRow              * tableHeader;\r\n@property (nonatomic, readonly) NSArray<GHTableRow *>   * tableBody;\r\n\r\n- (id)initWithTags:(NSArray<GHTag *> *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription header:(GHTableRow *)theHeader body:(NSArray<GHTableRow *> *)theBody;\r\n\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHExamples.m",
    "content": "﻿#import \"GHExamples.h\"\r\n\r\n#import \"GHTag.h\"\r\n#import \"GHTableRow.h\"\r\n\r\n@interface GHExamples ()\r\n\r\n@property (nonatomic, strong) NSArray<GHTag *>        * tags;\r\n@property (nonatomic, strong) GHLocation              * location;\r\n@property (nonatomic, strong) NSString                * keyword;\r\n@property (nonatomic, strong) NSString                * name;\r\n@property (nonatomic, strong) NSString                * desc;\r\n@property (nonatomic, strong) GHTableRow              * tableHeader;\r\n@property (nonatomic, strong) NSArray<GHTableRow *>   * tableBody;\r\n\r\n@end\r\n\r\n@implementation GHExamples\r\n\r\n@synthesize tags;\r\n@synthesize location;\r\n@synthesize keyword;\r\n@synthesize name;\r\n@synthesize desc;\r\n@synthesize tableHeader;\r\n@synthesize tableBody;\r\n\r\n- (id)initWithTags:(NSArray<GHTag *> *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription header:(GHTableRow *)theHeader body:(NSArray<GHTableRow *> *)theBody\r\n{\r\n    if (self = [super init])\r\n    {\r\n        tags = theTags;\r\n        location = theLocation;\r\n        keyword = theKeyword;\r\n        name = theName;\r\n        desc = theDescription;\r\n        tableHeader = theHeader;\r\n        tableBody = theBody;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n- (NSArray<GHTableRow *> *)rows\r\n{\r\n    return [@[ tableHeader ] arrayByAddingObjectsFromArray: tableBody];\r\n}\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHFeature.h",
    "content": "﻿#import \"GHHasLocationProtocol.h\"\r\n#import \"GHHasDescriptionProtocol.h\"\r\n#import \"GHHasTagsProtocol.h\"\r\n\r\n@class GHTag;\r\n@class GHLocation;\r\n@class GHBackground;\r\n@class GHScenarioDefinition;\r\n@class GHComment;\r\n\r\n@interface GHFeature : NSObject <GHHasLocationProtocol, GHHasDescriptionProtocol, GHHasTagsProtocol>\r\n\r\n@property (nonatomic, readonly) NSArray<GHTag *>                * tags;\r\n@property (nonatomic, readonly) GHLocation                      * location;\r\n@property (nonatomic, readonly) NSString                        * language;\r\n@property (nonatomic, readonly) NSString                        * keyword;\r\n@property (nonatomic, readonly) NSString                        * name;\r\n@property (nonatomic, readonly) NSString                        * desc;\r\n@property (nonatomic, readonly) NSArray<GHScenarioDefinition *> * children;\r\n@property (nonatomic, readonly) NSArray<GHComment *>            * comments;\r\n\r\n- (id)initWithTags:(NSArray<GHTag *> *)theTags location:(GHLocation *)theLocation language:(NSString *)theLanguage keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription children:(NSArray<GHScenarioDefinition *> *)theChildren comments:(NSArray<GHComment *> *)theComments;\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHFeature.m",
    "content": "﻿#import \"GHFeature.h\"\r\n\r\n#import \"GHTag.h\"\r\n#import \"GHLocation.h\"\r\n#import \"GHBackground.h\"\r\n#import \"GHScenarioDefinition.h\"\r\n#import \"GHComment.h\"\r\n\r\n@interface GHFeature ()\r\n\r\n@property (nonatomic, strong) NSArray<GHTag *>                  * tags;\r\n@property (nonatomic, strong) GHLocation                        * location;\r\n@property (nonatomic, strong) NSString                          * language;\r\n@property (nonatomic, strong) NSString                          * keyword;\r\n@property (nonatomic, strong) NSString                          * name;\r\n@property (nonatomic, strong) NSString                          * desc;\r\n@property (nonatomic, strong) NSArray<GHScenarioDefinition *>   * children;\r\n@property (nonatomic, strong) NSArray<GHComment *>              * comments;\r\n\r\n@end\r\n\r\n@implementation GHFeature\r\n\r\n@synthesize tags;\r\n@synthesize location;\r\n@synthesize language;\r\n@synthesize keyword;\r\n@synthesize name;\r\n@synthesize desc;\r\n@synthesize children;\r\n@synthesize comments;\r\n\r\n- (id)initWithTags:(NSArray<GHTag *> *)theTags location:(GHLocation *)theLocation language:(NSString *)theLanguage keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription children:(NSArray<GHScenarioDefinition *> *)theChildren comments:(NSArray<GHComment *> *)theComments\r\n{\r\n    if (self = [super init])\r\n    {\r\n        tags = theTags;\r\n        location = theLocation;\r\n        language = theLanguage;\r\n        keyword = theKeyword;\r\n        name = theName;\r\n        desc = theDescription;\r\n        children = theChildren;\r\n        comments = theComments;\r\n    }\r\n\r\n    return self;\r\n}\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinDialect.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n\r\n@interface GHGherkinDialect : NSObject\r\n\r\n@property (nonatomic, readonly) NSString            * language;\r\n@property (nonatomic, readonly) NSArray<NSString *> * featureKeywords;\r\n@property (nonatomic, readonly) NSArray<NSString *> * backgroundKeywords;\r\n@property (nonatomic, readonly) NSArray<NSString *> * scenarioKeywords;\r\n@property (nonatomic, readonly) NSArray<NSString *> * scenarioOutlineKeywords;\r\n@property (nonatomic, readonly) NSArray<NSString *> * examplesKeywords;\r\n@property (nonatomic, readonly) NSArray<NSString *> * givenStepKeywords;\r\n@property (nonatomic, readonly) NSArray<NSString *> * whenStepKeywords;\r\n@property (nonatomic, readonly) NSArray<NSString *> * thenStepKeywords;\r\n@property (nonatomic, readonly) NSArray<NSString *> * andStepKeywords;\r\n@property (nonatomic, readonly) NSArray<NSString *> * butStepKeywords;\r\n@property (nonatomic, readonly) NSArray<NSString *> * stepKeywords;\r\n\r\n- (id)initWithLanguage:(NSString *)theLanguage featureKeywords:(NSArray<NSString *> *)theFeatureKeywords\r\n    backgroundKeywords:(NSArray<NSString *> *)theBackgroundKeywords scenarioKeywords:(NSArray<NSString *> *)theScenarioKeywords\r\nscenarioOutlineKeywords:(NSArray<NSString *> *)theScenarioOutlineKeywords examplesKeywords:(NSArray<NSString *> *)theExamplesKeywords\r\n     givenStepKeywords:(NSArray<NSString *> *)theGivenStepKeywords whenStepKeywords:(NSArray<NSString *> *)theWhenStepKeywords\r\n      thenStepKeywords:(NSArray<NSString *> *)theThenStepKeywords andStepKeywords:(NSArray<NSString *> *)theAndStepKeywords\r\n       butStepKeywords:(NSArray<NSString *> *)theButStepKeywords;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinDialect.m",
    "content": "﻿#import \"GHGherkinDialect.h\"\r\n\r\n@interface GHGherkinDialect ()\r\n\r\n@property (nonatomic, strong) NSString              * language;\r\n@property (nonatomic, strong) NSArray<NSString *>   * featureKeywords;\r\n@property (nonatomic, strong) NSArray<NSString *>   * backgroundKeywords;\r\n@property (nonatomic, strong) NSArray<NSString *>   * scenarioKeywords;\r\n@property (nonatomic, strong) NSArray<NSString *>   * scenarioOutlineKeywords;\r\n@property (nonatomic, strong) NSArray<NSString *>   * examplesKeywords;\r\n@property (nonatomic, strong) NSArray<NSString *>   * givenStepKeywords;\r\n@property (nonatomic, strong) NSArray<NSString *>   * whenStepKeywords;\r\n@property (nonatomic, strong) NSArray<NSString *>   * thenStepKeywords;\r\n@property (nonatomic, strong) NSArray<NSString *>   * andStepKeywords;\r\n@property (nonatomic, strong) NSArray<NSString *>   * butStepKeywords;\r\n@property (nonatomic, strong) NSArray<NSString *>   * stepKeywords;\r\n\r\n@end\r\n\r\n@implementation GHGherkinDialect\r\n\r\n@synthesize language;\r\n@synthesize featureKeywords;\r\n@synthesize backgroundKeywords;\r\n@synthesize scenarioKeywords;\r\n@synthesize scenarioOutlineKeywords;\r\n@synthesize examplesKeywords;\r\n@synthesize givenStepKeywords;\r\n@synthesize whenStepKeywords;\r\n@synthesize thenStepKeywords;\r\n@synthesize andStepKeywords;\r\n@synthesize butStepKeywords;\r\n@synthesize stepKeywords;\r\n\r\n- (id)initWithLanguage:(NSString *)theLanguage featureKeywords:(NSArray<NSString *> *)theFeatureKeywords\r\n    backgroundKeywords:(NSArray<NSString *> *)theBackgroundKeywords scenarioKeywords:(NSArray<NSString *> *)theScenarioKeywords\r\nscenarioOutlineKeywords:(NSArray<NSString *> *)theScenarioOutlineKeywords examplesKeywords:(NSArray<NSString *> *)theExamplesKeywords\r\n     givenStepKeywords:(NSArray<NSString *> *)theGivenStepKeywords whenStepKeywords:(NSArray<NSString *> *)theWhenStepKeywords\r\n       thenStepKeywords:(NSArray<NSString *> *)theThenStepKeywords andStepKeywords:(NSArray<NSString *> *)theAndStepKeywords\r\n       butStepKeywords:(NSArray<NSString *> *)theButStepKeywords\r\n{\r\n    if (self = [super init])\r\n    {\r\n        language = theLanguage;\r\n        featureKeywords = theFeatureKeywords;\r\n        backgroundKeywords = theBackgroundKeywords;\r\n        scenarioKeywords = theScenarioKeywords;\r\n        scenarioOutlineKeywords = theScenarioOutlineKeywords;\r\n        examplesKeywords = theExamplesKeywords;\r\n        givenStepKeywords = theGivenStepKeywords;\r\n        whenStepKeywords = theWhenStepKeywords;\r\n        thenStepKeywords = theThenStepKeywords;\r\n        andStepKeywords = theAndStepKeywords;\r\n        butStepKeywords = theButStepKeywords;\r\n        \r\n        stepKeywords = [[[[givenStepKeywords arrayByAddingObjectsFromArray: whenStepKeywords] arrayByAddingObjectsFromArray: thenStepKeywords] arrayByAddingObjectsFromArray: andStepKeywords] arrayByAddingObjectsFromArray: butStepKeywords];\r\n        // Distinct using an NSOrderedSet\r\n        stepKeywords = [[[NSOrderedSet alloc] initWithArray: stepKeywords] array];        \r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinDialectProvider.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n\r\n#import \"GHGherkinDialectProviderProtocol.h\"\r\n\r\n@interface GHGherkinDialectProvider : NSObject <GHGherkinDialectProviderProtocol>\r\n\r\n- (id)initWithLanguage:(NSString *)theLanguage;\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinDialectProvider.m",
    "content": "﻿#import \"GHGherkinDialectProvider.h\"\r\n\r\n#import \"GHGherkinDialect.h\"\r\n#import \"GHGherkinLanguageSetting.h\"\r\n#import \"GHLocation.h\"\r\n#import \"GHParserException.h\"\r\n\r\n@interface GHGherkinDialectProvider ()\r\n\r\n- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage languageSetting:(GHGherkinLanguageSetting *)theLanguageSetting;\r\n- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage languagesSetting:(NSDictionary<NSString *, GHGherkinLanguageSetting *> *)theLanguagesSetting location:(GHLocation *)theLocation;\r\n- (NSDictionary<NSString *, GHGherkinLanguageSetting *> *)parseJsonContent:(NSData *)theLanguagesFileContent;\r\n- (NSDictionary<NSString *, GHGherkinLanguageSetting *> *)languagesSetting;\r\n\r\n- (NSArray<NSString *> *)parseStepKeywords:(NSArray<NSString *> *)theStepKeywords;\r\n- (NSArray<NSString *> *)parseTitleKeywords:(NSArray<NSString *> *)theKeywords;\r\n\r\n@end\r\n\r\n@implementation GHGherkinDialectProvider\r\n{\r\n    GHGherkinDialect    * defaultDialect;\r\n    NSString            * language;\r\n}\r\n\r\n-  (GHGherkinDialect *)defaultDialect\r\n{\r\n    return [self dialectWithLanguage: language location: nil];\r\n}\r\n\r\n- (id)init\r\n{\r\n    return [self initWithLanguage: @\"en\"];\r\n}\r\n\r\n- (id)initWithLanguage:(NSString *)theLanguage\r\n{\r\n    if (self = [super init])\r\n    {\r\n        language = theLanguage;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage location:(GHLocation *)theLocation\r\n{\r\n    NSDictionary<NSString *, GHGherkinLanguageSetting *> * languagesSetting = [self languagesSetting];\r\n    \r\n    return [self dialectWithLanguage: theLanguage languagesSetting: languagesSetting location: theLocation];\r\n}\r\n\r\n- (NSDictionary<NSString *, GHGherkinLanguageSetting *> *)languagesSetting\r\n{\r\n    NSBundle * gherkinLanguagesBundle = [NSBundle bundleWithPath: [[NSBundle bundleForClass:[self class]] pathForResource: @\"GherkinLanguages\" ofType: @\"bundle\"]];\r\n    if(gherkinLanguagesBundle == nil){\r\n        gherkinLanguagesBundle = [NSBundle bundleForClass:[self class]];\r\n    }\r\n    NSData * languagesFileContent = [NSData dataWithContentsOfFile: [gherkinLanguagesBundle pathForResource: @\"gherkin-languages\" ofType: @\"json\"]];\r\n    \r\n    /*TODO: check for error\r\n    if (resourceStream == null)\r\n        throw new InvalidOperationException(\"Gherkin language resource not found: \" + languageFileName);*/\r\n    \r\n    return [self parseJsonContent: languagesFileContent];\r\n}\r\n\r\n- (NSDictionary<NSString *, GHGherkinLanguageSetting *> *)parseJsonContent:(NSData *)theLanguagesFileContent\r\n{\r\n    NSError * error;\r\n    NSDictionary<NSString *, GHGherkinLanguageSetting *> * languagesSetting = nil;\r\n    id parsingResult = [NSJSONSerialization JSONObjectWithData: theLanguagesFileContent options: 0 error: &error];\r\n    if (parsingResult)\r\n    {\r\n        NSMutableDictionary<NSString *, GHGherkinLanguageSetting *> * languagesSettingBuffer = [[NSMutableDictionary<NSString *, GHGherkinLanguageSetting *> alloc] initWithCapacity: [parsingResult count]];\r\n        for (NSString * languageKey in parsingResult)\r\n        {\r\n            NSDictionary * languageSettingDictionary = parsingResult[languageKey];\r\n            GHGherkinLanguageSetting * languageSetting = [[GHGherkinLanguageSetting alloc] init];\r\n            [languageSetting setValuesForKeysWithDictionary: languageSettingDictionary];\r\n            \r\n            languagesSettingBuffer[languageKey] = languageSetting;\r\n        }\r\n        languagesSetting = [[NSDictionary<NSString *, GHGherkinLanguageSetting *> alloc] initWithDictionary: languagesSettingBuffer];\r\n    }\r\n    \r\n    return languagesSetting;\r\n}\r\n\r\n- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage languagesSetting:(NSDictionary<NSString *, GHGherkinLanguageSetting *> *)theLanguagesSetting location:(GHLocation *)theLocation\r\n{\r\n    GHGherkinLanguageSetting * languageSetting = nil;\r\n    if ((languageSetting = theLanguagesSetting[theLanguage]) == nil)\r\n        @throw [[GHNoSuchLanguageException alloc] initWithLanguage: theLanguage location: theLocation];\r\n\r\n    return [self dialectWithLanguage: theLanguage languageSetting: languageSetting];\r\n}\r\n\r\n- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage languageSetting:(GHGherkinLanguageSetting *)theLanguageSetting\r\n{\r\n    return [[GHGherkinDialect alloc] initWithLanguage: theLanguage\r\n                                      featureKeywords: [self parseTitleKeywords: theLanguageSetting.feature]\r\n                                   backgroundKeywords: [self parseTitleKeywords: theLanguageSetting.background]\r\n                                     scenarioKeywords: [self parseTitleKeywords: theLanguageSetting.scenario]\r\n                              scenarioOutlineKeywords: [self parseTitleKeywords: theLanguageSetting.scenarioOutline]\r\n                                     examplesKeywords: [self parseTitleKeywords: theLanguageSetting.examples]\r\n                                        givenStepKeywords: [self parseStepKeywords: theLanguageSetting.given]\r\n                                         whenStepKeywords: [self parseStepKeywords: theLanguageSetting.when]\r\n                                         thenStepKeywords: [self parseStepKeywords: theLanguageSetting.then]\r\n                                          andStepKeywords: [self parseStepKeywords: theLanguageSetting.and]\r\n                                          butStepKeywords: [self parseStepKeywords: theLanguageSetting.but]];\r\n}\r\n\r\n- (NSArray<NSString *> *)parseStepKeywords:(NSArray<NSString *> *)theStepKeywords\r\n{\r\n    return theStepKeywords;\r\n}\r\n\r\n- (NSArray<NSString *> *)parseTitleKeywords:(NSArray<NSString *> *)theKeywords\r\n{\r\n    return theKeywords;\r\n}\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinDialectProviderProtocol.h",
    "content": "#import <Foundation/Foundation.h>\n@class GHGherkinDialect;\n@class GHLocation;\n\n@protocol GHGherkinDialectProviderProtocol <NSObject>\n\n@property (nonatomic, readonly) GHGherkinDialect    * defaultDialect;\n- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage location:(GHLocation *)theLocation;\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinLanguageConstants.h",
    "content": "#import <Foundation/Foundation.h>\r\nextern NSString * const GHTagPrefix;\r\nextern NSString * const GHCommentPrefix;\r\nextern NSString * const GHTitleKeywordSeparator;\r\nextern NSString * const GHTableCellSeparator;\r\nextern NSString * const GHTableCellEscape;\r\nextern NSString * const GHTableCellNewlineEscape;\r\nextern NSString * const GHDocStringSeparator;\r\nextern NSString * const GHDocStringAlternativeSeparator;\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinLanguageConstants.m",
    "content": "﻿#import \"GHGherkinLanguageConstants.h\"\r\n\r\nNSString * const GHTagPrefix                        = @\"@\";\r\nNSString * const GHCommentPrefix                    = @\"#\";\r\nNSString * const GHTitleKeywordSeparator            = @\":\";\r\nNSString * const GHTableCellSeparator               = @\"|\";\r\nNSString * const GHTableCellEscape                  = @\"\\\\\";\r\nNSString * const GHTableCellNewlineEscape           = @\"n\";\r\nNSString * const GHDocStringSeparator               = @\"\\\"\\\"\\\"\";\r\nNSString * const GHDocStringAlternativeSeparator    = @\"```\";\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinLanguageSetting.h",
    "content": "#import <Foundation/Foundation.h>\n@interface GHGherkinLanguageSetting : NSObject\n\n@property (nonatomic, strong) NSString            * name;\n@property (nonatomic, strong) NSString            * native;\n@property (nonatomic, strong) NSArray<NSString *> * feature;\n@property (nonatomic, strong) NSArray<NSString *> * background;\n@property (nonatomic, strong) NSArray<NSString *> * scenario;\n@property (nonatomic, strong) NSArray<NSString *> * scenarioOutline;\n@property (nonatomic, strong) NSArray<NSString *> * examples;\n@property (nonatomic, strong) NSArray<NSString *> * given;\n@property (nonatomic, strong) NSArray<NSString *> * when;\n@property (nonatomic, strong) NSArray<NSString *> * then;\n@property (nonatomic, strong) NSArray<NSString *> * and;\n@property (nonatomic, strong) NSArray<NSString *> * but;\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinLanguageSetting.m",
    "content": "#import \"GHGherkinLanguageSetting.h\"\n\n@implementation GHGherkinLanguageSetting\n\n@synthesize name;\n@synthesize native;\n@synthesize feature;\n@synthesize background;\n@synthesize scenario;\n@synthesize scenarioOutline;\n@synthesize examples;\n@synthesize given;\n@synthesize when;\n@synthesize then;\n@synthesize and;\n@synthesize but;\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinLine.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n\r\n#import \"GHGherkinLineProtocol.h\"\r\n\r\n@interface GHGherkinLine : NSObject <GHGherkinLineProtocol>\r\n\r\n@property (nonatomic, readonly) NSString    * lineText;\r\n@property (nonatomic, readonly) NSUInteger  lineNumber;\r\n\r\n- (id)initWithLine:(NSString *)theLine lineNumber:(NSUInteger)theLineNumber;\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinLine.m",
    "content": "﻿#import \"GHGherkinLine.h\"\r\n\r\n#import \"GHGherkinLanguageConstants.h\"\r\n#import \"GHGherkinLineSpan.h\"\r\n\r\n#import \"NSString+Trim.h\"\r\n\r\n@interface GHGherkinLine ()\r\n\r\n@property (nonatomic, strong) NSString    * lineText;\r\n@property (nonatomic, assign) NSUInteger    lineNumber;\r\n\r\n- (NSMutableArray<NSArray<NSObject *> *> *)splitCellsFromRow:(NSString *)theRow;\r\n- (NSString *)trim:(NSString *)theString trimmedCharsCount:(NSUInteger *)theTrimmedCharsCount;\r\n+ (BOOL)startsWithFrom:(NSString *)theText index:(NSInteger)theTextIndex value:(NSString *)theValue;\r\n\r\n@end\r\n\r\n@implementation GHGherkinLine\r\n{\r\n    NSString    * trimmedLineText;\r\n}\r\n\r\n@synthesize lineText;\r\n@synthesize lineNumber;\r\n\r\n- (id)initWithLine:(NSString *)theLine lineNumber:(NSUInteger)theLineNumber\r\n{\r\n    if (self = [super init])\r\n    {\r\n        lineNumber = theLineNumber;\r\n        lineText = theLine;\r\n        trimmedLineText = [theLine stringByTrimmingStartWithCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];\r\n    }\r\n\r\n    return self;\r\n}\r\n\r\n- (void)detach\r\n{\r\n    //nop\r\n}\r\n\r\n- (NSUInteger)indent\r\n{\r\n    return [lineText length] - [trimmedLineText length];\r\n}\r\n\r\n- (BOOL)empty\r\n{\r\n    return trimmedLineText && ![trimmedLineText length];\r\n}\r\n\r\n- (BOOL)hasPrefix:(NSString *)theText\r\n{\r\n    return [trimmedLineText hasPrefix: theText];\r\n}\r\n\r\n- (BOOL)hasTitleKeywordPrefix:(NSString *)theText\r\n{\r\n    NSUInteger textLength = [theText length];\r\n    return [trimmedLineText length] > textLength && [trimmedLineText hasPrefix: theText] &&\r\n    [GHGherkinLine startsWithFrom: trimmedLineText index: textLength value: GHTitleKeywordSeparator];\r\n}\r\n\r\n+ (BOOL)startsWithFrom:(NSString *)theText index:(NSInteger)theTextIndex value:(NSString *)theValue\r\n{\r\n    NSUInteger valueLength = [theValue length];\r\n    NSString * textSubstring = [theText substringWithRange: NSMakeRange(theTextIndex, valueLength)];\r\n    NSString * valueSubstring = [theValue substringWithRange: NSMakeRange(0, valueLength)];\r\n\r\n    return [textSubstring compare: valueSubstring options: NSLiteralSearch] == NSOrderedSame;\r\n}\r\n\r\n- (NSString *)lineTextByRemovingIndent:(NSInteger)theIndentToRemove\r\n{\r\n    if (theIndentToRemove < 0 || theIndentToRemove > [self indent])\r\n        return trimmedLineText;\r\n\r\n    return [lineText substringFromIndex: theIndentToRemove];\r\n}\r\n\r\n- (NSString *)trimmedRest:(NSUInteger)theLength\r\n{\r\n    return [[trimmedLineText substringFromIndex: theLength] stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];\r\n}\r\n\r\n- (NSArray<GHGherkinLineSpan *> *)tags\r\n{\r\n    NSInteger position = [self indent];\r\n    NSMutableArray * tags = [[NSMutableArray alloc] init];\r\n\r\n    for (NSString * item in [trimmedLineText componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]])\r\n    {\r\n        if ([item length])\r\n        {\r\n            [tags addObject: [[GHGherkinLineSpan alloc] initWithColumn: position + 1 text: item]];\r\n            position += [item length];\r\n        }\r\n        position++; // separator\r\n    }\r\n\r\n    return [[NSArray alloc] initWithArray: tags];\r\n}\r\n\r\n- (NSArray<GHGherkinLineSpan *> *)tableCells\r\n{\r\n    NSMutableArray<NSArray<NSObject *> *> * items = [self splitCellsFromRow: trimmedLineText];\r\n    [items removeLastObject];\r\n\r\n    NSMutableArray * tableCells = [[NSMutableArray alloc] init];\r\n    BOOL isBeforeFirst = YES;\r\n    for (NSArray * item in items)\r\n    {\r\n        if (!isBeforeFirst)\r\n        {\r\n            NSUInteger trimmedStart = 0;\r\n            NSString * cellText = [self trim: [item firstObject] trimmedCharsCount: &trimmedStart];\r\n            NSUInteger cellPosition = [[item lastObject] integerValue] + trimmedStart;\r\n\r\n            if (![cellText length])\r\n                cellPosition = [[item lastObject] integerValue];\r\n\r\n            [tableCells addObject: [[GHGherkinLineSpan alloc] initWithColumn: [self indent] + cellPosition + 1 text: cellText]];\r\n        }\r\n\r\n        isBeforeFirst = NO;\r\n    }\r\n\r\n    return tableCells;\r\n}\r\n\r\n- (NSMutableArray<NSArray<NSObject *> *> *)splitCellsFromRow:(NSString *)theRow\r\n{\r\n    NSMutableString * cell = [[NSMutableString alloc] init];\r\n    NSInteger startPos = 0;\r\n    NSMutableArray<NSArray<NSObject *> *> * items = [[NSMutableArray alloc] init];\r\n    NSUInteger rowLength = [theRow length];\r\n    for (NSUInteger i = 0; i < rowLength; i++)\r\n    {\r\n        NSString * stringCharacter = [theRow substringWithRange: NSMakeRange(i, 1)];\r\n        if ([stringCharacter isEqualToString: GHTableCellSeparator])\r\n        {\r\n            [items addObject: @[ cell, @(startPos)]];\r\n            cell = [[NSMutableString alloc] init];\r\n            startPos = i + 1;\r\n        }\r\n        else if ([stringCharacter isEqualToString: GHTableCellEscape])\r\n        {\r\n            stringCharacter = i + 1 < rowLength ? [theRow substringWithRange: NSMakeRange(++i, 1)] : nil;\r\n            if ([stringCharacter isEqualToString: GHTableCellNewlineEscape])\r\n                [cell appendString: @\"\\n\"];\r\n            else\r\n            {\r\n                if (![stringCharacter isEqualToString: GHTableCellSeparator] && ![stringCharacter isEqualToString: GHTableCellEscape])\r\n                    [cell appendString: GHTableCellEscape];\r\n                [cell appendString: stringCharacter];\r\n            }\r\n        }\r\n        else\r\n            [cell appendString: stringCharacter];\r\n    }\r\n    [items addObject: @[ cell, @(startPos)]];\r\n\r\n    return items;\r\n}\r\n\r\n- (NSString *)trim:(NSString *)theString trimmedCharsCount:(NSUInteger *)theTrimmedCharsCount\r\n{\r\n    NSUInteger trimmedCharsCount = 0;\r\n    NSCharacterSet * whitespaceAndNewLineCharacterSet = [NSCharacterSet whitespaceAndNewlineCharacterSet];\r\n    while (trimmedCharsCount < [theString length] && [whitespaceAndNewLineCharacterSet characterIsMember: [theString characterAtIndex: trimmedCharsCount]])\r\n        trimmedCharsCount++;\r\n\r\n    *theTrimmedCharsCount = trimmedCharsCount;\r\n    return [theString stringByTrimmingCharactersInSet: whitespaceAndNewLineCharacterSet];\r\n}\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinLineProtocol.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n@class GHGherkinLineSpan;\r\n\r\n@protocol GHGherkinLineProtocol <NSObject>\r\n\r\n@property (nonatomic, readonly) NSString    * lineText;\r\n@property (nonatomic, readonly) NSUInteger  lineNumber;\r\n@property (nonatomic, readonly) NSUInteger  indent;\r\n\r\n/// <summary>\r\n/// Called by the parser to indicate non-streamed reading (e.g. during look-ahead).\r\n/// </summary>\r\n/// <remarks>\r\n/// If the implementation depends on streamed reading behavior, with this method, it can clone itself, so that it will be detached.\r\n/// </remarks>\r\n- (void)detach;\r\n\r\n/// <summary>\r\n/// Gets if the line is empty or contains whitespaces only.\r\n/// </summary>\r\n/// <returns>YES, if empty or contains whitespaces only; otherwise, NO.</returns>\r\n- (BOOL)empty;\r\n\r\n/// <summary>\r\n/// Determines whether the beginning of the line (wihtout whitespaces) matches a specified string.\r\n/// </summary>\r\n/// <param name=\"theText\">The string to compare. </param>\r\n/// <returns>YES if text matches the beginning of this line; otherwise, NO.</returns>\r\n- (BOOL)hasPrefix:(NSString *)theText;\r\n\r\n/// <summary>\r\n/// Determines whether the beginning of the line (wihtout whitespaces) matches a specified title keyword (ie. a keyword followed by a ':' character).\r\n/// </summary>\r\n/// <param name=\"theKeyword\">The keyword to compare. </param>\r\n/// <returns>YES if keyword matches the beginning of this line and followed by a ':' character; otherwise, NO.</returns>\r\n- (BOOL)hasTitleKeywordPrefix:(NSString *)theKeyword;\r\n\r\n/// <summary>\r\n/// Returns the line text\r\n/// </summary>\r\n/// <param name=\"theIndentToRemove\">The maximum number of whitespace characters to remove. -1 removes all leading whitespaces.</param>\r\n/// <returns>The line text.</returns>\r\n- (NSString *)lineTextByRemovingIndent:(NSInteger)theIndentToRemove;\r\n\r\n/// <summary>\r\n/// Returns the remaining part of the line.\r\n/// </summary>\r\n/// <param name=\"theLength\"></param>\r\n/// <returns></returns>\r\n- (NSString *)trimmedRest:(NSUInteger)theLength;\r\n\r\n/// <summary>\r\n/// Tries parsing the line as a tag list, and returns the tags wihtout the leading '@' characters.\r\n/// </summary>\r\n/// <returns>(position,text) pairs, position is 0-based index</returns>\r\n- (NSArray<GHGherkinLineSpan *> *)tags;\r\n\r\n/// <summary>\r\n/// Tries parsing the line as table row and returns the trimmed cell values.\r\n/// </summary>\r\n/// <returns>(position,text) pairs, position is 0-based index</returns>\r\n- (NSArray<GHGherkinLineSpan *> *)tableCells;\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinLineSpan.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n@interface GHGherkinLineSpan : NSObject\r\n\r\n@property (nonatomic, readonly) NSUInteger  column;\r\n@property (nonatomic, readonly) NSString    * text;\r\n\r\n- (id)initWithColumn:(NSUInteger)theColumn text:(NSString *)theText;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHGherkinLineSpan.m",
    "content": "﻿\r\n#import \"GHGherkinLineSpan.h\"\r\n\r\n@interface GHGherkinLineSpan ()\r\n\r\n@property (nonatomic, assign) NSUInteger  column;\r\n@property (nonatomic, strong) NSString    * text;\r\n\r\n@end\r\n\r\n@implementation GHGherkinLineSpan\r\n\r\n@synthesize column;\r\n@synthesize text;\r\n\r\n- (id)initWithColumn:(NSUInteger)theColumn text:(NSString *)theText\r\n{\r\n    if (self = [super init])\r\n    {\r\n        column = theColumn;\r\n        text = theText;\r\n    }\r\n    return self;\r\n}\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHHasDescriptionProtocol.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n@protocol GHHasDescriptionProtocol <NSObject>\r\n\r\n@property (nonatomic, readonly) NSString    * keyword;\r\n@property (nonatomic, readonly) NSString    * name;\r\n@property (nonatomic, readonly) NSString    * desc;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHHasLocationProtocol.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n@class GHLocation;\r\n\r\n@protocol GHHasLocationProtocol <NSObject>\r\n\r\n@property (nonatomic, readonly) GHLocation  * location;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHHasRowsProtocol.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n@class GHTableRow;\r\n\r\n@protocol GHHasRowsProtocol <NSObject>\r\n\r\n@property (nonatomic, readonly) NSArray<GHTableRow *>   * rows;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHHasStepsProtocol.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n@class GHStep;\r\n\r\n@protocol GHHasStepsProtocol <NSObject>\r\n\r\n@property (nonatomic, readonly) NSArray<GHStep *>   * steps;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHHasTagsProtocol.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n@class GHTag;\r\n\r\n@protocol GHHasTagsProtocol <NSObject>\r\n\r\n@property (nonatomic, readonly) NSArray<GHTag *>   * tags;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHLocation.h",
    "content": "#import <Foundation/Foundation.h>\r\n@interface GHLocation : NSObject\r\n\r\n@property (nonatomic, readonly) NSUInteger  line;\r\n@property (nonatomic, readonly) NSUInteger  column;\r\n\r\n- (id)init;\r\n- (id)initWithLine:(NSUInteger)theLine;\r\n- (id)initWithColumn:(NSUInteger)theColumn;\r\n- (id)initWithLine:(NSUInteger)theLine column:(NSUInteger)theColumn;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHLocation.m",
    "content": "#import \"GHLocation.h\"\n\n@interface GHLocation ()\n\n@property (nonatomic, assign) NSUInteger    line;\n@property (nonatomic, assign) NSUInteger    column;\n\n@end\n\n@implementation GHLocation\n\n@synthesize line;\n@synthesize column;\n\n- (id)init\n{\n    return [self initWithLine: 0 column: 0];\n}\n\n- (id)initWithLine:(NSUInteger)theLine\n{\n    return [self initWithLine: theLine column: 0];\n}\n\n- (id)initWithColumn:(NSUInteger)theColumn\n{\n    return [self initWithLine: 0 column: theColumn];\n}\n\n- (id)initWithLine:(NSUInteger)theLine column:(NSUInteger)theColumn\n{\n    if (self = [super init])\n    {\n        line = theLine;\n        column = theColumn;\n    }\n    \n    return self;\n}\n\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHNode.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n@interface GHNode : NSObject\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHNode.m",
    "content": "﻿#import \"GHNode.h\"\r\n\r\n@implementation GHNode\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHParser+Extensions.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n#import \"GHParser.h\"\r\n\r\n@class GHFeature;\r\n\r\n@interface GHParser (Extensions)\r\n\r\n- (GHFeature *)parse:(NSString *)theSourceFile;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHParser+Extensions.m",
    "content": "﻿#import \"GHParser+Extensions.h\"\r\n\r\n#import \"GHParser.h\"\r\n#import \"GHTokenScanner.h\"\r\n#import \"GHFeature.h\"\r\n\r\n@implementation GHParser (Extensions)\r\n\r\n- (GHFeature *)parse:(NSString *)theSourceFile\r\n{\r\n    GHFeature * feature = [self parseWithTokenScanner: [[GHTokenScanner alloc] initWithContentsOfFile: theSourceFile]];\r\n    if(![feature isKindOfClass:[GHFeature class]] || (![feature.name isKindOfClass:[NSString class]] || feature.name.length == 0)){\r\n        return nil;\r\n    }\r\n    return feature;\r\n}\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHParser.h",
    "content": "﻿// ------------------------------------------------------------------------------\r\n//  <auto-generated>\r\n//      This code was generated by Berp (http://https://github.com/gasparnagy/berp/).\r\n// \r\n//      Changes to this file may cause incorrect behavior and will be lost if\r\n//      the code is regenerated.\r\n//  </auto-generated>\r\n// ------------------------------------------------------------------------------\r\n#import <Foundation/Foundation.h>\r\n\r\ntypedef enum    GHTokenType\r\n{\r\n    GHTokenTypeNone,\r\n        GHTokenTypeEOF,\r\n            GHTokenTypeEmpty,\r\n            GHTokenTypeComment,\r\n            GHTokenTypeTagLine,\r\n            GHTokenTypeFeatureLine,\r\n            GHTokenTypeBackgroundLine,\r\n            GHTokenTypeScenarioLine,\r\n            GHTokenTypeScenarioOutlineLine,\r\n            GHTokenTypeExamplesLine,\r\n            GHTokenTypeStepLine,\r\n            GHTokenTypeDocStringSeparator,\r\n            GHTokenTypeTableRow,\r\n            GHTokenTypeLanguage,\r\n            GHTokenTypeOther,\r\n    }               GHTokenType;\r\n\r\ntypedef enum    GHRuleType\r\n{\r\n    GHRuleTypeNone,\r\n        GHRuleType_EOF, // #EOF\r\n            GHRuleType_Empty, // #Empty\r\n            GHRuleType_Comment, // #Comment\r\n            GHRuleType_TagLine, // #TagLine\r\n            GHRuleType_FeatureLine, // #FeatureLine\r\n            GHRuleType_BackgroundLine, // #BackgroundLine\r\n            GHRuleType_ScenarioLine, // #ScenarioLine\r\n            GHRuleType_ScenarioOutlineLine, // #ScenarioOutlineLine\r\n            GHRuleType_ExamplesLine, // #ExamplesLine\r\n            GHRuleType_StepLine, // #StepLine\r\n            GHRuleType_DocStringSeparator, // #DocStringSeparator\r\n            GHRuleType_TableRow, // #TableRow\r\n            GHRuleType_Language, // #Language\r\n            GHRuleType_Other, // #Other\r\n            GHRuleTypeFeature, // Feature! := Feature_Header Background? Scenario_Definition*\r\n            GHRuleTypeFeature_Header, // Feature_Header! := #Language? Tags? #FeatureLine Feature_Description\r\n            GHRuleTypeBackground, // Background! := #BackgroundLine Background_Description Scenario_Step*\r\n            GHRuleTypeScenario_Definition, // Scenario_Definition! := Tags? (Scenario | ScenarioOutline)\r\n            GHRuleTypeScenario, // Scenario! := #ScenarioLine Scenario_Description Scenario_Step*\r\n            GHRuleTypeScenarioOutline, // ScenarioOutline! := #ScenarioOutlineLine ScenarioOutline_Description ScenarioOutline_Step* Examples_Definition*\r\n            GHRuleTypeExamples_Definition, // Examples_Definition! [#Empty|#Comment|#TagLine-&gt;#ExamplesLine] := Tags? Examples\r\n            GHRuleTypeExamples, // Examples! := #ExamplesLine Examples_Description Examples_Table?\r\n            GHRuleTypeExamples_Table, // Examples_Table! := #TableRow #TableRow*\r\n            GHRuleTypeScenario_Step, // Scenario_Step := Step\r\n            GHRuleTypeScenarioOutline_Step, // ScenarioOutline_Step := Step\r\n            GHRuleTypeStep, // Step! := #StepLine Step_Arg?\r\n            GHRuleTypeStep_Arg, // Step_Arg := (DataTable | DocString)\r\n            GHRuleTypeDataTable, // DataTable! := #TableRow+\r\n            GHRuleTypeDocString, // DocString! := #DocStringSeparator #Other* #DocStringSeparator\r\n            GHRuleTypeTags, // Tags! := #TagLine+\r\n            GHRuleTypeFeature_Description, // Feature_Description := Description_Helper\r\n            GHRuleTypeBackground_Description, // Background_Description := Description_Helper\r\n            GHRuleTypeScenario_Description, // Scenario_Description := Description_Helper\r\n            GHRuleTypeScenarioOutline_Description, // ScenarioOutline_Description := Description_Helper\r\n            GHRuleTypeExamples_Description, // Examples_Description := Description_Helper\r\n            GHRuleTypeDescription_Helper, // Description_Helper := #Empty* Description? #Comment*\r\n            GHRuleTypeDescription, // Description! := #Other+\r\n    }               GHRuleType;\r\n\r\n#import \"GHToken.h\"\r\n#import \"GHParserException.h\"\r\n\r\n@protocol GHAstBuilderProtocol <NSObject>\r\n\r\n- (void)buildWithToken:(GHToken *)theToken;\r\n- (void)startRuleWithType:(GHRuleType)theRuleType;\r\n- (void)endRuleWithType:(GHRuleType)theRuleType;\r\n- (id)result;\r\n- (void)reset;\r\n\r\n@end\r\n\r\n@protocol GHTokenScannerProtocol <NSObject>\r\n\r\n- (GHToken *)read;\r\n\r\n@end\r\n\r\n@protocol GHTokenMatcherProtocol <NSObject>\r\n\r\n- (BOOL)matchEOFWithToken:(GHToken *)theToken;\r\n- (BOOL)matchEmptyWithToken:(GHToken *)theToken;\r\n- (BOOL)matchCommentWithToken:(GHToken *)theToken;\r\n- (BOOL)matchTagLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchFeatureLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchBackgroundLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchScenarioLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchScenarioOutlineLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchExamplesLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchStepLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchDocStringSeparatorWithToken:(GHToken *)theToken;\r\n- (BOOL)matchTableRowWithToken:(GHToken *)theToken;\r\n- (BOOL)matchLanguageWithToken:(GHToken *)theToken;\r\n- (BOOL)matchOtherWithToken:(GHToken *)theToken;\r\n- (void)reset;\r\n\r\n@end\r\n\r\n#import \"GHAstBuilder.h\"\r\n#import \"GHTokenMatcher.h\"\r\n#import \"GHParserException.h\"\r\n\r\n@interface GHParserContext : NSObject\r\n\r\n@property (nonatomic, strong) id<GHTokenScannerProtocol>            tokenScanner;\r\n@property (nonatomic, strong) id<GHTokenMatcherProtocol>            tokenMatcher;\r\n@property (nonatomic, strong) NSMutableArray<GHToken *>             * tokenQueue;\r\n@property (nonatomic, strong) NSMutableArray<GHParserException *>   * errors;\r\n\r\n@end\r\n\r\n@interface GHParser : NSObject\r\n\r\n@property (nonatomic, assign) BOOL  stopAtFirstError;\r\n\r\n- (id)initWithAstBuilder:(id<GHAstBuilderProtocol>)theAstBuilder;\r\n- (id)parseWithTokenScanner:(id<GHTokenScannerProtocol>)theTokenScanner;\r\n- (id)parseWithTokenScanner:(id<GHTokenScannerProtocol>)theTokenScanner tokenMatcher:(id<GHTokenMatcherProtocol>)theTokenMatcher;\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHParser.m",
    "content": "﻿// ------------------------------------------------------------------------------\r\n//  <auto-generated>\r\n//      This code was generated by Berp (http://https://github.com/gasparnagy/berp/).\r\n// \r\n//      Changes to this file may cause incorrect behavior and will be lost if\r\n//      the code is regenerated.\r\n//  </auto-generated>\r\n// ------------------------------------------------------------------------------\r\n\r\n\r\n#import \"GHParser.h\"\r\n\r\n#import \"GHAstBuilder.h\"\r\n#import \"GHToken.h\"\r\n#import \"GHParserException.h\"\r\n@implementation GHParserContext\r\n\r\n@synthesize tokenScanner;\r\n@synthesize tokenMatcher;\r\n@synthesize tokenQueue;\r\n@synthesize errors;\r\n\r\n@end\r\n\r\n@implementation GHParser\r\n{\r\n    id<GHAstBuilderProtocol>    astBuilder;\r\n}\r\n\r\n@synthesize stopAtFirstError;\r\n\r\n- (id)init\r\n{\r\n    id<GHAstBuilderProtocol> builder = (id<GHAstBuilderProtocol>)[GHAstBuilder new];\r\n    return [self initWithAstBuilder: builder];\r\n}\r\n\r\n- (id)initWithAstBuilder:(id<GHAstBuilderProtocol>)theAstBuilder\r\n{\r\n    if (self = [super init])\r\n    {\r\n        astBuilder = theAstBuilder;\r\n    }\r\n\r\n    return self;\r\n}\r\n\r\n- (id)parseWithTokenScanner:(id<GHTokenScannerProtocol>)theTokenScanner\r\n{\r\n    return [self parseWithTokenScanner: theTokenScanner tokenMatcher: [[GHTokenMatcher alloc] init]];\r\n}\r\n\r\n- (id)parseWithTokenScanner:(id<GHTokenScannerProtocol>)theTokenScanner tokenMatcher:(id<GHTokenMatcherProtocol>)theTokenMatcher\r\n{\r\n    [theTokenMatcher reset];\r\n    [astBuilder reset];\r\n\r\n    GHParserContext * context = [[GHParserContext alloc] init];\r\n    [context setTokenScanner: theTokenScanner];\r\n    [context setTokenMatcher: theTokenMatcher];\r\n    [context setTokenQueue: [[NSMutableArray<GHToken *> alloc] init]];\r\n    [context setErrors: [[NSMutableArray<GHParserException *> alloc] init]];\r\n\r\n    [self startRuleWithContext: context ruleType: GHRuleTypeFeature];\r\n    NSUInteger state = 0;\r\n    GHToken * token;\r\n    do\r\n    {\r\n        token = [self readTokenWithContext: context];\r\n        state = [self matchToken: token withState: state context: context];\r\n    } while(![token isEOF]);\r\n    \r\n    [self endRuleWithContext: context ruleType: GHRuleTypeFeature];\r\n\r\n    if ([[context errors] count])\r\n    {\r\n        @throw [[GHCompositeParserException alloc] initWithErrors: [context errors]];\r\n    }\r\n\r\n    return [self resultWithContext: context];\r\n}\r\n\r\n- (void)addError:(GHParserException *)theParserError withContext:(GHParserContext *)theContext\r\n{\r\n    [[theContext errors] addObject: theParserError];\r\n    if ([[theContext errors] count] > 10)\r\n        @throw [[GHCompositeParserException alloc] initWithErrors: [theContext errors]];\r\n}\r\n\r\n- (void)handleAstErrorWithContext:(GHParserContext *)theContext actionBlock:(void (^)())theActionBlock\r\n{\r\n    [self handleExternalErrorWithContext: theContext actionBlock: ^() { theActionBlock(); return YES; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)handleExternalErrorWithContext:(GHParserContext *)theContext actionBlock:(BOOL (^)())theActionBlock defaultValue:(BOOL)theDefaultValue\r\n{\r\n    if (stopAtFirstError)\r\n    {\r\n        return theActionBlock();\r\n    }\r\n\r\n    @try\r\n    {\r\n        return theActionBlock();\r\n    }\r\n    @catch (GHCompositeParserException * compositeParserException)\r\n    {\r\n        for (GHParserException * error in [compositeParserException errors])\r\n        {\r\n            [self addError: error withContext: theContext];\r\n        }\r\n    }\r\n    @catch (GHParserException * error)\r\n    {\r\n        [self addError: error withContext: theContext];\r\n    }\r\n    return theDefaultValue;\r\n}\r\n\r\n- (void)buildWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    [self handleAstErrorWithContext: theContext actionBlock: ^() { [astBuilder buildWithToken: theToken]; }];\r\n}\r\n\r\n- (void)startRuleWithContext:(GHParserContext *)theContext ruleType:(GHRuleType)theRuleType\r\n{\r\n    [self handleAstErrorWithContext: theContext actionBlock: ^() { [astBuilder startRuleWithType: theRuleType]; }];\r\n}\r\n\r\n- (void)endRuleWithContext:(GHParserContext *)theContext ruleType:(GHRuleType)theRuleType\r\n{\r\n    [self handleAstErrorWithContext: theContext actionBlock: ^() { [astBuilder endRuleWithType: theRuleType]; }];\r\n}\r\n\r\n- (id)resultWithContext:(GHParserContext *)theContext\r\n{\r\n    return [astBuilder result];\r\n}\r\n\r\n- (GHToken *)readTokenWithContext:(GHParserContext *)theContext\r\n{\r\n    if ([[theContext tokenQueue] count] > 0)\r\n    {\r\n        id firstObject = [[theContext tokenQueue] firstObject];\r\n        [[theContext tokenQueue] removeObjectAtIndex: 0];\r\n        return firstObject;\r\n    }\r\n    else\r\n        return [[theContext tokenScanner] read];\r\n}\r\n\r\n\r\n- (BOOL)matchEOFWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchEOFWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchEmptyWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchEmptyWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchCommentWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchCommentWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchTagLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchTagLineWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchFeatureLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchFeatureLineWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchBackgroundLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchBackgroundLineWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchScenarioLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchScenarioLineWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchScenarioOutlineLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchScenarioOutlineLineWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchExamplesLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchExamplesLineWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchStepLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchStepLineWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchDocStringSeparatorWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchDocStringSeparatorWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchTableRowWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchTableRowWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchLanguageWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchLanguageWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (BOOL)matchOtherWithContext:(GHParserContext *)theContext token:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF]) return NO;\r\n    return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchOtherWithToken: theToken]; } defaultValue: NO];\r\n}\r\n\r\n- (NSUInteger)matchToken:(GHToken *)theToken withState:(NSUInteger)theState context:(GHParserContext *)theContext\r\n{\r\n    NSUInteger newState;\r\n    switch (theState)\r\n    {\r\n        case 0:\r\n            newState = [self matchTokenAt_0: theToken context: theContext];\r\n            break;\r\n        case 1:\r\n            newState = [self matchTokenAt_1: theToken context: theContext];\r\n            break;\r\n        case 2:\r\n            newState = [self matchTokenAt_2: theToken context: theContext];\r\n            break;\r\n        case 3:\r\n            newState = [self matchTokenAt_3: theToken context: theContext];\r\n            break;\r\n        case 4:\r\n            newState = [self matchTokenAt_4: theToken context: theContext];\r\n            break;\r\n        case 5:\r\n            newState = [self matchTokenAt_5: theToken context: theContext];\r\n            break;\r\n        case 6:\r\n            newState = [self matchTokenAt_6: theToken context: theContext];\r\n            break;\r\n        case 7:\r\n            newState = [self matchTokenAt_7: theToken context: theContext];\r\n            break;\r\n        case 8:\r\n            newState = [self matchTokenAt_8: theToken context: theContext];\r\n            break;\r\n        case 9:\r\n            newState = [self matchTokenAt_9: theToken context: theContext];\r\n            break;\r\n        case 10:\r\n            newState = [self matchTokenAt_10: theToken context: theContext];\r\n            break;\r\n        case 11:\r\n            newState = [self matchTokenAt_11: theToken context: theContext];\r\n            break;\r\n        case 12:\r\n            newState = [self matchTokenAt_12: theToken context: theContext];\r\n            break;\r\n        case 13:\r\n            newState = [self matchTokenAt_13: theToken context: theContext];\r\n            break;\r\n        case 14:\r\n            newState = [self matchTokenAt_14: theToken context: theContext];\r\n            break;\r\n        case 15:\r\n            newState = [self matchTokenAt_15: theToken context: theContext];\r\n            break;\r\n        case 16:\r\n            newState = [self matchTokenAt_16: theToken context: theContext];\r\n            break;\r\n        case 17:\r\n            newState = [self matchTokenAt_17: theToken context: theContext];\r\n            break;\r\n        case 18:\r\n            newState = [self matchTokenAt_18: theToken context: theContext];\r\n            break;\r\n        case 19:\r\n            newState = [self matchTokenAt_19: theToken context: theContext];\r\n            break;\r\n        case 20:\r\n            newState = [self matchTokenAt_20: theToken context: theContext];\r\n            break;\r\n        case 21:\r\n            newState = [self matchTokenAt_21: theToken context: theContext];\r\n            break;\r\n        case 22:\r\n            newState = [self matchTokenAt_22: theToken context: theContext];\r\n            break;\r\n        case 23:\r\n            newState = [self matchTokenAt_23: theToken context: theContext];\r\n            break;\r\n        case 24:\r\n            newState = [self matchTokenAt_24: theToken context: theContext];\r\n            break;\r\n        case 25:\r\n            newState = [self matchTokenAt_25: theToken context: theContext];\r\n            break;\r\n        case 26:\r\n            newState = [self matchTokenAt_26: theToken context: theContext];\r\n            break;\r\n        case 28:\r\n            newState = [self matchTokenAt_28: theToken context: theContext];\r\n            break;\r\n        case 29:\r\n            newState = [self matchTokenAt_29: theToken context: theContext];\r\n            break;\r\n        case 30:\r\n            newState = [self matchTokenAt_30: theToken context: theContext];\r\n            break;\r\n        case 31:\r\n            newState = [self matchTokenAt_31: theToken context: theContext];\r\n            break;\r\n        case 32:\r\n            newState = [self matchTokenAt_32: theToken context: theContext];\r\n            break;\r\n        case 33:\r\n            newState = [self matchTokenAt_33: theToken context: theContext];\r\n            break;\r\n        default:\r\n            @throw [NSException exceptionWithName: NSInvalidArgumentException reason: [@\"Unknown state: \" stringByAppendingFormat: @\"%d\", (int)theState] userInfo: nil];\r\n    }\r\n    return newState;\r\n}\r\n\r\n\r\n// Start\r\n- (int)matchTokenAt_0:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchLanguageWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 1;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 2;\r\n    }\r\n    if ([self matchFeatureLineWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 3;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 0;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 0;\r\n    }\r\n    \r\n    if(theToken.matchedType == GHTokenTypeNone){\r\n        return 0;\r\n    }\r\n    NSString * stateComment = @\"State: 0 - Start\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#Language\", @\"#TagLine\", @\"#FeatureLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 0;\r\n\r\n}\r\n\r\n\r\n// Feature:0>Feature_Header:0>#Language:0\r\n- (int)matchTokenAt_1:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 2;\r\n    }\r\n    if ([self matchFeatureLineWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 3;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 1;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 1;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 1 - Feature:0>Feature_Header:0>#Language:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#TagLine\", @\"#FeatureLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 1;\r\n\r\n}\r\n\r\n\r\n// Feature:0>Feature_Header:1>Tags:0>#TagLine:0\r\n- (int)matchTokenAt_2:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 2;\r\n    }\r\n    if ([self matchFeatureLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 3;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 2;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 2;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 2 - Feature:0>Feature_Header:1>Tags:0>#TagLine:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#TagLine\", @\"#FeatureLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 2;\r\n\r\n}\r\n\r\n\r\n// Feature:0>Feature_Header:2>#FeatureLine:0\r\n- (int)matchTokenAt_3:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 3;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 5;\r\n    }\r\n    if ([self matchBackgroundLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 6;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 4;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 3 - Feature:0>Feature_Header:2>#FeatureLine:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Empty\", @\"#Comment\", @\"#BackgroundLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 3;\r\n\r\n}\r\n\r\n\r\n// Feature:0>Feature_Header:3>Feature_Description:0>Description_Helper:1>Description:0>#Other:0\r\n- (int)matchTokenAt_4:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 5;\r\n    }\r\n    if ([self matchBackgroundLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 6;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 4;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 4 - Feature:0>Feature_Header:3>Feature_Description:0>Description_Helper:1>Description:0>#Other:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Comment\", @\"#BackgroundLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 4;\r\n\r\n}\r\n\r\n\r\n// Feature:0>Feature_Header:3>Feature_Description:0>Description_Helper:2>#Comment:0\r\n- (int)matchTokenAt_5:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 5;\r\n    }\r\n    if ([self matchBackgroundLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 6;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature_Header];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 5;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 5 - Feature:0>Feature_Header:3>Feature_Description:0>Description_Helper:2>#Comment:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Comment\", @\"#BackgroundLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 5;\r\n\r\n}\r\n\r\n\r\n// Feature:1>Background:0>#BackgroundLine:0\r\n- (int)matchTokenAt_6:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 6;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 8;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 9;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 7;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 6 - Feature:1>Background:0>#BackgroundLine:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Empty\", @\"#Comment\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 6;\r\n\r\n}\r\n\r\n\r\n// Feature:1>Background:1>Background_Description:0>Description_Helper:1>Description:0>#Other:0\r\n- (int)matchTokenAt_7:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 8;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 9;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 7;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 7 - Feature:1>Background:1>Background_Description:0>Description_Helper:1>Description:0>#Other:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Comment\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 7;\r\n\r\n}\r\n\r\n\r\n// Feature:1>Background:1>Background_Description:0>Description_Helper:2>#Comment:0\r\n- (int)matchTokenAt_8:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 8;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 9;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 8;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 8 - Feature:1>Background:1>Background_Description:0>Description_Helper:2>#Comment:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Comment\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 8;\r\n\r\n}\r\n\r\n\r\n// Feature:1>Background:2>Scenario_Step:0>Step:0>#StepLine:0\r\n- (int)matchTokenAt_9:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchTableRowWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 10;\r\n    }\r\n    if ([self matchDocStringSeparatorWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 32;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 9;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 9;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 9;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 9 - Feature:1>Background:2>Scenario_Step:0>Step:0>#StepLine:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#TableRow\", @\"#DocStringSeparator\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 9;\r\n\r\n}\r\n\r\n\r\n// Feature:1>Background:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:0>DataTable:0>#TableRow:0\r\n- (int)matchTokenAt_10:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchTableRowWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 10;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 9;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 10;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 10;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 10 - Feature:1>Background:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:0>DataTable:0>#TableRow:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#TableRow\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 10;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:0>Tags:0>#TagLine:0\r\n- (int)matchTokenAt_11:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 11 - Feature:2>Scenario_Definition:0>Tags:0>#TagLine:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 11;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:0>Scenario:0>#ScenarioLine:0\r\n- (int)matchTokenAt_12:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 14;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 15;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 13;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 12 - Feature:2>Scenario_Definition:1>__alt0:0>Scenario:0>#ScenarioLine:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Empty\", @\"#Comment\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 12;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:0>Scenario:1>Scenario_Description:0>Description_Helper:1>Description:0>#Other:0\r\n- (int)matchTokenAt_13:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 14;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 15;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 13;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 13 - Feature:2>Scenario_Definition:1>__alt0:0>Scenario:1>Scenario_Description:0>Description_Helper:1>Description:0>#Other:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Comment\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 13;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:0>Scenario:1>Scenario_Description:0>Description_Helper:2>#Comment:0\r\n- (int)matchTokenAt_14:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 14;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 15;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 14;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 14 - Feature:2>Scenario_Definition:1>__alt0:0>Scenario:1>Scenario_Description:0>Description_Helper:2>#Comment:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Comment\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 14;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:0>Scenario:2>Scenario_Step:0>Step:0>#StepLine:0\r\n- (int)matchTokenAt_15:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchTableRowWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 16;\r\n    }\r\n    if ([self matchDocStringSeparatorWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 30;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 15;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 15;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 15;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 15 - Feature:2>Scenario_Definition:1>__alt0:0>Scenario:2>Scenario_Step:0>Step:0>#StepLine:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#TableRow\", @\"#DocStringSeparator\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 15;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:0>Scenario:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:0>DataTable:0>#TableRow:0\r\n- (int)matchTokenAt_16:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchTableRowWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 16;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 15;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 16;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 16;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 16 - Feature:2>Scenario_Definition:1>__alt0:0>Scenario:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:0>DataTable:0>#TableRow:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#TableRow\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 16;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:0>#ScenarioOutlineLine:0\r\n- (int)matchTokenAt_17:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 19;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 20;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        if ([self lookAheadWithContext_0: theContext token: theToken])\r\n        {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n        }\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchExamplesLineWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 18;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 17 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:0>#ScenarioOutlineLine:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Empty\", @\"#Comment\", @\"#StepLine\", @\"#TagLine\", @\"#ExamplesLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 17;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:1>ScenarioOutline_Description:0>Description_Helper:1>Description:0>#Other:0\r\n- (int)matchTokenAt_18:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 19;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 20;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        if ([self lookAheadWithContext_0: theContext token: theToken])\r\n        {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n        }\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchExamplesLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 18;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 18 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:1>ScenarioOutline_Description:0>Description_Helper:1>Description:0>#Other:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Comment\", @\"#StepLine\", @\"#TagLine\", @\"#ExamplesLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 18;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:1>ScenarioOutline_Description:0>Description_Helper:2>#Comment:0\r\n- (int)matchTokenAt_19:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 19;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 20;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        if ([self lookAheadWithContext_0: theContext token: theToken])\r\n        {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n        }\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchExamplesLineWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 19;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 19 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:1>ScenarioOutline_Description:0>Description_Helper:2>#Comment:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Comment\", @\"#StepLine\", @\"#TagLine\", @\"#ExamplesLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 19;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:2>ScenarioOutline_Step:0>Step:0>#StepLine:0\r\n- (int)matchTokenAt_20:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchTableRowWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 21;\r\n    }\r\n    if ([self matchDocStringSeparatorWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 28;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 20;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        if ([self lookAheadWithContext_0: theContext token: theToken])\r\n        {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n        }\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchExamplesLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 20;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 20;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 20 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:2>ScenarioOutline_Step:0>Step:0>#StepLine:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#TableRow\", @\"#DocStringSeparator\", @\"#StepLine\", @\"#TagLine\", @\"#ExamplesLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 20;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:2>ScenarioOutline_Step:0>Step:1>Step_Arg:0>__alt1:0>DataTable:0>#TableRow:0\r\n- (int)matchTokenAt_21:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchTableRowWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 21;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 20;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        if ([self lookAheadWithContext_0: theContext token: theToken])\r\n        {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n        }\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchExamplesLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 21;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 21;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 21 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:2>ScenarioOutline_Step:0>Step:1>Step_Arg:0>__alt1:0>DataTable:0>#TableRow:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#TableRow\", @\"#StepLine\", @\"#TagLine\", @\"#ExamplesLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 21;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:3>Examples_Definition:0>Tags:0>#TagLine:0\r\n- (int)matchTokenAt_22:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n    }\r\n    if ([self matchExamplesLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 22 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:3>Examples_Definition:0>Tags:0>#TagLine:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#TagLine\", @\"#ExamplesLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 22;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:3>Examples_Definition:1>Examples:0>#ExamplesLine:0\r\n- (int)matchTokenAt_23:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 25;\r\n    }\r\n    if ([self matchTableRowWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Table];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 26;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        if ([self lookAheadWithContext_0: theContext token: theToken])\r\n        {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n        }\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchExamplesLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 24;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 23 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:3>Examples_Definition:1>Examples:0>#ExamplesLine:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Empty\", @\"#Comment\", @\"#TableRow\", @\"#TagLine\", @\"#ExamplesLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 23;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:3>Examples_Definition:1>Examples:1>Examples_Description:0>Description_Helper:1>Description:0>#Other:0\r\n- (int)matchTokenAt_24:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 25;\r\n    }\r\n    if ([self matchTableRowWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Table];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 26;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        if ([self lookAheadWithContext_0: theContext token: theToken])\r\n        {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n        }\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchExamplesLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 24;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 24 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:3>Examples_Definition:1>Examples:1>Examples_Description:0>Description_Helper:1>Description:0>#Other:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Comment\", @\"#TableRow\", @\"#TagLine\", @\"#ExamplesLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 24;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:3>Examples_Definition:1>Examples:1>Examples_Description:0>Description_Helper:2>#Comment:0\r\n- (int)matchTokenAt_25:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 25;\r\n    }\r\n    if ([self matchTableRowWithContext: theContext token: theToken])\r\n    {\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Table];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 26;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        if ([self lookAheadWithContext_0: theContext token: theToken])\r\n        {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n        }\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchExamplesLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 25;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 25 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:3>Examples_Definition:1>Examples:1>Examples_Description:0>Description_Helper:2>#Comment:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#Comment\", @\"#TableRow\", @\"#TagLine\", @\"#ExamplesLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 25;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:3>Examples_Definition:1>Examples:2>Examples_Table:0>#TableRow:0\r\n- (int)matchTokenAt_26:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Table];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchTableRowWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 26;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        if ([self lookAheadWithContext_0: theContext token: theToken])\r\n        {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Table];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n        }\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Table];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchExamplesLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Table];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Table];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Table];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 26;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 26;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 26 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:3>Examples_Definition:1>Examples:2>Examples_Table:0>#TableRow:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#TableRow\", @\"#TagLine\", @\"#ExamplesLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 26;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:2>ScenarioOutline_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:0>#DocStringSeparator:0\r\n- (int)matchTokenAt_28:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchDocStringSeparatorWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 29;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 28;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 28 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:2>ScenarioOutline_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:0>#DocStringSeparator:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#DocStringSeparator\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 28;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:2>ScenarioOutline_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:2>#DocStringSeparator:0\r\n- (int)matchTokenAt_29:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 20;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        if ([self lookAheadWithContext_0: theContext token: theToken])\r\n        {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 22;\r\n        }\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchExamplesLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 23;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 29;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 29;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 29 - Feature:2>Scenario_Definition:1>__alt0:1>ScenarioOutline:2>ScenarioOutline_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:2>#DocStringSeparator:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#StepLine\", @\"#TagLine\", @\"#ExamplesLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 29;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:0>Scenario:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:0>#DocStringSeparator:0\r\n- (int)matchTokenAt_30:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchDocStringSeparatorWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 31;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 30;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 30 - Feature:2>Scenario_Definition:1>__alt0:0>Scenario:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:0>#DocStringSeparator:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#DocStringSeparator\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 30;\r\n\r\n}\r\n\r\n\r\n// Feature:2>Scenario_Definition:1>__alt0:0>Scenario:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:2>#DocStringSeparator:0\r\n- (int)matchTokenAt_31:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 15;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 31;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 31;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 31 - Feature:2>Scenario_Definition:1>__alt0:0>Scenario:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:2>#DocStringSeparator:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 31;\r\n\r\n}\r\n\r\n\r\n// Feature:1>Background:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:0>#DocStringSeparator:0\r\n- (int)matchTokenAt_32:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchDocStringSeparatorWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 33;\r\n    }\r\n    if ([self matchOtherWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 32;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 32 - Feature:1>Background:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:0>#DocStringSeparator:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#DocStringSeparator\", @\"#Other\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 32;\r\n\r\n}\r\n\r\n\r\n// Feature:1>Background:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:2>#DocStringSeparator:0\r\n- (int)matchTokenAt_33:(GHToken *)theToken context:(GHParserContext *)theContext\r\n{\r\n    if ([self matchEOFWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 27;\r\n    }\r\n    if ([self matchStepLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 9;\r\n    }\r\n    if ([self matchTagLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeTags];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 11;\r\n    }\r\n    if ([self matchScenarioLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 12;\r\n    }\r\n    if ([self matchScenarioOutlineLineWithContext: theContext token: theToken])\r\n    {\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeStep];\r\n        [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario_Definition];\r\n        [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioOutline];\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 17;\r\n    }\r\n    if ([self matchCommentWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 33;\r\n    }\r\n    if ([self matchEmptyWithContext: theContext token: theToken])\r\n    {\r\n        [self buildWithContext: theContext token: theToken];\r\n        return 33;\r\n    }\r\n    \r\n    NSString * stateComment = @\"State: 33 - Feature:1>Background:2>Scenario_Step:0>Step:1>Step_Arg:0>__alt1:1>DocString:2>#DocStringSeparator:0\";\r\n    [theToken detach];\r\n    NSArray<NSString *> * expectedTokens = [[NSArray<NSString *> alloc] initWithObjects: @\"#EOF\", @\"#StepLine\", @\"#TagLine\", @\"#ScenarioLine\", @\"#ScenarioOutlineLine\", @\"#Comment\", @\"#Empty\", nil];\r\n    id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment];\r\n    if (stopAtFirstError)\r\n        @throw error;\r\n    \r\n    [self addError: error withContext: theContext];\r\n    return 33;\r\n\r\n}\r\n\r\n\r\n\r\n- (BOOL)lookAheadWithContext_0:(GHParserContext *)theContext token:(GHToken *)currentToken\r\n{\r\n    [currentToken detach];\r\n    GHToken * theToken;\r\n    NSMutableArray<GHToken *> * tokenBuffer = [[NSMutableArray<GHToken *> alloc] init];\r\n    BOOL match = NO;\r\n    do\r\n    {\r\n        theToken = [self readTokenWithContext: theContext];\r\n        [theToken detach];\r\n        [tokenBuffer addObject: theToken];\r\n\r\n        if (NO\r\n            || [self matchExamplesLineWithContext: theContext token: theToken]\r\n        )\r\n        {\r\n            match = YES;\r\n            break;\r\n        }\r\n    } while (NO\r\n        || [self matchEmptyWithContext: theContext token: theToken]\r\n        || [self matchCommentWithContext: theContext token: theToken]\r\n        || [self matchTagLineWithContext: theContext token: theToken]\r\n    );\r\n    for (GHToken * token in tokenBuffer)\r\n    {\r\n        [[theContext tokenQueue] addObject: token];\r\n    }\r\n    return match;\r\n}\r\n\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHParserException.h",
    "content": "#import <Foundation/Foundation.h>\r\n@class GHLocation;\r\n@class GHToken;\r\n\r\n@interface GHParserException : NSException\r\n\r\n@property (nonatomic, readonly) GHLocation  * location;\r\n\r\n@end\r\n\r\n@interface GHAstBuilderException : GHParserException\r\n\r\n- (id)initWithMessage:(NSString *)theMessage;\r\n- (id)initWithMessage:(NSString *)theMessage location:(GHLocation *)theLocation;\r\n\r\n@end\r\n\r\n@interface GHNoSuchLanguageException : GHParserException\r\n\r\n- (id)initWithLanguage:(NSString *)theLanguage location:(GHLocation *)theLocation;\r\n\r\n@end\r\n\r\n@interface GHTokenParserException : GHParserException\r\n\r\n- (id)initWithMessage:(NSString *)theMessage token:(GHToken *)theToken;\r\n\r\n@end\r\n\r\n@interface GHUnexpectedTokenException : GHTokenParserException\r\n\r\n@property (nonatomic, readonly) NSString            * stateComment;\r\n@property (nonatomic, readonly) GHToken             * receivedToken;\r\n@property (nonatomic, readonly) NSArray<NSString *> * expectedTokenTypes;\r\n\r\n- (id)initWithToken:(GHToken *)theReceivedToken expectedTokenTypes:(NSArray<NSString *> *)theExpectedTokenTypes stateComment:(NSString *)theStateComment;\r\n\r\n@end\r\n\r\n@interface GHUnexpectedEOFException : GHTokenParserException\r\n\r\n@property (nonatomic, readonly) NSString            * stateComment;\r\n@property (nonatomic, readonly) NSArray<NSString *> * expectedTokenTypes;\r\n\r\n- (id)initWithToken:(GHToken *)theReceivedToken expectedTokenTypes:(NSArray<NSString *> *)theExpectedTokenTypes stateComment:(NSString *)theStateComment;\r\n\r\n@end\r\n\r\n@interface GHCompositeParserException : GHParserException\r\n\r\n@property (nonatomic, readonly) NSArray<GHParserException *>    * errors;\r\n\r\n- (id)initWithErrors:(NSArray<GHParserException *> *)theErrors;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHParserException.m",
    "content": "#import \"GHParserException.h\"\r\n\r\n#import \"GHLocation.h\"\r\n#import \"GHToken.h\"\r\n\r\n@interface GHParserException ()\r\n\r\n@property (nonatomic, strong) GHLocation    * location;\r\n\r\n- (id)initWithMessage:(NSString *)theMessage location:(GHLocation *)theLocation;\r\n\r\n@end\r\n\r\n@implementation GHParserException\r\n\r\n@synthesize location;\r\n\r\n- (id)initWithMessage:(NSString *)theMessage\r\n{\r\n    return [super initWithName: NSParseErrorException reason: theMessage userInfo: nil];\r\n}\r\n\r\n- (id)initWithMessage:(NSString *)theMessage location:(GHLocation *)theLocation\r\n{\r\n    NSAssert(theLocation != nil, @\"Location should not be nil\");\r\n    \r\n    if (self = [super initWithName: NSParseErrorException reason: [[self class] message: theMessage withLocation: theLocation] userInfo: nil])\r\n    {\r\n        location = theLocation;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n+ (NSString *)message:(NSString *)theMessage withLocation:(GHLocation *)theLocation\r\n{\r\n    NSAssert(theLocation != nil, @\"Location should not be nil\");\r\n    \r\n    return [NSString stringWithFormat: @\"(%d:%d): %@\", (int)[theLocation line], (int)[theLocation column], theMessage];\r\n}\r\n\r\n@end\r\n\r\n@implementation GHAstBuilderException\r\n\r\n- (id)initWithMessage:(NSString *)theMessage\r\n{\r\n    NSAssert(theMessage != nil, @\"Message should not be nil\");\r\n    \r\n    return [super initWithMessage: theMessage];\r\n}\r\n\r\n- (id)initWithMessage:(NSString *)theMessage location:(GHLocation *)theLocation\r\n{\r\n    NSAssert(theLocation != nil, @\"Location should not be nil\");\r\n    NSAssert(theMessage != nil, @\"Location should not be nil\");\r\n    \r\n    return [super initWithMessage: theMessage location: theLocation];\r\n}\r\n\r\n@end\r\n\r\n@implementation GHNoSuchLanguageException\r\n\r\n- (id)initWithLanguage:(NSString *)theLanguage location:(GHLocation *)theLocation\r\n{\r\n    return [super initWithMessage: [@\"Language not supported: \" stringByAppendingString: theLanguage] location: theLocation];\r\n}\r\n\r\n@end\r\n\r\n@implementation GHTokenParserException\r\n\r\n- (id)initWithMessage:(NSString *)theMessage token:(GHToken *)theToken\r\n{\r\n    return [super initWithMessage: theMessage location: [[self class] locationWithToken: theToken]];\r\n}\r\n\r\n+ (GHLocation *)locationWithToken:(GHToken *)theReceivedToken\r\n{\r\n    return [theReceivedToken isEOF] || [[theReceivedToken location] column] > 1\r\n ? [theReceivedToken location]\r\n    : [[GHLocation alloc] initWithLine: [[theReceivedToken location] line] column: [[theReceivedToken line] indent] + 1];\r\n}\r\n\r\n@end\r\n\r\n@interface GHUnexpectedTokenException ()\r\n\r\n@property (nonatomic, strong) NSString              * stateComment;\r\n@property (nonatomic, strong) GHToken               * receivedToken;\r\n@property (nonatomic, strong) NSArray<NSString *>   * expectedTokenTypes;\r\n\r\n@end\r\n\r\n@implementation GHUnexpectedTokenException\r\n\r\n@synthesize stateComment;\r\n@synthesize receivedToken;\r\n@synthesize expectedTokenTypes;\r\n\r\n- (id)initWithToken:(GHToken *)theReceivedToken expectedTokenTypes:(NSArray<NSString *> *)theExpectedTokenTypes stateComment:(NSString *)theStateComment\r\n{\r\n    NSAssert(theReceivedToken != nil, @\"receivedToken should not be nil\");\r\n    NSAssert(theExpectedTokenTypes != nil, @\"expectedTokenTypes should not be nil\");\r\n    \r\n    if (self = [super initWithMessage: [[self class] messageWithToken: theReceivedToken expectedTokenTypes: theExpectedTokenTypes] token: theReceivedToken])\r\n    {\r\n        receivedToken = theReceivedToken;\r\n        expectedTokenTypes = theExpectedTokenTypes;\r\n        stateComment = theStateComment;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n+ (NSString *)messageWithToken:(GHToken *)theReceivedToken expectedTokenTypes:(NSArray<NSString *> *)theExpectedTokenTypes\r\n{\r\n    NSAssert(theReceivedToken != nil, @\"receivedToken\");\r\n    NSAssert(theExpectedTokenTypes != nil, @\"expectedTokenTypes\");\r\n\r\n    return [NSString stringWithFormat: @\"expected: %@, got '%@'\", [theExpectedTokenTypes componentsJoinedByString: @\", \"], [[theReceivedToken tokenValue] stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]];\r\n}\r\n\r\n@end\r\n\r\n@interface GHUnexpectedEOFException ()\r\n\r\n@property (nonatomic, strong) NSString              * stateComment;\r\n@property (nonatomic, strong) NSArray<NSString *>   * expectedTokenTypes;\r\n\r\n@end\r\n\r\n@implementation GHUnexpectedEOFException\r\n\r\n@synthesize stateComment;\r\n@synthesize expectedTokenTypes;\r\n\r\n- (id)initWithToken:(GHToken *)theReceivedToken expectedTokenTypes:(NSArray<NSString *> *)theExpectedTokenTypes stateComment:(NSString *)theStateComment\r\n{\r\n    NSAssert(theExpectedTokenTypes != nil, @\"expectedTokenTypes should not be nil\");\r\n    \r\n    if (self = [super initWithMessage: [[self class] messageWithExpectedTokenTypes: theExpectedTokenTypes] token: theReceivedToken])\r\n    {\r\n        expectedTokenTypes = theExpectedTokenTypes;\r\n        stateComment = theStateComment;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n+ (NSString *)messageWithExpectedTokenTypes:(NSArray<NSString *> *)theExpectedTokenTypes\r\n{\r\n    NSAssert(theExpectedTokenTypes != nil, @\"expectedTokenTypes should not be nil\");\r\n\r\n    return [NSString stringWithFormat: @\"unexpected end of file, expected: %@\", [theExpectedTokenTypes componentsJoinedByString: @\", \"]];\r\n}\r\n     \r\n@end\r\n\r\n\r\n@interface GHCompositeParserException ()\r\n\r\n@property (nonatomic, strong) NSArray<GHParserException *>  * errors;\r\n\r\n@end\r\n\r\n@implementation GHCompositeParserException\r\n\r\n@synthesize errors;\r\n\r\n- (id)initWithErrors:(NSArray<GHParserException *> *)theErrors\r\n{\r\n    NSAssert([theErrors count] != 0, @\"Errors list should not be nil or empty\");\r\n    \r\n    if (self = [super initWithMessage: [[self class] messageWithErrors: theErrors]])\r\n    {\r\n        errors = theErrors;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n+ (NSString *)messageWithErrors:(NSArray<GHParserException *> *)theErrors\r\n{\r\n    if (!theErrors)\r\n        @throw [NSException exceptionWithName: NSInvalidArgumentException reason: @\"errors list should not be null\" userInfo: nil];\r\n    \r\n    return [@\"Parser errors:\\n\" stringByAppendingString: [[theErrors valueForKey: @\"reason\"] componentsJoinedByString: @\"\\n\"]];\r\n}\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHScenario.h",
    "content": "#import <Foundation/Foundation.h>\r\n#import \"GHScenarioDefinition.h\"\r\n\r\n@class GHTag;\r\n@class GHLocation;\r\n@class GHStep;\r\n\r\n@interface GHScenario : GHScenarioDefinition\r\n\r\n@property (nonatomic, readonly) NSArray<GHTag *>    * tags;\r\n\r\n- (id)initWithTags:(NSArray<GHTag *> *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray<GHStep *> *)theSteps;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHScenario.m",
    "content": "#import \"GHScenario.h\"\r\n\r\n#import \"GHScenarioDefinition_Private.h\"\r\n\r\n#import \"GHLocation.h\"\r\n\r\n@implementation GHScenario\r\n@synthesize tags;\r\n- (id)initWithTags:(NSArray<GHTag *> *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray<GHStep *> *)theSteps\r\n{\r\n    \r\n    self = [super initWithLocation: theLocation keyword: theKeyword name: theName description: theDescription steps: theSteps];\r\n    tags = theTags;\r\n    return self;\r\n}\r\n\r\n@end\r\n\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHScenarioDefinition.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n#import \"GHHasLocationProtocol.h\"\r\n#import \"GHHasDescriptionProtocol.h\"\r\n#import \"GHHasStepsProtocol.h\"\r\n#import \"GHHasTagsProtocol.h\"\r\n\r\n@class GHTag;\r\n@class GHLocation;\r\n@class GHStep;\r\n\r\n@interface GHScenarioDefinition : NSObject <GHHasLocationProtocol, GHHasDescriptionProtocol, GHHasStepsProtocol, GHHasTagsProtocol>\r\n\r\n\r\n\r\n@property (nonatomic, readonly) GHLocation          * location;\r\n@property (nonatomic, readonly) NSString            * keyword;\r\n@property (nonatomic, readonly) NSString            * name;\r\n@property (nonatomic, readonly) NSString            * desc;\r\n@property (nonatomic, readonly) NSArray<GHStep *>   * steps;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray *)theSteps;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHScenarioDefinition.m",
    "content": "﻿#import \"GHScenarioDefinition.h\"\r\n\r\n#import \"GHScenarioDefinition_Private.h\"\r\n\r\n#import \"GHTag.h\"\r\n#import \"GHStep.h\"\r\n\r\n@interface GHScenarioDefinition ()\r\n\r\n@property (nonatomic, strong) NSArray<GHTag *>  * tags;\r\n@property (nonatomic, strong) GHLocation        * location;\r\n@property (nonatomic, strong) NSString          * keyword;\r\n@property (nonatomic, strong) NSString          * name;\r\n@property (nonatomic, strong) NSString          * desc;\r\n@property (nonatomic, strong) NSArray<GHStep *> * steps;\r\n\r\n@end\r\n\r\n@implementation GHScenarioDefinition\r\n\r\n@synthesize location;\r\n@synthesize keyword;\r\n@synthesize name;\r\n@synthesize desc;\r\n@synthesize steps;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray<GHStep *> *)theSteps\r\n{\r\n    if (self = [super init])\r\n    {\r\n        location = theLocation;\r\n        keyword = theKeyword;\r\n        name = theName;\r\n        desc = theDescription;\r\n        steps = theSteps;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHScenarioDefinition_Private.h",
    "content": "#import <Foundation/Foundation.h>\n@interface GHScenarioDefinition (Private)\n\n- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray<GHStep *> *)theSteps;\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHScenarioOutline.h",
    "content": "#import <Foundation/Foundation.h>\r\n#import \"GHScenarioDefinition.h\"\r\n\r\n@class GHExamples;\r\n\r\n@interface GHScenarioOutline : GHScenarioDefinition\r\n\r\n@property (nonatomic, readonly) NSArray<GHExamples *> * examples;\r\n\r\n@property (nonatomic, readonly) NSArray<GHTag *>    * tags;\r\n\r\n\r\n- (id)initWithTags:(NSArray<GHTag *> *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray<GHStep *> *)theSteps examples:(NSArray<GHExamples *> *)theExamples;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHScenarioOutline.m",
    "content": "﻿#import \"GHScenarioOutline.h\"\r\n\r\n#import \"GHScenarioDefinition_Private.h\"\r\n\r\n@interface GHScenarioOutline ()\r\n\r\n@property (nonatomic, strong) NSArray<GHExamples *> * examples;\r\n\r\n@end\r\n\r\n@implementation GHScenarioOutline\r\n\r\n@synthesize examples;\r\n@synthesize tags;\r\n\r\n- (id)initWithTags:(NSArray<GHTag *> *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray<GHStep *> *)theSteps examples:(NSArray<GHExamples *> *)theExamples\r\n{\r\n    if (self = [super initWithLocation: theLocation keyword: theKeyword name: theName description: theDescription steps: theSteps])\r\n    {\r\n        examples = theExamples;\r\n        tags = theTags;\r\n    }\r\n    return self;\r\n}\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHStep.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n#import \"GHHasLocationProtocol.h\"\r\n\r\n@class GHLocation;\r\n@class GHStepArgument;\r\n\r\n@interface GHStep : NSObject <GHHasLocationProtocol>\r\n\r\n@property (nonatomic, readonly) GHLocation      * location;\r\n@property (nonatomic, readonly) NSString        * keyword;\r\n@property (nonatomic, readonly) NSString        * text;\r\n@property (nonatomic, readonly) GHStepArgument  * argument;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword text:(NSString *)theText stepArgument:(GHStepArgument *)theStepArgument;\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHStep.m",
    "content": "﻿#import \"GHStep.h\"\r\n\r\n#import \"GHLocation.h\"\r\n#import \"GHStepArgument.h\"\r\n\r\n@interface GHStep ()\r\n\r\n@property (nonatomic, strong) GHLocation        * location;\r\n@property (nonatomic, strong) NSString          * keyword;\r\n@property (nonatomic, strong) NSString          * text;\r\n@property (nonatomic, strong) GHStepArgument    * argument;\r\n\r\n@end\r\n\r\n@implementation GHStep\r\n\r\n@synthesize location;\r\n@synthesize keyword;\r\n@synthesize text;\r\n@synthesize argument;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword text:(NSString *)theText stepArgument:(GHStepArgument *)theArgument\r\n{\r\n    if (self = [super init])\r\n    {\r\n        location = theLocation;\r\n        keyword = theKeyword;\r\n        text = theText;\r\n        argument = theArgument;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHStepArgument.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n@interface GHStepArgument : NSObject\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHStepArgument.m",
    "content": "﻿#import \"GHStepArgument.h\"\r\n\r\n@implementation GHStepArgument\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHTableCell.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n#import \"GHHasLocationProtocol.h\"\r\n\r\n@class GHLocation;\r\n\r\n@interface GHTableCell : NSObject <GHHasLocationProtocol>\r\n\r\n@property (nonatomic, readonly) GHLocation  * location;\r\n@property (nonatomic, readonly) NSString    * value;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation value:(NSString *)theValue;\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHTableCell.m",
    "content": "﻿#import \"GHTableCell.h\"\r\n\r\n#import \"GHLocation.h\"\r\n\r\n@interface GHTableCell ()\r\n\r\n@property (nonatomic, strong) GHLocation  * location;\r\n@property (nonatomic, strong) NSString    * value;\r\n\r\n@end\r\n\r\n@implementation GHTableCell\r\n\r\n@synthesize location;\r\n@synthesize value;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation value:(NSString *)theValue\r\n{\r\n    if (self = [super init])\r\n    {\r\n        location = theLocation;\r\n        value = theValue;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHTableRow.h",
    "content": "#import <Foundation/Foundation.h>\r\n#import \"GHHasLocationProtocol.h\"\r\n\r\n@class GHTableCell;\r\n\r\n@interface GHTableRow : NSObject <GHHasLocationProtocol>\r\n\r\n@property (nonatomic, readonly) GHLocation              * location;\r\n@property (nonatomic, readonly) NSArray<GHTableCell *>  * cells;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation cells:(NSArray<GHTableCell *> *)theCells;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHTableRow.m",
    "content": "﻿#import \"GHTableRow.h\"\r\n\r\n#import \"GHLocation.h\"\r\n#import \"GHStepArgument.h\"\r\n\r\n@interface GHTableRow ()\r\n\r\n@property (nonatomic, strong) GHLocation                * location;\r\n@property (nonatomic, strong) NSArray<GHTableCell *>    * cells;\r\n\r\n@end\r\n\r\n@implementation GHTableRow\r\n\r\n@synthesize location;\r\n@synthesize cells;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation cells:(NSArray<GHTableCell *> *)theCells\r\n{\r\n    if (self = [super init])\r\n    {\r\n        location = theLocation;\r\n        cells = theCells;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHTag.h",
    "content": "#import <Foundation/Foundation.h>\r\n@class GHLocation;\r\n\r\n#import \"GHHasLocationProtocol.h\"\r\n\r\n@interface GHTag : NSObject <GHHasLocationProtocol>\r\n\r\n@property (nonatomic, readonly) GHLocation  * location;\r\n@property (nonatomic, readonly) NSString    * name;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation name:(NSString *)theName;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHTag.m",
    "content": "﻿#import \"GHTag.h\"\r\n\r\n#import \"GHLocation.h\"\r\n\r\n@interface GHTag ()\r\n\r\n@property (nonatomic, strong) GHLocation    * location;\r\n@property (nonatomic, strong) NSString      * name;\r\n\r\n@end\r\n\r\n@implementation GHTag\r\n\r\n@synthesize location;\r\n@synthesize name;\r\n\r\n- (id)initWithLocation:(GHLocation *)theLocation name:(NSString *)theName\r\n{\r\n    if (self = [super init])\r\n    {\r\n        location = theLocation;\r\n        name = theName;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHToken.h",
    "content": "#import <Foundation/Foundation.h>\r\n#import \"GHGherkinLineProtocol.h\"\r\n\r\n@class GHGherkinLineSpan;\r\n@class GHGherkinDialect;\r\n@class GHLocation;\r\n\r\n#import \"GHAstNode.h\"\r\n\r\n@interface GHToken : NSObject\r\n\r\n@property (nonatomic, readonly, getter=isEOF) BOOL          eof;\r\n@property (nonatomic, strong) id<GHGherkinLineProtocol>     line;\r\n@property (nonatomic, assign) GHTokenType                   matchedType;\r\n@property (nonatomic, strong) NSString                      * matchedKeyword;\r\n@property (nonatomic, strong) NSString                      * matchedText;\r\n@property (nonatomic, strong) NSArray<GHGherkinLineSpan *>  * matchedItems;\r\n@property (nonatomic, assign) NSUInteger                    matchedIndent;\r\n@property (nonatomic, strong) GHGherkinDialect              * matchedGherkinDialect;\r\n@property (nonatomic, strong) GHLocation                    * location;\r\n\r\n- (id)initWithGherkinLine:(id<GHGherkinLineProtocol>)theGherkinLine location:(GHLocation *)theLocation;\r\n- (void)detach;\r\n- (NSString *)tokenValue;\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHToken.m",
    "content": "﻿#import \"GHToken.h\"\r\n\r\n#import \"GHGherkinLineProtocol.h\"\r\n\r\n#import \"GHParser.h\"\r\n\r\n@implementation GHToken\r\n\r\n@synthesize eof;\r\n@synthesize line;\r\n@synthesize matchedType;\r\n@synthesize matchedKeyword;\r\n@synthesize matchedText;\r\n@synthesize matchedItems;\r\n@synthesize matchedIndent;\r\n@synthesize matchedGherkinDialect;\r\n@synthesize location;\r\n\r\n- (id)initWithGherkinLine:(id<GHGherkinLineProtocol>)theGherkinLine location:(GHLocation *)theLocation\r\n{\r\n    if (self = [super init])\r\n    {\r\n        line = theGherkinLine;\r\n        location = theLocation;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n- (void)detach\r\n{\r\n    [line detach];\r\n}\r\n\r\n- (BOOL)isEOF\r\n{\r\n    return line == nil;\r\n}\r\n\r\n- (NSString *)tokenValue\r\n{\r\n    return [self isEOF] ? @\"EOF\" : [line lineTextByRemovingIndent: -1];\r\n}\r\n\r\n- (NSString *)description\r\n{\r\n    return [NSString stringWithFormat: @\"%d: %@/%@\", matchedType, matchedKeyword, matchedText];\r\n}\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHTokenMatcher.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n#import \"GHParser.h\"\r\n\r\n@class GHToken;\r\n@class GHGherkinDialect;\r\n@class GHGherkinDialectProvider;\r\n\r\n@interface GHTokenMatcher : NSObject <GHTokenMatcherProtocol>\r\n\r\n- (GHGherkinDialect *)currentDialect;\r\n- (id)initWithDialectProvider:(GHGherkinDialectProvider *)theDialectProvider;\r\n- (id)initWithLanguage:(NSString *)theLanguage;\r\n- (void)reset;\r\n- (BOOL)matchEOFWithToken:(GHToken *)theToken;\r\n- (BOOL)matchOtherWithToken:(GHToken *)theToken;\r\n- (BOOL)matchEmptyWithToken:(GHToken *)theToken;\r\n- (BOOL)matchCommentWithToken:(GHToken *)theToken;\r\n- (BOOL)matchLanguageWithToken:(GHToken *)theToken;\r\n- (BOOL)matchTagLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchFeatureLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchBackgroundLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchScenarioLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchScenarioOutlineLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchExamplesLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchDocStringSeparatorWithToken:(GHToken *)theToken;\r\n- (BOOL)matchStepLineWithToken:(GHToken *)theToken;\r\n- (BOOL)matchTableRowWithToken:(GHToken *)theToken;\r\n\r\n@end"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHTokenMatcher.m",
    "content": "﻿#import \"GHTokenMatcher.h\"\r\n\r\n#import \"GHGherkinDialectProvider.h\"\r\n#import \"GHGherkinLineSpan.h\"\r\n#import \"GHToken.h\"\r\n#import \"GHAstNode.h\"\r\n#import \"GHGherkinDialect.h\"\r\n#import \"GHGherkinLanguageConstants.h\"\r\n#import \"GHLocation.h\"\r\n\r\n#import \"GHParser.h\"\r\n\r\n@interface GHTokenMatcher ()\r\n\r\n- (NSString *)unescapeDocString:(NSString *)theText;\r\n- (BOOL)matchDocStringSeparatorWithToken:(GHToken *)theToken separator:(NSString *)theSeparator open:(BOOL)isOpen;\r\n- (BOOL)matchTitleLineWithToken:(GHToken *)theToken tokenType:(GHTokenType)theTokenType keywords:(NSArray<NSString *> *)theKeywords;\r\n- (GHParserException *)matcherExceptionWithToken:(GHToken *)theToken message:(NSString *)theMessage;\r\n\r\n- (void)setTokenMatched:(GHToken *)theToken tokenType:(GHTokenType)theMatchedType text:(NSString *)theText keyword:(NSString *)theKeyword indent:(NSNumber *)theIndent items:(NSArray<GHGherkinLineSpan *> *)theItems;\r\n\r\n@end\r\n\r\n@implementation GHTokenMatcher\r\n{\r\n    id<GHGherkinDialectProviderProtocol>    dialectProvider;\r\n    GHGherkinDialect                        * currentDialect;\r\n    NSString                                * activeDocStringSeparator;\r\n    NSInteger                               indentToRemove;\r\n}\r\n\r\n- (GHGherkinDialect *)currentDialect\r\n{\r\n    if (!currentDialect)\r\n        currentDialect = [dialectProvider defaultDialect];\r\n\r\n    return currentDialect;\r\n}\r\n\r\n- (id)init\r\n{\r\n    if (self = [super init])\r\n    {\r\n        dialectProvider = [[GHGherkinDialectProvider alloc] init];\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n- (id)initWithDialectProvider:(id<GHGherkinDialectProviderProtocol>)theDialectProvider\r\n{\r\n    if (self = [super init])\r\n    {\r\n        dialectProvider = theDialectProvider;\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n- (id)initWithLanguage:(NSString *)theLanguage\r\n{\r\n    return [self initWithDialectProvider: [[GHGherkinDialectProvider alloc] initWithLanguage: theLanguage]];\r\n}\r\n\r\n- (void)reset\r\n{\r\n    activeDocStringSeparator = nil;\r\n    indentToRemove = 0;\r\n    if (currentDialect != [dialectProvider defaultDialect])\r\n        currentDialect = [dialectProvider defaultDialect];\r\n}\r\n\r\n- (void)setTokenMatched:(GHToken *)theToken tokenType:(GHTokenType)theMatchedType text:(NSString *)theText keyword:(NSString *)theKeyword indent:(NSNumber *)theIndent items:(NSArray<GHGherkinLineSpan *> *)theItems\r\n{\r\n    [theToken setMatchedType: theMatchedType];\r\n    [theToken setMatchedKeyword: theKeyword];\r\n    [theToken setMatchedText: theText];\r\n    [theToken setMatchedItems: theItems];\r\n    [theToken setMatchedGherkinDialect: currentDialect];\r\n    [theToken setMatchedIndent: theIndent ? [theIndent integerValue] : [theToken line] ? [[theToken line] indent] : 0];\r\n    \r\n    [theToken setLocation: [[GHLocation alloc] initWithLine: [[theToken location] line] column: [theToken matchedIndent] + 1]];\r\n}\r\n\r\n- (BOOL)matchEOFWithToken:(GHToken *)theToken\r\n{\r\n    if ([theToken isEOF])\r\n    {\r\n        [self setTokenMatched: theToken tokenType: GHTokenTypeEOF text: nil keyword: nil indent: nil items: nil];\r\n        \r\n        return YES;\r\n    }\r\n    \r\n    return NO;\r\n}\r\n\r\n- (BOOL)matchOtherWithToken:(GHToken *)theToken\r\n{\r\n    NSString * text = [[theToken line] lineTextByRemovingIndent: indentToRemove]; //take the entire line, except removing DocString indents\r\n    [self setTokenMatched: theToken tokenType: GHTokenTypeOther text: [self unescapeDocString: text] keyword: nil indent: @(0) items: nil];\r\n    \r\n    return YES;\r\n}\r\n\r\n- (BOOL)matchEmptyWithToken:(GHToken *)theToken\r\n{\r\n    if ([[theToken line] empty])\r\n    {\r\n        [self setTokenMatched: theToken tokenType: GHTokenTypeEmpty text: nil keyword: nil indent: nil items: nil];\r\n        \r\n        return YES;\r\n    }\r\n    \r\n    return NO;\r\n}\r\n\r\n- (BOOL)matchCommentWithToken:(GHToken *)theToken\r\n{\r\n    if ([[theToken line] hasPrefix: GHCommentPrefix])\r\n    {\r\n        NSString * text = [[theToken line] lineTextByRemovingIndent: 0]; //take the entire line\r\n        [self setTokenMatched: theToken tokenType: GHTokenTypeComment text: text keyword: nil indent: @(0) items: nil];\r\n        \r\n        return YES;\r\n    }\r\n    return NO;\r\n}\r\n\r\n- (GHParserException *)matcherExceptionWithToken:(GHToken *)theToken message:(NSString *)theMessage\r\n{\r\n    GHLocation * exceptionLocation = [[GHLocation alloc] initWithLine: [[theToken location] line] column: [[theToken line] indent] + 1];\r\n    return [[GHAstBuilderException alloc] initWithMessage: theMessage location: exceptionLocation];\r\n}\r\n\r\n- (BOOL)matchLanguageWithToken:(GHToken *)theToken\r\n{\r\n    NSRegularExpression * regularExpression = [NSRegularExpression regularExpressionWithPattern: @\"^\\\\s*#\\\\s*language\\\\s*:\\\\s*([a-zA-Z\\\\-_]+)\\\\s*$\" options: 0 error: nil];\r\n    NSString * lineText = [[theToken line] lineTextByRemovingIndent: 0];\r\n    NSArray<NSTextCheckingResult *> * matches = [regularExpression matchesInString: lineText options: 0 range: NSMakeRange(0, [lineText length])];\r\n    if ([matches count])\r\n    {\r\n        NSRange range = [[matches firstObject] rangeAtIndex: 1];\r\n        if (range.location != NSNotFound)\r\n        {\r\n            NSString * language = [lineText substringWithRange: range];\r\n            [self setTokenMatched: theToken tokenType: GHTokenTypeLanguage text: language keyword: nil indent: nil items: nil];\r\n\r\n            //@try\r\n            //{\r\n                currentDialect = [dialectProvider dialectWithLanguage: language location: [theToken location]];\r\n            //}\r\n            //@catch (NSException * exception)\r\n            //{\r\n            //    @throw [self matcherExceptionWithToken: theToken message: [exception reason]];\r\n            //}\r\n\r\n            return YES;\r\n        }\r\n    }\r\n    return NO;\r\n}\r\n\r\n- (BOOL)matchTagLineWithToken:(GHToken *)theToken\r\n{\r\n    if ([[theToken line] hasPrefix: GHTagPrefix])\r\n    {\r\n        [self setTokenMatched: theToken tokenType: GHTokenTypeTagLine text: nil keyword: nil indent: nil items: [[theToken line] tags]];\r\n        \r\n        return YES;\r\n    }\r\n    return NO;\r\n}\r\n\r\n- (BOOL)matchFeatureLineWithToken:(GHToken *)theToken\r\n{\r\n    return [self matchTitleLineWithToken: theToken tokenType: GHTokenTypeFeatureLine keywords: [currentDialect featureKeywords]];\r\n}\r\n\r\n- (BOOL)matchBackgroundLineWithToken:(GHToken *)theToken\r\n{\r\n    return [self matchTitleLineWithToken: theToken tokenType: GHTokenTypeBackgroundLine keywords: [currentDialect backgroundKeywords]];\r\n}\r\n\r\n- (BOOL)matchScenarioLineWithToken:(GHToken *)theToken\r\n{\r\n    return [self matchTitleLineWithToken: theToken tokenType: GHTokenTypeScenarioLine keywords: [currentDialect scenarioKeywords]];\r\n}\r\n\r\n- (BOOL)matchScenarioOutlineLineWithToken:(GHToken *)theToken\r\n{\r\n    return [self matchTitleLineWithToken: theToken tokenType: GHTokenTypeScenarioOutlineLine keywords: [currentDialect scenarioOutlineKeywords]];\r\n}\r\n\r\n- (BOOL)matchExamplesLineWithToken:(GHToken *)theToken\r\n{\r\n    return [self matchTitleLineWithToken: theToken tokenType: GHTokenTypeExamplesLine keywords: [currentDialect examplesKeywords]];\r\n}\r\n\r\n- (BOOL)matchTitleLineWithToken:(GHToken *)theToken tokenType:(GHTokenType)theTokenType keywords:(NSArray<NSString *> *)theKeywords\r\n{\r\n    for (NSString * keyword in theKeywords)\r\n    {\r\n        if ([[theToken line] hasTitleKeywordPrefix: keyword])\r\n        {\r\n            NSString * title = [[theToken line] trimmedRest: ([keyword length] + [GHTitleKeywordSeparator length])];\r\n            [self setTokenMatched: theToken tokenType: theTokenType text: title keyword: keyword indent: nil items: nil];\r\n            \r\n            return YES;\r\n        }\r\n    }\r\n    return NO;\r\n}\r\n\r\n- (BOOL)matchDocStringSeparatorWithToken:(GHToken *)theToken\r\n{\r\n    return activeDocStringSeparator == nil\r\n        // open\r\n    ? ([self matchDocStringSeparatorWithToken: theToken separator: GHDocStringSeparator open: YES] ||\r\n    [self matchDocStringSeparatorWithToken: theToken separator: GHDocStringAlternativeSeparator open: YES])\r\n        // close\r\n    : [self matchDocStringSeparatorWithToken: theToken separator: activeDocStringSeparator open: NO];\r\n}\r\n\r\n- (BOOL)matchDocStringSeparatorWithToken:(GHToken *)theToken separator:(NSString *)theSeparator open:(BOOL)isOpen\r\n{\r\n    if ([[theToken line] hasPrefix: theSeparator])\r\n    {\r\n        NSString * contentType = nil;\r\n        if (isOpen)\r\n        {\r\n            contentType = [[theToken line] trimmedRest: [theSeparator length]];\r\n            activeDocStringSeparator = theSeparator;\r\n            indentToRemove = [[theToken line] indent];\r\n        }\r\n        else\r\n        {\r\n            activeDocStringSeparator = nil;\r\n            indentToRemove = 0;\r\n        }\r\n\r\n        [self setTokenMatched: theToken tokenType: GHTokenTypeDocStringSeparator text: contentType keyword: nil indent: nil items: nil];\r\n        \r\n        return YES;\r\n    }\r\n    return NO;\r\n}\r\n\r\n\r\n- (BOOL)matchStepLineWithToken:(GHToken *)theToken\r\n{\r\n    NSArray<NSString *> * keywords = [currentDialect stepKeywords];\r\n    for (NSString * keyword in keywords)\r\n    {\r\n        if ([[theToken line] hasPrefix: keyword])\r\n        {\r\n            NSString * stepText = [[theToken line] trimmedRest: [keyword length]];\r\n            [self setTokenMatched: theToken tokenType: GHTokenTypeStepLine text: stepText keyword: keyword indent: nil items: nil];\r\n            \r\n            return YES;\r\n        }\r\n    }\r\n    \r\n    return NO;\r\n}\r\n\r\n- (BOOL)matchTableRowWithToken:(GHToken *)theToken\r\n{\r\n    if ([[theToken line] hasPrefix: GHTableCellSeparator])\r\n    {\r\n        [self setTokenMatched: theToken tokenType: GHTokenTypeTableRow text: nil keyword: nil indent: nil items: [[theToken line] tableCells]];\r\n        \r\n        return YES;\r\n    }\r\n    \r\n    return NO;\r\n}\r\n\r\n- (NSString *)unescapeDocString:(NSString *)theText\r\n{\r\n  return activeDocStringSeparator != nil ? [theText stringByReplacingOccurrencesOfString: @\"\\\\\\\"\\\\\\\"\\\\\\\"\" withString: @\"\\\"\\\"\\\"\"] : theText;\r\n}\r\n\r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHTokenScanner.h",
    "content": "﻿#import <Foundation/Foundation.h>\r\n#import \"GHParser.h\"\r\n\r\n@class GHToken;\r\n\r\n@interface GHTokenScanner : NSObject <GHTokenScannerProtocol>\r\n\r\n- (id)initWithText:(NSString *)theFileContent;\r\n- (id)initWithContentsOfFile:(NSString *)theFilePath;\r\n- (GHToken *)read;\r\n        \r\n@end\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/GHTokenScanner.m",
    "content": "﻿#import <Foundation/Foundation.h>\r\n#import \"GHTokenScanner.h\"\r\n\r\n#import \"GHToken.h\"\r\n#import \"GHLocation.h\"\r\n#import \"GHGherkinLine.h\"\r\n#import \"GHParser.h\"\r\n\r\n@implementation GHTokenScanner\r\n{\r\n    NSUInteger                  lineNumber;\r\n//    NSArray<NSString *> * lines;\r\n    NSMutableArray<NSString *>  * lines;\r\n    NSMutableString             * fileContent;\r\n}\r\n\r\n- (id)initWithText:(NSString *)theFileContent\r\n{\r\n    if (self = [super init])\r\n    {\r\n        lineNumber = 0;\r\n        if ([theFileContent length])\r\n        {\r\n            lines = [[NSMutableArray<NSString *> alloc] init];\r\n            [theFileContent enumerateLinesUsingBlock:^(NSString * _Nonnull line, BOOL * _Nonnull stop) {\r\n                [lines addObject: line];\r\n            }];\r\n        }\r\n    }\r\n    \r\n    return self;\r\n}\r\n\r\n- (id)initWithContentsOfFile:(NSString *)theFilePath\r\n{\r\n    return [self initWithText: [NSString stringWithContentsOfFile: theFilePath encoding: NSUTF8StringEncoding error: NULL]];\r\n}\r\n\r\n/// <summary>\r\n/// The scanner reads a gherkin doc (typically read from a .feature file) and creates a token\r\n/// for each line.\r\n///\r\n/// The tokens are passed to the parser, which outputs an AST (Abstract Syntax Tree).\r\n///\r\n/// If the scanner sees a `#` language header, it will reconfigure itself dynamically to look\r\n/// for  Gherkin keywords for the associated language. The keywords are defined in\r\n/// gherkin-languages.json.\r\n/// </summary>\r\n- (GHToken *)read\r\n{\r\n    NSString * line = (lineNumber < [lines count] ? lines[lineNumber] : nil);\r\n    GHLocation * location = [[GHLocation alloc] initWithLine: ++lineNumber];\r\n    GHGherkinLine * gherkinLine = line ? [[GHGherkinLine alloc] initWithLine: line lineNumber: lineNumber] : nil;\r\n    \r\n    return [[GHToken alloc] initWithGherkinLine: gherkinLine location: location];\r\n}\r\n\r\n@end\r\n\r\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/NSString+Trim.h",
    "content": "#import <Foundation/Foundation.h>\n@interface NSString (Trim)\n\n- (NSString *)stringByTrimmingStartWithCharactersInSet:(NSCharacterSet *)theCharacterSet;\n- (NSString *)stringByTrimmingEndWithCharactersInSet:(NSCharacterSet *)theCharacterSet;\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/NSString+Trim.m",
    "content": "#import \"NSString+Trim.h\"\n\n@implementation NSString (Trim)\n\n- (NSString *)stringByTrimmingStartWithCharactersInSet:(NSCharacterSet *)theCharacterSet\n{\n    NSUInteger i = 0;\n    NSUInteger length = [self length];\n    while (i < length && [theCharacterSet characterIsMember: [self characterAtIndex: i]])\n    {\n        i++;\n    }\n    \n    return i ? [self substringFromIndex: i] : self;\n}\n\n- (NSString *)stringByTrimmingEndWithCharactersInSet:(NSCharacterSet *)theCharacterSet\n{\n    NSInteger length = [self length] - 1;\n    while (length > 0 && [theCharacterSet characterIsMember: [self characterAtIndex: length]])\n    {\n        length--;\n    }\n    \n    return length > 0 ? [self substringToIndex: length + 1] : self;\n}\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Dependencies/Gherkin/gherkin-languages.json",
    "content": "{\n  \"af\": {\n    \"and\": [\n      \"* \",\n      \"En \"\n    ],\n    \"background\": [\n      \"Agtergrond\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Maar \"\n    ],\n    \"examples\": [\n      \"Voorbeelde\"\n    ],\n    \"feature\": [\n      \"Funksie\",\n      \"Besigheid Behoefte\",\n      \"Vermoë\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Gegewe \"\n    ],\n    \"name\": \"Afrikaans\",\n    \"native\": \"Afrikaans\",\n    \"scenario\": [\n      \"Situasie\"\n    ],\n    \"scenarioOutline\": [\n      \"Situasie Uiteensetting\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Dan \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Wanneer \"\n    ]\n  },\n  \"am\": {\n    \"and\": [\n      \"* \",\n      \"Եվ \"\n    ],\n    \"background\": [\n      \"Կոնտեքստ\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Բայց \"\n    ],\n    \"examples\": [\n      \"Օրինակներ\"\n    ],\n    \"feature\": [\n      \"Ֆունկցիոնալություն\",\n      \"Հատկություն\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Դիցուք \"\n    ],\n    \"name\": \"Armenian\",\n    \"native\": \"հայերեն\",\n    \"scenario\": [\n      \"Սցենար\"\n    ],\n    \"scenarioOutline\": [\n      \"Սցենարի կառուցվացքը\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Ապա \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Եթե \",\n      \"Երբ \"\n    ]\n  },\n  \"ar\": {\n    \"and\": [\n      \"* \",\n      \"و \"\n    ],\n    \"background\": [\n      \"الخلفية\"\n    ],\n    \"but\": [\n      \"* \",\n      \"لكن \"\n    ],\n    \"examples\": [\n      \"امثلة\"\n    ],\n    \"feature\": [\n      \"خاصية\"\n    ],\n    \"given\": [\n      \"* \",\n      \"بفرض \"\n    ],\n    \"name\": \"Arabic\",\n    \"native\": \"العربية\",\n    \"scenario\": [\n      \"سيناريو\"\n    ],\n    \"scenarioOutline\": [\n      \"سيناريو مخطط\"\n    ],\n    \"then\": [\n      \"* \",\n      \"اذاً \",\n      \"ثم \"\n    ],\n    \"when\": [\n      \"* \",\n      \"متى \",\n      \"عندما \"\n    ]\n  },\n  \"bg\": {\n    \"and\": [\n      \"* \",\n      \"И \"\n    ],\n    \"background\": [\n      \"Предистория\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Но \"\n    ],\n    \"examples\": [\n      \"Примери\"\n    ],\n    \"feature\": [\n      \"Функционалност\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Дадено \"\n    ],\n    \"name\": \"Bulgarian\",\n    \"native\": \"български\",\n    \"scenario\": [\n      \"Сценарий\"\n    ],\n    \"scenarioOutline\": [\n      \"Рамка на сценарий\"\n    ],\n    \"then\": [\n      \"* \",\n      \"То \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Когато \"\n    ]\n  },\n  \"bm\": {\n    \"and\": [\n      \"* \",\n      \"Dan \"\n    ],\n    \"background\": [\n      \"Latar Belakang\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Tetapi \",\n      \"Tapi \"\n    ],\n    \"examples\": [\n      \"Contoh\"\n    ],\n    \"feature\": [\n      \"Fungsi\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Diberi \",\n      \"Bagi \"\n    ],\n    \"name\": \"Malay\",\n    \"native\": \"Bahasa Melayu\",\n    \"scenario\": [\n      \"Senario\",\n      \"Situasi\",\n      \"Keadaan\"\n    ],\n    \"scenarioOutline\": [\n      \"Kerangka Senario\",\n      \"Kerangka Situasi\",\n      \"Kerangka Keadaan\",\n      \"Garis Panduan Senario\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Maka \",\n      \"Kemudian \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Apabila \"\n    ]\n  },\n  \"bs\": {\n    \"and\": [\n      \"* \",\n      \"I \",\n      \"A \"\n    ],\n    \"background\": [\n      \"Pozadina\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Ali \"\n    ],\n    \"examples\": [\n      \"Primjeri\"\n    ],\n    \"feature\": [\n      \"Karakteristika\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Dato \"\n    ],\n    \"name\": \"Bosnian\",\n    \"native\": \"Bosanski\",\n    \"scenario\": [\n      \"Scenariju\",\n      \"Scenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Scenariju-obris\",\n      \"Scenario-outline\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Zatim \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Kada \"\n    ]\n  },\n  \"ca\": {\n    \"and\": [\n      \"* \",\n      \"I \"\n    ],\n    \"background\": [\n      \"Rerefons\",\n      \"Antecedents\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Però \"\n    ],\n    \"examples\": [\n      \"Exemples\"\n    ],\n    \"feature\": [\n      \"Característica\",\n      \"Funcionalitat\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Donat \",\n      \"Donada \",\n      \"Atès \",\n      \"Atesa \"\n    ],\n    \"name\": \"Catalan\",\n    \"native\": \"català\",\n    \"scenario\": [\n      \"Escenari\"\n    ],\n    \"scenarioOutline\": [\n      \"Esquema de l'escenari\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Aleshores \",\n      \"Cal \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Quan \"\n    ]\n  },\n  \"cs\": {\n    \"and\": [\n      \"* \",\n      \"A také \",\n      \"A \"\n    ],\n    \"background\": [\n      \"Pozadí\",\n      \"Kontext\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Ale \"\n    ],\n    \"examples\": [\n      \"Příklady\"\n    ],\n    \"feature\": [\n      \"Požadavek\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Pokud \",\n      \"Za předpokladu \"\n    ],\n    \"name\": \"Czech\",\n    \"native\": \"Česky\",\n    \"scenario\": [\n      \"Scénář\"\n    ],\n    \"scenarioOutline\": [\n      \"Náčrt Scénáře\",\n      \"Osnova scénáře\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Pak \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Když \"\n    ]\n  },\n  \"cy-GB\": {\n    \"and\": [\n      \"* \",\n      \"A \"\n    ],\n    \"background\": [\n      \"Cefndir\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Ond \"\n    ],\n    \"examples\": [\n      \"Enghreifftiau\"\n    ],\n    \"feature\": [\n      \"Arwedd\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Anrhegedig a \"\n    ],\n    \"name\": \"Welsh\",\n    \"native\": \"Cymraeg\",\n    \"scenario\": [\n      \"Scenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Scenario Amlinellol\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Yna \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Pryd \"\n    ]\n  },\n  \"da\": {\n    \"and\": [\n      \"* \",\n      \"Og \"\n    ],\n    \"background\": [\n      \"Baggrund\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Men \"\n    ],\n    \"examples\": [\n      \"Eksempler\"\n    ],\n    \"feature\": [\n      \"Egenskab\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Givet \"\n    ],\n    \"name\": \"Danish\",\n    \"native\": \"dansk\",\n    \"scenario\": [\n      \"Scenarie\"\n    ],\n    \"scenarioOutline\": [\n      \"Abstrakt Scenario\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Så \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Når \"\n    ]\n  },\n  \"de\": {\n    \"and\": [\n      \"* \",\n      \"Und \"\n    ],\n    \"background\": [\n      \"Grundlage\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Aber \"\n    ],\n    \"examples\": [\n      \"Beispiele\"\n    ],\n    \"feature\": [\n      \"Funktionalität\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Angenommen \",\n      \"Gegeben sei \",\n      \"Gegeben seien \"\n    ],\n    \"name\": \"German\",\n    \"native\": \"Deutsch\",\n    \"scenario\": [\n      \"Szenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Szenariogrundriss\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Dann \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Wenn \"\n    ]\n  },\n  \"el\": {\n    \"and\": [\n      \"* \",\n      \"Και \"\n    ],\n    \"background\": [\n      \"Υπόβαθρο\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Αλλά \"\n    ],\n    \"examples\": [\n      \"Παραδείγματα\",\n      \"Σενάρια\"\n    ],\n    \"feature\": [\n      \"Δυνατότητα\",\n      \"Λειτουργία\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Δεδομένου \"\n    ],\n    \"name\": \"Greek\",\n    \"native\": \"Ελληνικά\",\n    \"scenario\": [\n      \"Σενάριο\"\n    ],\n    \"scenarioOutline\": [\n      \"Περιγραφή Σεναρίου\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Τότε \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Όταν \"\n    ]\n  },\n  \"em\": {\n    \"and\": [\n      \"* \",\n      \"😂\"\n    ],\n    \"background\": [\n      \"💤\"\n    ],\n    \"but\": [\n      \"* \",\n      \"😔\"\n    ],\n    \"examples\": [\n      \"📓\"\n    ],\n    \"feature\": [\n      \"📚\"\n    ],\n    \"given\": [\n      \"* \",\n      \"😐\"\n    ],\n    \"name\": \"Emoji\",\n    \"native\": \"😀\",\n    \"scenario\": [\n      \"📕\"\n    ],\n    \"scenarioOutline\": [\n      \"📖\"\n    ],\n    \"then\": [\n      \"* \",\n      \"🙏\"\n    ],\n    \"when\": [\n      \"* \",\n      \"🎬\"\n    ]\n  },\n  \"en\": {\n    \"and\": [\n      \"* \",\n      \"And \"\n    ],\n    \"background\": [\n      \"Background\"\n    ],\n    \"but\": [\n      \"* \",\n      \"But \"\n    ],\n    \"examples\": [\n      \"Examples\",\n      \"Scenarios\"\n    ],\n    \"feature\": [\n      \"Feature\",\n      \"Business Need\",\n      \"Ability\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Given \"\n    ],\n    \"name\": \"English\",\n    \"native\": \"English\",\n    \"scenario\": [\n      \"Scenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Scenario Outline\",\n      \"Scenario Template\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Then \"\n    ],\n    \"when\": [\n      \"* \",\n      \"When \"\n    ]\n  },\n  \"en-Scouse\": {\n    \"and\": [\n      \"* \",\n      \"An \"\n    ],\n    \"background\": [\n      \"Dis is what went down\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Buh \"\n    ],\n    \"examples\": [\n      \"Examples\"\n    ],\n    \"feature\": [\n      \"Feature\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Givun \",\n      \"Youse know when youse got \"\n    ],\n    \"name\": \"Scouse\",\n    \"native\": \"Scouse\",\n    \"scenario\": [\n      \"The thing of it is\"\n    ],\n    \"scenarioOutline\": [\n      \"Wharrimean is\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Dun \",\n      \"Den youse gotta \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Wun \",\n      \"Youse know like when \"\n    ]\n  },\n  \"en-au\": {\n    \"and\": [\n      \"* \",\n      \"Too right \"\n    ],\n    \"background\": [\n      \"First off\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Yeah nah \"\n    ],\n    \"examples\": [\n      \"You'll wanna\"\n    ],\n    \"feature\": [\n      \"Pretty much\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Y'know \"\n    ],\n    \"name\": \"Australian\",\n    \"native\": \"Australian\",\n    \"scenario\": [\n      \"Awww, look mate\"\n    ],\n    \"scenarioOutline\": [\n      \"Reckon it's like\"\n    ],\n    \"then\": [\n      \"* \",\n      \"But at the end of the day I reckon \"\n    ],\n    \"when\": [\n      \"* \",\n      \"It's just unbelievable \"\n    ]\n  },\n  \"en-lol\": {\n    \"and\": [\n      \"* \",\n      \"AN \"\n    ],\n    \"background\": [\n      \"B4\"\n    ],\n    \"but\": [\n      \"* \",\n      \"BUT \"\n    ],\n    \"examples\": [\n      \"EXAMPLZ\"\n    ],\n    \"feature\": [\n      \"OH HAI\"\n    ],\n    \"given\": [\n      \"* \",\n      \"I CAN HAZ \"\n    ],\n    \"name\": \"LOLCAT\",\n    \"native\": \"LOLCAT\",\n    \"scenario\": [\n      \"MISHUN\"\n    ],\n    \"scenarioOutline\": [\n      \"MISHUN SRSLY\"\n    ],\n    \"then\": [\n      \"* \",\n      \"DEN \"\n    ],\n    \"when\": [\n      \"* \",\n      \"WEN \"\n    ]\n  },\n  \"en-old\": {\n    \"and\": [\n      \"* \",\n      \"Ond \",\n      \"7 \"\n    ],\n    \"background\": [\n      \"Aer\",\n      \"Ær\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Ac \"\n    ],\n    \"examples\": [\n      \"Se the\",\n      \"Se þe\",\n      \"Se ðe\"\n    ],\n    \"feature\": [\n      \"Hwaet\",\n      \"Hwæt\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Thurh \",\n      \"Þurh \",\n      \"Ðurh \"\n    ],\n    \"name\": \"Old English\",\n    \"native\": \"Englisc\",\n    \"scenario\": [\n      \"Swa\"\n    ],\n    \"scenarioOutline\": [\n      \"Swa hwaer swa\",\n      \"Swa hwær swa\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Tha \",\n      \"Þa \",\n      \"Ða \",\n      \"Tha the \",\n      \"Þa þe \",\n      \"Ða ðe \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Tha \",\n      \"Þa \",\n      \"Ða \"\n    ]\n  },\n  \"en-pirate\": {\n    \"and\": [\n      \"* \",\n      \"Aye \"\n    ],\n    \"background\": [\n      \"Yo-ho-ho\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Avast! \"\n    ],\n    \"examples\": [\n      \"Dead men tell no tales\"\n    ],\n    \"feature\": [\n      \"Ahoy matey!\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Gangway! \"\n    ],\n    \"name\": \"Pirate\",\n    \"native\": \"Pirate\",\n    \"scenario\": [\n      \"Heave to\"\n    ],\n    \"scenarioOutline\": [\n      \"Shiver me timbers\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Let go and haul \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Blimey! \"\n    ]\n  },\n  \"eo\": {\n    \"and\": [\n      \"* \",\n      \"Kaj \"\n    ],\n    \"background\": [\n      \"Fono\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Sed \"\n    ],\n    \"examples\": [\n      \"Ekzemploj\"\n    ],\n    \"feature\": [\n      \"Trajto\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Donitaĵo \",\n      \"Komence \"\n    ],\n    \"name\": \"Esperanto\",\n    \"native\": \"Esperanto\",\n    \"scenario\": [\n      \"Scenaro\",\n      \"Kazo\"\n    ],\n    \"scenarioOutline\": [\n      \"Konturo de la scenaro\",\n      \"Skizo\",\n      \"Kazo-skizo\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Do \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Se \"\n    ]\n  },\n  \"es\": {\n    \"and\": [\n      \"* \",\n      \"Y \",\n      \"E \"\n    ],\n    \"background\": [\n      \"Antecedentes\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Pero \"\n    ],\n    \"examples\": [\n      \"Ejemplos\"\n    ],\n    \"feature\": [\n      \"Característica\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Dado \",\n      \"Dada \",\n      \"Dados \",\n      \"Dadas \"\n    ],\n    \"name\": \"Spanish\",\n    \"native\": \"español\",\n    \"scenario\": [\n      \"Escenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Esquema del escenario\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Entonces \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Cuando \"\n    ]\n  },\n  \"et\": {\n    \"and\": [\n      \"* \",\n      \"Ja \"\n    ],\n    \"background\": [\n      \"Taust\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Kuid \"\n    ],\n    \"examples\": [\n      \"Juhtumid\"\n    ],\n    \"feature\": [\n      \"Omadus\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Eeldades \"\n    ],\n    \"name\": \"Estonian\",\n    \"native\": \"eesti keel\",\n    \"scenario\": [\n      \"Stsenaarium\"\n    ],\n    \"scenarioOutline\": [\n      \"Raamstsenaarium\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Siis \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Kui \"\n    ]\n  },\n  \"fa\": {\n    \"and\": [\n      \"* \",\n      \"و \"\n    ],\n    \"background\": [\n      \"زمینه\"\n    ],\n    \"but\": [\n      \"* \",\n      \"اما \"\n    ],\n    \"examples\": [\n      \"نمونه ها\"\n    ],\n    \"feature\": [\n      \"وِیژگی\"\n    ],\n    \"given\": [\n      \"* \",\n      \"با فرض \"\n    ],\n    \"name\": \"Persian\",\n    \"native\": \"فارسی\",\n    \"scenario\": [\n      \"سناریو\"\n    ],\n    \"scenarioOutline\": [\n      \"الگوی سناریو\"\n    ],\n    \"then\": [\n      \"* \",\n      \"آنگاه \"\n    ],\n    \"when\": [\n      \"* \",\n      \"هنگامی \"\n    ]\n  },\n  \"fi\": {\n    \"and\": [\n      \"* \",\n      \"Ja \"\n    ],\n    \"background\": [\n      \"Tausta\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Mutta \"\n    ],\n    \"examples\": [\n      \"Tapaukset\"\n    ],\n    \"feature\": [\n      \"Ominaisuus\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Oletetaan \"\n    ],\n    \"name\": \"Finnish\",\n    \"native\": \"suomi\",\n    \"scenario\": [\n      \"Tapaus\"\n    ],\n    \"scenarioOutline\": [\n      \"Tapausaihio\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Niin \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Kun \"\n    ]\n  },\n  \"fr\": {\n    \"and\": [\n      \"* \",\n      \"Et que \",\n      \"Et qu'\",\n      \"Et \"\n    ],\n    \"background\": [\n      \"Contexte\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Mais que \",\n      \"Mais qu'\",\n      \"Mais \"\n    ],\n    \"examples\": [\n      \"Exemples\"\n    ],\n    \"feature\": [\n      \"Fonctionnalité\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Soit \",\n      \"Etant donné que \",\n      \"Etant donné qu'\",\n      \"Etant donné \",\n      \"Etant donnée \",\n      \"Etant donnés \",\n      \"Etant données \",\n      \"Étant donné que \",\n      \"Étant donné qu'\",\n      \"Étant donné \",\n      \"Étant donnée \",\n      \"Étant donnés \",\n      \"Étant données \"\n    ],\n    \"name\": \"French\",\n    \"native\": \"français\",\n    \"scenario\": [\n      \"Scénario\"\n    ],\n    \"scenarioOutline\": [\n      \"Plan du scénario\",\n      \"Plan du Scénario\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Alors \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Quand \",\n      \"Lorsque \",\n      \"Lorsqu'\"\n    ]\n  },\n  \"ga\": {\n    \"and\": [\n      \"* \",\n      \"Agus\"\n    ],\n    \"background\": [\n      \"Cúlra\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Ach\"\n    ],\n    \"examples\": [\n      \"Samplaí\"\n    ],\n    \"feature\": [\n      \"Gné\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Cuir i gcás go\",\n      \"Cuir i gcás nach\",\n      \"Cuir i gcás gur\",\n      \"Cuir i gcás nár\"\n    ],\n    \"name\": \"Irish\",\n    \"native\": \"Gaeilge\",\n    \"scenario\": [\n      \"Cás\"\n    ],\n    \"scenarioOutline\": [\n      \"Cás Achomair\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Ansin\"\n    ],\n    \"when\": [\n      \"* \",\n      \"Nuair a\",\n      \"Nuair nach\",\n      \"Nuair ba\",\n      \"Nuair nár\"\n    ]\n  },\n  \"gj\": {\n    \"and\": [\n      \"* \",\n      \"અને \"\n    ],\n    \"background\": [\n      \"બેકગ્રાઉન્ડ\"\n    ],\n    \"but\": [\n      \"* \",\n      \"પણ \"\n    ],\n    \"examples\": [\n      \"ઉદાહરણો\"\n    ],\n    \"feature\": [\n      \"લક્ષણ\",\n      \"વ્યાપાર જરૂર\",\n      \"ક્ષમતા\"\n    ],\n    \"given\": [\n      \"* \",\n      \"આપેલ છે \"\n    ],\n    \"name\": \"Gujarati\",\n    \"native\": \"ગુજરાતી\",\n    \"scenario\": [\n      \"સ્થિતિ\"\n    ],\n    \"scenarioOutline\": [\n      \"પરિદ્દશ્ય રૂપરેખા\",\n      \"પરિદ્દશ્ય ઢાંચો\"\n    ],\n    \"then\": [\n      \"* \",\n      \"પછી \"\n    ],\n    \"when\": [\n      \"* \",\n      \"ક્યારે \"\n    ]\n  },\n  \"gl\": {\n    \"and\": [\n      \"* \",\n      \"E \"\n    ],\n    \"background\": [\n      \"Contexto\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Mais \",\n      \"Pero \"\n    ],\n    \"examples\": [\n      \"Exemplos\"\n    ],\n    \"feature\": [\n      \"Característica\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Dado \",\n      \"Dada \",\n      \"Dados \",\n      \"Dadas \"\n    ],\n    \"name\": \"Galician\",\n    \"native\": \"galego\",\n    \"scenario\": [\n      \"Escenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Esbozo do escenario\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Entón \",\n      \"Logo \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Cando \"\n    ]\n  },\n  \"he\": {\n    \"and\": [\n      \"* \",\n      \"וגם \"\n    ],\n    \"background\": [\n      \"רקע\"\n    ],\n    \"but\": [\n      \"* \",\n      \"אבל \"\n    ],\n    \"examples\": [\n      \"דוגמאות\"\n    ],\n    \"feature\": [\n      \"תכונה\"\n    ],\n    \"given\": [\n      \"* \",\n      \"בהינתן \"\n    ],\n    \"name\": \"Hebrew\",\n    \"native\": \"עברית\",\n    \"scenario\": [\n      \"תרחיש\"\n    ],\n    \"scenarioOutline\": [\n      \"תבנית תרחיש\"\n    ],\n    \"then\": [\n      \"* \",\n      \"אז \",\n      \"אזי \"\n    ],\n    \"when\": [\n      \"* \",\n      \"כאשר \"\n    ]\n  },\n  \"hi\": {\n    \"and\": [\n      \"* \",\n      \"और \",\n      \"तथा \"\n    ],\n    \"background\": [\n      \"पृष्ठभूमि\"\n    ],\n    \"but\": [\n      \"* \",\n      \"पर \",\n      \"परन्तु \",\n      \"किन्तु \"\n    ],\n    \"examples\": [\n      \"उदाहरण\"\n    ],\n    \"feature\": [\n      \"रूप लेख\"\n    ],\n    \"given\": [\n      \"* \",\n      \"अगर \",\n      \"यदि \",\n      \"चूंकि \"\n    ],\n    \"name\": \"Hindi\",\n    \"native\": \"हिंदी\",\n    \"scenario\": [\n      \"परिदृश्य\"\n    ],\n    \"scenarioOutline\": [\n      \"परिदृश्य रूपरेखा\"\n    ],\n    \"then\": [\n      \"* \",\n      \"तब \",\n      \"तदा \"\n    ],\n    \"when\": [\n      \"* \",\n      \"जब \",\n      \"कदा \"\n    ]\n  },\n  \"hr\": {\n    \"and\": [\n      \"* \",\n      \"I \"\n    ],\n    \"background\": [\n      \"Pozadina\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Ali \"\n    ],\n    \"examples\": [\n      \"Primjeri\",\n      \"Scenariji\"\n    ],\n    \"feature\": [\n      \"Osobina\",\n      \"Mogućnost\",\n      \"Mogucnost\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Zadan \",\n      \"Zadani \",\n      \"Zadano \"\n    ],\n    \"name\": \"Croatian\",\n    \"native\": \"hrvatski\",\n    \"scenario\": [\n      \"Scenarij\"\n    ],\n    \"scenarioOutline\": [\n      \"Skica\",\n      \"Koncept\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Onda \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Kada \",\n      \"Kad \"\n    ]\n  },\n  \"ht\": {\n    \"and\": [\n      \"* \",\n      \"Ak \",\n      \"Epi \",\n      \"E \"\n    ],\n    \"background\": [\n      \"Kontèks\",\n      \"Istorik\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Men \"\n    ],\n    \"examples\": [\n      \"Egzanp\"\n    ],\n    \"feature\": [\n      \"Karakteristik\",\n      \"Mak\",\n      \"Fonksyonalite\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Sipoze \",\n      \"Sipoze ke \",\n      \"Sipoze Ke \"\n    ],\n    \"name\": \"Creole\",\n    \"native\": \"kreyòl\",\n    \"scenario\": [\n      \"Senaryo\"\n    ],\n    \"scenarioOutline\": [\n      \"Plan senaryo\",\n      \"Plan Senaryo\",\n      \"Senaryo deskripsyon\",\n      \"Senaryo Deskripsyon\",\n      \"Dyagram senaryo\",\n      \"Dyagram Senaryo\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Lè sa a \",\n      \"Le sa a \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Lè \",\n      \"Le \"\n    ]\n  },\n  \"hu\": {\n    \"and\": [\n      \"* \",\n      \"És \"\n    ],\n    \"background\": [\n      \"Háttér\"\n    ],\n    \"but\": [\n      \"* \",\n      \"De \"\n    ],\n    \"examples\": [\n      \"Példák\"\n    ],\n    \"feature\": [\n      \"Jellemző\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Amennyiben \",\n      \"Adott \"\n    ],\n    \"name\": \"Hungarian\",\n    \"native\": \"magyar\",\n    \"scenario\": [\n      \"Forgatókönyv\"\n    ],\n    \"scenarioOutline\": [\n      \"Forgatókönyv vázlat\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Akkor \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Majd \",\n      \"Ha \",\n      \"Amikor \"\n    ]\n  },\n  \"id\": {\n    \"and\": [\n      \"* \",\n      \"Dan \"\n    ],\n    \"background\": [\n      \"Dasar\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Tapi \"\n    ],\n    \"examples\": [\n      \"Contoh\"\n    ],\n    \"feature\": [\n      \"Fitur\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Dengan \"\n    ],\n    \"name\": \"Indonesian\",\n    \"native\": \"Bahasa Indonesia\",\n    \"scenario\": [\n      \"Skenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Skenario konsep\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Maka \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Ketika \"\n    ]\n  },\n  \"is\": {\n    \"and\": [\n      \"* \",\n      \"Og \"\n    ],\n    \"background\": [\n      \"Bakgrunnur\"\n    ],\n    \"but\": [\n      \"* \",\n      \"En \"\n    ],\n    \"examples\": [\n      \"Dæmi\",\n      \"Atburðarásir\"\n    ],\n    \"feature\": [\n      \"Eiginleiki\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Ef \"\n    ],\n    \"name\": \"Icelandic\",\n    \"native\": \"Íslenska\",\n    \"scenario\": [\n      \"Atburðarás\"\n    ],\n    \"scenarioOutline\": [\n      \"Lýsing Atburðarásar\",\n      \"Lýsing Dæma\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Þá \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Þegar \"\n    ]\n  },\n  \"it\": {\n    \"and\": [\n      \"* \",\n      \"E \"\n    ],\n    \"background\": [\n      \"Contesto\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Ma \"\n    ],\n    \"examples\": [\n      \"Esempi\"\n    ],\n    \"feature\": [\n      \"Funzionalità\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Dato \",\n      \"Data \",\n      \"Dati \",\n      \"Date \"\n    ],\n    \"name\": \"Italian\",\n    \"native\": \"italiano\",\n    \"scenario\": [\n      \"Scenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Schema dello scenario\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Allora \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Quando \"\n    ]\n  },\n  \"ja\": {\n    \"and\": [\n      \"* \",\n      \"かつ\"\n    ],\n    \"background\": [\n      \"背景\"\n    ],\n    \"but\": [\n      \"* \",\n      \"しかし\",\n      \"但し\",\n      \"ただし\"\n    ],\n    \"examples\": [\n      \"例\",\n      \"サンプル\"\n    ],\n    \"feature\": [\n      \"フィーチャ\",\n      \"機能\"\n    ],\n    \"given\": [\n      \"* \",\n      \"前提\"\n    ],\n    \"name\": \"Japanese\",\n    \"native\": \"日本語\",\n    \"scenario\": [\n      \"シナリオ\"\n    ],\n    \"scenarioOutline\": [\n      \"シナリオアウトライン\",\n      \"シナリオテンプレート\",\n      \"テンプレ\",\n      \"シナリオテンプレ\"\n    ],\n    \"then\": [\n      \"* \",\n      \"ならば\"\n    ],\n    \"when\": [\n      \"* \",\n      \"もし\"\n    ]\n  },\n  \"jv\": {\n    \"and\": [\n      \"* \",\n      \"Lan \"\n    ],\n    \"background\": [\n      \"Dasar\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Tapi \",\n      \"Nanging \",\n      \"Ananging \"\n    ],\n    \"examples\": [\n      \"Conto\",\n      \"Contone\"\n    ],\n    \"feature\": [\n      \"Fitur\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Nalika \",\n      \"Nalikaning \"\n    ],\n    \"name\": \"Javanese\",\n    \"native\": \"Basa Jawa\",\n    \"scenario\": [\n      \"Skenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Konsep skenario\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Njuk \",\n      \"Banjur \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Manawa \",\n      \"Menawa \"\n    ]\n  },\n  \"kn\": {\n    \"and\": [\n      \"* \",\n      \"ಮತ್ತು \"\n    ],\n    \"background\": [\n      \"ಹಿನ್ನೆಲೆ\"\n    ],\n    \"but\": [\n      \"* \",\n      \"ಆದರೆ \"\n    ],\n    \"examples\": [\n      \"ಉದಾಹರಣೆಗಳು\"\n    ],\n    \"feature\": [\n      \"ಹೆಚ್ಚಳ\"\n    ],\n    \"given\": [\n      \"* \",\n      \"ನೀಡಿದ \"\n    ],\n    \"name\": \"Kannada\",\n    \"native\": \"ಕನ್ನಡ\",\n    \"scenario\": [\n      \"ಕಥಾಸಾರಾಂಶ\"\n    ],\n    \"scenarioOutline\": [\n      \"ವಿವರಣೆ\"\n    ],\n    \"then\": [\n      \"* \",\n      \"ನಂತರ \"\n    ],\n    \"when\": [\n      \"* \",\n      \"ಸ್ಥಿತಿಯನ್ನು \"\n    ]\n  },\n  \"ko\": {\n    \"and\": [\n      \"* \",\n      \"그리고\"\n    ],\n    \"background\": [\n      \"배경\"\n    ],\n    \"but\": [\n      \"* \",\n      \"하지만\",\n      \"단\"\n    ],\n    \"examples\": [\n      \"예\"\n    ],\n    \"feature\": [\n      \"기능\"\n    ],\n    \"given\": [\n      \"* \",\n      \"조건\",\n      \"먼저\"\n    ],\n    \"name\": \"Korean\",\n    \"native\": \"한국어\",\n    \"scenario\": [\n      \"시나리오\"\n    ],\n    \"scenarioOutline\": [\n      \"시나리오 개요\"\n    ],\n    \"then\": [\n      \"* \",\n      \"그러면\"\n    ],\n    \"when\": [\n      \"* \",\n      \"만일\",\n      \"만약\"\n    ]\n  },\n  \"lt\": {\n    \"and\": [\n      \"* \",\n      \"Ir \"\n    ],\n    \"background\": [\n      \"Kontekstas\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Bet \"\n    ],\n    \"examples\": [\n      \"Pavyzdžiai\",\n      \"Scenarijai\",\n      \"Variantai\"\n    ],\n    \"feature\": [\n      \"Savybė\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Duota \"\n    ],\n    \"name\": \"Lithuanian\",\n    \"native\": \"lietuvių kalba\",\n    \"scenario\": [\n      \"Scenarijus\"\n    ],\n    \"scenarioOutline\": [\n      \"Scenarijaus šablonas\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Tada \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Kai \"\n    ]\n  },\n  \"lu\": {\n    \"and\": [\n      \"* \",\n      \"an \",\n      \"a \"\n    ],\n    \"background\": [\n      \"Hannergrond\"\n    ],\n    \"but\": [\n      \"* \",\n      \"awer \",\n      \"mä \"\n    ],\n    \"examples\": [\n      \"Beispiller\"\n    ],\n    \"feature\": [\n      \"Funktionalitéit\"\n    ],\n    \"given\": [\n      \"* \",\n      \"ugeholl \"\n    ],\n    \"name\": \"Luxemburgish\",\n    \"native\": \"Lëtzebuergesch\",\n    \"scenario\": [\n      \"Szenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Plang vum Szenario\"\n    ],\n    \"then\": [\n      \"* \",\n      \"dann \"\n    ],\n    \"when\": [\n      \"* \",\n      \"wann \"\n    ]\n  },\n  \"lv\": {\n    \"and\": [\n      \"* \",\n      \"Un \"\n    ],\n    \"background\": [\n      \"Konteksts\",\n      \"Situācija\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Bet \"\n    ],\n    \"examples\": [\n      \"Piemēri\",\n      \"Paraugs\"\n    ],\n    \"feature\": [\n      \"Funkcionalitāte\",\n      \"Fīča\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Kad \"\n    ],\n    \"name\": \"Latvian\",\n    \"native\": \"latviešu\",\n    \"scenario\": [\n      \"Scenārijs\"\n    ],\n    \"scenarioOutline\": [\n      \"Scenārijs pēc parauga\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Tad \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Ja \"\n    ]\n  },\n  \"mn\": {\n    \"and\": [\n      \"* \",\n      \"Мөн \",\n      \"Тэгээд \"\n    ],\n    \"background\": [\n      \"Агуулга\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Гэхдээ \",\n      \"Харин \"\n    ],\n    \"examples\": [\n      \"Тухайлбал\"\n    ],\n    \"feature\": [\n      \"Функц\",\n      \"Функционал\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Өгөгдсөн нь \",\n      \"Анх \"\n    ],\n    \"name\": \"Mongolian\",\n    \"native\": \"монгол\",\n    \"scenario\": [\n      \"Сценар\"\n    ],\n    \"scenarioOutline\": [\n      \"Сценарын төлөвлөгөө\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Тэгэхэд \",\n      \"Үүний дараа \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Хэрэв \"\n    ]\n  },\n  \"nl\": {\n    \"and\": [\n      \"* \",\n      \"En \"\n    ],\n    \"background\": [\n      \"Achtergrond\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Maar \"\n    ],\n    \"examples\": [\n      \"Voorbeelden\"\n    ],\n    \"feature\": [\n      \"Functionaliteit\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Gegeven \",\n      \"Stel \"\n    ],\n    \"name\": \"Dutch\",\n    \"native\": \"Nederlands\",\n    \"scenario\": [\n      \"Scenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Abstract Scenario\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Dan \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Als \"\n    ]\n  },\n  \"no\": {\n    \"and\": [\n      \"* \",\n      \"Og \"\n    ],\n    \"background\": [\n      \"Bakgrunn\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Men \"\n    ],\n    \"examples\": [\n      \"Eksempler\"\n    ],\n    \"feature\": [\n      \"Egenskap\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Gitt \"\n    ],\n    \"name\": \"Norwegian\",\n    \"native\": \"norsk\",\n    \"scenario\": [\n      \"Scenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Scenariomal\",\n      \"Abstrakt Scenario\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Så \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Når \"\n    ]\n  },\n  \"pa\": {\n    \"and\": [\n      \"* \",\n      \"ਅਤੇ \"\n    ],\n    \"background\": [\n      \"ਪਿਛੋਕੜ\"\n    ],\n    \"but\": [\n      \"* \",\n      \"ਪਰ \"\n    ],\n    \"examples\": [\n      \"ਉਦਾਹਰਨਾਂ\"\n    ],\n    \"feature\": [\n      \"ਖਾਸੀਅਤ\",\n      \"ਮੁਹਾਂਦਰਾ\",\n      \"ਨਕਸ਼ ਨੁਹਾਰ\"\n    ],\n    \"given\": [\n      \"* \",\n      \"ਜੇਕਰ \",\n      \"ਜਿਵੇਂ ਕਿ \"\n    ],\n    \"name\": \"Panjabi\",\n    \"native\": \"ਪੰਜਾਬੀ\",\n    \"scenario\": [\n      \"ਪਟਕਥਾ\"\n    ],\n    \"scenarioOutline\": [\n      \"ਪਟਕਥਾ ਢਾਂਚਾ\",\n      \"ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ\"\n    ],\n    \"then\": [\n      \"* \",\n      \"ਤਦ \"\n    ],\n    \"when\": [\n      \"* \",\n      \"ਜਦੋਂ \"\n    ]\n  },\n  \"pl\": {\n    \"and\": [\n      \"* \",\n      \"Oraz \",\n      \"I \"\n    ],\n    \"background\": [\n      \"Założenia\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Ale \"\n    ],\n    \"examples\": [\n      \"Przykłady\"\n    ],\n    \"feature\": [\n      \"Właściwość\",\n      \"Funkcja\",\n      \"Aspekt\",\n      \"Potrzeba biznesowa\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Zakładając \",\n      \"Mając \",\n      \"Zakładając, że \"\n    ],\n    \"name\": \"Polish\",\n    \"native\": \"polski\",\n    \"scenario\": [\n      \"Scenariusz\"\n    ],\n    \"scenarioOutline\": [\n      \"Szablon scenariusza\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Wtedy \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Jeżeli \",\n      \"Jeśli \",\n      \"Gdy \",\n      \"Kiedy \"\n    ]\n  },\n  \"pt\": {\n    \"and\": [\n      \"* \",\n      \"E \"\n    ],\n    \"background\": [\n      \"Contexto\",\n      \"Cenário de Fundo\",\n      \"Cenario de Fundo\",\n      \"Fundo\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Mas \"\n    ],\n    \"examples\": [\n      \"Exemplos\",\n      \"Cenários\",\n      \"Cenarios\"\n    ],\n    \"feature\": [\n      \"Funcionalidade\",\n      \"Característica\",\n      \"Caracteristica\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Dado \",\n      \"Dada \",\n      \"Dados \",\n      \"Dadas \"\n    ],\n    \"name\": \"Portuguese\",\n    \"native\": \"português\",\n    \"scenario\": [\n      \"Cenário\",\n      \"Cenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Esquema do Cenário\",\n      \"Esquema do Cenario\",\n      \"Delineação do Cenário\",\n      \"Delineacao do Cenario\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Então \",\n      \"Entao \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Quando \"\n    ]\n  },\n  \"ro\": {\n    \"and\": [\n      \"* \",\n      \"Si \",\n      \"Și \",\n      \"Şi \"\n    ],\n    \"background\": [\n      \"Context\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Dar \"\n    ],\n    \"examples\": [\n      \"Exemple\"\n    ],\n    \"feature\": [\n      \"Functionalitate\",\n      \"Funcționalitate\",\n      \"Funcţionalitate\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Date fiind \",\n      \"Dat fiind \",\n      \"Dati fiind \",\n      \"Dați fiind \",\n      \"Daţi fiind \"\n    ],\n    \"name\": \"Romanian\",\n    \"native\": \"română\",\n    \"scenario\": [\n      \"Scenariu\"\n    ],\n    \"scenarioOutline\": [\n      \"Structura scenariu\",\n      \"Structură scenariu\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Atunci \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Cand \",\n      \"Când \"\n    ]\n  },\n  \"ru\": {\n    \"and\": [\n      \"* \",\n      \"И \",\n      \"К тому же \",\n      \"Также \"\n    ],\n    \"background\": [\n      \"Предыстория\",\n      \"Контекст\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Но \",\n      \"А \"\n    ],\n    \"examples\": [\n      \"Примеры\"\n    ],\n    \"feature\": [\n      \"Функция\",\n      \"Функциональность\",\n      \"Функционал\",\n      \"Свойство\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Допустим \",\n      \"Дано \",\n      \"Пусть \"\n    ],\n    \"name\": \"Russian\",\n    \"native\": \"русский\",\n    \"scenario\": [\n      \"Сценарий\"\n    ],\n    \"scenarioOutline\": [\n      \"Структура сценария\"\n    ],\n    \"then\": [\n      \"* \",\n      \"То \",\n      \"Тогда \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Если \",\n      \"Когда \"\n    ]\n  },\n  \"sk\": {\n    \"and\": [\n      \"* \",\n      \"A \",\n      \"A tiež \",\n      \"A taktiež \",\n      \"A zároveň \"\n    ],\n    \"background\": [\n      \"Pozadie\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Ale \"\n    ],\n    \"examples\": [\n      \"Príklady\"\n    ],\n    \"feature\": [\n      \"Požiadavka\",\n      \"Funkcia\",\n      \"Vlastnosť\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Pokiaľ \",\n      \"Za predpokladu \"\n    ],\n    \"name\": \"Slovak\",\n    \"native\": \"Slovensky\",\n    \"scenario\": [\n      \"Scenár\"\n    ],\n    \"scenarioOutline\": [\n      \"Náčrt Scenáru\",\n      \"Náčrt Scenára\",\n      \"Osnova Scenára\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Tak \",\n      \"Potom \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Keď \",\n      \"Ak \"\n    ]\n  },\n  \"sl\": {\n    \"and\": [\n      \"In \",\n      \"Ter \"\n    ],\n    \"background\": [\n      \"Kontekst\",\n      \"Osnova\",\n      \"Ozadje\"\n    ],\n    \"but\": [\n      \"Toda \",\n      \"Ampak \",\n      \"Vendar \"\n    ],\n    \"examples\": [\n      \"Primeri\",\n      \"Scenariji\"\n    ],\n    \"feature\": [\n      \"Funkcionalnost\",\n      \"Funkcija\",\n      \"Možnosti\",\n      \"Moznosti\",\n      \"Lastnost\",\n      \"Značilnost\"\n    ],\n    \"given\": [\n      \"Dano \",\n      \"Podano \",\n      \"Zaradi \",\n      \"Privzeto \"\n    ],\n    \"name\": \"Slovenian\",\n    \"native\": \"Slovenski\",\n    \"scenario\": [\n      \"Scenarij\",\n      \"Primer\"\n    ],\n    \"scenarioOutline\": [\n      \"Struktura scenarija\",\n      \"Skica\",\n      \"Koncept\",\n      \"Oris scenarija\",\n      \"Osnutek\"\n    ],\n    \"then\": [\n      \"Nato \",\n      \"Potem \",\n      \"Takrat \"\n    ],\n    \"when\": [\n      \"Ko \",\n      \"Ce \",\n      \"Če \",\n      \"Kadar \"\n    ]\n  },\n  \"sr-Cyrl\": {\n    \"and\": [\n      \"* \",\n      \"И \"\n    ],\n    \"background\": [\n      \"Контекст\",\n      \"Основа\",\n      \"Позадина\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Али \"\n    ],\n    \"examples\": [\n      \"Примери\",\n      \"Сценарији\"\n    ],\n    \"feature\": [\n      \"Функционалност\",\n      \"Могућност\",\n      \"Особина\"\n    ],\n    \"given\": [\n      \"* \",\n      \"За дато \",\n      \"За дате \",\n      \"За дати \"\n    ],\n    \"name\": \"Serbian\",\n    \"native\": \"Српски\",\n    \"scenario\": [\n      \"Сценарио\",\n      \"Пример\"\n    ],\n    \"scenarioOutline\": [\n      \"Структура сценарија\",\n      \"Скица\",\n      \"Концепт\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Онда \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Када \",\n      \"Кад \"\n    ]\n  },\n  \"sr-Latn\": {\n    \"and\": [\n      \"* \",\n      \"I \"\n    ],\n    \"background\": [\n      \"Kontekst\",\n      \"Osnova\",\n      \"Pozadina\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Ali \"\n    ],\n    \"examples\": [\n      \"Primeri\",\n      \"Scenariji\"\n    ],\n    \"feature\": [\n      \"Funkcionalnost\",\n      \"Mogućnost\",\n      \"Mogucnost\",\n      \"Osobina\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Za dato \",\n      \"Za date \",\n      \"Za dati \"\n    ],\n    \"name\": \"Serbian (Latin)\",\n    \"native\": \"Srpski (Latinica)\",\n    \"scenario\": [\n      \"Scenario\",\n      \"Primer\"\n    ],\n    \"scenarioOutline\": [\n      \"Struktura scenarija\",\n      \"Skica\",\n      \"Koncept\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Onda \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Kada \",\n      \"Kad \"\n    ]\n  },\n  \"sv\": {\n    \"and\": [\n      \"* \",\n      \"Och \"\n    ],\n    \"background\": [\n      \"Bakgrund\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Men \"\n    ],\n    \"examples\": [\n      \"Exempel\"\n    ],\n    \"feature\": [\n      \"Egenskap\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Givet \"\n    ],\n    \"name\": \"Swedish\",\n    \"native\": \"Svenska\",\n    \"scenario\": [\n      \"Scenario\"\n    ],\n    \"scenarioOutline\": [\n      \"Abstrakt Scenario\",\n      \"Scenariomall\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Så \"\n    ],\n    \"when\": [\n      \"* \",\n      \"När \"\n    ]\n  },\n  \"ta\": {\n    \"and\": [\n      \"* \",\n      \"மேலும்  \",\n      \"மற்றும் \"\n    ],\n    \"background\": [\n      \"பின்னணி\"\n    ],\n    \"but\": [\n      \"* \",\n      \"ஆனால்  \"\n    ],\n    \"examples\": [\n      \"எடுத்துக்காட்டுகள்\",\n      \"காட்சிகள்\",\n      \" நிலைமைகளில்\"\n    ],\n    \"feature\": [\n      \"அம்சம்\",\n      \"வணிக தேவை\",\n      \"திறன்\"\n    ],\n    \"given\": [\n      \"* \",\n      \"கொடுக்கப்பட்ட \"\n    ],\n    \"name\": \"Tamil\",\n    \"native\": \"தமிழ்\",\n    \"scenario\": [\n      \"காட்சி\"\n    ],\n    \"scenarioOutline\": [\n      \"காட்சி சுருக்கம்\",\n      \"காட்சி வார்ப்புரு\"\n    ],\n    \"then\": [\n      \"* \",\n      \"அப்பொழுது \"\n    ],\n    \"when\": [\n      \"* \",\n      \"எப்போது \"\n    ]\n  },\n  \"th\": {\n    \"and\": [\n      \"* \",\n      \"และ \"\n    ],\n    \"background\": [\n      \"แนวคิด\"\n    ],\n    \"but\": [\n      \"* \",\n      \"แต่ \"\n    ],\n    \"examples\": [\n      \"ชุดของตัวอย่าง\",\n      \"ชุดของเหตุการณ์\"\n    ],\n    \"feature\": [\n      \"โครงหลัก\",\n      \"ความต้องการทางธุรกิจ\",\n      \"ความสามารถ\"\n    ],\n    \"given\": [\n      \"* \",\n      \"กำหนดให้ \"\n    ],\n    \"name\": \"Thai\",\n    \"native\": \"ไทย\",\n    \"scenario\": [\n      \"เหตุการณ์\"\n    ],\n    \"scenarioOutline\": [\n      \"สรุปเหตุการณ์\",\n      \"โครงสร้างของเหตุการณ์\"\n    ],\n    \"then\": [\n      \"* \",\n      \"ดังนั้น \"\n    ],\n    \"when\": [\n      \"* \",\n      \"เมื่อ \"\n    ]\n  },\n  \"tl\": {\n    \"and\": [\n      \"* \",\n      \"మరియు \"\n    ],\n    \"background\": [\n      \"నేపథ్యం\"\n    ],\n    \"but\": [\n      \"* \",\n      \"కాని \"\n    ],\n    \"examples\": [\n      \"ఉదాహరణలు\"\n    ],\n    \"feature\": [\n      \"గుణము\"\n    ],\n    \"given\": [\n      \"* \",\n      \"చెప్పబడినది \"\n    ],\n    \"name\": \"Telugu\",\n    \"native\": \"తెలుగు\",\n    \"scenario\": [\n      \"సన్నివేశం\"\n    ],\n    \"scenarioOutline\": [\n      \"కథనం\"\n    ],\n    \"then\": [\n      \"* \",\n      \"అప్పుడు \"\n    ],\n    \"when\": [\n      \"* \",\n      \"ఈ పరిస్థితిలో \"\n    ]\n  },\n  \"tlh\": {\n    \"and\": [\n      \"* \",\n      \"'ej \",\n      \"latlh \"\n    ],\n    \"background\": [\n      \"mo'\"\n    ],\n    \"but\": [\n      \"* \",\n      \"'ach \",\n      \"'a \"\n    ],\n    \"examples\": [\n      \"ghantoH\",\n      \"lutmey\"\n    ],\n    \"feature\": [\n      \"Qap\",\n      \"Qu'meH 'ut\",\n      \"perbogh\",\n      \"poQbogh malja'\",\n      \"laH\"\n    ],\n    \"given\": [\n      \"* \",\n      \"ghu' noblu' \",\n      \"DaH ghu' bejlu' \"\n    ],\n    \"name\": \"Klingon\",\n    \"native\": \"tlhIngan\",\n    \"scenario\": [\n      \"lut\"\n    ],\n    \"scenarioOutline\": [\n      \"lut chovnatlh\"\n    ],\n    \"then\": [\n      \"* \",\n      \"vaj \"\n    ],\n    \"when\": [\n      \"* \",\n      \"qaSDI' \"\n    ]\n  },\n  \"tr\": {\n    \"and\": [\n      \"* \",\n      \"Ve \"\n    ],\n    \"background\": [\n      \"Geçmiş\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Fakat \",\n      \"Ama \"\n    ],\n    \"examples\": [\n      \"Örnekler\"\n    ],\n    \"feature\": [\n      \"Özellik\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Diyelim ki \"\n    ],\n    \"name\": \"Turkish\",\n    \"native\": \"Türkçe\",\n    \"scenario\": [\n      \"Senaryo\"\n    ],\n    \"scenarioOutline\": [\n      \"Senaryo taslağı\"\n    ],\n    \"then\": [\n      \"* \",\n      \"O zaman \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Eğer ki \"\n    ]\n  },\n  \"tt\": {\n    \"and\": [\n      \"* \",\n      \"Һәм \",\n      \"Вә \"\n    ],\n    \"background\": [\n      \"Кереш\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Ләкин \",\n      \"Әмма \"\n    ],\n    \"examples\": [\n      \"Үрнәкләр\",\n      \"Мисаллар\"\n    ],\n    \"feature\": [\n      \"Мөмкинлек\",\n      \"Үзенчәлеклелек\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Әйтик \"\n    ],\n    \"name\": \"Tatar\",\n    \"native\": \"Татарча\",\n    \"scenario\": [\n      \"Сценарий\"\n    ],\n    \"scenarioOutline\": [\n      \"Сценарийның төзелеше\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Нәтиҗәдә \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Әгәр \"\n    ]\n  },\n  \"uk\": {\n    \"and\": [\n      \"* \",\n      \"І \",\n      \"А також \",\n      \"Та \"\n    ],\n    \"background\": [\n      \"Передумова\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Але \"\n    ],\n    \"examples\": [\n      \"Приклади\"\n    ],\n    \"feature\": [\n      \"Функціонал\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Припустимо \",\n      \"Припустимо, що \",\n      \"Нехай \",\n      \"Дано \"\n    ],\n    \"name\": \"Ukrainian\",\n    \"native\": \"Українська\",\n    \"scenario\": [\n      \"Сценарій\"\n    ],\n    \"scenarioOutline\": [\n      \"Структура сценарію\"\n    ],\n    \"then\": [\n      \"* \",\n      \"То \",\n      \"Тоді \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Якщо \",\n      \"Коли \"\n    ]\n  },\n  \"ur\": {\n    \"and\": [\n      \"* \",\n      \"اور \"\n    ],\n    \"background\": [\n      \"پس منظر\"\n    ],\n    \"but\": [\n      \"* \",\n      \"لیکن \"\n    ],\n    \"examples\": [\n      \"مثالیں\"\n    ],\n    \"feature\": [\n      \"صلاحیت\",\n      \"کاروبار کی ضرورت\",\n      \"خصوصیت\"\n    ],\n    \"given\": [\n      \"* \",\n      \"اگر \",\n      \"بالفرض \",\n      \"فرض کیا \"\n    ],\n    \"name\": \"Urdu\",\n    \"native\": \"اردو\",\n    \"scenario\": [\n      \"منظرنامہ\"\n    ],\n    \"scenarioOutline\": [\n      \"منظر نامے کا خاکہ\"\n    ],\n    \"then\": [\n      \"* \",\n      \"پھر \",\n      \"تب \"\n    ],\n    \"when\": [\n      \"* \",\n      \"جب \"\n    ]\n  },\n  \"uz\": {\n    \"and\": [\n      \"* \",\n      \"Ва \"\n    ],\n    \"background\": [\n      \"Тарих\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Лекин \",\n      \"Бирок \",\n      \"Аммо \"\n    ],\n    \"examples\": [\n      \"Мисоллар\"\n    ],\n    \"feature\": [\n      \"Функционал\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Агар \"\n    ],\n    \"name\": \"Uzbek\",\n    \"native\": \"Узбекча\",\n    \"scenario\": [\n      \"Сценарий\"\n    ],\n    \"scenarioOutline\": [\n      \"Сценарий структураси\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Унда \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Агар \"\n    ]\n  },\n  \"vi\": {\n    \"and\": [\n      \"* \",\n      \"Và \"\n    ],\n    \"background\": [\n      \"Bối cảnh\"\n    ],\n    \"but\": [\n      \"* \",\n      \"Nhưng \"\n    ],\n    \"examples\": [\n      \"Dữ liệu\"\n    ],\n    \"feature\": [\n      \"Tính năng\"\n    ],\n    \"given\": [\n      \"* \",\n      \"Biết \",\n      \"Cho \"\n    ],\n    \"name\": \"Vietnamese\",\n    \"native\": \"Tiếng Việt\",\n    \"scenario\": [\n      \"Tình huống\",\n      \"Kịch bản\"\n    ],\n    \"scenarioOutline\": [\n      \"Khung tình huống\",\n      \"Khung kịch bản\"\n    ],\n    \"then\": [\n      \"* \",\n      \"Thì \"\n    ],\n    \"when\": [\n      \"* \",\n      \"Khi \"\n    ]\n  },\n  \"zh-CN\": {\n    \"and\": [\n      \"* \",\n      \"而且\",\n      \"并且\",\n      \"同时\"\n    ],\n    \"background\": [\n      \"背景\"\n    ],\n    \"but\": [\n      \"* \",\n      \"但是\"\n    ],\n    \"examples\": [\n      \"例子\"\n    ],\n    \"feature\": [\n      \"功能\"\n    ],\n    \"given\": [\n      \"* \",\n      \"假如\",\n      \"假设\",\n      \"假定\"\n    ],\n    \"name\": \"Chinese simplified\",\n    \"native\": \"简体中文\",\n    \"scenario\": [\n      \"场景\",\n      \"剧本\"\n    ],\n    \"scenarioOutline\": [\n      \"场景大纲\",\n      \"剧本大纲\"\n    ],\n    \"then\": [\n      \"* \",\n      \"那么\"\n    ],\n    \"when\": [\n      \"* \",\n      \"当\"\n    ]\n  },\n  \"zh-TW\": {\n    \"and\": [\n      \"* \",\n      \"而且\",\n      \"並且\",\n      \"同時\"\n    ],\n    \"background\": [\n      \"背景\"\n    ],\n    \"but\": [\n      \"* \",\n      \"但是\"\n    ],\n    \"examples\": [\n      \"例子\"\n    ],\n    \"feature\": [\n      \"功能\"\n    ],\n    \"given\": [\n      \"* \",\n      \"假如\",\n      \"假設\",\n      \"假定\"\n    ],\n    \"name\": \"Chinese traditional\",\n    \"native\": \"繁體中文\",\n    \"scenario\": [\n      \"場景\",\n      \"劇本\"\n    ],\n    \"scenarioOutline\": [\n      \"場景大綱\",\n      \"劇本大綱\"\n    ],\n    \"then\": [\n      \"* \",\n      \"那麼\"\n    ],\n    \"when\": [\n      \"* \",\n      \"當\"\n    ]\n  }\n}\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Utils/NSArray+Hashes.h",
    "content": "//\n//  NSArray+Hashes.h\n//  CucumberishExample\n//\n//  Created by David Siebecker on 7/26/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface NSArray (Hashes)\n/**\n * Converts an NSArray<NSArray> to an array of dictionaries where the keys for the dictionary are the elements in the first array in self\n * @return the row hashes\n */\n-(NSArray*)rowHashes;\n\n/**\n * Converts an NSArray<NSArray> to an array of dictionaries where the kesy for the dictionary are the first elements in each array in self\n * @return the column hashes\n */\n-(NSArray*)columnHashes;\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Utils/NSArray+Hashes.m",
    "content": "//\n//  NSArray+Hashes.m\n//  CucumberishExample\n//\n//  Created by David Siebecker on 7/26/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\n\n#import \"NSArray+Hashes.h\"\n\n@implementation NSArray (Hashes)\n\n-(NSArray *)rowHashes\n{\n    NSMutableArray *array = [NSMutableArray arrayWithCapacity:self.count];\n    NSArray *keys = self[0];\n    for (NSInteger i = 1; i < self.count; i++) {\n        NSMutableDictionary *dict = [NSMutableDictionary dictionary];\n        NSArray *values = self[i];\n        [keys enumerateObjectsUsingBlock:^(NSString *  _Nonnull key, NSUInteger idx, BOOL * _Nonnull stop) {\n            dict[key] = values[idx];\n        }];\n        [array addObject:dict];\n    }\n    return array;\n}\n\n-(NSArray *)columnHashes\n{\n    NSMutableArray *array = [NSMutableArray arrayWithCapacity:[self[0] count]-1];\n    NSArray *keys = [self valueForKey:@\"firstObject\"];\n    for (NSInteger i = 0; i < keys.count; i++) {\n        NSMutableDictionary *dict = [NSMutableDictionary dictionary];\n        [self enumerateObjectsUsingBlock:^(NSString *  _Nonnull key, NSUInteger idx, BOOL * _Nonnull stop) {\n            if (idx != 0) {\n                dict[key] = self[i][idx];\n            }\n        }];\n        [array addObject:dict];\n    }\n    return array;\n}\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Utils/NSObject+Dictionary.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface NSObject (Dictionary)\n\n- (NSDictionary *)dictionary;\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Utils/NSObject+Dictionary.m",
    "content": "#import \"NSObject+Dictionary.h\"\n\n#import \"GHHasLocationProtocol.h\"\n\n#import <objc/runtime.h>\n\n@implementation NSObject (Dictionary)\n\nstatic NSDateFormatter * dateFormatter;\n\n+ (NSDateFormatter *)dateFormatter\n{\n    if (!dateFormatter)\n    {\n        dateFormatter = [[NSDateFormatter alloc] init];\n        [dateFormatter setDateFormat: @\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\"];\n        [dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @\"en_US_POSIX\"]];\n    }\n    return dateFormatter;\n}\n\n- (NSDictionary *)dictionary\n{\n    NSMutableDictionary * dictionary = [[NSMutableDictionary alloc] init];\n    \n    unsigned int count;\n    Class currentClass = [self class];\n    while (currentClass != [NSObject class])\n    {\n        Ivar * ivars = class_copyIvarList(currentClass, &count);\n    \n        for (int i = 0; i < count; i++)\n        {\n            NSString * propertyName = [NSString stringWithUTF8String:ivar_getName(ivars[i])];\n            id object = [self valueForKey: propertyName];\n            \n            // Ugly fix to replace \"desc\" properties by \"description\" because the ToString() method is named \"description\" in ObjC...\n            if ([propertyName isEqualToString: @\"desc\"])\n                propertyName = @\"description\";\n            \n            if (object)\n            {\n                if ([object isKindOfClass:[NSArray class]] || [object isKindOfClass:[NSSet class]])\n                {\n                    NSMutableArray * subObjectsBuffer = [[NSMutableArray alloc] init];\n                    for (NSObject * subObject in object)\n                    {\n                        [subObjectsBuffer addObject: [subObject dictionary]];\n                    }\n                    dictionary[propertyName] = [[NSArray alloc] initWithArray: subObjectsBuffer];\n                }\n                else if ([object isKindOfClass:[NSDictionary class]])\n                {\n                    NSMutableDictionary * subObjectsBuffer = [[NSMutableDictionary alloc] init];\n                    for (id key in object)\n                    {\n                        NSObject * subObject = [object objectForKey: key];\n                        [subObjectsBuffer setObject: [subObject dictionary] forKey: key];\n                    }\n                    dictionary[propertyName] = [[NSDictionary alloc] initWithDictionary: subObjectsBuffer];\n                }\n                else if ([object isKindOfClass:[NSString class]] || [object isKindOfClass:[NSNumber class]])\n                    dictionary[propertyName] = object;\n                else if ([object isKindOfClass:[NSDate class]])\n                    dictionary[propertyName] = [[NSObject dateFormatter] stringFromDate:(NSDate *) object];\n                else if ([object isKindOfClass: [NSObject class]])\n                    dictionary[propertyName] = [object dictionary];\n            }\n            \n        }\n        \n        free(ivars);\n        currentClass = class_getSuperclass(currentClass);\n    }\n    \n    // Add type based on class name to the dictionary\n    if ([[self class] conformsToProtocol: @protocol(GHHasLocationProtocol)])\n        [dictionary setObject: [NSStringFromClass([self class]) stringByReplacingOccurrencesOfString: @\"GH\" withString: @\"\"] forKey: @\"type\"];\n    \n    return dictionary;\n}\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Utils/NSString+Formatter.h",
    "content": "//\n//  NSString+Formatter.h\n//\n//  Created by Ahmed Ali on 11/01/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n\n@interface NSString (Formatter)\n\n- (NSString *)camleCaseStringWithFirstUppercaseCharacter:(BOOL)firstUppercaseCharacter;\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/Cucumberish/Utils/NSString+Formatter.m",
    "content": "//\n//  NSString+Formatter.m\n\n//  Created by Ahmed Ali on 11/01/16.\n//  Copyright © 2016 Ahmed Ali. All rights reserved.\n//\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 \"NSString+Formatter.h\"\n\n@implementation NSString (Formatter)\n- (NSString *)camleCaseStringWithFirstUppercaseCharacter:(BOOL)firstUppercaseCharacter\n{\n    static NSString * sep = @\"AASSAAAKKKAALLLAL\";\n    NSString * str = [[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] stringByReplacingOccurrencesOfString:@\" \" withString:sep];\n    str = [str stringByReplacingCharactersInSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet] withString:@\"\"];\n    str = [str stringByReplacingOccurrencesOfString:sep withString:@\"_\"];\n    NSMutableString * output = [NSMutableString string];\n    BOOL makeNextCharacterInUpperCase = firstUppercaseCharacter;\n    for (int i = 0; i < str.length; i++) {\n        \n        NSString * substr = [str substringWithRange:NSMakeRange(i, 1)];\n        if(i == 0 && !makeNextCharacterInUpperCase){\n            substr = [substr lowercaseString];\n        }\n        if([substr isEqualToString:@\"_\"]){\n            makeNextCharacterInUpperCase = YES;\n            continue;\n        }else if(makeNextCharacterInUpperCase){\n            substr = [substr uppercaseString];\n            \n        }\n        [output appendString:substr];\n        makeNextCharacterInUpperCase = NO;\n    }\n    \n    return output;\n}\n\n- (NSString *)stringByReplacingCharactersInSet:(NSCharacterSet *)charSet withString:(NSString *)aString {\n    NSMutableString *s = [NSMutableString stringWithCapacity:self.length];\n    for (NSUInteger i = 0; i < self.length; ++i) {\n        unichar c = [self characterAtIndex:i];\n        if (![charSet characterIsMember:c]) {\n            [s appendFormat:@\"%C\", c];\n        } else {\n            [s appendString:aString];\n        }\n    }\n    return s;\n}\n\n@end\n"
  },
  {
    "path": "Pods/Cucumberish/LICENSE",
    "content": "Copyright (c) 2016 Ahmed Ali (https://github.com/Ahmed-Ali)\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."
  },
  {
    "path": "Pods/Cucumberish/README.md",
    "content": "# Cucumberish\nCucumberish is a test automation framework for Behaviour Driven Development (BDD).\nIt is inspired by the amazing way of writing automated test cases introduced originally in Cucumber using the Gherkin language.\n\n**If you are not sure whether Cucumberish is for you or not checkout the [FAQ](#faq) section**\n# Features\n\n* Full integration with Xcode Test Navigator.\n* Can be used with continues integration servers, or cloud services; just like XC unit tests!\n* When any test fail, Xcode Test Navigator will point to your .feature file on the line that failed.\n* Your test reports will appear in your Reports Navigator just like any XC unit tests.\n* No Ruby, \"command line-only\", or any other non-ios related languages or chaotic dependency chain needed to install or use Cucumberish at all!\n* Few minutes installation!\n* Step implementations are done directly in Objective-C or Swift! Which means you can breakpoint and debug your steps implementations easily.\n* Can be used with Unit Test as well as UI Test targets!\n\n##### Here is a quick animated GIF showing Cucumberish in action: \n\n![Cucumberish In Action](https://cloud.githubusercontent.com/assets/5157350/12704873/cf0a6dfe-c864-11e5-8a3b-8a3682d8e880.gif)\n\n# Install Manually\n- [Install manually for Objective-C](https://github.com/Ahmed-Ali/Cucumberish/wiki/Install-manually-for-Objective-C) test targets\n- [Install manually for Swift](https://github.com/Ahmed-Ali/Cucumberish/wiki/Install-manually-for-Swift) test targets\n\n# Install with CocoaPods\n\nAdd the following to your Podfile\n\n```Ruby\nuse_frameworks!\ntarget 'YourAppTestTarget' do\n  pod 'Cucumberish'\nend\n```\nAnd follow the rest for the setup steps:\n- [Setup Cucumberish with Cocoapods (Objective C)\n](https://github.com/Ahmed-Ali/Cucumberish/wiki/Setup-Cucumberish-with-Cocoapods-(Objective-C))\n- [Setup Cucumberish with Cocoapods (Swift)](https://github.com/Ahmed-Ali/Cucumberish/wiki/Setup-Cucumberish-with-Cocoapods-(Swift))\n\n# Install with Carthage\n- [Install with Carthage for Objective C](https://github.com/Ahmed-Ali/Cucumberish/wiki/Install-with-Carthage-for-Objective-C) test targets\n- [Install with Carthage for Swift](https://github.com/Ahmed-Ali/Cucumberish/wiki/Install-with-Carthage-for-Swift) test targets\n\n# Getting started\nNow you have Cucumberish in place and you followed all the installation and post-installation instructions; it is time to write your first simple feature and scenario in just a few more steps!\nSince the exact step implementations will differ between one project and another, we will not dig to deeply into it; we will just outline the general approach on how to get there. I will assume your test target is an Objective-C one for the sake of demonstration; but the same principles can be applied on Swift targets.\n\nStart by creating a new file in your features folder; we will call it `example.feature`.\n\n_Note:_ You can have only one feature per file, but as many scenarios as you want.\n\nOpen this file to edit in Xcode (or any text editor you prefer) and write the following for your very first feature:\n```Gherkin\nFeature: Example\n# This is a free text description as an inline documentation for your features, you can omit it if you want.\n# However, it is advisable to describe your features well.\nAs someone who plans to automate the iOS project test cases, I will use Cucumberish.\n\n# First scenario is the scenario name, which will also appear in a proper format in Xcode test navigator\nScenario: First scenario\n\n    # This is the first step in the scenario\n    # Also noteworthy; a \"Given\" step should be treated as the step that defines the app state before going into the rest of the scenario\n    # Or consider it as a precondition for the scenario;\n    # For example if the user must be logged in to post a comment, then you should say something like \"Given the user is logged in\" as your Given step.\n    Given I have a very cool app\n    \n    \n    # The grammar being used is completely defined by you and your team; it is up to you to find the best way to define your functionality.\n    # Only keep in mind that every step must start with \"Given\", \"When\", \"Then\", \"And\", or \"But\".\n    When I automate it with \"Cucumberish\"\n    Then I will be more confident about the quality of the project and its releases\n```\n\nNow you have one cool feature in place, it is time to implement its steps. You only need to care about the steps, not the feature or the scenario itself. So your step implementations are done without context.\n\nIn the body of the CucumberishInit C function and before calling the `-[Cucumberish beginExecution]` method, add the following:\n\n``` Objective-C\n    Given(@\"I have a very cool app\", ^(NSArray<NSString *> *args, NSDictionary *userInfo) {\n        //Now it is expected that you will do whatever necessary to make sure \"I have a very cool app\" condition is satisfied :)\n        NSLog(@\"\\\"Given I have a very cool app\\\" step is implemented\");\n    });\n    \n    // The step implementation matching text can be any valid regular expression text\n    // Your regex capturing groups will be added to the args array in the same order they have been captured by your regex string\n    When(@\"^I automate it with \\\"(.*)\\\"$\", ^(NSArray<NSString *> *args, NSDictionary *userInfo) {\n        NSLog(@\"I am gonna automate my test cases with \\\"%@\\\"\", args[0]);\n    });\n    \n    Then(@\"I will be more confident about the quality of the project and its releases\", ^(NSArray<NSString *> *args, NSDictionary *userInfo) {\n        NSLog(@\"Implemented step for the sake of the example\");\n    });\n\n```\n\nAnd that's it! You have implemented your first feature scenario steps!\nFor more information about the steps, the blocks that are passed to it and the hooks, check the [CCIBlockDefinitions.h](https://github.com/Ahmed-Ali/Cucumberish/blob/master/Cucumberish/Core/CCIBlockDefinitions.h) file and [Cucumberish Wiki](https://github.com/Ahmed-Ali/Cucumberish/wiki).\n\n# Examples\nBeside all the information you can find on the [wiki](https://github.com/Ahmed-Ali/Cucumberish/wiki) and specifically the [Steps Definition](https://github.com/Ahmed-Ali/Cucumberish/wiki/Step-Definitions) page, seeing examples in action is the best way to demonstrate something. You can clone this repository and open the file `CucumberishLibraryTest/CucumberishLibrary.xcodeproj`.\n\n\nIn the `CucumberishLibrary` project there are five targets:\n\n1. CucumberishLibrary target:\n    - This is the main target that includes the Cucumberish library, we use it as our testable target to test it in the test targets.\n    \n2. CucumberishFeatureDefinition target:\n    - This target is mainly a demonstration of different ways to define a step implemnetation and to get you familiar with most of Cucumberish APIs.\n    - Most of the steps in this target uses bit complicated regular expressions strings, but you should not worry about that. As long as you know some of the basics of regular expressions, you should be fine. The [Steps Definition](https://github.com/Ahmed-Ali/Cucumberish/wiki/Step-Definitions) page can be of great help if you are not so familiar with regular expressions.\n\n3. CucumberishTests Target:\n    - In this target we use the Cucumberish library to test its own behaviour.\n\t\n\n# Unit Tests\nThe CucumberishLibrary project, located in the CucumberLibraryTest folder, contains two targets, CucumberishTests and CucumberishFeatureDefinition, which are used to test Cucumberish itself.\n\n            \n# Troubleshooting\n#### My test case scenario failed because the step is not implemented, but I am sure I implemented it — now what?\nThis can happen if your step definition text can not be matched against the step written in the feature file.\nIt can happen because of a mistake in your regex string, or maybe an additional unwated space has been added to either the definition of the step or the step itself.\nA good place to put a breakpoint and see what is going on is in `Cucumberish/Core/Managers/CCIStepsManagers.m` in the method `findDefinitionForStep:amongDefinitions`:\n\n#### My test case failed, but when I click on the failed case in the Xcode test navigator it does not open the file where the failure occured.\nThis is known to happen for two reasons:\n    \n1. If there is a a runtime crash in your code, for example when you try to access the fifth element of an array that has only four elements.\nIt is believed to be meaningless to point to one of your feature files in such a case. However, you still need to find the issue; you can put an exception breakpoint or open the Report navigator in Xcode and click on the first Test item at the top of your reports. Inside this report the failed case will be expandable and will show you all the available information.\n   \n2. If you missed one of the first two steps of the [Manual installation](#manual-installation), in case you installed Cucumberish manually, or you missed the second step in the [Post installation steps](#post-installation-steps).\n\nIf you believe you've identified another type of failure, please report it as an issue.\n\n# FAQ\n1. How does Cucumberish work in brief?\n\t- It is very simple. You describe your features in `.feature` files and define a set of scenarios for each feature where each scenario has a set of steps. Then Cucumberish will create an XC test suite for each feature and an XCTestCase for each scenario, and will map the steps to your code. So it ends up with human-readable features and still implemented in a way we, as developers, prefer.\n2. I want to use Swift in my test target, is it possible?\n\t- Yes, please checkout the UI test target in the example application. It is completely Swift! \n\t\n3. I prefer to use Apple UI test framework for long-term support, is it still possible to do this with Cucumberish?\n\t- YES! You can combine Cucumberish with your prefered frameworks and tools! This also means Cucumberish is not limited to UI.\n\n4. I still don't know if Cucumberish is right for me. Is it? You have some options:\n\t- You can read the [wiki](https://github.com/Ahmed-Ali/Cucumberish/wiki), it is short and to the point.\n\t- You can read a bit about the original [Cucumber](https://cucumber.io) to get an idea how it has started and what it is all about\n\t- Finally you can always open an issue if you have a specific issue, or post your questions on StackOverflow (and ping me), and I will be happy to help out.\n\n# Continuous Integration\n\nA continuous integration (CI) process is highly recommended and is extremely useful in ensuring that your application stays functional. The easiest way to do this will be either using Bots, or Jenkins or another tool that uses xcodebuild. For tools using xcodebuild, review the manpage for instructions on using test destinations.\n\n# Known Issues\nWhen executing individual scenario or feature from the test navigator, the rest of test cases will disappear. You will have to run all the tests by pressing CMD+U (or from the Tests button) in order for the test cases to appear again.\n    \n# Contributing\nI am so glad that you are interested in contributing to Cucumberish.\nWhen you have made some improvements or additions that you would like to see in the master repository, please [create a pull request](https://github.com/Ahmed-Ali/Cucumberish/pulls) and I will merge it as soon as possible.\n\n# License\nCucumberish is available under the **MIT** license. See the [LICENSE](https://github.com/Ahmed-Ali/Cucumberish/blob/master/LICENSE) file for more information.\n"
  },
  {
    "path": "Pods/Kingfisher/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2017 Wei Wang\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "Pods/Kingfisher/README.md",
    "content": "<p align=\"center\">\n\n<img src=\"https://raw.githubusercontent.com/onevcat/Kingfisher/master/images/logo.png\" alt=\"Kingfisher\" title=\"Kingfisher\" width=\"557\"/>\n\n</p>\n\n<p align=\"center\">\n<a href=\"https://travis-ci.org/onevcat/Kingfisher\"><img src=\"https://img.shields.io/travis/onevcat/Kingfisher/master.svg\"></a>\n<a href=\"https://github.com/Carthage/Carthage/\"><img src=\"https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat\"></a>\n<a href=\"http://onevcat.github.io/Kingfisher/\"><img src=\"https://img.shields.io/cocoapods/v/Kingfisher.svg?style=flat\"></a>\n<a href=\"https://raw.githubusercontent.com/onevcat/Kingfisher/master/LICENSE\"><img src=\"https://img.shields.io/cocoapods/l/Kingfisher.svg?style=flat\"></a>\n<a href=\"http://onevcat.github.io/Kingfisher/\"><img src=\"https://img.shields.io/cocoapods/p/Kingfisher.svg?style=flat\"></a>\n<a href=\"https://codebeat.co/projects/github-com-onevcat-kingfisher\"><img alt=\"codebeat badge\" src=\"https://codebeat.co/assets/svg/badges/A-398b39-669406e9e1b136187b91af587d4092b0160370f271f66a651f444b990c2730e9.svg\" /></a>\n<a href=\"#backers\" alt=\"sponsors on Open Collective\"><img src=\"https://opencollective.com/Kingfisher/backers/badge.svg\" /></a>\n<a href=\"#sponsors\" alt=\"Sponsors on Open Collective\"><img src=\"https://opencollective.com/Kingfisher/sponsors/badge.svg\" /></a>\n</p>\n\nKingfisher is a lightweight, pure-Swift library for downloading and caching images from the web. This project is heavily inspired by the popular [SDWebImage](https://github.com/rs/SDWebImage). It provides you a chance to use a pure-Swift alternative in your next app.\n\n## Features\n\n- [x] Asynchronous image downloading and caching.\n- [x] `URLSession`-based networking. Basic image processors and filters supplied.\n- [x] Multiple-layer cache for both memory and disk.\n- [x] Cancelable downloading and processing tasks to improve performance.\n- [x] Independent components. Use the downloader or caching system separately as you need.\n- [x] Prefetching images and showing them from cache later when necessary.\n- [x] Extensions for `UIImageView`, `NSImage` and `UIButton` to directly set an image from a URL.\n- [x] Built-in transition animation when setting images.\n- [x] Customizable placeholder while loading images.\n- [x] Extensible image processing and image format support.\n\nThe simplest use-case is setting an image to an image view with the `UIImageView` extension:\n\n```swift\nlet url = URL(string: \"url_of_your_image\")\nimageView.kf.setImage(with: url)\n```\n\nKingfisher will download the image from `url`, send it to both the memory cache and the disk cache, and display it in `imageView`. When you use the same code later, the image will be retrieved from cache and shown immediately.\n\n## Requirements\n\n- iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+\n- Swift 4 (Kingfisher 4.x), Swift 3 (Kingfisher 3.x)\n\nMain development of Kingfisher is based on Swift 4. Only critical bug fixes will be applied to Kingfisher 3.x.\n\n- Kingfisher 4.0 Migration - Kingfisher 3.x should be source compatible to Kingfisher 4. The reason for a major update is that we need to specify the Swift version explicitly for Xcode. All deprecated methods in Kingfisher 3 has been removed, so please ensure you have no warning left before you migrate from Kingfisher 3 to Kingfisher 4. If you have any trouble in migrating, please open an issue to discuss.\n- [Kingfisher 3.0 Migration Guide](https://github.com/onevcat/Kingfisher/wiki/Kingfisher-3.0-Migration-Guide) - If you are upgrading to Kingfisher 3.x from an earlier version, please read this for more information.\n\n## Next Steps\n\nWe prepared a [wiki page](https://github.com/onevcat/Kingfisher/wiki). You can find tons of useful things there.\n\n* [Installation Guide](https://github.com/onevcat/Kingfisher/wiki/Installation-Guide) - Follow it to integrate Kingfisher into your project.\n* [Cheat Sheet](https://github.com/onevcat/Kingfisher/wiki/Cheat-Sheet)- Curious about what Kingfisher could do and how would it look like when used in your project? See this page for useful code snippets. If you are already familiar with Kingfisher, you could also learn new tricks to improve the way you use Kingfisher! \n* [API Reference](http://onevcat.github.io/Kingfisher/) - Lastly, please remember to read the full whenever you may need a more detailed reference.\n\n## Other\n\n### Future of Kingfisher\n\nI want to keep Kingfisher lightweight. This framework will focus on providing a simple solution for downloading and caching images. This doesn’t mean the framework can’t be improved. Kingfisher is far from perfect, so necessary and useful updates will be made to make it better.\n\n### Developments and Tests\n\nAny contributing and pull requests are warmly welcome. However, before you plan to implement some features or try to fix an uncertain issue, it is recommended to open a discussion first. \n\nThe test images are contained in another project to keep this project repo fast and slim. You could run `./setup.sh` in the root folder of Kingfisher to clone the test images when you need to run the tests target. It would be appreciated if your pull requests could build and with all tests green. :)\n\n### About the logo\n\nThe logo of Kingfisher is inspired by [Tangram (七巧板)](http://en.wikipedia.org/wiki/Tangram), a dissection puzzle consisting of seven flat shapes from China. I believe she's a kingfisher bird instead of a swift, but someone insists that she is a pigeon. I guess I should give her a name. Hi, guys, do you have any suggestions?\n\n### Contact\n\nFollow and contact me on [Twitter](http://twitter.com/onevcat) or [Sina Weibo](http://weibo.com/onevcat). If you find an issue, just [open a ticket](https://github.com/onevcat/Kingfisher/issues/new). Pull requests are warmly welcome as well.\n\n## Contributors\n\nThis project exists thanks to all the people who contribute. [[Contribute]](https://github.com/onevcat/Kingfisher/blob/master/CONTRIBUTING.md).\n<a href=\"https://github.com/onevcat/Kingfisher/graphs/contributors\"><img src=\"https://opencollective.com/Kingfisher/contributors.svg?width=890\" /></a>\n\n\n## Backers\n\nThank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/Kingfisher#backer)]\n\n<a href=\"https://opencollective.com/Kingfisher#backers\" target=\"_blank\"><img src=\"https://opencollective.com/Kingfisher/backers.svg?width=890\"></a>\n\n\n## Sponsors\n\nSupport this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/Kingfisher#sponsor)]\n\n<a href=\"https://opencollective.com/Kingfisher/sponsor/0/website\" target=\"_blank\"><img src=\"https://opencollective.com/Kingfisher/sponsor/0/avatar.svg\"></a>\n<a href=\"https://opencollective.com/Kingfisher/sponsor/1/website\" target=\"_blank\"><img src=\"https://opencollective.com/Kingfisher/sponsor/1/avatar.svg\"></a>\n<a href=\"https://opencollective.com/Kingfisher/sponsor/2/website\" target=\"_blank\"><img src=\"https://opencollective.com/Kingfisher/sponsor/2/avatar.svg\"></a>\n<a href=\"https://opencollective.com/Kingfisher/sponsor/3/website\" target=\"_blank\"><img src=\"https://opencollective.com/Kingfisher/sponsor/3/avatar.svg\"></a>\n<a href=\"https://opencollective.com/Kingfisher/sponsor/4/website\" target=\"_blank\"><img src=\"https://opencollective.com/Kingfisher/sponsor/4/avatar.svg\"></a>\n<a href=\"https://opencollective.com/Kingfisher/sponsor/5/website\" target=\"_blank\"><img src=\"https://opencollective.com/Kingfisher/sponsor/5/avatar.svg\"></a>\n<a href=\"https://opencollective.com/Kingfisher/sponsor/6/website\" target=\"_blank\"><img src=\"https://opencollective.com/Kingfisher/sponsor/6/avatar.svg\"></a>\n<a href=\"https://opencollective.com/Kingfisher/sponsor/7/website\" target=\"_blank\"><img src=\"https://opencollective.com/Kingfisher/sponsor/7/avatar.svg\"></a>\n<a href=\"https://opencollective.com/Kingfisher/sponsor/8/website\" target=\"_blank\"><img src=\"https://opencollective.com/Kingfisher/sponsor/8/avatar.svg\"></a>\n<a href=\"https://opencollective.com/Kingfisher/sponsor/9/website\" target=\"_blank\"><img src=\"https://opencollective.com/Kingfisher/sponsor/9/avatar.svg\"></a>\n\n\n\n### License\n\nKingfisher is released under the MIT license. See LICENSE for details.\n\n\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/AnimatedImageView.swift",
    "content": "//\n//  AnimatableImageView.swift\n//  Kingfisher\n//\n//  Created by bl4ckra1sond3tre on 4/22/16.\n//\n//  The AnimatableImageView, AnimatedFrame and Animator is a modified version of \n//  some classes from kaishin's Gifu project (https://github.com/kaishin/Gifu)\n//\n//  The MIT License (MIT)\n//\n//  Copyright (c) 2017 Reda Lemeden.\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy of\n//  this software and associated documentation files (the \"Software\"), to deal in\n//  the Software without restriction, including without limitation the rights to\n//  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n//  the Software, and to permit persons to whom the Software is furnished to do so,\n//  subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in all\n//  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, FITNESS\n//  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n//  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n//  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n//  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n//  The name and characters used in the demo of this software are property of their\n//  respective owners.\n\nimport UIKit\nimport ImageIO\n\n/// `AnimatedImageView` is a subclass of `UIImageView` for displaying animated image.\nopen class AnimatedImageView: UIImageView {\n    \n    /// Proxy object for prevending a reference cycle between the CADDisplayLink and AnimatedImageView.\n    class TargetProxy {\n        private weak var target: AnimatedImageView?\n        \n        init(target: AnimatedImageView) {\n            self.target = target\n        }\n        \n        @objc func onScreenUpdate() {\n            target?.updateFrame()\n        }\n    }\n    \n    // MARK: - Public property\n    /// Whether automatically play the animation when the view become visible. Default is true.\n    public var autoPlayAnimatedImage = true\n    \n    /// The size of the frame cache.\n    public var framePreloadCount = 10\n    \n    /// Specifies whether the GIF frames should be pre-scaled to save memory. Default is true.\n    public var needsPrescaling = true\n    \n    /// The animation timer's run loop mode. Default is `NSRunLoopCommonModes`. Set this property to `NSDefaultRunLoopMode` will make the animation pause during UIScrollView scrolling.\n    public var runLoopMode = RunLoopMode.commonModes {\n        willSet {\n            if runLoopMode == newValue {\n                return\n            } else {\n                stopAnimating()\n                displayLink.remove(from: .main, forMode: runLoopMode)\n                displayLink.add(to: .main, forMode: newValue)\n                startAnimating()\n            }\n        }\n    }\n    \n    // MARK: - Private property\n    /// `Animator` instance that holds the frames of a specific image in memory.\n    private var animator: Animator?\n    \n    /// A flag to avoid invalidating the displayLink on deinit if it was never created, because displayLink is so lazy. :D\n    private var isDisplayLinkInitialized: Bool = false\n    \n    /// A display link that keeps calling the `updateFrame` method on every screen refresh.\n    private lazy var displayLink: CADisplayLink = {\n        self.isDisplayLinkInitialized = true\n        let displayLink = CADisplayLink(target: TargetProxy(target: self), selector: #selector(TargetProxy.onScreenUpdate))\n        displayLink.add(to: .main, forMode: self.runLoopMode)\n        displayLink.isPaused = true\n        return displayLink\n    }()\n    \n    // MARK: - Override\n    override open var image: Image? {\n        didSet {\n            if image != oldValue {\n                reset()\n            }\n            setNeedsDisplay()\n            layer.setNeedsDisplay()\n        }\n    }\n    \n    deinit {\n        if isDisplayLinkInitialized {\n            displayLink.invalidate()\n        }\n    }\n    \n    override open var isAnimating: Bool {\n        if isDisplayLinkInitialized {\n            return !displayLink.isPaused\n        } else {\n            return super.isAnimating\n        }\n    }\n    \n    /// Starts the animation.\n    override open func startAnimating() {\n        if self.isAnimating {\n            return\n        } else {\n            displayLink.isPaused = false\n        }\n    }\n    \n    /// Stops the animation.\n    override open func stopAnimating() {\n        super.stopAnimating()\n        if isDisplayLinkInitialized {\n            displayLink.isPaused = true\n        }\n    }\n    \n    override open func display(_ layer: CALayer) {\n        if let currentFrame = animator?.currentFrame {\n            layer.contents = currentFrame.cgImage\n        } else {\n            layer.contents = image?.cgImage\n        }\n    }\n    \n    override open func didMoveToWindow() {\n        super.didMoveToWindow()\n        didMove()\n    }\n    \n    override open func didMoveToSuperview() {\n        super.didMoveToSuperview()\n        didMove()\n    }\n\n    // This is for back compatibility that using regular UIImageView to show animated image.\n    override func shouldPreloadAllAnimation() -> Bool {\n        return false\n    }\n\n    // MARK: - Private method\n    /// Reset the animator.\n    private func reset() {\n        animator = nil\n        if let imageSource = image?.kf.imageSource?.imageRef {\n            animator = Animator(imageSource: imageSource, contentMode: contentMode, size: bounds.size, framePreloadCount: framePreloadCount)\n            animator?.needsPrescaling = needsPrescaling\n            animator?.prepareFramesAsynchronously()\n        }\n        didMove()\n    }\n    \n    private func didMove() {\n        if autoPlayAnimatedImage && animator != nil {\n            if let _ = superview, let _ = window {\n                startAnimating()\n            } else {\n                stopAnimating()\n            }\n        }\n    }\n    \n    /// Update the current frame with the displayLink duration.\n    private func updateFrame() {\n        let duration: CFTimeInterval\n\n        // CA based display link is opt-out from ProMotion by default.\n        // So the duration and its FPS might not match. \n        // See [#718](https://github.com/onevcat/Kingfisher/issues/718)\n        if #available(iOS 10.0, tvOS 10.0, *) {\n            // By setting CADisableMinimumFrameDuration to YES in Info.plist may \n            // cause the preferredFramesPerSecond being 0\n            if displayLink.preferredFramesPerSecond == 0 {\n                duration = displayLink.duration\n            } else {\n                // Some devices (like iPad Pro 10.5) will have a different FPS.\n                duration = 1.0 / Double(displayLink.preferredFramesPerSecond)\n            }\n        } else {\n            duration = displayLink.duration\n        }\n    \n        if animator?.updateCurrentFrame(duration: duration) ?? false {\n            layer.setNeedsDisplay()\n        }\n    }\n}\n\n/// Keeps a reference to an `Image` instance and its duration as a GIF frame.\nstruct AnimatedFrame {\n    var image: Image?\n    let duration: TimeInterval\n    \n    static let null: AnimatedFrame = AnimatedFrame(image: .none, duration: 0.0)\n}\n\n// MARK: - Animator\nclass Animator {\n    // MARK: Private property\n    fileprivate let size: CGSize\n    fileprivate let maxFrameCount: Int\n    fileprivate let imageSource: CGImageSource\n    \n    fileprivate var animatedFrames = [AnimatedFrame]()\n    fileprivate let maxTimeStep: TimeInterval = 1.0\n    fileprivate var frameCount = 0\n    fileprivate var currentFrameIndex = 0\n    fileprivate var currentPreloadIndex = 0\n    fileprivate var timeSinceLastFrameChange: TimeInterval = 0.0\n    fileprivate var needsPrescaling = true\n    \n    /// Loop count of animated image.\n    private var loopCount = 0\n    \n    var currentFrame: UIImage? {\n        return frame(at: currentFrameIndex)\n    }\n    \n    var contentMode = UIViewContentMode.scaleToFill\n    \n    private lazy var preloadQueue: DispatchQueue = {\n        return DispatchQueue(label: \"com.onevcat.Kingfisher.Animator.preloadQueue\")\n    }()\n    \n    /**\n     Init an animator with image source reference.\n     \n     - parameter imageSource: The reference of animated image.\n     - parameter contentMode: Content mode of AnimatedImageView.\n     - parameter size: Size of AnimatedImageView.\n     - parameter framePreloadCount: Frame cache size.\n     \n     - returns: The animator object.\n     */\n    init(imageSource source: CGImageSource, contentMode mode: UIViewContentMode, size: CGSize, framePreloadCount count: Int) {\n        self.imageSource = source\n        self.contentMode = mode\n        self.size = size\n        self.maxFrameCount = count\n    }\n    \n    func frame(at index: Int) -> Image? {\n        return animatedFrames[safe: index]?.image\n    }\n    \n    func prepareFramesAsynchronously() {\n        preloadQueue.async { [weak self] in\n            self?.prepareFrames()\n        }\n    }\n    \n    private func prepareFrames() {\n        frameCount = CGImageSourceGetCount(imageSource)\n        \n        if let properties = CGImageSourceCopyProperties(imageSource, nil),\n            let gifInfo = (properties as NSDictionary)[kCGImagePropertyGIFDictionary as String] as? NSDictionary,\n            let loopCount = gifInfo[kCGImagePropertyGIFLoopCount as String] as? Int\n        {\n            self.loopCount = loopCount\n        }\n        \n        let frameToProcess = min(frameCount, maxFrameCount)\n        animatedFrames.reserveCapacity(frameToProcess)\n        animatedFrames = (0..<frameToProcess).reduce([]) { $0 + pure(prepareFrame(at: $1))}\n        currentPreloadIndex = (frameToProcess + 1) % frameCount\n    }\n    \n    private func prepareFrame(at index: Int) -> AnimatedFrame {\n        \n        guard let imageRef = CGImageSourceCreateImageAtIndex(imageSource, index, nil) else {\n            return AnimatedFrame.null\n        }\n        \n        let defaultGIFFrameDuration = 0.100\n        let frameDuration = imageSource.kf.gifProperties(at: index).map {\n            gifInfo -> Double in\n            \n            let unclampedDelayTime = gifInfo[kCGImagePropertyGIFUnclampedDelayTime as String] as Double?\n            let delayTime = gifInfo[kCGImagePropertyGIFDelayTime as String] as Double?\n            let duration = unclampedDelayTime ?? delayTime ?? 0.0\n            \n            /**\n             http://opensource.apple.com/source/WebCore/WebCore-7600.1.25/platform/graphics/cg/ImageSourceCG.cpp\n             Many annoying ads specify a 0 duration to make an image flash as quickly as\n             possible. We follow Safari and Firefox's behavior and use a duration of 100 ms\n             for any frames that specify a duration of <= 10 ms.\n             See <rdar://problem/7689300> and <http://webkit.org/b/36082> for more information.\n             \n             See also: http://nullsleep.tumblr.com/post/16524517190/animated-gif-minimum-frame-delay-browser.\n             */\n            return duration > 0.011 ? duration : defaultGIFFrameDuration\n        } ?? defaultGIFFrameDuration\n        \n        let image = Image(cgImage: imageRef)\n        let scaledImage: Image?\n        \n        if needsPrescaling {\n            scaledImage = image.kf.resize(to: size, for: contentMode)\n        } else {\n            scaledImage = image\n        }\n        \n        return AnimatedFrame(image: scaledImage, duration: frameDuration)\n    }\n    \n    /**\n     Updates the current frame if necessary using the frame timer and the duration of each frame in `animatedFrames`.\n     */\n    func updateCurrentFrame(duration: CFTimeInterval) -> Bool {\n        timeSinceLastFrameChange += min(maxTimeStep, duration)\n        guard let frameDuration = animatedFrames[safe: currentFrameIndex]?.duration, frameDuration <= timeSinceLastFrameChange else {\n            return false\n        }\n        \n        timeSinceLastFrameChange -= frameDuration\n        \n        let lastFrameIndex = currentFrameIndex\n        currentFrameIndex += 1\n        currentFrameIndex = currentFrameIndex % animatedFrames.count\n        \n        if animatedFrames.count < frameCount {\n            preloadFrameAsynchronously(at: lastFrameIndex)\n        }\n        return true\n    }\n    \n    private func preloadFrameAsynchronously(at index: Int) {\n        preloadQueue.async { [weak self] in\n            self?.preloadFrame(at: index)\n        }\n    }\n    \n    private func preloadFrame(at index: Int) {\n        animatedFrames[index] = prepareFrame(at: currentPreloadIndex)\n        currentPreloadIndex += 1\n        currentPreloadIndex = currentPreloadIndex % frameCount\n    }\n}\n\nextension CGImageSource: KingfisherCompatible { }\nextension Kingfisher where Base: CGImageSource {\n    func gifProperties(at index: Int) -> [String: Double]? {\n        let properties = CGImageSourceCopyPropertiesAtIndex(base, index, nil) as Dictionary?\n        return properties?[kCGImagePropertyGIFDictionary] as? [String: Double]\n    }\n}\n\nextension Array {\n    subscript(safe index: Int) -> Element? {\n        return indices ~= index ? self[index] : nil\n    }\n}\n\nprivate func pure<T>(_ value: T) -> [T] {\n    return [value]\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/Box.swift",
    "content": "//\n//  Box.swift\n//  Kingfisher\n//\n//  Created by WANG WEI on 2016/09/12.\n//  Copyright © 2016年 Wei Wang. All rights reserved.\n//\n\nimport Foundation\n\nclass Box<T> {\n    let value: T\n    init(value: T) {\n        self.value = value\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/CacheSerializer.swift",
    "content": "//\n//  CacheSerializer.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 2016/09/02.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport Foundation\n\n/// An `CacheSerializer` would be used to convert some data to an image object for \n/// retrieving from disk cache and vice versa for storing to disk cache.\npublic protocol CacheSerializer {\n    \n    /// Get the serialized data from a provided image\n    /// and optional original data for caching to disk.\n    ///\n    ///\n    /// - parameter image:    The image needed to be serialized.\n    /// - parameter original: The original data which is just downloaded. \n    ///                       If the image is retrieved from cache instead of\n    ///                       downloaded, it will be `nil`.\n    ///\n    /// - returns: A data which will be stored to cache, or `nil` when no valid\n    ///            data could be serialized.\n    func data(with image: Image, original: Data?) -> Data?\n    \n    /// Get an image deserialized from provided data.\n    ///\n    /// - parameter data:    The data from which an image should be deserialized.\n    /// - parameter options: Options for deserialization.\n    ///\n    /// - returns: An image deserialized or `nil` when no valid image \n    ///            could be deserialized.\n    func image(with data: Data, options: KingfisherOptionsInfo?) -> Image?\n}\n\n\n/// `DefaultCacheSerializer` is a basic `CacheSerializer` used in default cache of\n/// Kingfisher. It could serialize and deserialize PNG, JEPG and GIF images. For \n/// image other than these formats, a normalized `pngRepresentation` will be used.\npublic struct DefaultCacheSerializer: CacheSerializer {\n    \n    public static let `default` = DefaultCacheSerializer()\n    private init() {}\n    \n    public func data(with image: Image, original: Data?) -> Data? {\n        let imageFormat = original?.kf.imageFormat ?? .unknown\n        \n        let data: Data?\n        switch imageFormat {\n        case .PNG: data = image.kf.pngRepresentation()\n        case .JPEG: data = image.kf.jpegRepresentation(compressionQuality: 1.0)\n        case .GIF: data = image.kf.gifRepresentation()\n        case .unknown: data = original ?? image.kf.normalized.kf.pngRepresentation()\n        }\n        \n        return data\n    }\n    \n    public func image(with data: Data, options: KingfisherOptionsInfo?) -> Image? {\n        let options = options ?? KingfisherEmptyOptionsInfo\n        return Kingfisher<Image>.image(\n            data: data,\n            scale: options.scaleFactor,\n            preloadAllAnimationData: options.preloadAllAnimationData,\n            onlyFirstFrame: options.onlyLoadFirstFrame)\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/Filter.swift",
    "content": "//\n//  Filter.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 2016/08/31.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n\n\nimport CoreImage\nimport Accelerate\n\n// Reuse the same CI Context for all CI drawing.\nprivate let ciContext = CIContext(options: nil)\n\n/// Transformer method which will be used in to provide a `Filter`.\npublic typealias Transformer = (CIImage) -> CIImage?\n\n/// Supply a filter to create an `ImageProcessor`.\npublic protocol CIImageProcessor: ImageProcessor {\n    var filter: Filter { get }\n}\n\nextension CIImageProcessor {\n    public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {\n        switch item {\n        case .image(let image):\n            return image.kf.apply(filter)\n        case .data(_):\n            return (DefaultImageProcessor.default >> self).process(item: item, options: options)\n        }\n    }\n}\n\n/// Wrapper for a `Transformer` of CIImage filters.\npublic struct Filter {\n    \n    let transform: Transformer\n\n    public init(tranform: @escaping Transformer) {\n        self.transform = tranform\n    }\n    \n    /// Tint filter which will apply a tint color to images.\n    public static var tint: (Color) -> Filter = {\n        color in\n        Filter { input in\n            let colorFilter = CIFilter(name: \"CIConstantColorGenerator\")!\n            colorFilter.setValue(CIColor(color: color), forKey: kCIInputColorKey)\n            \n            let colorImage = colorFilter.outputImage\n            let filter = CIFilter(name: \"CISourceOverCompositing\")!\n            filter.setValue(colorImage, forKey: kCIInputImageKey)\n            filter.setValue(input, forKey: kCIInputBackgroundImageKey)\n            #if swift(>=4.0)\n            return filter.outputImage?.cropped(to: input.extent)\n            #else\n            return filter.outputImage?.cropping(to: input.extent)\n            #endif\n        }\n    }\n    \n    public typealias ColorElement = (CGFloat, CGFloat, CGFloat, CGFloat)\n    \n    /// Color control filter which will apply color control change to images.\n    public static var colorControl: (ColorElement) -> Filter = { arg -> Filter in\n        let (brightness, contrast, saturation, inputEV) = arg\n        return Filter { input in\n            let paramsColor = [kCIInputBrightnessKey: brightness,\n                               kCIInputContrastKey: contrast,\n                               kCIInputSaturationKey: saturation]\n            \n            let paramsExposure = [kCIInputEVKey: inputEV]\n            #if swift(>=4.0)\n            let blackAndWhite = input.applyingFilter(\"CIColorControls\", parameters: paramsColor)\n            return blackAndWhite.applyingFilter(\"CIExposureAdjust\", parameters: paramsExposure)\n            #else\n            let blackAndWhite = input.applyingFilter(\"CIColorControls\", withInputParameters: paramsColor)\n            return blackAndWhite.applyingFilter(\"CIExposureAdjust\", withInputParameters: paramsExposure)\n            #endif\n        }\n        \n    }\n}\n\nextension Kingfisher where Base: Image {\n    /// Apply a `Filter` containing `CIImage` transformer to `self`.\n    ///\n    /// - parameter filter: The filter used to transform `self`.\n    ///\n    /// - returns: A transformed image by input `Filter`.\n    ///\n    /// - Note: Only CG-based images are supported. If any error happens during transforming, `self` will be returned.\n    public func apply(_ filter: Filter) -> Image {\n        \n        guard let cgImage = cgImage else {\n            assertionFailure(\"[Kingfisher] Tint image only works for CG-based image.\")\n            return base\n        }\n        \n        let inputImage = CIImage(cgImage: cgImage)\n        guard let outputImage = filter.transform(inputImage) else {\n            return base\n        }\n        \n        guard let result = ciContext.createCGImage(outputImage, from: outputImage.extent) else {\n            assertionFailure(\"[Kingfisher] Can not make an tint image within context.\")\n            return base\n        }\n        \n        #if os(macOS)\n            return fixedForRetinaPixel(cgImage: result, to: size)\n        #else\n            return Image(cgImage: result, scale: base.scale, orientation: base.imageOrientation)\n        #endif\n    }\n\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/FormatIndicatedCacheSerializer.swift",
    "content": "//\n//  RequestModifier.swift\n//  Kingfisher\n//\n//  Created by Junyu Kuang on 5/28/17.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport Foundation\n\n/// `FormatIndicatedCacheSerializer` let you indicate an image format for serialized caches.\n///\n/// It could serialize and deserialize PNG, JEPG and GIF images. For\n/// image other than these formats, a normalized `pngRepresentation` will be used.\n///\n/// Example:\n/// ````\n/// private let profileImageSize = CGSize(width: 44, height: 44)\n///\n/// private let imageProcessor = RoundCornerImageProcessor(\n///     cornerRadius: profileImageSize.width / 2, targetSize: profileImageSize)\n///\n/// private let optionsInfo: KingfisherOptionsInfo = [\n///     .cacheSerializer(FormatIndicatedCacheSerializer.png), \n///     .backgroundDecode, .processor(imageProcessor), .scaleFactor(UIScreen.main.scale)]\n///\n/// extension UIImageView {\n///    func setProfileImage(with url: URL) {\n///        // Image will always cached as PNG format to preserve alpha channel for round rect.\n///        _ = kf.setImage(with: url, options: optionsInfo)\n///    }\n///}\n/// ````\npublic struct FormatIndicatedCacheSerializer: CacheSerializer {\n    \n    public static let png = FormatIndicatedCacheSerializer(imageFormat: .PNG)\n    public static let jpeg = FormatIndicatedCacheSerializer(imageFormat: .JPEG)\n    public static let gif = FormatIndicatedCacheSerializer(imageFormat: .GIF)\n    \n    /// The indicated image format.\n    private let imageFormat: ImageFormat\n    \n    public func data(with image: Image, original: Data?) -> Data? {\n        \n        func imageData(withFormat imageFormat: ImageFormat) -> Data? {\n            switch imageFormat {\n            case .PNG: return image.kf.pngRepresentation()\n            case .JPEG: return image.kf.jpegRepresentation(compressionQuality: 1.0)\n            case .GIF: return image.kf.gifRepresentation()\n            case .unknown: return nil\n            }\n        }\n        \n        // generate data with indicated image format\n        if let data = imageData(withFormat: imageFormat) {\n            return data\n        }\n        \n        let originalFormat = original?.kf.imageFormat ?? .unknown\n        \n        // generate data with original image's format\n        if originalFormat != imageFormat, let data = imageData(withFormat: originalFormat) {\n            return data\n        }\n        \n        return original ?? image.kf.normalized.kf.pngRepresentation()\n    }\n    \n    /// Same implementation as `DefaultCacheSerializer`.\n    public func image(with data: Data, options: KingfisherOptionsInfo?) -> Image? {\n        let options = options ?? KingfisherEmptyOptionsInfo\n        return Kingfisher<Image>.image(\n            data: data,\n            scale: options.scaleFactor,\n            preloadAllAnimationData: options.preloadAllAnimationData,\n            onlyFirstFrame: options.onlyLoadFirstFrame)\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/Image.swift",
    "content": "//\n//  Image.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 16/1/6.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n\n#if os(macOS)\nimport AppKit\nprivate var imagesKey: Void?\nprivate var durationKey: Void?\n#else\nimport UIKit\nimport MobileCoreServices\nprivate var imageSourceKey: Void?\n#endif\nprivate var animatedImageDataKey: Void?\n\nimport ImageIO\nimport CoreGraphics\n\n#if !os(watchOS)\nimport Accelerate\nimport CoreImage\n#endif\n\n// MARK: - Image Properties\nextension Kingfisher where Base: Image {\n    fileprivate(set) var animatedImageData: Data? {\n        get {\n            return objc_getAssociatedObject(base, &animatedImageDataKey) as? Data\n        }\n        set {\n            objc_setAssociatedObject(base, &animatedImageDataKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n        }\n    }\n    \n    #if os(macOS)\n    var cgImage: CGImage? {\n        return base.cgImage(forProposedRect: nil, context: nil, hints: nil)\n    }\n    \n    var scale: CGFloat {\n        return 1.0\n    }\n    \n    fileprivate(set) var images: [Image]? {\n        get {\n            return objc_getAssociatedObject(base, &imagesKey) as? [Image]\n        }\n        set {\n            objc_setAssociatedObject(base, &imagesKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n        }\n    }\n    \n    fileprivate(set) var duration: TimeInterval {\n        get {\n            return objc_getAssociatedObject(base, &durationKey) as? TimeInterval ?? 0.0\n        }\n        set {\n            objc_setAssociatedObject(base, &durationKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n        }\n    }\n    \n    var size: CGSize {\n        return base.representations.reduce(CGSize.zero, { size, rep in\n            return CGSize(width: max(size.width, CGFloat(rep.pixelsWide)), height: max(size.height, CGFloat(rep.pixelsHigh)))\n        })\n    }\n    \n    #else\n    var cgImage: CGImage? {\n        return base.cgImage\n    }\n    \n    var scale: CGFloat {\n        return base.scale\n    }\n    \n    var images: [Image]? {\n        return base.images\n    }\n    \n    var duration: TimeInterval {\n        return base.duration\n    }\n    \n    fileprivate(set) var imageSource: ImageSource? {\n        get {\n            return objc_getAssociatedObject(base, &imageSourceKey) as? ImageSource\n        }\n        set {\n            objc_setAssociatedObject(base, &imageSourceKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n        }\n    }\n    \n    var size: CGSize {\n        return base.size\n    }\n    #endif\n}\n\n// MARK: - Image Conversion\nextension Kingfisher where Base: Image {\n    #if os(macOS)\n    static func image(cgImage: CGImage, scale: CGFloat, refImage: Image?) -> Image {\n        return Image(cgImage: cgImage, size: CGSize.zero)\n    }\n    \n    /**\n     Normalize the image. This method does nothing in OS X.\n     \n     - returns: The image itself.\n     */\n    public var normalized: Image {\n        return base\n    }\n    \n    static func animated(with images: [Image], forDuration forDurationduration: TimeInterval) -> Image? {\n        return nil\n    }\n    #else\n    static func image(cgImage: CGImage, scale: CGFloat, refImage: Image?) -> Image {\n        if let refImage = refImage {\n            return Image(cgImage: cgImage, scale: scale, orientation: refImage.imageOrientation)\n        } else {\n            return Image(cgImage: cgImage, scale: scale, orientation: .up)\n        }\n    }\n    \n    /**\n     Normalize the image. This method will try to redraw an image with orientation and scale considered.\n     \n     - returns: The normalized image with orientation set to up and correct scale.\n     */\n    public var normalized: Image {\n        // prevent animated image (GIF) lose it's images\n        guard images == nil else { return base }\n        // No need to do anything if already up\n        guard base.imageOrientation != .up else { return base }\n    \n        return draw(cgImage: nil, to: size) {\n            base.draw(in: CGRect(origin: CGPoint.zero, size: size))\n        }\n    }\n    \n    static func animated(with images: [Image], forDuration duration: TimeInterval) -> Image? {\n        return .animatedImage(with: images, duration: duration)\n    }\n    #endif\n}\n\n// MARK: - Image Representation\nextension Kingfisher where Base: Image {\n    // MARK: - PNG\n    public func pngRepresentation() -> Data? {\n        #if os(macOS)\n            guard let cgimage = cgImage else {\n                return nil\n            }\n            let rep = NSBitmapImageRep(cgImage: cgimage)\n            return rep.representation(using: .png, properties: [:])\n        #else\n            return UIImagePNGRepresentation(base)\n        #endif\n    }\n    \n    // MARK: - JPEG\n    public func jpegRepresentation(compressionQuality: CGFloat) -> Data? {\n        #if os(macOS)\n            guard let cgImage = cgImage else {\n                return nil\n            }\n            let rep = NSBitmapImageRep(cgImage: cgImage)\n            return rep.representation(using:.jpeg, properties: [.compressionFactor: compressionQuality])\n        #else\n            return UIImageJPEGRepresentation(base, compressionQuality)\n        #endif\n    }\n    \n    // MARK: - GIF\n    public func gifRepresentation() -> Data? {\n        return animatedImageData\n    }\n}\n\n// MARK: - Create images from data\nextension Kingfisher where Base: Image {\n    static func animated(with data: Data, scale: CGFloat = 1.0, duration: TimeInterval = 0.0, preloadAll: Bool, onlyFirstFrame: Bool = false) -> Image? {\n        \n        func decode(from imageSource: CGImageSource, for options: NSDictionary) -> ([Image], TimeInterval)? {\n            \n            //Calculates frame duration for a gif frame out of the kCGImagePropertyGIFDictionary dictionary\n            func frameDuration(from gifInfo: NSDictionary?) -> Double {\n                let gifDefaultFrameDuration = 0.100\n                \n                guard let gifInfo = gifInfo else {\n                    return gifDefaultFrameDuration\n                }\n                \n                let unclampedDelayTime = gifInfo[kCGImagePropertyGIFUnclampedDelayTime as String] as? NSNumber\n                let delayTime = gifInfo[kCGImagePropertyGIFDelayTime as String] as? NSNumber\n                let duration = unclampedDelayTime ?? delayTime\n                \n                guard let frameDuration = duration else { return gifDefaultFrameDuration }\n                \n                return frameDuration.doubleValue > 0.011 ? frameDuration.doubleValue : gifDefaultFrameDuration\n            }\n            \n            let frameCount = CGImageSourceGetCount(imageSource)\n            var images = [Image]()\n            var gifDuration = 0.0\n            for i in 0 ..< frameCount {\n                \n                guard let imageRef = CGImageSourceCreateImageAtIndex(imageSource, i, options) else {\n                    return nil\n                }\n\n                if frameCount == 1 {\n                    // Single frame\n                    gifDuration = Double.infinity\n                } else {\n                    \n                    // Animated GIF\n                    guard let properties = CGImageSourceCopyPropertiesAtIndex(imageSource, i, nil) else {\n                        return nil\n                    }\n\n                    let gifInfo = (properties as NSDictionary)[kCGImagePropertyGIFDictionary as String] as? NSDictionary\n                    gifDuration += frameDuration(from: gifInfo)\n                }\n                \n                images.append(Kingfisher<Image>.image(cgImage: imageRef, scale: scale, refImage: nil))\n                \n                if onlyFirstFrame { break }\n            }\n            \n            return (images, gifDuration)\n        }\n        \n        // Start of kf.animatedImageWithGIFData\n        let options: NSDictionary = [kCGImageSourceShouldCache as String: true, kCGImageSourceTypeIdentifierHint as String: kUTTypeGIF]\n        guard let imageSource = CGImageSourceCreateWithData(data as CFData, options) else {\n            return nil\n        }\n        \n        #if os(macOS)\n            guard let (images, gifDuration) = decode(from: imageSource, for: options) else {\n                return nil\n            }\n            let image: Image?\n            if onlyFirstFrame {\n                image = images.first\n            } else {\n                image = Image(data: data)\n                image?.kf.images = images\n                image?.kf.duration = gifDuration\n            }\n            image?.kf.animatedImageData = data\n            return image\n        #else\n            \n            let image: Image?\n            if preloadAll || onlyFirstFrame {\n                guard let (images, gifDuration) = decode(from: imageSource, for: options) else { return nil }\n                image = onlyFirstFrame ? images.first : Kingfisher<Image>.animated(with: images, forDuration: duration <= 0.0 ? gifDuration : duration)\n            } else {\n                image = Image(data: data)\n                image?.kf.imageSource = ImageSource(ref: imageSource)\n            }\n            image?.kf.animatedImageData = data\n            return image\n        #endif\n    }\n\n    static func image(data: Data, scale: CGFloat, preloadAllAnimationData: Bool, onlyFirstFrame: Bool) -> Image? {\n        var image: Image?\n\n        #if os(macOS)\n            switch data.kf.imageFormat {\n            case .JPEG:\n                image = Image(data: data)\n            case .PNG:\n                image = Image(data: data)\n            case .GIF:\n                image = Kingfisher<Image>.animated(\n                    with: data,\n                    scale: scale,\n                    duration: 0.0,\n                    preloadAll: preloadAllAnimationData,\n                    onlyFirstFrame: onlyFirstFrame)\n            case .unknown:\n                image = Image(data: data)\n            }\n        #else\n            switch data.kf.imageFormat {\n            case .JPEG:\n                image = Image(data: data, scale: scale)\n            case .PNG:\n                image = Image(data: data, scale: scale)\n            case .GIF:\n                image = Kingfisher<Image>.animated(\n                    with: data,\n                    scale: scale,\n                    duration: 0.0,\n                    preloadAll: preloadAllAnimationData,\n                    onlyFirstFrame: onlyFirstFrame)\n            case .unknown:\n                image = Image(data: data, scale: scale)\n            }\n        #endif\n\n        return image\n    }\n}\n\n// MARK: - Image Transforming\nextension Kingfisher where Base: Image {\n\n    // MARK: - Round Corner\n    /// Create a round corner image based on `self`.\n    ///\n    /// - parameter radius:          The round corner radius of creating image.\n    /// - parameter size:            The target size of creating image.\n    /// - parameter corners:         The target corners which will be applied rounding.\n    /// - parameter backgroundColor: The background color for the output image\n    ///\n    /// - returns: An image with round corner of `self`.\n    ///\n    /// - Note: This method only works for CG-based image.\n    public func image(withRoundRadius radius: CGFloat,\n                      fit size: CGSize,\n                      roundingCorners corners: RectCorner = .all,\n                      backgroundColor: Color? = nil) -> Image\n    {   \n        guard let cgImage = cgImage else {\n            assertionFailure(\"[Kingfisher] Round corner image only works for CG-based image.\")\n            return base\n        }\n        \n        let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: size)\n        return draw(cgImage: cgImage, to: size) {\n            #if os(macOS)\n                if let backgroundColor = backgroundColor {\n                    let rectPath = NSBezierPath(rect: rect)\n                    backgroundColor.setFill()\n                    rectPath.fill()\n                }\n\n                let path = NSBezierPath(roundedRect: rect, byRoundingCorners: corners, radius: radius)\n                path.windingRule = .evenOddWindingRule\n                path.addClip()\n                base.draw(in: rect)\n            #else\n                guard let context = UIGraphicsGetCurrentContext() else {\n                    assertionFailure(\"[Kingfisher] Failed to create CG context for image.\")\n                    return\n                }\n\n                if let backgroundColor = backgroundColor {\n                    let rectPath = UIBezierPath(rect: rect)\n                    backgroundColor.setFill()\n                    rectPath.fill()\n                }\n\n                let path = UIBezierPath(roundedRect: rect,\n                                        byRoundingCorners: corners.uiRectCorner,\n                                        cornerRadii: CGSize(width: radius, height: radius)).cgPath\n                context.addPath(path)\n                context.clip()\n                base.draw(in: rect)\n            #endif\n        }\n    }\n    \n    #if os(iOS) || os(tvOS)\n    func resize(to size: CGSize, for contentMode: UIViewContentMode) -> Image {\n        switch contentMode {\n        case .scaleAspectFit:\n            return resize(to: size, for: .aspectFit)\n        case .scaleAspectFill:\n            return resize(to: size, for: .aspectFill)\n        default:\n            return resize(to: size)\n        }\n    }\n    #endif\n    \n    // MARK: - Resize\n    /// Resize `self` to an image of new size.\n    ///\n    /// - parameter size: The target size.\n    ///\n    /// - returns: An image with new size.\n    ///\n    /// - Note: This method only works for CG-based image.\n    public func resize(to size: CGSize) -> Image {\n        \n        guard let cgImage = cgImage else {\n            assertionFailure(\"[Kingfisher] Resize only works for CG-based image.\")\n            return base\n        }\n        \n        let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: size)\n        return draw(cgImage: cgImage, to: size) {\n            #if os(macOS)\n                base.draw(in: rect, from: NSRect.zero, operation: .copy, fraction: 1.0)\n            #else\n                base.draw(in: rect)\n            #endif\n        }\n    }\n    \n    /// Resize `self` to an image of new size, respecting the content mode.\n    ///\n    /// - Parameters:\n    ///   - size: The target size.\n    ///   - contentMode: Content mode of output image should be.\n    /// - Returns: An image with new size.\n    public func resize(to size: CGSize, for contentMode: ContentMode) -> Image {\n        switch contentMode {\n        case .aspectFit:\n            let newSize = self.size.kf.constrained(size)\n            return resize(to: newSize)\n        case .aspectFill:\n            let newSize = self.size.kf.filling(size)\n            return resize(to: newSize)\n        default:\n            return resize(to: size)\n        }\n    }\n    \n    public func crop(to size: CGSize, anchorOn anchor: CGPoint) -> Image {\n        guard let cgImage = cgImage else {\n            assertionFailure(\"[Kingfisher] Crop only works for CG-based image.\")\n            return base\n        }\n        \n        let rect = self.size.kf.constrainedRect(for: size, anchor: anchor)\n        guard let image = cgImage.cropping(to: rect.scaled(scale)) else {\n            assertionFailure(\"[Kingfisher] Cropping image failed.\")\n            return base\n        }\n        \n        return Kingfisher.image(cgImage: image, scale: scale, refImage: base)\n    }\n    \n    // MARK: - Blur\n    \n    /// Create an image with blur effect based on `self`.\n    ///\n    /// - parameter radius: The blur radius should be used when creating blur effect.\n    ///\n    /// - returns: An image with blur effect applied.\n    ///\n    /// - Note: This method only works for CG-based image.\n    public func blurred(withRadius radius: CGFloat) -> Image {\n        #if os(watchOS)\n            return base\n        #else\n            guard let cgImage = cgImage else {\n                assertionFailure(\"[Kingfisher] Blur only works for CG-based image.\")\n                return base\n            }\n            \n            // http://www.w3.org/TR/SVG/filters.html#feGaussianBlurElement\n            // let d = floor(s * 3*sqrt(2*pi)/4 + 0.5)\n            // if d is odd, use three box-blurs of size 'd', centered on the output pixel.\n            let s = Float(max(radius, 2.0))\n            // We will do blur on a resized image (*0.5), so the blur radius could be half as well.\n            \n            // Fix the slow compiling time for Swift 3. \n            // See https://github.com/onevcat/Kingfisher/issues/611\n            let pi2 = 2 * Float.pi\n            let sqrtPi2 = sqrt(pi2)\n            var targetRadius = floor(s * 3.0 * sqrtPi2 / 4.0 + 0.5)\n            \n            if targetRadius.isEven {\n                targetRadius += 1\n            }\n            \n            let iterations: Int\n            if radius < 0.5 {\n                iterations = 1\n            } else if radius < 1.5 {\n                iterations = 2\n            } else {\n                iterations = 3\n            }\n            \n            let w = Int(size.width)\n            let h = Int(size.height)\n            let rowBytes = Int(CGFloat(cgImage.bytesPerRow))\n            \n            func createEffectBuffer(_ context: CGContext) -> vImage_Buffer {\n                let data = context.data\n                let width = vImagePixelCount(context.width)\n                let height = vImagePixelCount(context.height)\n                let rowBytes = context.bytesPerRow\n                \n                return vImage_Buffer(data: data, height: height, width: width, rowBytes: rowBytes)\n            }\n\n            guard let context = beginContext(size: size, scale: scale) else {\n                assertionFailure(\"[Kingfisher] Failed to create CG context for blurring image.\")\n                return base\n            }\n            defer { endContext() }\n\n            context.draw(cgImage, in: CGRect(x: 0, y: 0, width: w, height: h))\n            \n            var inBuffer = createEffectBuffer(context)\n            \n            guard let outContext = beginContext(size: size, scale: scale) else {\n                assertionFailure(\"[Kingfisher] Failed to create CG context for blurring image.\")\n                return base\n            }\n            defer { endContext() }\n            var outBuffer = createEffectBuffer(outContext)\n            \n            for _ in 0 ..< iterations {\n                vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, nil, 0, 0, UInt32(targetRadius), UInt32(targetRadius), nil, vImage_Flags(kvImageEdgeExtend))\n                (inBuffer, outBuffer) = (outBuffer, inBuffer)\n            }\n            \n            #if os(macOS)\n                let result = outContext.makeImage().flatMap { fixedForRetinaPixel(cgImage: $0, to: size) }\n            #else\n                let result = outContext.makeImage().flatMap { Image(cgImage: $0, scale: base.scale, orientation: base.imageOrientation) }\n            #endif\n            guard let blurredImage = result else {\n                assertionFailure(\"[Kingfisher] Can not make an blurred image within this context.\")\n                return base\n            }\n            \n            return blurredImage\n        #endif\n    }\n    \n    // MARK: - Overlay\n    \n    /// Create an image from `self` with a color overlay layer.\n    ///\n    /// - parameter color:    The color should be use to overlay.\n    /// - parameter fraction: Fraction of input color. From 0.0 to 1.0. 0.0 means solid color, 1.0 means transparent overlay.\n    ///\n    /// - returns: An image with a color overlay applied.\n    ///\n    /// - Note: This method only works for CG-based image.\n    public func overlaying(with color: Color, fraction: CGFloat) -> Image {\n        \n        guard let cgImage = cgImage else {\n            assertionFailure(\"[Kingfisher] Overlaying only works for CG-based image.\")\n            return base\n        }\n        \n        let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)\n        return draw(cgImage: cgImage, to: rect.size) {\n            #if os(macOS)\n                base.draw(in: rect)\n                if fraction > 0 {\n                    color.withAlphaComponent(1 - fraction).set()\n                    rect.fill(using: .sourceAtop)\n                }\n            #else\n                color.set()\n                UIRectFill(rect)\n                base.draw(in: rect, blendMode: .destinationIn, alpha: 1.0)\n                \n                if fraction > 0 {\n                    base.draw(in: rect, blendMode: .sourceAtop, alpha: fraction)\n                }\n            #endif\n        }\n    }\n    \n    // MARK: - Tint\n    \n    /// Create an image from `self` with a color tint.\n    ///\n    /// - parameter color: The color should be used to tint `self`\n    ///\n    /// - returns: An image with a color tint applied.\n    public func tinted(with color: Color) -> Image {\n        #if os(watchOS)\n            return base\n        #else\n            return apply(.tint(color))\n        #endif\n    }\n    \n    // MARK: - Color Control\n    \n    /// Create an image from `self` with color control.\n    ///\n    /// - parameter brightness: Brightness changing to image.\n    /// - parameter contrast:   Contrast changing to image.\n    /// - parameter saturation: Saturation changing to image.\n    /// - parameter inputEV:    InputEV changing to image.\n    ///\n    /// - returns: An image with color control applied.\n    public func adjusted(brightness: CGFloat, contrast: CGFloat, saturation: CGFloat, inputEV: CGFloat) -> Image {\n        #if os(watchOS)\n            return base\n        #else\n            return apply(.colorControl((brightness, contrast, saturation, inputEV)))\n        #endif\n    }\n}\n\n// MARK: - Decode\nextension Kingfisher where Base: Image {\n    var decoded: Image {\n        return decoded(scale: scale)\n    }\n    \n    func decoded(scale: CGFloat) -> Image {\n        // prevent animated image (GIF) lose it's images\n        #if os(iOS)\n            if imageSource != nil { return base }\n        #else\n            if images != nil { return base }\n        #endif\n        \n        guard let imageRef = self.cgImage else {\n            assertionFailure(\"[Kingfisher] Decoding only works for CG-based image.\")\n            return base\n        }\n        \n        // Draw CGImage in a plain context with scale of 1.0.\n        guard let context = beginContext(size: CGSize(width: imageRef.width, height: imageRef.height), scale: 1.0) else {\n            assertionFailure(\"[Kingfisher] Decoding fails to create a valid context.\")\n            return base\n        }\n        \n        defer { endContext() }\n        \n        let rect = CGRect(x: 0, y: 0, width: CGFloat(imageRef.width), height: CGFloat(imageRef.height))\n        context.draw(imageRef, in: rect)\n        let decompressedImageRef = context.makeImage()\n        return Kingfisher<Image>.image(cgImage: decompressedImageRef!, scale: scale, refImage: base)\n    }\n}\n\n/// Reference the source image reference\nclass ImageSource {\n    var imageRef: CGImageSource?\n    init(ref: CGImageSource) {\n        self.imageRef = ref\n    }\n}\n\n// MARK: - Image format\nprivate struct ImageHeaderData {\n    static var PNG: [UInt8] = [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]\n    static var JPEG_SOI: [UInt8] = [0xFF, 0xD8]\n    static var JPEG_IF: [UInt8] = [0xFF]\n    static var GIF: [UInt8] = [0x47, 0x49, 0x46]\n}\n\nenum ImageFormat {\n    case unknown, PNG, JPEG, GIF\n}\n\n\n// MARK: - Misc Helpers\npublic struct DataProxy {\n    fileprivate let base: Data\n    init(proxy: Data) {\n        base = proxy\n    }\n}\n\nextension Data: KingfisherCompatible {\n    public typealias CompatibleType = DataProxy\n    public var kf: DataProxy {\n        return DataProxy(proxy: self)\n    }\n}\n\nextension DataProxy {\n    var imageFormat: ImageFormat {\n        var buffer = [UInt8](repeating: 0, count: 8)\n        (base as NSData).getBytes(&buffer, length: 8)\n        if buffer == ImageHeaderData.PNG {\n            return .PNG\n        } else if buffer[0] == ImageHeaderData.JPEG_SOI[0] &&\n            buffer[1] == ImageHeaderData.JPEG_SOI[1] &&\n            buffer[2] == ImageHeaderData.JPEG_IF[0]\n        {\n            return .JPEG\n        } else if buffer[0] == ImageHeaderData.GIF[0] &&\n            buffer[1] == ImageHeaderData.GIF[1] &&\n            buffer[2] == ImageHeaderData.GIF[2]\n        {\n            return .GIF\n        }\n\n        return .unknown\n    }\n}\n\npublic struct CGSizeProxy {\n    fileprivate let base: CGSize\n    init(proxy: CGSize) {\n        base = proxy\n    }\n}\n\nextension CGSize: KingfisherCompatible {\n    public typealias CompatibleType = CGSizeProxy\n    public var kf: CGSizeProxy {\n        return CGSizeProxy(proxy: self)\n    }\n}\n\nextension CGSizeProxy {\n    func constrained(_ size: CGSize) -> CGSize {\n        let aspectWidth = round(aspectRatio * size.height)\n        let aspectHeight = round(size.width / aspectRatio)\n\n        return aspectWidth > size.width ? CGSize(width: size.width, height: aspectHeight) : CGSize(width: aspectWidth, height: size.height)\n    }\n\n    func filling(_ size: CGSize) -> CGSize {\n        let aspectWidth = round(aspectRatio * size.height)\n        let aspectHeight = round(size.width / aspectRatio)\n\n        return aspectWidth < size.width ? CGSize(width: size.width, height: aspectHeight) : CGSize(width: aspectWidth, height: size.height)\n    }\n\n    private var aspectRatio: CGFloat {\n        return base.height == 0.0 ? 1.0 : base.width / base.height\n    }\n    \n    \n    func constrainedRect(for size: CGSize, anchor: CGPoint) -> CGRect {\n        \n        let unifiedAnchor = CGPoint(x: anchor.x.clamped(to: 0.0...1.0),\n                                    y: anchor.y.clamped(to: 0.0...1.0))\n        \n        let x = unifiedAnchor.x * base.width - unifiedAnchor.x * size.width\n        let y = unifiedAnchor.y * base.height - unifiedAnchor.y * size.height\n        let r = CGRect(x: x, y: y, width: size.width, height: size.height)\n        \n        let ori = CGRect(origin: CGPoint.zero, size: base)\n        return ori.intersection(r)\n    }\n}\n\nextension CGRect {\n    func scaled(_ scale: CGFloat) -> CGRect {\n        return CGRect(x: origin.x * scale, y: origin.y * scale,\n                      width: size.width * scale, height: size.height * scale)\n    }\n}\n\nextension Comparable {\n    func clamped(to limits: ClosedRange<Self>) -> Self {\n        return min(max(self, limits.lowerBound), limits.upperBound)\n    }\n}\n\nextension Kingfisher where Base: Image {\n    \n    func beginContext(size: CGSize, scale: CGFloat) -> CGContext? {\n        #if os(macOS)\n            guard let rep = NSBitmapImageRep(\n                bitmapDataPlanes: nil,\n                pixelsWide: Int(size.width),\n                pixelsHigh: Int(size.height),\n                bitsPerSample: cgImage?.bitsPerComponent ?? 8,\n                samplesPerPixel: 4,\n                hasAlpha: true,\n                isPlanar: false,\n                colorSpaceName: .calibratedRGB,\n                bytesPerRow: 0,\n                bitsPerPixel: 0) else\n            {\n                assertionFailure(\"[Kingfisher] Image representation cannot be created.\")\n                return nil\n            }\n            rep.size = size\n            NSGraphicsContext.saveGraphicsState()\n            guard let context = NSGraphicsContext(bitmapImageRep: rep) else {\n                assertionFailure(\"[Kingfisher] Image contenxt cannot be created.\")\n                return nil\n            }\n            \n            NSGraphicsContext.current = context\n            return context.cgContext\n        #else\n            UIGraphicsBeginImageContextWithOptions(size, false, scale)\n            let context = UIGraphicsGetCurrentContext()\n            context?.scaleBy(x: 1.0, y: -1.0)\n            context?.translateBy(x: 0, y: -size.height)\n            return context\n        #endif\n    }\n    \n    func endContext() {\n        #if os(macOS)\n            NSGraphicsContext.restoreGraphicsState()\n        #else\n            UIGraphicsEndImageContext()\n        #endif\n    }\n    \n    func draw(cgImage: CGImage?, to size: CGSize, draw: ()->()) -> Image {\n        #if os(macOS)\n        guard let rep = NSBitmapImageRep(\n            bitmapDataPlanes: nil,\n            pixelsWide: Int(size.width),\n            pixelsHigh: Int(size.height),\n            bitsPerSample: cgImage?.bitsPerComponent ?? 8,\n            samplesPerPixel: 4,\n            hasAlpha: true,\n            isPlanar: false,\n            colorSpaceName: .calibratedRGB,\n            bytesPerRow: 0,\n            bitsPerPixel: 0) else\n        {\n            assertionFailure(\"[Kingfisher] Image representation cannot be created.\")\n            return base\n        }\n        rep.size = size\n        \n        NSGraphicsContext.saveGraphicsState()\n        \n        let context = NSGraphicsContext(bitmapImageRep: rep)\n        NSGraphicsContext.current = context\n        draw()\n        NSGraphicsContext.restoreGraphicsState()\n        \n        let outputImage = Image(size: size)\n        outputImage.addRepresentation(rep)\n        return outputImage\n        #else\n            \n        UIGraphicsBeginImageContextWithOptions(size, false, scale)\n        defer { UIGraphicsEndImageContext() }\n        draw()\n        return UIGraphicsGetImageFromCurrentImageContext() ?? base\n        \n        #endif\n    }\n    \n    #if os(macOS)\n    func fixedForRetinaPixel(cgImage: CGImage, to size: CGSize) -> Image {\n        \n        let image = Image(cgImage: cgImage, size: base.size)\n        let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: size)\n        \n        return draw(cgImage: cgImage, to: self.size) {\n            image.draw(in: rect, from: NSRect.zero, operation: .copy, fraction: 1.0)\n        }\n    }\n    #endif\n}\n\nextension Float {\n    var isEven: Bool {\n        return truncatingRemainder(dividingBy: 2.0) == 0\n    }\n}\n\n#if os(macOS)\nextension NSBezierPath {\n    convenience init(roundedRect rect: NSRect, topLeftRadius: CGFloat, topRightRadius: CGFloat,\n         bottomLeftRadius: CGFloat, bottomRightRadius: CGFloat)\n    {\n        self.init()\n        \n        let maxCorner = min(rect.width, rect.height) / 2\n        \n        let radiusTopLeft = min(maxCorner, max(0, topLeftRadius))\n        let radiustopRight = min(maxCorner, max(0, topRightRadius))\n        let radiusbottomLeft = min(maxCorner, max(0, bottomLeftRadius))\n        let radiusbottomRight = min(maxCorner, max(0, bottomRightRadius))\n        \n        guard !NSIsEmptyRect(rect) else {\n            return\n        }\n        \n        let topLeft = NSMakePoint(NSMinX(rect), NSMaxY(rect));\n        let topRight = NSMakePoint(NSMaxX(rect), NSMaxY(rect));\n        let bottomRight = NSMakePoint(NSMaxX(rect), NSMinY(rect));\n        \n        move(to: NSMakePoint(NSMidX(rect), NSMaxY(rect)))\n        appendArc(from: topLeft, to: rect.origin, radius: radiusTopLeft)\n        appendArc(from: rect.origin, to: bottomRight, radius: radiusbottomLeft)\n        appendArc(from: bottomRight, to: topRight, radius: radiusbottomRight)\n        appendArc(from: topRight, to: topLeft, radius: radiustopRight)\n        close()\n    }\n    \n    convenience init(roundedRect rect: NSRect, byRoundingCorners corners: RectCorner, radius: CGFloat) {\n        let radiusTopLeft = corners.contains(.topLeft) ? radius : 0\n        let radiusTopRight = corners.contains(.topRight) ? radius : 0\n        let radiusBottomLeft = corners.contains(.bottomLeft) ? radius : 0\n        let radiusBottomRight = corners.contains(.bottomRight) ? radius : 0\n        \n        self.init(roundedRect: rect, topLeftRadius: radiusTopLeft, topRightRadius: radiusTopRight,\n                  bottomLeftRadius: radiusBottomLeft, bottomRightRadius: radiusBottomRight)\n    }\n}\n    \n#else\nextension RectCorner {\n    var uiRectCorner: UIRectCorner {\n        \n        var result: UIRectCorner = []\n        \n        if self.contains(.topLeft) { result.insert(.topLeft) }\n        if self.contains(.topRight) { result.insert(.topRight) }\n        if self.contains(.bottomLeft) { result.insert(.bottomLeft) }\n        if self.contains(.bottomRight) { result.insert(.bottomRight) }\n        \n        return result\n    }\n}\n#endif\n\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/ImageCache.swift",
    "content": "//\n//  ImageCache.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n#if os(macOS)\nimport AppKit\n#else\nimport UIKit\n#endif\n\npublic extension Notification.Name {\n    /**\n     This notification will be sent when the disk cache got cleaned either there are cached files expired or the total size exceeding the max allowed size. The manually invoking of `clearDiskCache` method will not trigger this notification.\n     \n     The `object` of this notification is the `ImageCache` object which sends the notification.\n     \n     A list of removed hashes (files) could be retrieved by accessing the array under `KingfisherDiskCacheCleanedHashKey` key in `userInfo` of the notification object you received. By checking the array, you could know the hash codes of files are removed.\n     \n     The main purpose of this notification is supplying a chance to maintain some necessary information on the cached files. See [this wiki](https://github.com/onevcat/Kingfisher/wiki/How-to-implement-ETag-based-304-(Not-Modified)-handling-in-Kingfisher) for a use case on it.\n     */\n    public static var KingfisherDidCleanDiskCache = Notification.Name.init(\"com.onevcat.Kingfisher.KingfisherDidCleanDiskCache\")\n}\n\n/**\nKey for array of cleaned hashes in `userInfo` of `KingfisherDidCleanDiskCacheNotification`.\n*/\npublic let KingfisherDiskCacheCleanedHashKey = \"com.onevcat.Kingfisher.cleanedHash\"\n\n/// It represents a task of retrieving image. You can call `cancel` on it to stop the process.\npublic typealias RetrieveImageDiskTask = DispatchWorkItem\n\n/**\nCache type of a cached image.\n\n- None:   The image is not cached yet when retrieving it.\n- Memory: The image is cached in memory.\n- Disk:   The image is cached in disk.\n*/\npublic enum CacheType {\n    case none, memory, disk\n    \n    public var cached: Bool {\n        switch self {\n        case .memory, .disk: return true\n        case .none: return false\n        }\n    }\n}\n\n/// `ImageCache` represents both the memory and disk cache system of Kingfisher. \n/// While a default image cache object will be used if you prefer the extension methods of Kingfisher, \n/// you can create your own cache object and configure it as your need. You could use an `ImageCache`\n/// object to manipulate memory and disk cache for Kingfisher.\nopen class ImageCache {\n\n    //Memory\n    fileprivate let memoryCache = NSCache<NSString, AnyObject>()\n    \n    /// The largest cache cost of memory cache. The total cost is pixel count of \n    /// all cached images in memory.\n    /// Default is unlimited. Memory cache will be purged automatically when a \n    /// memory warning notification is received.\n    open var maxMemoryCost: UInt = 0 {\n        didSet {\n            self.memoryCache.totalCostLimit = Int(maxMemoryCost)\n        }\n    }\n    \n    //Disk\n    fileprivate let ioQueue: DispatchQueue\n    fileprivate var fileManager: FileManager!\n    \n    ///The disk cache location.\n    open let diskCachePath: String\n  \n    /// The default file extension appended to cached files.\n    open var pathExtension: String?\n    \n    /// The longest time duration in second of the cache being stored in disk. \n    /// Default is 1 week (60 * 60 * 24 * 7 seconds).\n    /// Setting this to a negative value will make the disk cache never expiring.\n    open var maxCachePeriodInSecond: TimeInterval = 60 * 60 * 24 * 7 //Cache exists for 1 week\n    \n    /// The largest disk size can be taken for the cache. It is the total \n    /// allocated size of cached files in bytes.\n    /// Default is no limit.\n    open var maxDiskCacheSize: UInt = 0\n    \n    fileprivate let processQueue: DispatchQueue\n    \n    /// The default cache.\n    public static let `default` = ImageCache(name: \"default\")\n    \n    /// Closure that defines the disk cache path from a given path and cacheName.\n    public typealias DiskCachePathClosure = (String?, String) -> String\n    \n    /// The default DiskCachePathClosure\n    public final class func defaultDiskCachePathClosure(path: String?, cacheName: String) -> String {\n        let dstPath = path ?? NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first!\n        return (dstPath as NSString).appendingPathComponent(cacheName)\n    }\n    \n    /**\n    Init method. Passing a name for the cache. It represents a cache folder in the memory and disk.\n    \n    - parameter name: Name of the cache. It will be used as the memory cache name and the disk cache folder name \n                      appending to the cache path. This value should not be an empty string.\n    - parameter path: Optional - Location of cache path on disk. If `nil` is passed in (the default value),\n                      the `.cachesDirectory` in of your app will be used.\n    - parameter diskCachePathClosure: Closure that takes in an optional initial path string and generates\n                      the final disk cache path. You could use it to fully customize your cache path.\n    \n    - returns: The cache object.\n    */\n    public init(name: String,\n                path: String? = nil,\n                diskCachePathClosure: DiskCachePathClosure = ImageCache.defaultDiskCachePathClosure)\n    {\n        \n        if name.isEmpty {\n            fatalError(\"[Kingfisher] You should specify a name for the cache. A cache with empty name is not permitted.\")\n        }\n        \n        let cacheName = \"com.onevcat.Kingfisher.ImageCache.\\(name)\"\n        memoryCache.name = cacheName\n        \n        diskCachePath = diskCachePathClosure(path, cacheName)\n        \n        let ioQueueName = \"com.onevcat.Kingfisher.ImageCache.ioQueue.\\(name)\"\n        ioQueue = DispatchQueue(label: ioQueueName)\n        \n        let processQueueName = \"com.onevcat.Kingfisher.ImageCache.processQueue.\\(name)\"\n        processQueue = DispatchQueue(label: processQueueName, attributes: .concurrent)\n        \n        ioQueue.sync { fileManager = FileManager() }\n        \n#if !os(macOS) && !os(watchOS)\n        NotificationCenter.default.addObserver(\n            self, selector: #selector(clearMemoryCache), name: .UIApplicationDidReceiveMemoryWarning, object: nil)\n        NotificationCenter.default.addObserver(\n            self, selector: #selector(cleanExpiredDiskCache), name: .UIApplicationWillTerminate, object: nil)\n        NotificationCenter.default.addObserver(\n            self, selector: #selector(backgroundCleanExpiredDiskCache), name: .UIApplicationDidEnterBackground, object: nil)\n#endif\n    }\n    \n    deinit {\n        NotificationCenter.default.removeObserver(self)\n    }\n\n\n    // MARK: - Store & Remove\n\n    /**\n    Store an image to cache. It will be saved to both memory and disk. It is an async operation.\n    \n    - parameter image:             The image to be stored.\n    - parameter original:          The original data of the image.\n                                   Kingfisher will use it to check the format of the image and optimize cache size on disk.\n                                   If `nil` is supplied, the image data will be saved as a normalized PNG file.\n                                   It is strongly suggested to supply it whenever possible, to get a better performance and disk usage.\n    - parameter key:               Key for the image.\n    - parameter identifier:        The identifier of processor used. If you are using a processor for the image, pass the identifier of\n                                   processor to it.\n                                   This identifier will be used to generate a corresponding key for the combination of `key` and processor.\n    - parameter toDisk:            Whether this image should be cached to disk or not. If false, the image will be only cached in memory.\n    - parameter completionHandler: Called when store operation completes.\n    */\n    open func store(_ image: Image,\n                      original: Data? = nil,\n                      forKey key: String,\n                      processorIdentifier identifier: String = \"\",\n                      cacheSerializer serializer: CacheSerializer = DefaultCacheSerializer.default,\n                      toDisk: Bool = true,\n                      completionHandler: (() -> Void)? = nil)\n    {\n        \n        let computedKey = key.computedKey(with: identifier)\n        memoryCache.setObject(image, forKey: computedKey as NSString, cost: image.kf.imageCost)\n\n        func callHandlerInMainQueue() {\n            if let handler = completionHandler {\n                DispatchQueue.main.async {\n                    handler()\n                }\n            }\n        }\n        \n        if toDisk {\n            ioQueue.async {\n                \n                if let data = serializer.data(with: image, original: original) {\n                    if !self.fileManager.fileExists(atPath: self.diskCachePath) {\n                        do {\n                            try self.fileManager.createDirectory(atPath: self.diskCachePath, withIntermediateDirectories: true, attributes: nil)\n                        } catch _ {}\n                    }\n                    \n                    self.fileManager.createFile(atPath: self.cachePath(forComputedKey: computedKey), contents: data, attributes: nil)\n                }\n                callHandlerInMainQueue()\n            }\n        } else {\n            callHandlerInMainQueue()\n        }\n    }\n    \n    /**\n    Remove the image for key for the cache. It will be opted out from both memory and disk. \n    It is an async operation.\n    \n    - parameter key:               Key for the image.\n    - parameter identifier:        The identifier of processor used. If you are using a processor for the image, pass the identifier of processor to it.\n                                   This identifier will be used to generate a corresponding key for the combination of `key` and processor.\n    - parameter fromDisk:          Whether this image should be removed from disk or not. If false, the image will be only removed from memory.\n    - parameter completionHandler: Called when removal operation completes.\n    */\n    open func removeImage(forKey key: String,\n                          processorIdentifier identifier: String = \"\",\n                          fromDisk: Bool = true,\n                          completionHandler: (() -> Void)? = nil)\n    {\n        let computedKey = key.computedKey(with: identifier)\n        memoryCache.removeObject(forKey: computedKey as NSString)\n        \n        func callHandlerInMainQueue() {\n            if let handler = completionHandler {\n                DispatchQueue.main.async {\n                    handler()\n                }\n            }\n        }\n        \n        if fromDisk {\n            ioQueue.async{\n                do {\n                    try self.fileManager.removeItem(atPath: self.cachePath(forComputedKey: computedKey))\n                } catch _ {}\n                callHandlerInMainQueue()\n            }\n        } else {\n            callHandlerInMainQueue()\n        }\n    }\n\n    // MARK: - Get data from cache\n\n    /**\n    Get an image for a key from memory or disk.\n    \n    - parameter key:               Key for the image.\n    - parameter options:           Options of retrieving image. If you need to retrieve an image which was \n                                   stored with a specified `ImageProcessor`, pass the processor in the option too.\n    - parameter completionHandler: Called when getting operation completes with image result and cached type of \n                                   this image. If there is no such key cached, the image will be `nil`.\n    \n    - returns: The retrieving task.\n    */\n    @discardableResult\n    open func retrieveImage(forKey key: String,\n                               options: KingfisherOptionsInfo?,\n                     completionHandler: ((Image?, CacheType) -> ())?) -> RetrieveImageDiskTask?\n    {\n        // No completion handler. Not start working and early return.\n        guard let completionHandler = completionHandler else {\n            return nil\n        }\n        \n        var block: RetrieveImageDiskTask?\n        let options = options ?? KingfisherEmptyOptionsInfo\n        \n        if let image = self.retrieveImageInMemoryCache(forKey: key, options: options) {\n            options.callbackDispatchQueue.safeAsync {\n                completionHandler(image, .memory)\n            }\n        } else {\n            var sSelf: ImageCache! = self\n            block = DispatchWorkItem(block: {\n                // Begin to load image from disk\n                if let image = sSelf.retrieveImageInDiskCache(forKey: key, options: options) {\n                    if options.backgroundDecode {\n                        sSelf.processQueue.async {\n                            let result = image.kf.decoded\n                            \n                            sSelf.store(result,\n                                        forKey: key,\n                                        processorIdentifier: options.processor.identifier,\n                                        cacheSerializer: options.cacheSerializer,\n                                        toDisk: false,\n                                        completionHandler: nil)\n                            options.callbackDispatchQueue.safeAsync {\n                                completionHandler(result, .memory)\n                                sSelf = nil\n                            }\n                        }\n                    } else {\n                        sSelf.store(image,\n                                    forKey: key,\n                                    processorIdentifier: options.processor.identifier,\n                                    cacheSerializer: options.cacheSerializer,\n                                    toDisk: false,\n                                    completionHandler: nil\n                        )\n                        options.callbackDispatchQueue.safeAsync {\n                            completionHandler(image, .disk)\n                            sSelf = nil\n                        }\n                    }\n                } else {\n                    // No image found from either memory or disk\n                    options.callbackDispatchQueue.safeAsync {\n                        completionHandler(nil, .none)\n                        sSelf = nil\n                    }\n                }\n            })\n            \n            sSelf.ioQueue.async(execute: block!)\n        }\n    \n        return block\n    }\n    \n    /**\n    Get an image for a key from memory.\n    \n    - parameter key:     Key for the image.\n    - parameter options: Options of retrieving image. If you need to retrieve an image which was \n                         stored with a specified `ImageProcessor`, pass the processor in the option too.\n    - returns: The image object if it is cached, or `nil` if there is no such key in the cache.\n    */\n    open func retrieveImageInMemoryCache(forKey key: String, options: KingfisherOptionsInfo? = nil) -> Image? {\n        \n        let options = options ?? KingfisherEmptyOptionsInfo\n        let computedKey = key.computedKey(with: options.processor.identifier)\n        \n        return memoryCache.object(forKey: computedKey as NSString) as? Image\n    }\n    \n    /**\n    Get an image for a key from disk.\n    \n    - parameter key:     Key for the image.\n    - parameter options: Options of retrieving image. If you need to retrieve an image which was\n                         stored with a specified `ImageProcessor`, pass the processor in the option too.\n\n    - returns: The image object if it is cached, or `nil` if there is no such key in the cache.\n    */\n    open func retrieveImageInDiskCache(forKey key: String, options: KingfisherOptionsInfo? = nil) -> Image? {\n        \n        let options = options ?? KingfisherEmptyOptionsInfo\n        let computedKey = key.computedKey(with: options.processor.identifier)\n        \n        return diskImage(forComputedKey: computedKey, serializer: options.cacheSerializer, options: options)\n    }\n\n\n    // MARK: - Clear & Clean\n\n    /**\n    Clear memory cache.\n    */\n    @objc public func clearMemoryCache() {\n        memoryCache.removeAllObjects()\n    }\n    \n    /**\n    Clear disk cache. This is an async operation.\n    \n    - parameter completionHander: Called after the operation completes.\n    */\n    open func clearDiskCache(completion handler: (()->())? = nil) {\n        ioQueue.async {\n            do {\n                try self.fileManager.removeItem(atPath: self.diskCachePath)\n                try self.fileManager.createDirectory(atPath: self.diskCachePath, withIntermediateDirectories: true, attributes: nil)\n            } catch _ { }\n            \n            if let handler = handler {\n                DispatchQueue.main.async {\n                    handler()\n                }\n            }\n        }\n    }\n    \n    /**\n    Clean expired disk cache. This is an async operation.\n    */\n    @objc fileprivate func cleanExpiredDiskCache() {\n        cleanExpiredDiskCache(completion: nil)\n    }\n    \n    /**\n    Clean expired disk cache. This is an async operation.\n    \n    - parameter completionHandler: Called after the operation completes.\n    */\n    open func cleanExpiredDiskCache(completion handler: (()->())? = nil) {\n        \n        // Do things in cocurrent io queue\n        ioQueue.async {\n            \n            var (URLsToDelete, diskCacheSize, cachedFiles) = self.travelCachedFiles(onlyForCacheSize: false)\n            \n            for fileURL in URLsToDelete {\n                do {\n                    try self.fileManager.removeItem(at: fileURL)\n                } catch _ { }\n            }\n                \n            if self.maxDiskCacheSize > 0 && diskCacheSize > self.maxDiskCacheSize {\n                let targetSize = self.maxDiskCacheSize / 2\n                    \n                // Sort files by last modify date. We want to clean from the oldest files.\n                let sortedFiles = cachedFiles.keysSortedByValue {\n                    resourceValue1, resourceValue2 -> Bool in\n                    \n                    if let date1 = resourceValue1.contentAccessDate,\n                       let date2 = resourceValue2.contentAccessDate\n                    {\n                        return date1.compare(date2) == .orderedAscending\n                    }\n                    \n                    // Not valid date information. This should not happen. Just in case.\n                    return true\n                }\n                \n                for fileURL in sortedFiles {\n                    \n                    do {\n                        try self.fileManager.removeItem(at: fileURL)\n                    } catch { }\n                        \n                    URLsToDelete.append(fileURL)\n                    \n                    if let fileSize = cachedFiles[fileURL]?.totalFileAllocatedSize {\n                        diskCacheSize -= UInt(fileSize)\n                    }\n                    \n                    if diskCacheSize < targetSize {\n                        break\n                    }\n                }\n            }\n                \n            DispatchQueue.main.async {\n                \n                if URLsToDelete.count != 0 {\n                    let cleanedHashes = URLsToDelete.map { $0.lastPathComponent }\n                    NotificationCenter.default.post(name: .KingfisherDidCleanDiskCache, object: self, userInfo: [KingfisherDiskCacheCleanedHashKey: cleanedHashes])\n                }\n                \n                handler?()\n            }\n        }\n    }\n    \n    fileprivate func travelCachedFiles(onlyForCacheSize: Bool) -> (urlsToDelete: [URL], diskCacheSize: UInt, cachedFiles: [URL: URLResourceValues]) {\n        \n        let diskCacheURL = URL(fileURLWithPath: diskCachePath)\n        let resourceKeys: Set<URLResourceKey> = [.isDirectoryKey, .contentAccessDateKey, .totalFileAllocatedSizeKey]\n        let expiredDate: Date? = (maxCachePeriodInSecond < 0) ? nil : Date(timeIntervalSinceNow: -maxCachePeriodInSecond)\n        \n        var cachedFiles = [URL: URLResourceValues]()\n        var urlsToDelete = [URL]()\n        var diskCacheSize: UInt = 0\n\n        for fileUrl in (try? fileManager.contentsOfDirectory(at: diskCacheURL, includingPropertiesForKeys: Array(resourceKeys), options: .skipsHiddenFiles)) ?? [] {\n\n            do {\n                let resourceValues = try fileUrl.resourceValues(forKeys: resourceKeys)\n                // If it is a Directory. Continue to next file URL.\n                if resourceValues.isDirectory == true {\n                    continue\n                }\n\n                // If this file is expired, add it to URLsToDelete\n                if !onlyForCacheSize,\n                    let expiredDate = expiredDate,\n                    let lastAccessData = resourceValues.contentAccessDate,\n                    (lastAccessData as NSDate).laterDate(expiredDate) == expiredDate\n                {\n                    urlsToDelete.append(fileUrl)\n                    continue\n                }\n\n                if let fileSize = resourceValues.totalFileAllocatedSize {\n                    diskCacheSize += UInt(fileSize)\n                    if !onlyForCacheSize {\n                        cachedFiles[fileUrl] = resourceValues\n                    }\n                }\n            } catch _ { }\n        }\n\n        return (urlsToDelete, diskCacheSize, cachedFiles)\n    }\n\n#if !os(macOS) && !os(watchOS)\n    /**\n    Clean expired disk cache when app in background. This is an async operation.\n    In most cases, you should not call this method explicitly. \n    It will be called automatically when `UIApplicationDidEnterBackgroundNotification` received.\n    */\n    @objc public func backgroundCleanExpiredDiskCache() {\n        // if 'sharedApplication()' is unavailable, then return\n        guard let sharedApplication = Kingfisher<UIApplication>.shared else { return }\n\n        func endBackgroundTask(_ task: inout UIBackgroundTaskIdentifier) {\n            sharedApplication.endBackgroundTask(task)\n            task = UIBackgroundTaskInvalid\n        }\n        \n        var backgroundTask: UIBackgroundTaskIdentifier!\n        backgroundTask = sharedApplication.beginBackgroundTask {\n            endBackgroundTask(&backgroundTask!)\n        }\n        \n        cleanExpiredDiskCache {\n            endBackgroundTask(&backgroundTask!)\n        }\n    }\n#endif\n\n\n    // MARK: - Check cache status\n    \n    /// Cache type for checking whether an image is cached for a key in current cache.\n    ///\n    /// - Parameters:\n    ///   - key: Key for the image.\n    ///   - identifier: Processor identifier which used for this image. Default is empty string.\n    /// - Returns: A `CacheType` instance which indicates the cache status. `.none` means the image is not in cache yet.\n    open func imageCachedType(forKey key: String, processorIdentifier identifier: String = \"\") -> CacheType {\n        let computedKey = key.computedKey(with: identifier)\n        \n        if memoryCache.object(forKey: computedKey as NSString) != nil {\n            return .memory\n        }\n        \n        let filePath = cachePath(forComputedKey: computedKey)\n        \n        var diskCached = false\n        ioQueue.sync {\n            diskCached = fileManager.fileExists(atPath: filePath)\n        }\n        \n        if diskCached {\n            return .disk\n        }\n        \n        return .none\n    }\n    \n    /**\n    Get the hash for the key. This could be used for matching files.\n    \n    - parameter key:        The key which is used for caching.\n    - parameter identifier: The identifier of processor used. If you are using a processor for the image, pass the identifier of processor to it.\n    \n     - returns: Corresponding hash.\n    */\n    open func hash(forKey key: String, processorIdentifier identifier: String = \"\") -> String {\n        let computedKey = key.computedKey(with: identifier)\n        return cacheFileName(forComputedKey: computedKey)\n    }\n    \n    /**\n    Calculate the disk size taken by cache. \n    It is the total allocated size of the cached files in bytes.\n    \n    - parameter completionHandler: Called with the calculated size when finishes.\n    */\n    open func calculateDiskCacheSize(completion handler: @escaping ((_ size: UInt) -> ())) {\n        ioQueue.async {\n            let (_, diskCacheSize, _) = self.travelCachedFiles(onlyForCacheSize: true)\n            DispatchQueue.main.async {\n                handler(diskCacheSize)\n            }\n        }\n    }\n    \n    /**\n    Get the cache path for the key.\n    It is useful for projects with UIWebView or anyone that needs access to the local file path.\n    \n    i.e. Replace the `<img src='path_for_key'>` tag in your HTML.\n     \n    - Note: This method does not guarantee there is an image already cached in the path. It just returns the path\n      that the image should be.\n      You could use `isImageCached(forKey:)` method to check whether the image is cached under that key.\n    */\n    open func cachePath(forKey key: String, processorIdentifier identifier: String = \"\") -> String {\n        let computedKey = key.computedKey(with: identifier)\n        return cachePath(forComputedKey: computedKey)\n    }\n\n    open func cachePath(forComputedKey key: String) -> String {\n        let fileName = cacheFileName(forComputedKey: key)\n        return (diskCachePath as NSString).appendingPathComponent(fileName)\n    }\n}\n\n// MARK: - Internal Helper\nextension ImageCache {\n  \n    func diskImage(forComputedKey key: String, serializer: CacheSerializer, options: KingfisherOptionsInfo) -> Image? {\n        if let data = diskImageData(forComputedKey: key) {\n            return serializer.image(with: data, options: options)\n        } else {\n            return nil\n        }\n    }\n    \n    func diskImageData(forComputedKey key: String) -> Data? {\n        let filePath = cachePath(forComputedKey: key)\n        return (try? Data(contentsOf: URL(fileURLWithPath: filePath)))\n    }\n    \n    func cacheFileName(forComputedKey key: String) -> String {\n        if let ext = self.pathExtension {\n          return (key.kf.md5 as NSString).appendingPathExtension(ext)!\n        }\n        return key.kf.md5\n    }\n}\n\n// MARK: - Deprecated\nextension ImageCache {\n    /**\n     *  Cache result for checking whether an image is cached for a key.\n     */\n    @available(*, deprecated,\n    message: \"CacheCheckResult is deprecated. Use imageCachedType(forKey:processorIdentifier:) API instead.\")\n    public struct CacheCheckResult {\n        public let cached: Bool\n        public let cacheType: CacheType?\n    }\n    \n    /**\n     Check whether an image is cached for a key.\n     \n     - parameter key: Key for the image.\n     \n     - returns: The check result.\n     */\n    @available(*, deprecated,\n    message: \"Use imageCachedType(forKey:processorIdentifier:) instead. CacheCheckResult.none indicates not being cached.\",\n    renamed: \"imageCachedType(forKey:processorIdentifier:)\")\n    open func isImageCached(forKey key: String, processorIdentifier identifier: String = \"\") -> CacheCheckResult {\n        let result = imageCachedType(forKey: key, processorIdentifier: identifier)\n        switch result {\n        case .memory, .disk:\n            return CacheCheckResult(cached: true, cacheType: result)\n        case .none:\n            return CacheCheckResult(cached: false, cacheType: nil)\n        }\n    }\n}\n\nextension Kingfisher where Base: Image {\n    var imageCost: Int {\n        return images == nil ?\n            Int(size.height * size.width * scale * scale) :\n            Int(size.height * size.width * scale * scale) * images!.count\n    }\n}\n\nextension Dictionary {\n    func keysSortedByValue(_ isOrderedBefore: (Value, Value) -> Bool) -> [Key] {\n        return Array(self).sorted{ isOrderedBefore($0.1, $1.1) }.map{ $0.0 }\n    }\n}\n\n#if !os(macOS) && !os(watchOS)\n// MARK: - For App Extensions\nextension UIApplication: KingfisherCompatible { }\nextension Kingfisher where Base: UIApplication {\n    public static var shared: UIApplication? {\n        let selector = NSSelectorFromString(\"sharedApplication\")\n        guard Base.responds(to: selector) else { return nil }\n        return Base.perform(selector).takeUnretainedValue() as? UIApplication\n    }\n}\n#endif\n\nextension String {\n    func computedKey(with identifier: String) -> String {\n        if identifier.isEmpty {\n            return self\n        } else {\n            return appending(\"@\\(identifier)\")\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/ImageDownloader.swift",
    "content": "//\n//  ImageDownloader.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n#if os(macOS)\nimport AppKit\n#else\nimport UIKit\n#endif\n\n/// Progress update block of downloader.\npublic typealias ImageDownloaderProgressBlock = DownloadProgressBlock\n\n/// Completion block of downloader.\npublic typealias ImageDownloaderCompletionHandler = ((_ image: Image?, _ error: NSError?, _ url: URL?, _ originalData: Data?) -> ())\n\n/// Download task.\npublic struct RetrieveImageDownloadTask {\n    let internalTask: URLSessionDataTask\n    \n    /// Downloader by which this task is intialized.\n    public private(set) weak var ownerDownloader: ImageDownloader?\n\n    /**\n     Cancel this download task. It will trigger the completion handler with an NSURLErrorCancelled error.\n     */\n    public func cancel() {\n        ownerDownloader?.cancelDownloadingTask(self)\n    }\n    \n    /// The original request URL of this download task.\n    public var url: URL? {\n        return internalTask.originalRequest?.url\n    }\n    \n    /// The relative priority of this download task. \n    /// It represents the `priority` property of the internal `NSURLSessionTask` of this download task.\n    /// The value for it is between 0.0~1.0. Default priority is value of 0.5.\n    /// See documentation on `priority` of `NSURLSessionTask` for more about it.\n    public var priority: Float {\n        get {\n            return internalTask.priority\n        }\n        set {\n            internalTask.priority = newValue\n        }\n    }\n}\n\n///The code of errors which `ImageDownloader` might encountered.\npublic enum KingfisherError: Int {\n    \n    /// badData: The downloaded data is not an image or the data is corrupted.\n    case badData = 10000\n    \n    /// notModified: The remote server responsed a 304 code. No image data downloaded.\n    case notModified = 10001\n    \n    /// The HTTP status code in response is not valid. If an invalid\n    /// code error received, you could check the value under `KingfisherErrorStatusCodeKey` \n    /// in `userInfo` to see the code.\n    case invalidStatusCode = 10002\n    \n    /// notCached: The image rquested is not in cache but .onlyFromCache is activated.\n    case notCached = 10003\n    \n    /// The URL is invalid.\n    case invalidURL = 20000\n    \n    /// The downloading task is cancelled before started.\n    case downloadCancelledBeforeStarting = 30000\n}\n\n/// Key will be used in the `userInfo` of `.invalidStatusCode`\npublic let KingfisherErrorStatusCodeKey = \"statusCode\"\n\n/// Protocol of `ImageDownloader`.\npublic protocol ImageDownloaderDelegate: class {\n    /**\n    Called when the `ImageDownloader` object successfully downloaded an image from specified URL.\n    \n    - parameter downloader: The `ImageDownloader` object finishes the downloading.\n    - parameter image:      Downloaded image.\n    - parameter url:        URL of the original request URL.\n    - parameter response:   The response object of the downloading process.\n    */\n    func imageDownloader(_ downloader: ImageDownloader, didDownload image: Image, for url: URL, with response: URLResponse?)\n    \n    /**\n    Called when the `ImageDownloader` object starts to download an image from specified URL.\n     \n    - parameter downloader: The `ImageDownloader` object starts the downloading.\n    - parameter url:        URL of the original request.\n    - parameter response:   The request object of the downloading process.\n    */\n    func imageDownloader(_ downloader: ImageDownloader, willDownloadImageForURL url: URL, with request: URLRequest?)\n    \n    /**\n    Check if a received HTTP status code is valid or not. \n    By default, a status code between 200 to 400 (excluded) is considered as valid.\n    If an invalid code is received, the downloader will raise an .invalidStatusCode error.\n    It has a `userInfo` which includes this statusCode and localizedString error message.\n     \n    - parameter code: The received HTTP status code.\n    - parameter downloader: The `ImageDownloader` object asking for validate status code.\n     \n    - returns: Whether this HTTP status code is valid or not.\n     \n    - Note: If the default 200 to 400 valid code does not suit your need, \n            you can implement this method to change that behavior.\n    */\n    func isValidStatusCode(_ code: Int, for downloader: ImageDownloader) -> Bool\n    \n    /**\n     Called when the `ImageDownloader` object successfully downloaded image data from specified URL.\n     \n     - parameter downloader: The `ImageDownloader` object finishes data downloading.\n     - parameter data:       Downloaded data.\n     - parameter url:        URL of the original request URL.\n     \n     - returns: The data from which Kingfisher should use to create an image.\n     \n     - Note: This callback can be used to preprocess raw image data\n             before creation of UIImage instance (i.e. decrypting or verification).\n     */\n    func imageDownloader(_ downloader: ImageDownloader, didDownload data: Data, for url: URL) -> Data?\n}\n\nextension ImageDownloaderDelegate {\n    public func imageDownloader(_ downloader: ImageDownloader, didDownload image: Image, for url: URL, with response: URLResponse?) {}\n    \n    public func imageDownloader(_ downloader: ImageDownloader, willDownloadImageForURL url: URL, with request: URLRequest?) {}\n    public func isValidStatusCode(_ code: Int, for downloader: ImageDownloader) -> Bool {\n        return (200..<400).contains(code)\n    }\n    public func imageDownloader(_ downloader: ImageDownloader, didDownload data: Data, for url: URL) -> Data? {\n        return data\n    }\n}\n\n/// Protocol indicates that an authentication challenge could be handled.\npublic protocol AuthenticationChallengeResponsable: class {\n    /**\n     Called when an session level authentication challenge is received.\n     This method provide a chance to handle and response to the authentication challenge before downloading could start.\n     \n     - parameter downloader:        The downloader which receives this challenge.\n     - parameter challenge:         An object that contains the request for authentication.\n     - parameter completionHandler: A handler that your delegate method must call.\n     \n     - Note: This method is a forward from `URLSessionDelegate.urlSession(:didReceiveChallenge:completionHandler:)`. Please refer to the document of it in `URLSessionDelegate`.\n     */\n    func downloader(_ downloader: ImageDownloader, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void)\n\n    /**\n     Called when an session level authentication challenge is received.\n     This method provide a chance to handle and response to the authentication challenge before downloading could start.\n     \n     - parameter downloader:        The downloader which receives this challenge.\n     - parameter task:              The task whose request requires authentication.\n     - parameter challenge:         An object that contains the request for authentication.\n     - parameter completionHandler: A handler that your delegate method must call.\n     \n     - Note: This method is a forward from `URLSessionTaskDelegate.urlSession(:task:didReceiveChallenge:completionHandler:)`. Please refer to the document of it in `URLSessionTaskDelegate`.\n     */\n    func downloader(_ downloader: ImageDownloader, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void)\n}\n\nextension AuthenticationChallengeResponsable {\n    \n    func downloader(_ downloader: ImageDownloader, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {\n    \n        if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {\n            if let trustedHosts = downloader.trustedHosts, trustedHosts.contains(challenge.protectionSpace.host) {\n                let credential = URLCredential(trust: challenge.protectionSpace.serverTrust!)\n                completionHandler(.useCredential, credential)\n                return\n            }\n        }\n        \n        completionHandler(.performDefaultHandling, nil)\n    }\n    \n    func downloader(_ downloader: ImageDownloader, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {\n        \n        completionHandler(.performDefaultHandling, nil)\n    }\n\n}\n\n/// `ImageDownloader` represents a downloading manager for requesting the image with a URL from server.\nopen class ImageDownloader {\n    \n    class ImageFetchLoad {\n        var contents = [(callback: CallbackPair, options: KingfisherOptionsInfo)]()\n        var responseData = NSMutableData()\n\n        var downloadTaskCount = 0\n        var downloadTask: RetrieveImageDownloadTask?\n        var cancelSemaphore: DispatchSemaphore?\n    }\n    \n    // MARK: - Public property\n    /// The duration before the download is timeout. Default is 15 seconds.\n    open var downloadTimeout: TimeInterval = 15.0\n    \n    /// A set of trusted hosts when receiving server trust challenges. A challenge with host name contained in this set will be ignored. \n    /// You can use this set to specify the self-signed site. It only will be used if you don't specify the `authenticationChallengeResponder`. \n    /// If `authenticationChallengeResponder` is set, this property will be ignored and the implemention of `authenticationChallengeResponder` will be used instead.\n    open var trustedHosts: Set<String>?\n    \n    /// Use this to set supply a configuration for the downloader. By default, NSURLSessionConfiguration.ephemeralSessionConfiguration() will be used. \n    /// You could change the configuration before a downloaing task starts. A configuration without persistent storage for caches is requsted for downloader working correctly.\n    open var sessionConfiguration = URLSessionConfiguration.ephemeral {\n        didSet {\n            session?.invalidateAndCancel()\n            session = URLSession(configuration: sessionConfiguration, delegate: sessionHandler, delegateQueue: OperationQueue.main)\n        }\n    }\n    \n    /// Whether the download requests should use pipeling or not. Default is false.\n    open var requestsUsePipelining = false\n    \n    fileprivate let sessionHandler: ImageDownloaderSessionHandler\n    fileprivate var session: URLSession?\n    \n    /// Delegate of this `ImageDownloader` object. See `ImageDownloaderDelegate` protocol for more.\n    open weak var delegate: ImageDownloaderDelegate?\n    \n    /// A responder for authentication challenge. \n    /// Downloader will forward the received authentication challenge for the downloading session to this responder.\n    open weak var authenticationChallengeResponder: AuthenticationChallengeResponsable?\n    \n    // MARK: - Internal property\n    let barrierQueue: DispatchQueue\n    let processQueue: DispatchQueue\n    let cancelQueue: DispatchQueue\n    \n    typealias CallbackPair = (progressBlock: ImageDownloaderProgressBlock?, completionHandler: ImageDownloaderCompletionHandler?)\n    \n    var fetchLoads = [URL: ImageFetchLoad]()\n    \n    // MARK: - Public method\n    /// The default downloader.\n    public static let `default` = ImageDownloader(name: \"default\")\n    \n    /**\n    Init a downloader with name.\n    \n    - parameter name: The name for the downloader. It should not be empty.\n    \n    - returns: The downloader object.\n    */\n    public init(name: String) {\n        if name.isEmpty {\n            fatalError(\"[Kingfisher] You should specify a name for the downloader. A downloader with empty name is not permitted.\")\n        }\n        \n        barrierQueue = DispatchQueue(label: \"com.onevcat.Kingfisher.ImageDownloader.Barrier.\\(name)\", attributes: .concurrent)\n        processQueue = DispatchQueue(label: \"com.onevcat.Kingfisher.ImageDownloader.Process.\\(name)\", attributes: .concurrent)\n        cancelQueue = DispatchQueue(label: \"com.onevcat.Kingfisher.ImageDownloader.Cancel.\\(name)\")\n        \n        sessionHandler = ImageDownloaderSessionHandler()\n\n        // Provide a default implement for challenge responder.\n        authenticationChallengeResponder = sessionHandler\n        session = URLSession(configuration: sessionConfiguration, delegate: sessionHandler, delegateQueue: .main)\n    }\n    \n    deinit {\n        session?.invalidateAndCancel()\n    }\n    \n    func fetchLoad(for url: URL) -> ImageFetchLoad? {\n        var fetchLoad: ImageFetchLoad?\n        barrierQueue.sync(flags: .barrier) { fetchLoad = fetchLoads[url] }\n        return fetchLoad\n    }\n    \n    /**\n     Download an image with a URL and option.\n     \n     - parameter url:               Target URL.\n     - parameter retrieveImageTask: The task to cooporate with cache. Pass `nil` if you are not trying to use downloader and cache.\n     - parameter options:           The options could control download behavior. See `KingfisherOptionsInfo`.\n     - parameter progressBlock:     Called when the download progress updated.\n     - parameter completionHandler: Called when the download progress finishes.\n     \n     - returns: A downloading task. You could call `cancel` on it to stop the downloading process.\n     */\n    @discardableResult\n    open func downloadImage(with url: URL,\n                       retrieveImageTask: RetrieveImageTask? = nil,\n                       options: KingfisherOptionsInfo? = nil,\n                       progressBlock: ImageDownloaderProgressBlock? = nil,\n                       completionHandler: ImageDownloaderCompletionHandler? = nil) -> RetrieveImageDownloadTask?\n    {\n        if let retrieveImageTask = retrieveImageTask, retrieveImageTask.cancelledBeforeDownloadStarting {\n            completionHandler?(nil, NSError(domain: KingfisherErrorDomain, code: KingfisherError.downloadCancelledBeforeStarting.rawValue, userInfo: nil), nil, nil)\n            return nil\n        }\n        \n        let timeout = self.downloadTimeout == 0.0 ? 15.0 : self.downloadTimeout\n        \n        // We need to set the URL as the load key. So before setup progress, we need to ask the `requestModifier` for a final URL.\n        var request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: timeout)\n        request.httpShouldUsePipelining = requestsUsePipelining\n\n        if let modifier = options?.modifier {\n            guard let r = modifier.modified(for: request) else {\n                completionHandler?(nil, NSError(domain: KingfisherErrorDomain, code: KingfisherError.downloadCancelledBeforeStarting.rawValue, userInfo: nil), nil, nil)\n                return nil\n            }\n            request = r\n        }\n        \n        // There is a possiblility that request modifier changed the url to `nil` or empty.\n        guard let url = request.url, !url.absoluteString.isEmpty else {\n            completionHandler?(nil, NSError(domain: KingfisherErrorDomain, code: KingfisherError.invalidURL.rawValue, userInfo: nil), nil, nil)\n            return nil\n        }\n        \n        var downloadTask: RetrieveImageDownloadTask?\n        setup(progressBlock: progressBlock, with: completionHandler, for: url, options: options) {(session, fetchLoad) -> Void in\n            if fetchLoad.downloadTask == nil {\n                let dataTask = session.dataTask(with: request)\n                \n                fetchLoad.downloadTask = RetrieveImageDownloadTask(internalTask: dataTask, ownerDownloader: self)\n                \n                dataTask.priority = options?.downloadPriority ?? URLSessionTask.defaultPriority\n                dataTask.resume()\n                self.delegate?.imageDownloader(self, willDownloadImageForURL: url, with: request)\n                \n                // Hold self while the task is executing.\n                self.sessionHandler.downloadHolder = self\n            }\n            \n            fetchLoad.downloadTaskCount += 1\n            downloadTask = fetchLoad.downloadTask\n            \n            retrieveImageTask?.downloadTask = downloadTask\n        }\n        return downloadTask\n    }\n    \n}\n\n// MARK: - Download method\nextension ImageDownloader {\n    \n    // A single key may have multiple callbacks. Only download once.\n    func setup(progressBlock: ImageDownloaderProgressBlock?, with completionHandler: ImageDownloaderCompletionHandler?, for url: URL, options: KingfisherOptionsInfo?, started: @escaping ((URLSession, ImageFetchLoad) -> Void)) {\n\n        func prepareFetchLoad() {\n            barrierQueue.sync(flags: .barrier) {\n                let loadObjectForURL = fetchLoads[url] ?? ImageFetchLoad()\n                let callbackPair = (progressBlock: progressBlock, completionHandler: completionHandler)\n                \n                loadObjectForURL.contents.append((callbackPair, options ?? KingfisherEmptyOptionsInfo))\n                \n                fetchLoads[url] = loadObjectForURL\n                \n                if let session = session {\n                    started(session, loadObjectForURL)\n                }\n            }\n        }\n        \n        if let fetchLoad = fetchLoad(for: url), fetchLoad.downloadTaskCount == 0 {\n            if fetchLoad.cancelSemaphore == nil {\n                fetchLoad.cancelSemaphore = DispatchSemaphore(value: 0)\n            }\n            cancelQueue.async {\n                _ = fetchLoad.cancelSemaphore?.wait(timeout: .distantFuture)\n                fetchLoad.cancelSemaphore = nil\n                prepareFetchLoad()\n            }\n        } else {\n            prepareFetchLoad()\n        }\n    }\n    \n    func cancelDownloadingTask(_ task: RetrieveImageDownloadTask) {\n        barrierQueue.sync(flags: .barrier) {\n            if let URL = task.internalTask.originalRequest?.url, let imageFetchLoad = self.fetchLoads[URL] {\n                imageFetchLoad.downloadTaskCount -= 1\n                if imageFetchLoad.downloadTaskCount == 0 {\n                    task.internalTask.cancel()\n                }\n            }\n        }\n    }\n}\n\n// MARK: - NSURLSessionDataDelegate\n\n/// Delegate class for `NSURLSessionTaskDelegate`.\n/// The session object will hold its delegate until it gets invalidated.\n/// If we use `ImageDownloader` as the session delegate, it will not be released.\n/// So we need an additional handler to break the retain cycle.\n// See https://github.com/onevcat/Kingfisher/issues/235\nclass ImageDownloaderSessionHandler: NSObject, URLSessionDataDelegate, AuthenticationChallengeResponsable {\n    \n    // The holder will keep downloader not released while a data task is being executed.\n    // It will be set when the task started, and reset when the task finished.\n    var downloadHolder: ImageDownloader?\n    \n    func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) {\n        \n        guard let downloader = downloadHolder else {\n            completionHandler(.cancel)\n            return\n        }\n        \n        if let statusCode = (response as? HTTPURLResponse)?.statusCode,\n           let url = dataTask.originalRequest?.url,\n            !(downloader.delegate ?? downloader).isValidStatusCode(statusCode, for: downloader)\n        {\n            let error = NSError(domain: KingfisherErrorDomain,\n                                code: KingfisherError.invalidStatusCode.rawValue,\n                                userInfo: [KingfisherErrorStatusCodeKey: statusCode, NSLocalizedDescriptionKey: HTTPURLResponse.localizedString(forStatusCode: statusCode)])\n            callCompletionHandlerFailure(error: error, url: url)\n        }\n        \n        completionHandler(.allow)\n    }\n    \n    func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {\n\n        guard let downloader = downloadHolder else {\n            return\n        }\n\n        if let url = dataTask.originalRequest?.url, let fetchLoad = downloader.fetchLoad(for: url) {\n            fetchLoad.responseData.append(data)\n            \n            if let expectedLength = dataTask.response?.expectedContentLength {\n                for content in fetchLoad.contents {\n                    DispatchQueue.main.async {\n                        content.callback.progressBlock?(Int64(fetchLoad.responseData.length), expectedLength)\n                    }\n                }\n            }\n        }\n    }\n    \n    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {\n        \n        guard let url = task.originalRequest?.url else {\n            return\n        }\n        \n        guard error == nil else {\n            callCompletionHandlerFailure(error: error!, url: url)\n            return\n        }\n        \n        processImage(for: task, url: url)\n    }\n    \n    /**\n    This method is exposed since the compiler requests. Do not call it.\n    */\n    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {\n        guard let downloader = downloadHolder else {\n            return\n        }\n        \n        downloader.authenticationChallengeResponder?.downloader(downloader, didReceive: challenge, completionHandler: completionHandler)\n    }\n    \n    func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {\n        guard let downloader = downloadHolder else {\n            return\n        }\n        \n        downloader.authenticationChallengeResponder?.downloader(downloader, task: task, didReceive: challenge, completionHandler: completionHandler)\n    }\n    \n    private func cleanFetchLoad(for url: URL) {\n        guard let downloader = downloadHolder else {\n            return\n        }\n\n        downloader.barrierQueue.sync(flags: .barrier) {\n            downloader.fetchLoads.removeValue(forKey: url)\n            if downloader.fetchLoads.isEmpty {\n                downloadHolder = nil\n            }\n        }\n    }\n    \n    private func callCompletionHandlerFailure(error: Error, url: URL) {\n        guard let downloader = downloadHolder, let fetchLoad = downloader.fetchLoad(for: url) else {\n            return\n        }\n        \n        // We need to clean the fetch load first, before actually calling completion handler.\n        cleanFetchLoad(for: url)\n        \n        var leftSignal: Int\n        repeat {\n            leftSignal = fetchLoad.cancelSemaphore?.signal() ?? 0\n        } while leftSignal != 0\n        \n        for content in fetchLoad.contents {\n            content.options.callbackDispatchQueue.safeAsync {\n                content.callback.completionHandler?(nil, error as NSError, url, nil)\n            }\n        }\n    }\n    \n    private func processImage(for task: URLSessionTask, url: URL) {\n\n        guard let downloader = downloadHolder else {\n            return\n        }\n        \n        // We are on main queue when receiving this.\n        downloader.processQueue.async {\n            \n            guard let fetchLoad = downloader.fetchLoad(for: url) else {\n                return\n            }\n            \n            self.cleanFetchLoad(for: url)\n            \n            let data: Data?\n            let fetchedData = fetchLoad.responseData as Data\n            \n            if let delegate = downloader.delegate {\n                data = delegate.imageDownloader(downloader, didDownload: fetchedData, for: url)\n            } else {\n                data = fetchedData\n            }\n            \n            // Cache the processed images. So we do not need to re-process the image if using the same processor.\n            // Key is the identifier of processor.\n            var imageCache: [String: Image] = [:]\n            for content in fetchLoad.contents {\n                \n                let options = content.options\n                let completionHandler = content.callback.completionHandler\n                let callbackQueue = options.callbackDispatchQueue\n                \n                let processor = options.processor\n                \n                var image = imageCache[processor.identifier]\n                if let data = data, image == nil {\n                    image = processor.process(item: .data(data), options: options)\n                    // Add the processed image to cache. \n                    // If `image` is nil, nothing will happen (since the key is not existing before).\n                    imageCache[processor.identifier] = image\n                }\n                \n                if let image = image {\n                    \n                    downloader.delegate?.imageDownloader(downloader, didDownload: image, for: url, with: task.response)\n                    \n                    if options.backgroundDecode {\n                        let decodedImage = image.kf.decoded\n                        callbackQueue.safeAsync { completionHandler?(decodedImage, nil, url, data) }\n                    } else {\n                        callbackQueue.safeAsync { completionHandler?(image, nil, url, data) }\n                    }\n                    \n                } else {\n                    if let res = task.response as? HTTPURLResponse , res.statusCode == 304 {\n                        let notModified = NSError(domain: KingfisherErrorDomain, code: KingfisherError.notModified.rawValue, userInfo: nil)\n                        completionHandler?(nil, notModified, url, nil)\n                        continue\n                    }\n                    \n                    let badData = NSError(domain: KingfisherErrorDomain, code: KingfisherError.badData.rawValue, userInfo: nil)\n                    callbackQueue.safeAsync { completionHandler?(nil, badData, url, nil) }\n                }\n            }\n        }\n    }\n}\n\n// Placeholder. For retrieving extension methods of ImageDownloaderDelegate\nextension ImageDownloader: ImageDownloaderDelegate {}\n\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/ImagePrefetcher.swift",
    "content": "//\n//  ImagePrefetcher.swift\n//  Kingfisher\n//\n//  Created by Claire Knight <claire.knight@moggytech.co.uk> on 24/02/2016\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n\n#if os(macOS)\n    import AppKit\n#else\n    import UIKit\n#endif\n\n\n/// Progress update block of prefetcher. \n///\n/// - `skippedResources`: An array of resources that are already cached before the prefetching starting.\n/// - `failedResources`: An array of resources that fail to be downloaded. It could because of being cancelled while downloading, encountered an error when downloading or the download not being started at all.\n/// - `completedResources`: An array of resources that are downloaded and cached successfully.\npublic typealias PrefetcherProgressBlock = ((_ skippedResources: [Resource], _ failedResources: [Resource], _ completedResources: [Resource]) -> ())\n\n/// Completion block of prefetcher.\n///\n/// - `skippedResources`: An array of resources that are already cached before the prefetching starting.\n/// - `failedResources`: An array of resources that fail to be downloaded. It could because of being cancelled while downloading, encountered an error when downloading or the download not being started at all.\n/// - `completedResources`: An array of resources that are downloaded and cached successfully.\npublic typealias PrefetcherCompletionHandler = ((_ skippedResources: [Resource], _ failedResources: [Resource], _ completedResources: [Resource]) -> ())\n\n/// `ImagePrefetcher` represents a downloading manager for requesting many images via URLs, then caching them.\n/// This is useful when you know a list of image resources and want to download them before showing.\npublic class ImagePrefetcher {\n    \n    /// The maximum concurrent downloads to use when prefetching images. Default is 5.\n    public var maxConcurrentDownloads = 5\n    \n    private let prefetchResources: [Resource]\n    private let optionsInfo: KingfisherOptionsInfo\n    private var progressBlock: PrefetcherProgressBlock?\n    private var completionHandler: PrefetcherCompletionHandler?\n    \n    private var tasks = [URL: RetrieveImageDownloadTask]()\n    \n    private var pendingResources: ArraySlice<Resource>\n    private var skippedResources = [Resource]()\n    private var completedResources = [Resource]()\n    private var failedResources = [Resource]()\n    \n    private var stopped = false\n    \n    // The created manager used for prefetch. We will use the helper method in manager.\n    private let manager: KingfisherManager\n    \n    private var finished: Bool {\n        return failedResources.count + skippedResources.count + completedResources.count == prefetchResources.count && self.tasks.isEmpty\n    }\n    \n    /**\n     Init an image prefetcher with an array of URLs.\n     \n     The prefetcher should be initiated with a list of prefetching targets. The URLs list is immutable. \n     After you get a valid `ImagePrefetcher` object, you could call `start()` on it to begin the prefetching process.\n     The images already cached will be skipped without downloading again.\n     \n     - parameter urls:              The URLs which should be prefetched.\n     - parameter options:           A dictionary could control some behaviors. See `KingfisherOptionsInfo` for more.\n     - parameter progressBlock:     Called every time an resource is downloaded, skipped or cancelled.\n     - parameter completionHandler: Called when the whole prefetching process finished.\n     \n     - returns: An `ImagePrefetcher` object.\n     \n     - Note: By default, the `ImageDownloader.defaultDownloader` and `ImageCache.defaultCache` will be used as \n     the downloader and cache target respectively. You can specify another downloader or cache by using a customized `KingfisherOptionsInfo`.\n     Both the progress and completion block will be invoked in main thread. The `CallbackDispatchQueue` in `optionsInfo` will be ignored in this method.\n     */\n    public convenience init(urls: [URL],\n                         options: KingfisherOptionsInfo? = nil,\n                   progressBlock: PrefetcherProgressBlock? = nil,\n               completionHandler: PrefetcherCompletionHandler? = nil)\n    {\n        let resources: [Resource] = urls.map { $0 }\n        self.init(resources: resources, options: options, progressBlock: progressBlock, completionHandler: completionHandler)\n    }\n    \n    /**\n     Init an image prefetcher with an array of resources.\n     \n     The prefetcher should be initiated with a list of prefetching targets. The resources list is immutable.\n     After you get a valid `ImagePrefetcher` object, you could call `start()` on it to begin the prefetching process.\n     The images already cached will be skipped without downloading again.\n     \n     - parameter resources:         The resources which should be prefetched. See `Resource` type for more.\n     - parameter options:           A dictionary could control some behaviors. See `KingfisherOptionsInfo` for more.\n     - parameter progressBlock:     Called every time an resource is downloaded, skipped or cancelled.\n     - parameter completionHandler: Called when the whole prefetching process finished.\n     \n     - returns: An `ImagePrefetcher` object.\n     \n     - Note: By default, the `ImageDownloader.defaultDownloader` and `ImageCache.defaultCache` will be used as\n     the downloader and cache target respectively. You can specify another downloader or cache by using a customized `KingfisherOptionsInfo`.\n     Both the progress and completion block will be invoked in main thread. The `CallbackDispatchQueue` in `optionsInfo` will be ignored in this method.\n     */\n    public init(resources: [Resource],\n                  options: KingfisherOptionsInfo? = nil,\n            progressBlock: PrefetcherProgressBlock? = nil,\n        completionHandler: PrefetcherCompletionHandler? = nil)\n    {\n        prefetchResources = resources\n        pendingResources = ArraySlice(resources)\n        \n        // We want all callbacks from main queue, so we ignore the call back queue in options\n        let optionsInfoWithoutQueue = options?.removeAllMatchesIgnoringAssociatedValue(.callbackDispatchQueue(nil))\n        self.optionsInfo = optionsInfoWithoutQueue ?? KingfisherEmptyOptionsInfo\n        \n        let cache = self.optionsInfo.targetCache\n        let downloader = self.optionsInfo.downloader\n        manager = KingfisherManager(downloader: downloader, cache: cache)\n        \n        self.progressBlock = progressBlock\n        self.completionHandler = completionHandler\n    }\n    \n    /**\n     Start to download the resources and cache them. This can be useful for background downloading\n     of assets that are required for later use in an app. This code will not try and update any UI\n     with the results of the process.\n     */\n    public func start()\n    {\n        // Since we want to handle the resources cancellation in main thread only.\n        DispatchQueue.main.safeAsync {\n            \n            guard !self.stopped else {\n                assertionFailure(\"You can not restart the same prefetcher. Try to create a new prefetcher.\")\n                self.handleComplete()\n                return\n            }\n            \n            guard self.maxConcurrentDownloads > 0 else {\n                assertionFailure(\"There should be concurrent downloads value should be at least 1.\")\n                self.handleComplete()\n                return\n            }\n            \n            guard self.prefetchResources.count > 0 else {\n                self.handleComplete()\n                return\n            }\n            \n            let initialConcurentDownloads = min(self.prefetchResources.count, self.maxConcurrentDownloads)\n            for _ in 0 ..< initialConcurentDownloads {\n                if let resource = self.pendingResources.popFirst() {\n                    self.startPrefetching(resource)\n                }\n            }\n        }\n    }\n\n   \n    /**\n     Stop current downloading progress, and cancel any future prefetching activity that might be occuring.\n     */\n    public func stop() {\n        DispatchQueue.main.safeAsync {\n            if self.finished { return }\n            self.stopped = true\n            self.tasks.values.forEach { $0.cancel() }\n        }\n    }\n    \n    func downloadAndCache(_ resource: Resource) {\n\n        let downloadTaskCompletionHandler: CompletionHandler = { (image, error, _, _) -> () in\n            self.tasks.removeValue(forKey: resource.downloadURL)\n            if let _ = error {\n                self.failedResources.append(resource)\n            } else {\n                self.completedResources.append(resource)\n            }\n            \n            self.reportProgress()\n            if self.stopped {\n                if self.tasks.isEmpty {\n                    self.failedResources.append(contentsOf: self.pendingResources)\n                    self.handleComplete()\n                }\n            } else {\n                self.reportCompletionOrStartNext()\n            }\n        }\n        \n        let downloadTask = manager.downloadAndCacheImage(\n            with: resource.downloadURL,\n            forKey: resource.cacheKey,\n            retrieveImageTask: RetrieveImageTask(),\n            progressBlock: nil,\n            completionHandler: downloadTaskCompletionHandler,\n            options: optionsInfo)\n        \n        if let downloadTask = downloadTask {\n            tasks[resource.downloadURL] = downloadTask\n        }\n    }\n    \n    func append(cached resource: Resource) {\n        skippedResources.append(resource)\n \n        reportProgress()\n        reportCompletionOrStartNext()\n    }\n    \n    func startPrefetching(_ resource: Resource)\n    {\n        if optionsInfo.forceRefresh {\n            downloadAndCache(resource)\n        } else {\n            let alreadyInCache = manager.cache.imageCachedType(forKey: resource.cacheKey,\n                                                             processorIdentifier: optionsInfo.processor.identifier).cached\n            if alreadyInCache {\n                append(cached: resource)\n            } else {\n                downloadAndCache(resource)\n            }\n        }\n    }\n    \n    func reportProgress() {\n        progressBlock?(skippedResources, failedResources, completedResources)\n    }\n    \n    func reportCompletionOrStartNext() {\n        if let resource = pendingResources.popFirst() {\n            startPrefetching(resource)\n        } else {\n            guard tasks.isEmpty else { return }\n            handleComplete()\n        }\n    }\n    \n    func handleComplete() {\n        completionHandler?(skippedResources, failedResources, completedResources)\n        completionHandler = nil\n        progressBlock = nil\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/ImageProcessor.swift",
    "content": "//\n//  ImageProcessor.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 2016/08/26.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport Foundation\nimport CoreGraphics\n\n/// The item which could be processed by an `ImageProcessor`\n///\n/// - image: Input image\n/// - data:  Input data\npublic enum ImageProcessItem {\n    case image(Image)\n    case data(Data)\n}\n\n/// An `ImageProcessor` would be used to convert some downloaded data to an image.\npublic protocol ImageProcessor {\n    /// Identifier of the processor. It will be used to identify the processor when \n    /// caching and retriving an image. You might want to make sure that processors with\n    /// same properties/functionality have the same identifiers, so correct processed images\n    /// could be retrived with proper key.\n    /// \n    /// - Note: Do not supply an empty string for a customized processor, which is already taken by\n    /// the `DefaultImageProcessor`. It is recommended to use a reverse domain name notation\n    /// string of your own for the identifier.\n    var identifier: String { get }\n    \n    /// Process an input `ImageProcessItem` item to an image for this processor.\n    ///\n    /// - parameter item:    Input item which will be processed by `self`\n    /// - parameter options: Options when processing the item.\n    ///\n    /// - returns: The processed image.\n    ///\n    /// - Note: The return value will be `nil` if processing failed while converting data to image.\n    ///         If input item is already an image and there is any errors in processing, the input \n    ///         image itself will be returned.\n    /// - Note: Most processor only supports CG-based images. \n    ///         watchOS is not supported for processers containing filter, the input image will be returned directly on watchOS.\n    func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image?\n}\n\ntypealias ProcessorImp = ((ImageProcessItem, KingfisherOptionsInfo) -> Image?)\n\npublic extension ImageProcessor {\n    \n    /// Append an `ImageProcessor` to another. The identifier of the new `ImageProcessor` \n    /// will be \"\\(self.identifier)|>\\(another.identifier)\".\n    ///\n    /// - parameter another: An `ImageProcessor` you want to append to `self`.\n    ///\n    /// - returns: The new `ImageProcessor` will process the image in the order\n    ///            of the two processors concatenated.\n    public func append(another: ImageProcessor) -> ImageProcessor {\n        let newIdentifier = identifier.appending(\"|>\\(another.identifier)\")\n        return GeneralProcessor(identifier: newIdentifier) {\n            item, options in\n            if let image = self.process(item: item, options: options) {\n                return another.process(item: .image(image), options: options)\n            } else {\n                return nil\n            }\n        }\n    }\n}\n\nfunc ==(left: ImageProcessor, right: ImageProcessor) -> Bool {\n    return left.identifier == right.identifier\n}\n\nfunc !=(left: ImageProcessor, right: ImageProcessor) -> Bool {\n    return !(left == right)\n}\n\nfileprivate struct GeneralProcessor: ImageProcessor {\n    let identifier: String\n    let p: ProcessorImp\n    func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {\n        return p(item, options)\n    }\n}\n\n/// The default processor. It convert the input data to a valid image.\n/// Images of .PNG, .JPEG and .GIF format are supported.\n/// If an image is given, `DefaultImageProcessor` will do nothing on it and just return that image.\npublic struct DefaultImageProcessor: ImageProcessor {\n    \n    /// A default `DefaultImageProcessor` could be used across.\n    public static let `default` = DefaultImageProcessor()\n    \n    /// Identifier of the processor.\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public let identifier = \"\"\n    \n    /// Initialize a `DefaultImageProcessor`\n    public init() {}\n    \n    /// Process an input `ImageProcessItem` item to an image for this processor.\n    ///\n    /// - parameter item:    Input item which will be processed by `self`\n    /// - parameter options: Options when processing the item.\n    ///\n    /// - returns: The processed image.\n    /// \n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {\n        switch item {\n        case .image(let image):\n            return image\n        case .data(let data):\n            return Kingfisher<Image>.image(\n                data: data,\n                scale: options.scaleFactor,\n                preloadAllAnimationData: options.preloadAllAnimationData,\n                onlyFirstFrame: options.onlyLoadFirstFrame)\n        }\n    }\n}\n\npublic struct RectCorner: OptionSet {\n    public let rawValue: Int\n    public static let topLeft = RectCorner(rawValue: 1 << 0)\n    public static let topRight = RectCorner(rawValue: 1 << 1)\n    public static let bottomLeft = RectCorner(rawValue: 1 << 2)\n    public static let bottomRight = RectCorner(rawValue: 1 << 3)\n    public static let all: RectCorner = [.topLeft, .topRight, .bottomLeft, .bottomRight]\n    \n    public init(rawValue: Int) {\n        self.rawValue = rawValue\n    }\n    \n    var cornerIdentifier: String {\n        if self == .all {\n            return \"\"\n        }\n        return \"_corner(\\(rawValue))\"\n    }\n}\n\n/// Processor for making round corner images. Only CG-based images are supported in macOS, \n/// if a non-CG image passed in, the processor will do nothing.\npublic struct RoundCornerImageProcessor: ImageProcessor {\n    \n    /// Identifier of the processor.\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public let identifier: String\n\n    /// Corner radius will be applied in processing.\n    public let cornerRadius: CGFloat\n    \n    /// The target corners which will be applied rounding.\n    public let roundingCorners: RectCorner\n    \n    /// Target size of output image should be. If `nil`, the image will keep its original size after processing.\n    public let targetSize: CGSize?\n\n    /// Background color of the output image. If `nil`, it will stay transparent.\n    public let backgroundColor: Color?\n\n    /// Initialize a `RoundCornerImageProcessor`\n    ///\n    /// - parameter cornerRadius:    Corner radius will be applied in processing.\n    /// - parameter targetSize:      Target size of output image should be. If `nil`, \n    ///                              the image will keep its original size after processing.\n    ///                              Default is `nil`.\n    /// - parameter corners:         The target corners which will be applied rounding. Default is `.all`.\n    /// - parameter backgroundColor: Backgroud color to apply for the output image. Default is `nil`.\n    public init(cornerRadius: CGFloat, targetSize: CGSize? = nil, roundingCorners corners: RectCorner = .all, backgroundColor: Color? = nil) {\n        self.cornerRadius = cornerRadius\n        self.targetSize = targetSize\n        self.roundingCorners = corners\n        self.backgroundColor = backgroundColor\n\n        self.identifier = {\n            var identifier = \"\"\n\n            if let size = targetSize {\n                identifier = \"com.onevcat.Kingfisher.RoundCornerImageProcessor(\\(cornerRadius)_\\(size)\\(corners.cornerIdentifier))\"\n            } else {\n                identifier = \"com.onevcat.Kingfisher.RoundCornerImageProcessor(\\(cornerRadius)\\(corners.cornerIdentifier))\"\n            }\n            if let backgroundColor = backgroundColor {\n                identifier += \"_\\(backgroundColor)\"\n            }\n\n            return identifier\n        }()\n    }\n    \n    /// Process an input `ImageProcessItem` item to an image for this processor.\n    ///\n    /// - parameter item:    Input item which will be processed by `self`\n    /// - parameter options: Options when processing the item.\n    ///\n    /// - returns: The processed image.\n    ///\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {\n        switch item {\n        case .image(let image):\n            let size = targetSize ?? image.kf.size\n            return image.kf.image(withRoundRadius: cornerRadius, fit: size, roundingCorners: roundingCorners, backgroundColor: backgroundColor)\n        case .data(_):\n            return (DefaultImageProcessor.default >> self).process(item: item, options: options)\n        }\n    }\n}\n\n\n/// Specify how a size adjusts itself to fit a target size.\n///\n/// - none: Not scale the content.\n/// - aspectFit: Scale the content to fit the size of the view by maintaining the aspect ratio.\n/// - aspectFill: Scale the content to fill the size of the view\npublic enum ContentMode {\n    case none\n    case aspectFit\n    case aspectFill\n}\n\n/// Processor for resizing images. Only CG-based images are supported in macOS.\npublic struct ResizingImageProcessor: ImageProcessor {\n    \n    /// Identifier of the processor.\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public let identifier: String\n    \n    /// The reference size for resizing operation.\n    public let referenceSize: CGSize\n    \n    /// Target content mode of output image should be.\n    /// Default to ContentMode.none\n    public let targetContentMode: ContentMode\n    \n    /// Initialize a `ResizingImageProcessor`.\n    ///\n    /// - Parameters:\n    ///   - referenceSize: The reference size for resizing operation.\n    ///   - mode: Target content mode of output image should be.\n    ///\n    /// - Note:\n    ///   The instance of `ResizingImageProcessor` will follow its `mode` property\n    ///   and try to resizing the input images to fit or fill the `referenceSize`.\n    ///   That means if you are using a `mode` besides of `.none`, you may get an\n    ///   image with its size not be the same as the `referenceSize`.\n    ///\n    ///   **Example**: With input image size: {100, 200}, \n    ///   `referenceSize`: {100, 100}, `mode`: `.aspectFit`,\n    ///   you will get an output image with size of {50, 100}, which \"fit\"s\n    ///   the `referenceSize`.\n    ///\n    ///   If you need an output image exactly to be a specified size, append or use\n    ///   a `CroppingImageProcessor`.\n    public init(referenceSize: CGSize, mode: ContentMode = .none) {\n        self.referenceSize = referenceSize\n        self.targetContentMode = mode\n        \n        if mode == .none {\n            self.identifier = \"com.onevcat.Kingfisher.ResizingImageProcessor(\\(referenceSize))\"\n        } else {\n            self.identifier = \"com.onevcat.Kingfisher.ResizingImageProcessor(\\(referenceSize), \\(mode))\"\n        }\n    }\n    \n    /// Process an input `ImageProcessItem` item to an image for this processor.\n    ///\n    /// - parameter item:    Input item which will be processed by `self`\n    /// - parameter options: Options when processing the item.\n    ///\n    /// - returns: The processed image.\n    ///\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {\n        switch item {\n        case .image(let image):\n            return image.kf.resize(to: referenceSize, for: targetContentMode)\n        case .data(_):\n            return (DefaultImageProcessor.default >> self).process(item: item, options: options)\n        }\n    }\n}\n\n/// Processor for adding blur effect to images. `Accelerate.framework` is used underhood for \n/// a better performance. A simulated Gaussian blur with specified blur radius will be applied.\npublic struct BlurImageProcessor: ImageProcessor {\n    \n    /// Identifier of the processor.\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public let identifier: String\n    \n    /// Blur radius for the simulated Gaussian blur.\n    public let blurRadius: CGFloat\n\n    /// Initialize a `BlurImageProcessor`\n    ///\n    /// - parameter blurRadius: Blur radius for the simulated Gaussian blur.\n    public init(blurRadius: CGFloat) {\n        self.blurRadius = blurRadius\n        self.identifier = \"com.onevcat.Kingfisher.BlurImageProcessor(\\(blurRadius))\"\n    }\n    \n    /// Process an input `ImageProcessItem` item to an image for this processor.\n    ///\n    /// - parameter item:    Input item which will be processed by `self`\n    /// - parameter options: Options when processing the item.\n    ///\n    /// - returns: The processed image.\n    ///\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {\n        switch item {\n        case .image(let image):\n            let radius = blurRadius * options.scaleFactor\n            return image.kf.blurred(withRadius: radius)\n        case .data(_):\n            return (DefaultImageProcessor.default >> self).process(item: item, options: options)\n        }\n    }\n}\n\n/// Processor for adding an overlay to images. Only CG-based images are supported in macOS.\npublic struct OverlayImageProcessor: ImageProcessor {\n    \n    /// Identifier of the processor.\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public let identifier: String\n    \n    /// Overlay color will be used to overlay the input image.\n    public let overlay: Color\n    \n    /// Fraction will be used when overlay the color to image.\n    public let fraction: CGFloat\n    \n    /// Initialize an `OverlayImageProcessor`\n    ///\n    /// - parameter overlay:  Overlay color will be used to overlay the input image.\n    /// - parameter fraction: Fraction will be used when overlay the color to image. \n    ///                       From 0.0 to 1.0. 0.0 means solid color, 1.0 means transparent overlay.\n    public init(overlay: Color, fraction: CGFloat = 0.5) {\n        self.overlay = overlay\n        self.fraction = fraction\n        self.identifier = \"com.onevcat.Kingfisher.OverlayImageProcessor(\\(overlay.hex)_\\(fraction))\"\n    }\n    \n    /// Process an input `ImageProcessItem` item to an image for this processor.\n    ///\n    /// - parameter item:    Input item which will be processed by `self`\n    /// - parameter options: Options when processing the item.\n    ///\n    /// - returns: The processed image.\n    ///\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {\n        switch item {\n        case .image(let image):\n            return image.kf.overlaying(with: overlay, fraction: fraction)\n        case .data(_):\n            return (DefaultImageProcessor.default >> self).process(item: item, options: options)\n        }\n    }\n}\n\n/// Processor for tint images with color. Only CG-based images are supported.\npublic struct TintImageProcessor: ImageProcessor {\n    \n    /// Identifier of the processor.\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public let identifier: String\n    \n    /// Tint color will be used to tint the input image.\n    public let tint: Color\n    \n    /// Initialize a `TintImageProcessor`\n    ///\n    /// - parameter tint: Tint color will be used to tint the input image.\n    public init(tint: Color) {\n        self.tint = tint\n        self.identifier = \"com.onevcat.Kingfisher.TintImageProcessor(\\(tint.hex))\"\n    }\n    \n    /// Process an input `ImageProcessItem` item to an image for this processor.\n    ///\n    /// - parameter item:    Input item which will be processed by `self`\n    /// - parameter options: Options when processing the item.\n    ///\n    /// - returns: The processed image.\n    ///\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {\n        switch item {\n        case .image(let image):\n            return image.kf.tinted(with: tint)\n        case .data(_):\n            return (DefaultImageProcessor.default >> self).process(item: item, options: options)\n        }\n    }\n}\n\n/// Processor for applying some color control to images. Only CG-based images are supported.\n/// watchOS is not supported.\npublic struct ColorControlsProcessor: ImageProcessor {\n    \n    /// Identifier of the processor.\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public let identifier: String\n    \n    /// Brightness changing to image.\n    public let brightness: CGFloat\n    \n    /// Contrast changing to image.\n    public let contrast: CGFloat\n    \n    /// Saturation changing to image.\n    public let saturation: CGFloat\n    \n    /// InputEV changing to image.\n    public let inputEV: CGFloat\n    \n    /// Initialize a `ColorControlsProcessor`\n    ///\n    /// - parameter brightness: Brightness changing to image.\n    /// - parameter contrast:   Contrast changing to image.\n    /// - parameter saturation: Saturation changing to image.\n    /// - parameter inputEV:    InputEV changing to image.\n    public init(brightness: CGFloat, contrast: CGFloat, saturation: CGFloat, inputEV: CGFloat) {\n        self.brightness = brightness\n        self.contrast = contrast\n        self.saturation = saturation\n        self.inputEV = inputEV\n        self.identifier = \"com.onevcat.Kingfisher.ColorControlsProcessor(\\(brightness)_\\(contrast)_\\(saturation)_\\(inputEV))\"\n    }\n    \n    /// Process an input `ImageProcessItem` item to an image for this processor.\n    ///\n    /// - parameter item:    Input item which will be processed by `self`\n    /// - parameter options: Options when processing the item.\n    ///\n    /// - returns: The processed image.\n    ///\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {\n        switch item {\n        case .image(let image):\n            return image.kf.adjusted(brightness: brightness, contrast: contrast, saturation: saturation, inputEV: inputEV)\n        case .data(_):\n            return (DefaultImageProcessor.default >> self).process(item: item, options: options)\n        }\n    }\n}\n\n/// Processor for applying black and white effect to images. Only CG-based images are supported.\n/// watchOS is not supported.\npublic struct BlackWhiteProcessor: ImageProcessor {\n    \n    /// Identifier of the processor.\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public let identifier = \"com.onevcat.Kingfisher.BlackWhiteProcessor\"\n    \n    /// Initialize a `BlackWhiteProcessor`\n    public init() {}\n    \n    /// Process an input `ImageProcessItem` item to an image for this processor.\n    ///\n    /// - parameter item:    Input item which will be processed by `self`\n    /// - parameter options: Options when processing the item.\n    ///\n    /// - returns: The processed image.\n    ///\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {\n        return ColorControlsProcessor(brightness: 0.0, contrast: 1.0, saturation: 0.0, inputEV: 0.7)\n            .process(item: item, options: options)\n    }\n}\n\n/// Processor for cropping an image. Only CG-based images are supported.\n/// watchOS is not supported.\npublic struct CroppingImageProcessor: ImageProcessor {\n    \n    /// Identifier of the processor.\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public let identifier: String\n    \n    /// Target size of output image should be.\n    public let size: CGSize\n    \n    /// Anchor point from which the output size should be calculate.\n    /// The anchor point is consisted by two values between 0.0 and 1.0.\n    /// It indicates a related point in current image. \n    /// See `CroppingImageProcessor.init(size:anchor:)` for more.\n    public let anchor: CGPoint\n    \n    /// Initialize a `CroppingImageProcessor`\n    ///\n    /// - Parameters:\n    ///   - size: Target size of output image should be.\n    ///   - anchor: The anchor point from which the size should be calculated.\n    ///             Default is `CGPoint(x: 0.5, y: 0.5)`, which means the center of input image.\n    /// - Note:\n    ///   The anchor point is consisted by two values between 0.0 and 1.0.\n    ///   It indicates a related point in current image, eg: (0.0, 0.0) for top-left\n    ///   corner, (0.5, 0.5) for center and (1.0, 1.0) for bottom-right corner.\n    ///   The `size` property of `CroppingImageProcessor` will be used along with\n    ///   `anchor` to calculate a target rectange in the size of image.\n    ///    \n    ///   The target size will be automatically calculated with a reasonable behavior.\n    ///   For example, when you have an image size of `CGSize(width: 100, height: 100)`,\n    ///   and a target size of `CGSize(width: 20, height: 20)`: \n    ///   - with a (0.0, 0.0) anchor (top-left), the crop rect will be `{0, 0, 20, 20}`; \n    ///   - with a (0.5, 0.5) anchor (center), it will be `{40, 40, 20, 20}`\n    ///   - while with a (1.0, 1.0) anchor (bottom-right), it will be `{80, 80, 20, 20}`\n    public init(size: CGSize, anchor: CGPoint = CGPoint(x: 0.5, y: 0.5)) {\n        self.size = size\n        self.anchor = anchor\n        self.identifier = \"com.onevcat.Kingfisher.CroppingImageProcessor(\\(size)_\\(anchor))\"\n    }\n    \n    /// Process an input `ImageProcessItem` item to an image for this processor.\n    ///\n    /// - parameter item:    Input item which will be processed by `self`\n    /// - parameter options: Options when processing the item.\n    ///\n    /// - returns: The processed image.\n    ///\n    /// - Note: See documentation of `ImageProcessor` protocol for more.\n    public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {\n        switch item {\n        case .image(let image):\n            return image.kf.crop(to: size, anchorOn: anchor)\n        case .data(_): return (DefaultImageProcessor.default >> self).process(item: item, options: options)\n        }\n    }\n}\n\n/// Concatenate two `ImageProcessor`s. `ImageProcessor.appen(another:)` is used internally.\n///\n/// - parameter left:  First processor.\n/// - parameter right: Second processor.\n///\n/// - returns: The concatenated processor.\npublic func >>(left: ImageProcessor, right: ImageProcessor) -> ImageProcessor {\n    return left.append(another: right)\n}\n\nfileprivate extension Color {\n    var hex: String {\n        var r: CGFloat = 0\n        var g: CGFloat = 0\n        var b: CGFloat = 0\n        var a: CGFloat = 0\n        \n        getRed(&r, green: &g, blue: &b, alpha: &a)\n        \n        let rInt = Int(r * 255) << 24\n        let gInt = Int(g * 255) << 16\n        let bInt = Int(b * 255) << 8\n        let aInt = Int(a * 255)\n        \n        let rgba = rInt | gInt | bInt | aInt\n        \n        return String(format:\"#%08x\", rgba)\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/ImageTransition.swift",
    "content": "//\n//  ImageTransition.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/9/18.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n#if os(macOS)\n// Not implemented for macOS and watchOS yet.\n    \nimport AppKit\n\n/// Image transition is not supported on macOS.\npublic enum ImageTransition {\n    case none\n    var duration: TimeInterval {\n        return 0\n    }\n}\n\n#elseif os(watchOS)\nimport UIKit\n/// Image transition is not supported on watchOS.\npublic enum ImageTransition {\n    case none\n    var duration: TimeInterval {\n        return 0\n    }\n}\n#else\nimport UIKit\n\n/**\nTransition effect which will be used when an image downloaded and set by `UIImageView` extension API in Kingfisher.\nYou can assign an enum value with transition duration as an item in `KingfisherOptionsInfo` \nto enable the animation transition.\n\nApple's UIViewAnimationOptions is used under the hood.\nFor custom transition, you should specified your own transition options, animations and \ncomletion handler as well.\n*/\npublic enum ImageTransition {\n    ///  No animation transistion.\n    case none\n    \n    /// Fade in the loaded image.\n    case fade(TimeInterval)\n\n    /// Flip from left transition.\n    case flipFromLeft(TimeInterval)\n\n    /// Flip from right transition.\n    case flipFromRight(TimeInterval)\n    \n    /// Flip from top transition.\n    case flipFromTop(TimeInterval)\n    \n    /// Flip from bottom transition.\n    case flipFromBottom(TimeInterval)\n    \n    /// Custom transition.\n    case custom(duration: TimeInterval,\n                 options: UIViewAnimationOptions,\n              animations: ((UIImageView, UIImage) -> Void)?,\n              completion: ((Bool) -> Void)?)\n    \n    var duration: TimeInterval {\n        switch self {\n        case .none:                          return 0\n        case .fade(let duration):            return duration\n            \n        case .flipFromLeft(let duration):    return duration\n        case .flipFromRight(let duration):   return duration\n        case .flipFromTop(let duration):     return duration\n        case .flipFromBottom(let duration):  return duration\n            \n        case .custom(let duration, _, _, _): return duration\n        }\n    }\n    \n    var animationOptions: UIViewAnimationOptions {\n        switch self {\n        case .none:                         return []\n        case .fade(_):                      return .transitionCrossDissolve\n            \n        case .flipFromLeft(_):              return .transitionFlipFromLeft\n        case .flipFromRight(_):             return .transitionFlipFromRight\n        case .flipFromTop(_):               return .transitionFlipFromTop\n        case .flipFromBottom(_):            return .transitionFlipFromBottom\n            \n        case .custom(_, let options, _, _): return options\n        }\n    }\n    \n    var animations: ((UIImageView, UIImage) -> Void)? {\n        switch self {\n        case .custom(_, _, let animations, _): return animations\n        default: return { $0.image = $1 }\n        }\n    }\n    \n    var completion: ((Bool) -> Void)? {\n        switch self {\n        case .custom(_, _, _, let completion): return completion\n        default: return nil\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/ImageView+Kingfisher.swift",
    "content": "//\n//  ImageView+Kingfisher.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n\n#if os(macOS)\nimport AppKit\n#else\nimport UIKit\n#endif\n\n// MARK: - Extension methods.\n/**\n *    Set image to use from web.\n */\nextension Kingfisher where Base: ImageView {\n    /**\n     Set an image with a resource, a placeholder image, options, progress handler and completion handler.\n     \n     - parameter resource:          Resource object contains information such as `cacheKey` and `downloadURL`.\n     - parameter placeholder:       A placeholder image when retrieving the image at URL.\n     - parameter options:           A dictionary could control some behaviors. See `KingfisherOptionsInfo` for more.\n     - parameter progressBlock:     Called when the image downloading progress gets updated.\n     - parameter completionHandler: Called when the image retrieved and set.\n     \n     - returns: A task represents the retrieving process.\n     \n     - note: Both the `progressBlock` and `completionHandler` will be invoked in main thread.\n     The `CallbackDispatchQueue` specified in `optionsInfo` will not be used in callbacks of this method.\n     \n     If `resource` is `nil`, the `placeholder` image will be set and\n     `completionHandler` will be called with both `error` and `image` being `nil`.\n     */\n    @discardableResult\n    public func setImage(with resource: Resource?,\n                         placeholder: Placeholder? = nil,\n                         options: KingfisherOptionsInfo? = nil,\n                         progressBlock: DownloadProgressBlock? = nil,\n                         completionHandler: CompletionHandler? = nil) -> RetrieveImageTask\n    {\n        guard let resource = resource else {\n            self.placeholder = placeholder\n            setWebURL(nil)\n            completionHandler?(nil, nil, .none, nil)\n            return .empty\n        }\n        \n        var options = KingfisherManager.shared.defaultOptions + (options ?? KingfisherEmptyOptionsInfo)\n        let noImageOrPlaceholderSet = base.image == nil && self.placeholder == nil\n        \n        if !options.keepCurrentImageWhileLoading || noImageOrPlaceholderSet { // Always set placeholder while there is no image/placehoer yet.\n            self.placeholder = placeholder\n        }\n\n        let maybeIndicator = indicator\n        maybeIndicator?.startAnimatingView()\n        \n        setWebURL(resource.downloadURL)\n\n        if base.shouldPreloadAllAnimation() {\n            options.append(.preloadAllAnimationData)\n        }\n        \n        let task = KingfisherManager.shared.retrieveImage(\n            with: resource,\n            options: options,\n            progressBlock: { receivedSize, totalSize in\n                guard resource.downloadURL == self.webURL else {\n                    return\n                }\n                if let progressBlock = progressBlock {\n                    progressBlock(receivedSize, totalSize)\n                }\n            },\n            completionHandler: {[weak base] image, error, cacheType, imageURL in\n                DispatchQueue.main.safeAsync {\n                    maybeIndicator?.stopAnimatingView()\n                    guard let strongBase = base, imageURL == self.webURL else {\n                        completionHandler?(image, error, cacheType, imageURL)\n                        return\n                    }\n                    \n                    self.setImageTask(nil)\n                    guard let image = image else {\n                        completionHandler?(nil, error, cacheType, imageURL)\n                        return\n                    }\n                    \n                    guard let transitionItem = options.lastMatchIgnoringAssociatedValue(.transition(.none)),\n                        case .transition(let transition) = transitionItem, ( options.forceTransition || cacheType == .none) else\n                    {\n                        self.placeholder = nil\n                        strongBase.image = image\n                        completionHandler?(image, error, cacheType, imageURL)\n                        return\n                    }\n                    \n                    #if !os(macOS)\n                        UIView.transition(with: strongBase, duration: 0.0, options: [],\n                                          animations: { maybeIndicator?.stopAnimatingView() },\n                                          completion: { _ in\n\n                                            self.placeholder = nil\n                                            UIView.transition(with: strongBase, duration: transition.duration,\n                                                              options: [transition.animationOptions, .allowUserInteraction],\n                                                              animations: {\n                                                                // Set image property in the animation.\n                                                                transition.animations?(strongBase, image)\n                                                              },\n                                                              completion: { finished in\n                                                                transition.completion?(finished)\n                                                                completionHandler?(image, error, cacheType, imageURL)\n                                                              })\n                                          })\n                    #endif\n                }\n            })\n        \n        setImageTask(task)\n        \n        return task\n    }\n    \n    /**\n     Cancel the image download task bounded to the image view if it is running.\n     Nothing will happen if the downloading has already finished.\n     */\n    public func cancelDownloadTask() {\n        imageTask?.cancel()\n    }\n}\n\n// MARK: - Associated Object\nprivate var lastURLKey: Void?\nprivate var indicatorKey: Void?\nprivate var indicatorTypeKey: Void?\nprivate var placeholderKey: Void?\nprivate var imageTaskKey: Void?\n\nextension Kingfisher where Base: ImageView {\n    /// Get the image URL binded to this image view.\n    public var webURL: URL? {\n        return objc_getAssociatedObject(base, &lastURLKey) as? URL\n    }\n    \n    fileprivate func setWebURL(_ url: URL?) {\n        objc_setAssociatedObject(base, &lastURLKey, url, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n    }\n    \n    /// Holds which indicator type is going to be used.\n    /// Default is .none, means no indicator will be shown.\n    public var indicatorType: IndicatorType {\n        get {\n            let indicator = (objc_getAssociatedObject(base, &indicatorTypeKey) as? Box<IndicatorType?>)?.value\n            return indicator ?? .none\n        }\n        \n        set {\n            switch newValue {\n            case .none:\n                indicator = nil\n            case .activity:\n                indicator = ActivityIndicator()\n            case .image(let data):\n                indicator = ImageIndicator(imageData: data)\n            case .custom(let anIndicator):\n                indicator = anIndicator\n            }\n            \n            objc_setAssociatedObject(base, &indicatorTypeKey, Box(value: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n        }\n    }\n    \n    /// Holds any type that conforms to the protocol `Indicator`.\n    /// The protocol `Indicator` has a `view` property that will be shown when loading an image.\n    /// It will be `nil` if `indicatorType` is `.none`.\n    public fileprivate(set) var indicator: Indicator? {\n        get {\n            return (objc_getAssociatedObject(base, &indicatorKey) as? Box<Indicator?>)?.value\n        }\n        \n        set {\n            // Remove previous\n            if let previousIndicator = indicator {\n                previousIndicator.view.removeFromSuperview()\n            }\n            \n            // Add new\n            if var newIndicator = newValue {\n                // Set default indicator frame if the view's frame not set.\n                if newIndicator.view.frame != .zero {\n                    newIndicator.view.frame = base.frame\n                }\n                newIndicator.viewCenter = CGPoint(x: base.bounds.midX, y: base.bounds.midY)\n                newIndicator.view.isHidden = true\n                base.addSubview(newIndicator.view)\n            }\n            \n            // Save in associated object\n            objc_setAssociatedObject(base, &indicatorKey, Box(value: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n        }\n    }\n    \n    fileprivate var imageTask: RetrieveImageTask? {\n        return objc_getAssociatedObject(base, &imageTaskKey) as? RetrieveImageTask\n    }\n    \n    fileprivate func setImageTask(_ task: RetrieveImageTask?) {\n        objc_setAssociatedObject(base, &imageTaskKey, task, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n    }\n    \n    public fileprivate(set) var placeholder: Placeholder? {\n        get {\n            return (objc_getAssociatedObject(base, &placeholderKey) as? Box<Placeholder?>)?.value\n        }\n        \n        set {\n            if let previousPlaceholder = placeholder {\n                previousPlaceholder.remove(from: base)\n            }\n            \n            if let newPlaceholder = newValue {\n                newPlaceholder.add(to: base)\n            } else {\n                base.image = nil\n            }\n            \n            objc_setAssociatedObject(base, &placeholderKey, Box(value: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n        }\n    }\n}\n\n\n@objc extension ImageView {\n    func shouldPreloadAllAnimation() -> Bool { return true }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/Indicator.swift",
    "content": "//\n//  Indicator.swift\n//  Kingfisher\n//\n//  Created by João D. Moreira on 30/08/16.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n#if os(macOS)\n    import AppKit\n#else\n    import UIKit\n#endif\n\n#if os(macOS)\n    public typealias IndicatorView = NSView\n#else\n    public typealias IndicatorView = UIView\n#endif\n\npublic enum IndicatorType {\n    /// No indicator.\n    case none\n    /// Use system activity indicator.\n    case activity\n    /// Use an image as indicator. GIF is supported.\n    case image(imageData: Data)\n    /// Use a custom indicator, which conforms to the `Indicator` protocol.\n    case custom(indicator: Indicator)\n}\n\n// MARK: - Indicator Protocol\npublic protocol Indicator {\n    func startAnimatingView()\n    func stopAnimatingView()\n\n    var viewCenter: CGPoint { get set }\n    var view: IndicatorView { get }\n}\n\nextension Indicator {\n    #if os(macOS)\n    public var viewCenter: CGPoint {\n        get {\n            let frame = view.frame\n            return CGPoint(x: frame.origin.x + frame.size.width / 2.0, y: frame.origin.y + frame.size.height / 2.0 )\n        }\n        set {\n            let frame = view.frame\n            let newFrame = CGRect(x: newValue.x - frame.size.width / 2.0,\n                                  y: newValue.y - frame.size.height / 2.0,\n                                  width: frame.size.width,\n                                  height: frame.size.height)\n            view.frame = newFrame\n        }\n    }\n    #else\n    public var viewCenter: CGPoint {\n        get {\n            return view.center\n        }\n        set {\n            view.center = newValue\n        }\n    }\n    #endif\n}\n\n// MARK: - ActivityIndicator\n// Displays a NSProgressIndicator / UIActivityIndicatorView\nclass ActivityIndicator: Indicator {\n\n    #if os(macOS)\n    private let activityIndicatorView: NSProgressIndicator\n    #else\n    private let activityIndicatorView: UIActivityIndicatorView\n    #endif\n    private var animatingCount = 0\n\n    var view: IndicatorView {\n        return activityIndicatorView\n    }\n\n    func startAnimatingView() {\n        animatingCount += 1\n        // Alrady animating\n        if animatingCount == 1 {\n            #if os(macOS)\n                activityIndicatorView.startAnimation(nil)\n            #else\n                activityIndicatorView.startAnimating()\n            #endif\n            activityIndicatorView.isHidden = false\n        }\n    }\n\n    func stopAnimatingView() {\n        animatingCount = max(animatingCount - 1, 0)\n        if animatingCount == 0 {\n            #if os(macOS)\n                activityIndicatorView.stopAnimation(nil)\n            #else\n                activityIndicatorView.stopAnimating()\n            #endif\n            activityIndicatorView.isHidden = true\n        }\n    }\n\n    init() {\n        #if os(macOS)\n            activityIndicatorView = NSProgressIndicator(frame: CGRect(x: 0, y: 0, width: 16, height: 16))\n            activityIndicatorView.controlSize = .small\n            activityIndicatorView.style = .spinning\n        #else\n            #if os(tvOS)\n                let indicatorStyle = UIActivityIndicatorViewStyle.white\n            #else\n                let indicatorStyle = UIActivityIndicatorViewStyle.gray\n            #endif\n            activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle:indicatorStyle)\n            activityIndicatorView.autoresizingMask = [.flexibleLeftMargin, .flexibleRightMargin, .flexibleBottomMargin, .flexibleTopMargin]\n        #endif\n    }\n}\n\n// MARK: - ImageIndicator\n// Displays an ImageView. Supports gif\nclass ImageIndicator: Indicator {\n    private let animatedImageIndicatorView: ImageView\n\n    var view: IndicatorView {\n        return animatedImageIndicatorView\n    }\n\n    init?(imageData data: Data, processor: ImageProcessor = DefaultImageProcessor.default, options: KingfisherOptionsInfo = KingfisherEmptyOptionsInfo) {\n\n        var options = options\n        // Use normal image view to show animations, so we need to preload all animation data.\n        if !options.preloadAllAnimationData {\n            options.append(.preloadAllAnimationData)\n        }\n        \n        guard let image = processor.process(item: .data(data), options: options) else {\n            return nil\n        }\n\n        animatedImageIndicatorView = ImageView()\n        animatedImageIndicatorView.image = image\n        animatedImageIndicatorView.frame = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)\n        \n        #if os(macOS)\n            // Need for gif to animate on macOS\n            self.animatedImageIndicatorView.imageScaling = .scaleNone\n            self.animatedImageIndicatorView.canDrawSubviewsIntoLayer = true\n        #else\n            animatedImageIndicatorView.contentMode = .center\n            animatedImageIndicatorView.autoresizingMask = [.flexibleLeftMargin,\n                                                           .flexibleRightMargin,\n                                                           .flexibleBottomMargin,\n                                                           .flexibleTopMargin]\n        #endif\n    }\n\n    func startAnimatingView() {\n        #if os(macOS)\n            animatedImageIndicatorView.animates = true\n        #else\n            animatedImageIndicatorView.startAnimating()\n        #endif\n        animatedImageIndicatorView.isHidden = false\n    }\n\n    func stopAnimatingView() {\n        #if os(macOS)\n            animatedImageIndicatorView.animates = false\n        #else\n            animatedImageIndicatorView.stopAnimating()\n        #endif\n        animatedImageIndicatorView.isHidden = true\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/Kingfisher.h",
    "content": "//\n//  Kingfisher.h\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n\n//! Project version number for Kingfisher.\nFOUNDATION_EXPORT double KingfisherVersionNumber;\n\n//! Project version string for Kingfisher.\nFOUNDATION_EXPORT const unsigned char KingfisherVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <Kingfisher/PublicHeader.h>\n\n\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/Kingfisher.swift",
    "content": "//\n//  Kingfisher.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 16/9/14.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport Foundation\nimport ImageIO\n\n#if os(macOS)\n    import AppKit\n    public typealias Image = NSImage\n    public typealias View = NSView\n    public typealias Color = NSColor\n    public typealias ImageView = NSImageView\n    public typealias Button = NSButton\n#else\n    import UIKit\n    public typealias Image = UIImage\n    public typealias Color = UIColor\n    #if !os(watchOS)\n    public typealias ImageView = UIImageView\n    public typealias View = UIView\n    public typealias Button = UIButton\n    #endif\n#endif\n\npublic final class Kingfisher<Base> {\n    public let base: Base\n    public init(_ base: Base) {\n        self.base = base\n    }\n}\n\n/**\n A type that has Kingfisher extensions.\n */\npublic protocol KingfisherCompatible {\n    associatedtype CompatibleType\n    var kf: CompatibleType { get }\n}\n\npublic extension KingfisherCompatible {\n    public var kf: Kingfisher<Self> {\n        get { return Kingfisher(self) }\n    }\n}\n\nextension Image: KingfisherCompatible { }\n#if !os(watchOS)\nextension ImageView: KingfisherCompatible { }\nextension Button: KingfisherCompatible { }\n#endif\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/KingfisherManager.swift",
    "content": "//\n//  KingfisherManager.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n#if os(macOS)\nimport AppKit\n#else\nimport UIKit\n#endif\n\npublic typealias DownloadProgressBlock = ((_ receivedSize: Int64, _ totalSize: Int64) -> ())\npublic typealias CompletionHandler = ((_ image: Image?, _ error: NSError?, _ cacheType: CacheType, _ imageURL: URL?) -> ())\n\n/// RetrieveImageTask represents a task of image retrieving process.\n/// It contains an async task of getting image from disk and from network.\npublic class RetrieveImageTask {\n    \n    public static let empty = RetrieveImageTask()\n    \n    // If task is canceled before the download task started (which means the `downloadTask` is nil),\n    // the download task should not begin.\n    var cancelledBeforeDownloadStarting: Bool = false\n    \n    /// The network retrieve task in this image task.\n    public var downloadTask: RetrieveImageDownloadTask?\n    \n    /**\n    Cancel current task. If this task is already done, do nothing.\n    */\n    public func cancel() {\n        if let downloadTask = downloadTask {\n            downloadTask.cancel()\n        } else {\n            cancelledBeforeDownloadStarting = true\n        }\n    }\n}\n\n/// Error domain of Kingfisher\npublic let KingfisherErrorDomain = \"com.onevcat.Kingfisher.Error\"\n\n/// Main manager class of Kingfisher. It connects Kingfisher downloader and cache.\n/// You can use this class to retrieve an image via a specified URL from web or cache.\npublic class KingfisherManager {\n    \n    /// Shared manager used by the extensions across Kingfisher.\n    public static let shared = KingfisherManager()\n    \n    /// Cache used by this manager\n    public var cache: ImageCache\n    \n    /// Downloader used by this manager\n    public var downloader: ImageDownloader\n    \n    /// Default options used by the manager. This option will be used in \n    /// Kingfisher manager related methods, including all image view and \n    /// button extension methods. You can also passing the options per image by \n    /// sending an `options` parameter to Kingfisher's APIs, the per image option \n    /// will overwrite the default ones if exist.\n    ///\n    /// - Note: This option will not be applied to independent using of `ImageDownloader` or `ImageCache`.\n    public var defaultOptions = KingfisherEmptyOptionsInfo\n    \n    var currentDefaultOptions: KingfisherOptionsInfo {\n        return [.downloader(downloader), .targetCache(cache)] + defaultOptions\n    }\n    \n    convenience init() {\n        self.init(downloader: .default, cache: .default)\n    }\n    \n    init(downloader: ImageDownloader, cache: ImageCache) {\n        self.downloader = downloader\n        self.cache = cache\n    }\n    \n    /**\n    Get an image with resource.\n    If KingfisherOptions.None is used as `options`, Kingfisher will seek the image in memory and disk first.\n    If not found, it will download the image at `resource.downloadURL` and cache it with `resource.cacheKey`.\n    These default behaviors could be adjusted by passing different options. See `KingfisherOptions` for more.\n    \n    - parameter resource:          Resource object contains information such as `cacheKey` and `downloadURL`.\n    - parameter options:           A dictionary could control some behaviors. See `KingfisherOptionsInfo` for more.\n    - parameter progressBlock:     Called every time downloaded data changed. This could be used as a progress UI.\n    - parameter completionHandler: Called when the whole retrieving process finished.\n    \n    - returns: A `RetrieveImageTask` task object. You can use this object to cancel the task.\n    */\n    @discardableResult\n    public func retrieveImage(with resource: Resource,\n        options: KingfisherOptionsInfo?,\n        progressBlock: DownloadProgressBlock?,\n        completionHandler: CompletionHandler?) -> RetrieveImageTask\n    {\n        let task = RetrieveImageTask()\n        let options = currentDefaultOptions + (options ?? KingfisherEmptyOptionsInfo)\n        if options.forceRefresh {\n            _ = downloadAndCacheImage(\n                with: resource.downloadURL,\n                forKey: resource.cacheKey,\n                retrieveImageTask: task,\n                progressBlock: progressBlock,\n                completionHandler: completionHandler,\n                options: options)\n        } else {\n            tryToRetrieveImageFromCache(\n                forKey: resource.cacheKey,\n                with: resource.downloadURL,\n                retrieveImageTask: task,\n                progressBlock: progressBlock,\n                completionHandler: completionHandler,\n                options: options)\n        }\n        \n        return task\n    }\n\n    @discardableResult\n    func downloadAndCacheImage(with url: URL,\n                             forKey key: String,\n                      retrieveImageTask: RetrieveImageTask,\n                          progressBlock: DownloadProgressBlock?,\n                      completionHandler: CompletionHandler?,\n                                options: KingfisherOptionsInfo) -> RetrieveImageDownloadTask?\n    {\n        let downloader = options.downloader\n        return downloader.downloadImage(with: url, retrieveImageTask: retrieveImageTask, options: options,\n            progressBlock: { receivedSize, totalSize in\n                progressBlock?(receivedSize, totalSize)\n            },\n            completionHandler: { image, error, imageURL, originalData in\n\n                let targetCache = options.targetCache\n                if let error = error, error.code == KingfisherError.notModified.rawValue {\n                    // Not modified. Try to find the image from cache.\n                    // (The image should be in cache. It should be guaranteed by the framework users.)\n                    targetCache.retrieveImage(forKey: key, options: options, completionHandler: { (cacheImage, cacheType) -> () in\n                        completionHandler?(cacheImage, nil, cacheType, url)\n                    })\n                    return\n                }\n                \n                if let image = image, let originalData = originalData {\n                    targetCache.store(image,\n                                      original: originalData,\n                                      forKey: key,\n                                      processorIdentifier:options.processor.identifier,\n                                      cacheSerializer: options.cacheSerializer,\n                                      toDisk: !options.cacheMemoryOnly,\n                                      completionHandler: nil)\n                    if options.cacheOriginalImage && options.processor != DefaultImageProcessor.default {\n                        let originalCache = options.originalCache\n                        let defaultProcessor = DefaultImageProcessor.default\n                        if let originalImage = defaultProcessor.process(item: .data(originalData), options: options) {\n                            originalCache.store(originalImage,\n                                              original: originalData,\n                                              forKey: key,\n                                              processorIdentifier: defaultProcessor.identifier,\n                                              cacheSerializer: options.cacheSerializer,\n                                              toDisk: !options.cacheMemoryOnly,\n                                              completionHandler: nil)\n                        }\n                    }\n                }\n\n                completionHandler?(image, error, .none, url)\n\n            })\n    }\n    \n    func tryToRetrieveImageFromCache(forKey key: String,\n                                       with url: URL,\n                              retrieveImageTask: RetrieveImageTask,\n                                  progressBlock: DownloadProgressBlock?,\n                              completionHandler: CompletionHandler?,\n                                        options: KingfisherOptionsInfo)\n    {\n        \n        \n        let diskTaskCompletionHandler: CompletionHandler = { (image, error, cacheType, imageURL) -> () in\n            completionHandler?(image, error, cacheType, imageURL)\n        }\n        \n        func handleNoCache() {\n            if options.onlyFromCache {\n                let error = NSError(domain: KingfisherErrorDomain, code: KingfisherError.notCached.rawValue, userInfo: nil)\n                diskTaskCompletionHandler(nil, error, .none, url)\n                return\n            }\n            self.downloadAndCacheImage(\n                with: url,\n                forKey: key,\n                retrieveImageTask: retrieveImageTask,\n                progressBlock: progressBlock,\n                completionHandler: diskTaskCompletionHandler,\n                options: options)\n            \n        }\n        \n        let targetCache = options.targetCache\n        // First, try to get the exactly image from cache\n        targetCache.retrieveImage(forKey: key, options: options) { image, cacheType in\n            // If found, we could finish now.\n            if image != nil {\n                diskTaskCompletionHandler(image, nil, cacheType, url)\n                return\n            }\n            \n            // If not found, and we are using a default processor, download it!\n            let processor = options.processor\n            guard processor != DefaultImageProcessor.default else {\n                handleNoCache()\n                return\n            }\n            \n            // If processor is not the default one, we have a chance to check whether\n            // the original image is already in cache.\n            let originalCache = options.originalCache\n            let optionsWithoutProcessor = options.removeAllMatchesIgnoringAssociatedValue(.processor(processor))\n            originalCache.retrieveImage(forKey: key, options: optionsWithoutProcessor) { image, cacheType in\n                // If we found the original image, there is no need to download it again.\n                // We could just apply processor to it now.\n                guard let image = image else {\n                    handleNoCache()\n                    return\n                }\n                \n                guard let processedImage = processor.process(item: .image(image), options: options) else {\n                    diskTaskCompletionHandler(nil, nil, .none, url)\n                    return\n                }\n                targetCache.store(processedImage,\n                                  original: nil,\n                                  forKey: key,\n                                  processorIdentifier:options.processor.identifier,\n                                  cacheSerializer: options.cacheSerializer,\n                                  toDisk: !options.cacheMemoryOnly,\n                                  completionHandler: nil)\n                diskTaskCompletionHandler(processedImage, nil, .none, url)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/KingfisherOptionsInfo.swift",
    "content": "//\n//  KingfisherOptionsInfo.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/23.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n#if os(macOS)\nimport AppKit\n#else\nimport UIKit\n#endif\n    \n\n/**\n*\tKingfisherOptionsInfo is a typealias for [KingfisherOptionsInfoItem]. You can use the enum of option item with value to control some behaviors of Kingfisher.\n*/\npublic typealias KingfisherOptionsInfo = [KingfisherOptionsInfoItem]\nlet KingfisherEmptyOptionsInfo = [KingfisherOptionsInfoItem]()\n\n/**\nItems could be added into KingfisherOptionsInfo.\n*/\npublic enum KingfisherOptionsInfoItem {\n    /// The associated value of this member should be an ImageCache object. Kingfisher will use the specified\n    /// cache object when handling related operations, including trying to retrieve the cached images and store\n    /// the downloaded image to it.\n    case targetCache(ImageCache)\n    \n    /// Cache for storing and retrieving original image.\n    /// Preferred prior to targetCache for storing and retrieving original images if specified.\n    /// Only used if a non-default image processor is involved.\n    case originalCache(ImageCache)\n    \n    /// The associated value of this member should be an ImageDownloader object. Kingfisher will use this\n    /// downloader to download the images.\n    case downloader(ImageDownloader)\n    \n    /// Member for animation transition when using UIImageView. Kingfisher will use the `ImageTransition` of\n    /// this enum to animate the image in if it is downloaded from web. The transition will not happen when the\n    /// image is retrieved from either memory or disk cache by default. If you need to do the transition even when\n    /// the image being retrieved from cache, set `ForceTransition` as well.\n    case transition(ImageTransition)\n    \n    /// Associated `Float` value will be set as the priority of image download task. The value for it should be\n    /// between 0.0~1.0. If this option not set, the default value (`NSURLSessionTaskPriorityDefault`) will be used.\n    case downloadPriority(Float)\n    \n    /// If set, `Kingfisher` will ignore the cache and try to fire a download task for the resource.\n    case forceRefresh\n    \n    /// If set, setting the image to an image view will happen with transition even when retrieved from cache.\n    /// See `Transition` option for more.\n    case forceTransition\n    \n    ///  If set, `Kingfisher` will only cache the value in memory but not in disk.\n    case cacheMemoryOnly\n    \n    /// If set, `Kingfisher` will only try to retrieve the image from cache not from network.\n    case onlyFromCache\n    \n    /// Decode the image in background thread before using.\n    case backgroundDecode\n    \n    /// The associated value of this member will be used as the target queue of dispatch callbacks when\n    /// retrieving images from cache. If not set, `Kingfisher` will use main quese for callbacks.\n    case callbackDispatchQueue(DispatchQueue?)\n    \n    /// The associated value of this member will be used as the scale factor when converting retrieved data to an image.\n    /// It is the image scale, instead of your screen scale. You may need to specify the correct scale when you dealing \n    /// with 2x or 3x retina images.\n    case scaleFactor(CGFloat)\n\n    /// Whether all the animated image data should be preloaded. Default it false, which means following frames will be\n    /// loaded on need. If true, all the animated image data will be loaded and decoded into memory. This option is mainly\n    /// used for back compatibility internally. You should not set it directly. `AnimatedImageView` will not preload\n    /// all data, while a normal image view (`UIImageView` or `NSImageView`) will load all data. Choose to use\n    /// corresponding image view type instead of setting this option.\n    case preloadAllAnimationData\n    \n    /// The `ImageDownloadRequestModifier` contained will be used to change the request before it being sent.\n    /// This is the last chance you can modify the request. You can modify the request for some customizing purpose,\n    /// such as adding auth token to the header, do basic HTTP auth or something like url mapping. The original request\n    /// will be sent without any modification by default.\n    case requestModifier(ImageDownloadRequestModifier)\n    \n    /// Processor for processing when the downloading finishes, a processor will convert the downloaded data to an image\n    /// and/or apply some filter on it. If a cache is connected to the downloader (it happenes when you are using\n    /// KingfisherManager or the image extension methods), the converted image will also be sent to cache as well as the\n    /// image view. `DefaultImageProcessor.default` will be used by default.\n    case processor(ImageProcessor)\n    \n    /// Supply an `CacheSerializer` to convert some data to an image object for\n    /// retrieving from disk cache or vice versa for storing to disk cache.\n    /// `DefaultCacheSerializer.default` will be used by default.\n    case cacheSerializer(CacheSerializer)\n    \n    /// Keep the existing image while setting another image to an image view.\n    /// By setting this option, the placeholder image parameter of imageview extension method\n    /// will be ignored and the current image will be kept while loading or downloading the new image.\n    case keepCurrentImageWhileLoading\n    \n    /// If set, Kingfisher will only load the first frame from a animated image data file as a single image.\n    /// Loading a lot of animated images may take too much memory. It will be useful when you want to display a\n    /// static preview of the first frame from a animated image.\n    /// This option will be ignored if the target image is not animated image data.\n    case onlyLoadFirstFrame\n    \n    /// If set and an `ImageProcessor` is used, Kingfisher will try to cache both \n    /// the final result and original image. Kingfisher will have a chance to use \n    /// the original image when another processor is applied to the same resouce, \n    /// instead of downloading it again.\n    case cacheOriginalImage\n}\n\nprecedencegroup ItemComparisonPrecedence {\n    associativity: none\n    higherThan: LogicalConjunctionPrecedence\n}\n\ninfix operator <== : ItemComparisonPrecedence\n\n// This operator returns true if two `KingfisherOptionsInfoItem` enum is the same, without considering the associated values.\nfunc <== (lhs: KingfisherOptionsInfoItem, rhs: KingfisherOptionsInfoItem) -> Bool {\n    switch (lhs, rhs) {\n    case (.targetCache(_), .targetCache(_)): return true\n    case (.originalCache(_), .originalCache(_)): return true\n    case (.downloader(_), .downloader(_)): return true\n    case (.transition(_), .transition(_)): return true\n    case (.downloadPriority(_), .downloadPriority(_)): return true\n    case (.forceRefresh, .forceRefresh): return true\n    case (.forceTransition, .forceTransition): return true\n    case (.cacheMemoryOnly, .cacheMemoryOnly): return true\n    case (.onlyFromCache, .onlyFromCache): return true\n    case (.backgroundDecode, .backgroundDecode): return true\n    case (.callbackDispatchQueue(_), .callbackDispatchQueue(_)): return true\n    case (.scaleFactor(_), .scaleFactor(_)): return true\n    case (.preloadAllAnimationData, .preloadAllAnimationData): return true\n    case (.requestModifier(_), .requestModifier(_)): return true\n    case (.processor(_), .processor(_)): return true\n    case (.cacheSerializer(_), .cacheSerializer(_)): return true\n    case (.keepCurrentImageWhileLoading, .keepCurrentImageWhileLoading): return true\n    case (.onlyLoadFirstFrame, .onlyLoadFirstFrame): return true\n    case (.cacheOriginalImage, .cacheOriginalImage): return true\n    default: return false\n    }\n}\n\n\nextension Collection where Iterator.Element == KingfisherOptionsInfoItem {\n    func lastMatchIgnoringAssociatedValue(_ target: Iterator.Element) -> Iterator.Element? {\n        return reversed().first { $0 <== target }\n    }\n    \n    func removeAllMatchesIgnoringAssociatedValue(_ target: Iterator.Element) -> [Iterator.Element] {\n        return filter { !($0 <== target) }\n    }\n}\n\npublic extension Collection where Iterator.Element == KingfisherOptionsInfoItem {\n    /// The target `ImageCache` which is used.\n    public var targetCache: ImageCache {\n        if let item = lastMatchIgnoringAssociatedValue(.targetCache(.default)),\n            case .targetCache(let cache) = item\n        {\n            return cache\n        }\n        return ImageCache.default\n    }\n    \n    /// The original `ImageCache` which is used.\n    public var originalCache: ImageCache {\n        if let item = lastMatchIgnoringAssociatedValue(.originalCache(.default)),\n            case .originalCache(let cache) = item\n        {\n            return cache\n        }\n        return targetCache\n    }\n    \n    /// The `ImageDownloader` which is specified.\n    public var downloader: ImageDownloader {\n        if let item = lastMatchIgnoringAssociatedValue(.downloader(.default)),\n            case .downloader(let downloader) = item\n        {\n            return downloader\n        }\n        return ImageDownloader.default\n    }\n    \n    /// Member for animation transition when using UIImageView.\n    public var transition: ImageTransition {\n        if let item = lastMatchIgnoringAssociatedValue(.transition(.none)),\n            case .transition(let transition) = item\n        {\n            return transition\n        }\n        return ImageTransition.none\n    }\n    \n    /// A `Float` value set as the priority of image download task. The value for it should be\n    /// between 0.0~1.0.\n    public var downloadPriority: Float {\n        if let item = lastMatchIgnoringAssociatedValue(.downloadPriority(0)),\n            case .downloadPriority(let priority) = item\n        {\n            return priority\n        }\n        return URLSessionTask.defaultPriority\n    }\n    \n    /// Whether an image will be always downloaded again or not.\n    public var forceRefresh: Bool {\n        return contains{ $0 <== .forceRefresh }\n    }\n    \n    /// Whether the transition should always happen or not.\n    public var forceTransition: Bool {\n        return contains{ $0 <== .forceTransition }\n    }\n    \n    /// Whether cache the image only in memory or not.\n    public var cacheMemoryOnly: Bool {\n        return contains{ $0 <== .cacheMemoryOnly }\n    }\n    \n    /// Whether only load the images from cache or not.\n    public var onlyFromCache: Bool {\n        return contains{ $0 <== .onlyFromCache }\n    }\n    \n    /// Whether the image should be decoded in background or not.\n    public var backgroundDecode: Bool {\n        return contains{ $0 <== .backgroundDecode }\n    }\n\n    /// Whether the image data should be all loaded at once if it is an animated image.\n    public var preloadAllAnimationData: Bool {\n        return contains { $0 <== .preloadAllAnimationData }\n    }\n    \n    /// The queue of callbacks should happen from Kingfisher.\n    public var callbackDispatchQueue: DispatchQueue {\n        if let item = lastMatchIgnoringAssociatedValue(.callbackDispatchQueue(nil)),\n            case .callbackDispatchQueue(let queue) = item\n        {\n            return queue ?? DispatchQueue.main\n        }\n        return DispatchQueue.main\n    }\n    \n    /// The scale factor which should be used for the image.\n    public var scaleFactor: CGFloat {\n        if let item = lastMatchIgnoringAssociatedValue(.scaleFactor(0)),\n            case .scaleFactor(let scale) = item\n        {\n            return scale\n        }\n        return 1.0\n    }\n    \n    /// The `ImageDownloadRequestModifier` will be used before sending a download request.\n    public var modifier: ImageDownloadRequestModifier {\n        if let item = lastMatchIgnoringAssociatedValue(.requestModifier(NoModifier.default)),\n            case .requestModifier(let modifier) = item\n        {\n            return modifier\n        }\n        return NoModifier.default\n    }\n    \n    /// `ImageProcessor` for processing when the downloading finishes.\n    public var processor: ImageProcessor {\n        if let item = lastMatchIgnoringAssociatedValue(.processor(DefaultImageProcessor.default)),\n            case .processor(let processor) = item\n        {\n            return processor\n        }\n        return DefaultImageProcessor.default\n    }\n    \n    /// `CacheSerializer` to convert image to data for storing in cache.\n    public var cacheSerializer: CacheSerializer {\n        if let item = lastMatchIgnoringAssociatedValue(.cacheSerializer(DefaultCacheSerializer.default)),\n            case .cacheSerializer(let cacheSerializer) = item\n        {\n            return cacheSerializer\n        }\n        return DefaultCacheSerializer.default\n    }\n    \n    /// Keep the existing image while setting another image to an image view. \n    /// Or the placeholder will be used while downloading.\n    public var keepCurrentImageWhileLoading: Bool {\n        return contains { $0 <== .keepCurrentImageWhileLoading }\n    }\n    \n    public var onlyLoadFirstFrame: Bool {\n        return contains { $0 <== .onlyLoadFirstFrame }\n    }\n    \n    public var cacheOriginalImage: Bool {\n        return contains { $0 <== .cacheOriginalImage }\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/Placeholder.swift",
    "content": "//\n//  Placeholder.swift\n//  Kingfisher\n//\n//  Created by Tieme van Veen on 28/08/2017.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\n#if os(macOS)\n    import AppKit\n#else\n    import UIKit\n#endif\n\n\n/// Represent a placeholder type which could be set while loading as well as\n/// loading finished without getting an image.\npublic protocol Placeholder {\n    \n    /// How the placeholder should be added to a given image view.\n    func add(to imageView: ImageView)\n    \n    /// How the placeholder should be removed from a given image view.\n    func remove(from imageView: ImageView)\n}\n\n/// Default implementation of an image placeholder. The image will be set or \n/// reset directly for `image` property of the image view.\nextension Placeholder where Self: Image {\n    \n    /// How the placeholder should be added to a given image view.\n    public func add(to imageView: ImageView) { imageView.image = self }\n    \n    /// How the placeholder should be removed from a given image view.\n    public func remove(from imageView: ImageView) { imageView.image = nil }\n}\n\nextension Image: Placeholder {}\n\n/// Default implementation of an arbitrary view as placeholder. The view will be \n/// added as a subview when adding and be removed from its super view when removing.\n///\n/// To use your customize View type as placeholder, simply let it conforming to \n/// `Placeholder` by `extension MyView: Placeholder {}`.\nextension Placeholder where Self: View {\n    \n    /// How the placeholder should be added to a given image view.\n    public func add(to imageView: ImageView) {\n        imageView.addSubview(self)\n\n        self.translatesAutoresizingMaskIntoConstraints = false\n        NSLayoutConstraint.activate([\n            NSLayoutConstraint(item: self, attribute: .centerX, relatedBy: .equal, toItem: imageView, attribute: .centerX, multiplier: 1, constant: 0),\n            NSLayoutConstraint(item: self, attribute: .centerY, relatedBy: .equal, toItem: imageView, attribute: .centerY, multiplier: 1, constant: 0),\n            NSLayoutConstraint(item: self, attribute: .height, relatedBy: .equal, toItem: imageView, attribute: .height, multiplier: 1, constant: 0),\n            NSLayoutConstraint(item: self, attribute: .width, relatedBy: .equal, toItem: imageView, attribute: .width, multiplier: 1, constant: 0)\n            ])\n    }\n\n    /// How the placeholder should be removed from a given image view.\n    public func remove(from imageView: ImageView) {\n        self.removeFromSuperview()\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/RequestModifier.swift",
    "content": "//\n//  RequestModifier.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 2016/09/05.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport Foundation\n\n/// Request modifier of image downloader.\npublic protocol ImageDownloadRequestModifier {\n    func modified(for request: URLRequest) -> URLRequest?\n}\n\nstruct NoModifier: ImageDownloadRequestModifier {\n    static let `default` = NoModifier()\n    private init() {}\n    func modified(for request: URLRequest) -> URLRequest? {\n        return request\n    }\n}\n\npublic struct AnyModifier: ImageDownloadRequestModifier {\n    \n    let block: (URLRequest) -> URLRequest?\n    \n    public func modified(for request: URLRequest) -> URLRequest? {\n        return block(request)\n    }\n    \n    public init(modify: @escaping (URLRequest) -> URLRequest? ) {\n        block = modify\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/Resource.swift",
    "content": "//\n//  Resource.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport Foundation\n\n\n/// `Resource` protocol defines how to download and cache a resource from network.\npublic protocol Resource {\n    /// The key used in cache.\n    var cacheKey: String { get }\n    \n    /// The target image URL.\n    var downloadURL: URL { get }\n}\n\n/**\n ImageResource is a simple combination of `downloadURL` and `cacheKey`.\n \n When passed to image view set methods, Kingfisher will try to download the target \n image from the `downloadURL`, and then store it with the `cacheKey` as the key in cache.\n */\npublic struct ImageResource: Resource {\n    /// The key used in cache.\n    public let cacheKey: String\n    \n    /// The target image URL.\n    public let downloadURL: URL\n    \n    /**\n     Create a resource.\n     \n     - parameter downloadURL: The target image URL.\n     - parameter cacheKey:    The cache key. If `nil`, Kingfisher will use the `absoluteString` of `downloadURL` as the key.\n     \n     - returns: A resource.\n     */\n    public init(downloadURL: URL, cacheKey: String? = nil) {\n        self.downloadURL = downloadURL\n        self.cacheKey = cacheKey ?? downloadURL.absoluteString\n    }\n}\n\n/**\n URL conforms to `Resource` in Kingfisher.\n The `absoluteString` of this URL is used as `cacheKey`. And the URL itself will be used as `downloadURL`.\n If you need customize the url and/or cache key, use `ImageResource` instead.\n */\nextension URL: Resource {\n    public var cacheKey: String { return absoluteString }\n    public var downloadURL: URL { return self }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/String+MD5.swift",
    "content": "//\n//  String+MD5.swift\n//  Kingfisher\n//\n// To date, adding CommonCrypto to a Swift framework is problematic. See:\n// http://stackoverflow.com/questions/25248598/importing-commoncrypto-in-a-swift-framework\n// We're using a subset and modified version of CryptoSwift as an alternative.\n// The following is an altered source version that only includes MD5. The original software can be found at:\n// https://github.com/krzyzanowskim/CryptoSwift\n// This is the original copyright notice:\n\n/*\nCopyright (C) 2014 Marcin Krzyżanowski <marcin.krzyzanowski@gmail.com>\nThis software is provided 'as-is', without any express or implied warranty.\nIn no event will the authors be held liable for any damages arising from the use of this software.\nPermission is granted to anyone to use this software for any purpose,including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:\n- The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation is required.\n- Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n- This notice may not be removed or altered from any source or binary distribution.\n*/\n\nimport Foundation\n\npublic struct StringProxy {\n    fileprivate let base: String\n    init(proxy: String) {\n        base = proxy\n    }\n}\n\nextension String: KingfisherCompatible {\n    public typealias CompatibleType = StringProxy\n    public var kf: CompatibleType {\n        return StringProxy(proxy: self)\n    }\n}\n\nextension StringProxy {\n    var md5: String {\n        if let data = base.data(using: .utf8, allowLossyConversion: true) {\n\n            let message = data.withUnsafeBytes { bytes -> [UInt8] in\n                return Array(UnsafeBufferPointer(start: bytes, count: data.count))\n            }\n\n            let MD5Calculator = MD5(message)\n            let MD5Data = MD5Calculator.calculate()\n\n            var MD5String = String()\n            for c in MD5Data {\n                MD5String += String(format: \"%02x\", c)\n            }\n            return MD5String\n\n        } else {\n            return base\n        }\n    }\n}\n\n\n/** array of bytes, little-endian representation */\nfunc arrayOfBytes<T>(_ value: T, length: Int? = nil) -> [UInt8] {\n    let totalBytes = length ?? (MemoryLayout<T>.size * 8)\n    \n    let valuePointer = UnsafeMutablePointer<T>.allocate(capacity: 1)\n    valuePointer.pointee = value\n\n    let bytes = valuePointer.withMemoryRebound(to: UInt8.self, capacity: totalBytes) { (bytesPointer) -> [UInt8] in\n        var bytes = [UInt8](repeating: 0, count: totalBytes)\n        for j in 0..<min(MemoryLayout<T>.size, totalBytes) {\n            bytes[totalBytes - 1 - j] = (bytesPointer + j).pointee\n        }\n        return bytes\n    }\n\n    valuePointer.deinitialize()\n    valuePointer.deallocate(capacity: 1)\n    \n    return bytes\n}\n\nextension Int {\n    /** Array of bytes with optional padding (little-endian) */\n    func bytes(_ totalBytes: Int = MemoryLayout<Int>.size) -> [UInt8] {\n        return arrayOfBytes(self, length: totalBytes)\n    }\n    \n}\n\nextension NSMutableData {\n    \n    /** Convenient way to append bytes */\n    func appendBytes(_ arrayOfBytes: [UInt8]) {\n        append(arrayOfBytes, length: arrayOfBytes.count)\n    }\n    \n}\n\nprotocol HashProtocol {\n    var message: Array<UInt8> { get }\n    \n    /** Common part for hash calculation. Prepare header data. */\n    func prepare(_ len: Int) -> Array<UInt8>\n}\n\nextension HashProtocol {\n    \n    func prepare(_ len: Int) -> Array<UInt8> {\n        var tmpMessage = message\n        \n        // Step 1. Append Padding Bits\n        tmpMessage.append(0x80) // append one bit (UInt8 with one bit) to message\n        \n        // append \"0\" bit until message length in bits ≡ 448 (mod 512)\n        var msgLength = tmpMessage.count\n        var counter = 0\n        \n        while msgLength % len != (len - 8) {\n            counter += 1\n            msgLength += 1\n        }\n        \n        tmpMessage += Array<UInt8>(repeating: 0, count: counter)\n        return tmpMessage\n    }\n}\n\nfunc toUInt32Array(_ slice: ArraySlice<UInt8>) -> Array<UInt32> {\n    var result = Array<UInt32>()\n    result.reserveCapacity(16)\n    \n    for idx in stride(from: slice.startIndex, to: slice.endIndex, by: MemoryLayout<UInt32>.size) {\n        let d0 = UInt32(slice[idx.advanced(by: 3)]) << 24\n        let d1 = UInt32(slice[idx.advanced(by: 2)]) << 16\n        let d2 = UInt32(slice[idx.advanced(by: 1)]) << 8\n        let d3 = UInt32(slice[idx])\n        let val: UInt32 = d0 | d1 | d2 | d3\n                         \n        result.append(val)\n    }\n    return result\n}\n\nstruct BytesIterator: IteratorProtocol {\n    \n    let chunkSize: Int\n    let data: [UInt8]\n    \n    init(chunkSize: Int, data: [UInt8]) {\n        self.chunkSize = chunkSize\n        self.data = data\n    }\n    \n    var offset = 0\n    \n    mutating func next() -> ArraySlice<UInt8>? {\n        let end = min(chunkSize, data.count - offset)\n        let result = data[offset..<offset + end]\n        offset += result.count\n        return result.count > 0 ? result : nil\n    }\n}\n\nstruct BytesSequence: Sequence {\n    let chunkSize: Int\n    let data: [UInt8]\n    \n    func makeIterator() -> BytesIterator {\n        return BytesIterator(chunkSize: chunkSize, data: data)\n    }\n}\n\nfunc rotateLeft(_ value: UInt32, bits: UInt32) -> UInt32 {\n    return ((value << bits) & 0xFFFFFFFF) | (value >> (32 - bits))\n}\n\nclass MD5: HashProtocol {\n    \n    static let size = 16 // 128 / 8\n    let message: [UInt8]\n    \n    init (_ message: [UInt8]) {\n        self.message = message\n    }\n    \n    /** specifies the per-round shift amounts */\n    private let shifts: [UInt32] = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,\n                                    5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,\n                                    4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,\n                                    6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]\n    \n    /** binary integer part of the sines of integers (Radians) */\n    private let sines: [UInt32] = [0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,\n                               0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,\n                               0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,\n                               0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,\n                               0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,\n                               0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,\n                               0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,\n                               0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,\n                               0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,\n                               0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,\n                               0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x4881d05,\n                               0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,\n                               0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,\n                               0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,\n                               0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,\n                               0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391]\n    \n    private let hashes: [UInt32] = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]\n    \n    func calculate() -> [UInt8] {\n        var tmpMessage = prepare(64)\n        tmpMessage.reserveCapacity(tmpMessage.count + 4)\n        \n        // hash values\n        var hh = hashes\n        \n        // Step 2. Append Length a 64-bit representation of lengthInBits\n        let lengthInBits = (message.count * 8)\n        let lengthBytes = lengthInBits.bytes(64 / 8)\n        tmpMessage += lengthBytes.reversed()\n\n        // Process the message in successive 512-bit chunks:\n        let chunkSizeBytes = 512 / 8 // 64\n\n        for chunk in BytesSequence(chunkSize: chunkSizeBytes, data: tmpMessage) {\n            // break chunk into sixteen 32-bit words M[j], 0 ≤ j ≤ 15\n            var M = toUInt32Array(chunk)\n            assert(M.count == 16, \"Invalid array\")\n            \n            // Initialize hash value for this chunk:\n            var A: UInt32 = hh[0]\n            var B: UInt32 = hh[1]\n            var C: UInt32 = hh[2]\n            var D: UInt32 = hh[3]\n            \n            var dTemp: UInt32 = 0\n            \n            // Main loop\n            for j in 0 ..< sines.count {\n                var g = 0\n                var F: UInt32 = 0\n                \n                switch j {\n                case 0...15:\n                    F = (B & C) | ((~B) & D)\n                    g = j\n                    break\n                case 16...31:\n                    F = (D & B) | (~D & C)\n                    g = (5 * j + 1) % 16\n                    break\n                case 32...47:\n                    F = B ^ C ^ D\n                    g = (3 * j + 5) % 16\n                    break\n                case 48...63:\n                    F = C ^ (B | (~D))\n                    g = (7 * j) % 16\n                    break\n                default:\n                    break\n                }\n                dTemp = D\n                D = C\n                C = B\n                B = B &+ rotateLeft((A &+ F &+ sines[j] &+ M[g]), bits: shifts[j])\n                A = dTemp\n            }\n            \n            hh[0] = hh[0] &+ A\n            hh[1] = hh[1] &+ B\n            hh[2] = hh[2] &+ C\n            hh[3] = hh[3] &+ D\n        }\n        \n        var result = [UInt8]()\n        result.reserveCapacity(hh.count / 4)\n        \n        hh.forEach {\n            let itemLE = $0.littleEndian\n            let r1 = UInt8(itemLE & 0xff)\n            let r2 = UInt8((itemLE >> 8) & 0xff)\n            let r3 = UInt8((itemLE >> 16) & 0xff)\n            let r4 = UInt8((itemLE >> 24) & 0xff)\n            result += [r1, r2, r3, r4]\n        }\n        return result\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/ThreadHelper.swift",
    "content": "//\n//  ThreadHelper.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/10/9.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport Foundation\n\nextension DispatchQueue {\n    // This method will dispatch the `block` to self.\n    // If `self` is the main queue, and current thread is main thread, the block\n    // will be invoked immediately instead of being dispatched.\n    func safeAsync(_ block: @escaping ()->()) {\n        if self === DispatchQueue.main && Thread.isMainThread {\n            block()\n        } else {\n            async { block() }\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/Kingfisher/Sources/UIButton+Kingfisher.swift",
    "content": "//\n//  UIButton+Kingfisher.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/13.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmail.com>\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions:\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport UIKit\n\n// MARK: - Set Images\n/**\n *\tSet image to use in button from web for a specified state.\n */\nextension Kingfisher where Base: UIButton {\n    /**\n     Set an image to use for a specified state with a resource, a placeholder image, options, progress handler and\n     completion handler.\n     \n     - parameter resource:          Resource object contains information such as `cacheKey` and `downloadURL`.\n     - parameter state:             The state that uses the specified image.\n     - parameter placeholder:       A placeholder image when retrieving the image at URL.\n     - parameter options:           A dictionary could control some behaviors. See `KingfisherOptionsInfo` for more.\n     - parameter progressBlock:     Called when the image downloading progress gets updated.\n     - parameter completionHandler: Called when the image retrieved and set.\n     \n     - returns: A task represents the retrieving process.\n     \n     - note: Both the `progressBlock` and `completionHandler` will be invoked in main thread.\n     The `CallbackDispatchQueue` specified in `optionsInfo` will not be used in callbacks of this method.\n     \n     If `resource` is `nil`, the `placeholder` image will be set and\n     `completionHandler` will be called with both `error` and `image` being `nil`.\n     */\n    @discardableResult\n    public func setImage(with resource: Resource?,\n                         for state: UIControlState,\n                         placeholder: UIImage? = nil,\n                         options: KingfisherOptionsInfo? = nil,\n                         progressBlock: DownloadProgressBlock? = nil,\n                         completionHandler: CompletionHandler? = nil) -> RetrieveImageTask\n    {\n        guard let resource = resource else {\n            base.setImage(placeholder, for: state)\n            setWebURL(nil, for: state)\n            completionHandler?(nil, nil, .none, nil)\n            return .empty\n        }\n        \n        let options = KingfisherManager.shared.defaultOptions + (options ?? KingfisherEmptyOptionsInfo)\n        if !options.keepCurrentImageWhileLoading {\n            base.setImage(placeholder, for: state)\n        }\n        \n        setWebURL(resource.downloadURL, for: state)\n        let task = KingfisherManager.shared.retrieveImage(\n            with: resource,\n            options: options,\n            progressBlock: { receivedSize, totalSize in\n                guard resource.downloadURL == self.webURL(for: state) else {\n                    return\n                }\n                if let progressBlock = progressBlock {\n                    progressBlock(receivedSize, totalSize)\n                }\n            },\n            completionHandler: {[weak base] image, error, cacheType, imageURL in\n                DispatchQueue.main.safeAsync {\n                    guard let strongBase = base, imageURL == self.webURL(for: state) else {\n                        completionHandler?(image, error, cacheType, imageURL)\n                        return\n                    }\n                    self.setImageTask(nil)\n                    if image != nil {\n                        strongBase.setImage(image, for: state)\n                    }\n\n                    completionHandler?(image, error, cacheType, imageURL)\n                }\n            })\n        \n        setImageTask(task)\n        return task\n    }\n    \n    /**\n     Cancel the image download task bounded to the image view if it is running.\n     Nothing will happen if the downloading has already finished.\n     */\n    public func cancelImageDownloadTask() {\n        imageTask?.cancel()\n    }\n    \n    /**\n     Set the background image to use for a specified state with a resource,\n     a placeholder image, options progress handler and completion handler.\n     \n     - parameter resource:          Resource object contains information such as `cacheKey` and `downloadURL`.\n     - parameter state:             The state that uses the specified image.\n     - parameter placeholder:       A placeholder image when retrieving the image at URL.\n     - parameter options:           A dictionary could control some behaviors. See `KingfisherOptionsInfo` for more.\n     - parameter progressBlock:     Called when the image downloading progress gets updated.\n     - parameter completionHandler: Called when the image retrieved and set.\n     \n     - returns: A task represents the retrieving process.\n     \n     - note: Both the `progressBlock` and `completionHandler` will be invoked in main thread.\n     The `CallbackDispatchQueue` specified in `optionsInfo` will not be used in callbacks of this method.\n     \n     If `resource` is `nil`, the `placeholder` image will be set and\n     `completionHandler` will be called with both `error` and `image` being `nil`.\n     */\n    @discardableResult\n    public func setBackgroundImage(with resource: Resource?,\n                                   for state: UIControlState,\n                                   placeholder: UIImage? = nil,\n                                   options: KingfisherOptionsInfo? = nil,\n                                   progressBlock: DownloadProgressBlock? = nil,\n                                   completionHandler: CompletionHandler? = nil) -> RetrieveImageTask\n    {\n        guard let resource = resource else {\n            base.setBackgroundImage(placeholder, for: state)\n            setBackgroundWebURL(nil, for: state)\n            completionHandler?(nil, nil, .none, nil)\n            return .empty\n        }\n        \n        let options = KingfisherManager.shared.defaultOptions + (options ?? KingfisherEmptyOptionsInfo)\n        if !options.keepCurrentImageWhileLoading {\n            base.setBackgroundImage(placeholder, for: state)\n        }\n        \n        setBackgroundWebURL(resource.downloadURL, for: state)\n        let task = KingfisherManager.shared.retrieveImage(\n            with: resource,\n            options: options,\n            progressBlock: { receivedSize, totalSize in\n                guard resource.downloadURL == self.backgroundWebURL(for: state) else {\n                    return\n                }\n                if let progressBlock = progressBlock {\n                    progressBlock(receivedSize, totalSize)\n                }\n            },\n            completionHandler: { [weak base] image, error, cacheType, imageURL in\n                DispatchQueue.main.safeAsync {\n                    guard let strongBase = base, imageURL == self.backgroundWebURL(for: state) else {\n                        completionHandler?(image, error, cacheType, imageURL)\n                        return\n                    }\n                    self.setBackgroundImageTask(nil)\n                    if image != nil {\n                        strongBase.setBackgroundImage(image, for: state)\n                    }\n                    completionHandler?(image, error, cacheType, imageURL)\n                }\n            })\n        \n        setBackgroundImageTask(task)\n        return task\n    }\n    \n    /**\n     Cancel the background image download task bounded to the image view if it is running.\n     Nothing will happen if the downloading has already finished.\n     */\n    public func cancelBackgroundImageDownloadTask() {\n        backgroundImageTask?.cancel()\n    }\n\n}\n\n// MARK: - Associated Object\nprivate var lastURLKey: Void?\nprivate var imageTaskKey: Void?\n\nextension Kingfisher where Base: UIButton {\n    /**\n     Get the image URL binded to this button for a specified state.\n     \n     - parameter state: The state that uses the specified image.\n     \n     - returns: Current URL for image.\n     */\n    public func webURL(for state: UIControlState) -> URL? {\n        return webURLs[NSNumber(value:state.rawValue)] as? URL\n    }\n    \n    fileprivate func setWebURL(_ url: URL?, for state: UIControlState) {\n        webURLs[NSNumber(value:state.rawValue)] = url\n    }\n    \n    fileprivate var webURLs: NSMutableDictionary {\n        var dictionary = objc_getAssociatedObject(base, &lastURLKey) as? NSMutableDictionary\n        if dictionary == nil {\n            dictionary = NSMutableDictionary()\n            setWebURLs(dictionary!)\n        }\n        return dictionary!\n    }\n    \n    fileprivate func setWebURLs(_ URLs: NSMutableDictionary) {\n        objc_setAssociatedObject(base, &lastURLKey, URLs, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n    }\n    \n    fileprivate var imageTask: RetrieveImageTask? {\n        return objc_getAssociatedObject(base, &imageTaskKey) as? RetrieveImageTask\n    }\n    \n    fileprivate func setImageTask(_ task: RetrieveImageTask?) {\n        objc_setAssociatedObject(base, &imageTaskKey, task, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n    }\n}\n\n\nprivate var lastBackgroundURLKey: Void?\nprivate var backgroundImageTaskKey: Void?\n\n\nextension Kingfisher where Base: UIButton {\n    /**\n     Get the background image URL binded to this button for a specified state.\n     \n     - parameter state: The state that uses the specified background image.\n     \n     - returns: Current URL for background image.\n     */\n    public func backgroundWebURL(for state: UIControlState) -> URL? {\n        return backgroundWebURLs[NSNumber(value:state.rawValue)] as? URL\n    }\n    \n    fileprivate func setBackgroundWebURL(_ url: URL?, for state: UIControlState) {\n        backgroundWebURLs[NSNumber(value:state.rawValue)] = url\n    }\n    \n    fileprivate var backgroundWebURLs: NSMutableDictionary {\n        var dictionary = objc_getAssociatedObject(base, &lastBackgroundURLKey) as? NSMutableDictionary\n        if dictionary == nil {\n            dictionary = NSMutableDictionary()\n            setBackgroundWebURLs(dictionary!)\n        }\n        return dictionary!\n    }\n    \n    fileprivate func setBackgroundWebURLs(_ URLs: NSMutableDictionary) {\n        objc_setAssociatedObject(base, &lastBackgroundURLKey, URLs, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n    }\n    \n    fileprivate var backgroundImageTask: RetrieveImageTask? {\n        return objc_getAssociatedObject(base, &backgroundImageTaskKey) as? RetrieveImageTask\n    }\n    \n    fileprivate func setBackgroundImageTask(_ task: RetrieveImageTask?) {\n        objc_setAssociatedObject(base, &backgroundImageTaskKey, task, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n    }\n}\n"
  },
  {
    "path": "Pods/Kommander/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 Intelygenz <alejandro.ruperez@intelygenz.com>\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": "Pods/Kommander/README.md",
    "content": "![Kommander](https://raw.githubusercontent.com/intelygenz/Kommander-iOS/master/Logo.png)\n\n[![Twitter](https://img.shields.io/badge/contact-@intelygenz-0FABFF.svg?style=flat)](http://twitter.com/intelygenz)\n[![Version](https://img.shields.io/cocoapods/v/Kommander.svg?style=flat)](http://cocoapods.org/pods/Kommander)\n[![License](https://img.shields.io/cocoapods/l/Kommander.svg?style=flat)](http://cocoapods.org/pods/Kommander)\n[![Platform](https://img.shields.io/cocoapods/p/Kommander.svg?style=flat)](http://cocoapods.org/pods/Kommander)\n[![Swift](https://img.shields.io/badge/Swift-4-orange.svg?style=flat)](https://swift.org)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![Swift Package Manager Compatible](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-4BC51D.svg?style=flat)](https://github.com/apple/swift-package-manager)\n[![Build Status](https://travis-ci.org/intelygenz/Kommander-iOS.svg?branch=master)](https://travis-ci.org/intelygenz/Kommander-iOS)\n[![Downloads](https://img.shields.io/cocoapods/dt/Kommander.svg)](http://cocoapods.org/pods/Kommander)\n\n**Kommander** is a Swift library to manage the task execution in different threads. Through the definition a simple but powerful concept, [**Kommand**](https://en.wikipedia.org/wiki/Command_pattern).\n\nInspired on the Java library [**Kommander**](https://github.com/Wokdsem/Kommander) from [**Wokdsem**](https://github.com/Wokdsem).\n\n\n![Kommander](https://raw.githubusercontent.com/intelygenz/Kommander-iOS/master/Kommander.png)\n\n## 🌟 Features\n\n- [x] Make kommand or multiple kommands\n- [x] Execute kommand or multiple kommands\n- [x] Cancel kommand or multiple kommands\n- [x] Retry kommand or multiple kommands\n- [x] Set kommand success block\n- [x] Set kommand error block\n- [x] Main thread dispatcher\n- [x] Current thread dispatcher\n- [x] Custom OperationQueue dispatcher\n- [x] Execute single or multiple Operation\n- [x] Execute sequential or concurrent blocks\n- [x] Execute DispatchWorkItem\n- [x] Kommand state\n- [x] watchOS compatible\n- [x] tvOS compatible\n- [x] macOS compatible\n- [x] Swift 3 version\n- [x] Swift 2 version\n- [x] Objective-C version\n\n## 📲 Installation\n\nKommander is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod 'Kommander'\n```\n\nFor Swift 3 compatibility use:\n\n```ruby\npod 'Kommander', '~> 0.7'\n```\n\nFor Swift 2 compatibility use:\n\n```ruby\npod 'Kommander', :git => 'https://github.com/intelygenz/Kommander-iOS.git', :tag => '0.3.0-swift2'\n```\n\nFor Objective-C compatibility use:\n\n```ruby\npod 'Kommander', :git => 'https://github.com/intelygenz/Kommander-iOS.git', :tag => '0.2.3-objc'\n```\n\n#### Or you can install it with [Carthage](https://github.com/Carthage/Carthage):\n\n```ogdl\ngithub \"intelygenz/Kommander-iOS\"\n```\n\n#### Or install it with [Swift Package Manager](https://swift.org/package-manager/):\n\n```swift\ndependencies: [\n    .Package(url: \"https://github.com/intelygenz/Kommander-iOS.git\")\n]\n```\n\n## 🐒 Usage\n\n#### Making, executing, cancelling and retrying Kommands:\n\n```swift\nKommander().makeKommand {\n    // Your code here\n}.execute()\n```\n\n```swift\nKommander().makeKommand {\n    // Your code here\n}.execute(after: .seconds(2))\n```\n\n```swift\nKommander().makeKommand {\n    return \"Your string\"\n}.onSuccess { yourString in\n    print(yourString)\n}.execute()\n```\n\n```swift\nKommander().makeKommand {\n    throw CocoaError(.featureUnsupported)\n}.onError({ error in\n    print(String(describing: error!))\n}).execute()\n```\n\n```swift\nlet kommand = Kommander().makeKommand { () -> Any? in\n    // Your code here\n}.onSuccess { result in\n    // Your success handling here\n}.onError({ error in\n    // Your error handling here\n}).execute()\n\nkommand.cancel()\n\nkommand.retry()\n```\n\n#### Creating Kommanders:\n\n```swift\nKommander(deliverer: Dispatcher = .current, executor: Dispatcher = .default)\n\nKommander(deliverer: Dispatcher = .current, name: String, qos: QualityOfService = .default, maxConcurrentOperationCount: Int = .default)\n```\n\n```swift\nKommander.main\n\nKommander.current\n\nKommander.default\n\nKommander.userInteractive\n\nKommander.userInitiated\n\nKommander.utility\n\nKommander.background\n```\n\n#### Creating Dispatchers:\n\n```swift\nCurrentDispatcher()\n\nMainDispatcher()\n\nDispatcher(name: String, qos: QualityOfService = .default, maxConcurrentOperationCount: Int = .default)\n```\n\n```swift\nDispatcher.main\n\nDispatcher.current\n\nDispatcher.default\n\nDispatcher.userInteractive\n\nDispatcher.userInitiated\n\nDispatcher.utility\n\nDispatcher.background\n```\n\n## ❤️ Etc.\n\n* Contributions are very welcome.\n* Attribution is appreciated (let's spread the word!), but not mandatory.\n\n## 👨‍💻 Authors\n\n[alexruperez](https://github.com/alexruperez), alejandro.ruperez@intelygenz.com\n\n[juantrias](https://github.com/juantrias), juan.trias@intelygenz.com\n\n[RobertoEstrada](https://github.com/RobertoEstrada), roberto.estrada@intelygenz.com\n\n## 👮‍♂️ License\n\nKommander is available under the MIT license. See the LICENSE file for more info.\n"
  },
  {
    "path": "Pods/Kommander/Source/CurrentDispatcher.swift",
    "content": "//\n//  CurrentDispatcher.swift\n//  Kommander\n//\n//  Created by Alejandro Ruperez Hernando on 30/1/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n//\n\nimport Foundation\n\n/// Current queue dispatcher\nopen class CurrentDispatcher: MainDispatcher {\n\n    /// Dispatcher instance with current OperationQueue\n    public override init() {\n        super.init()\n        if let currentOperationQueue = OperationQueue.current {\n            operationQueue = currentOperationQueue\n            if let underlyingQueue = currentOperationQueue.underlyingQueue {\n                dispatchQueue = underlyingQueue\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Pods/Kommander/Source/Dispatcher.swift",
    "content": "//\n//  Dispatcher.swift\n//  Kommander\n//\n//  Created by Alejandro Ruperez Hernando on 26/1/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n//\n\nimport Foundation\n\n/// Dispatcher\nopen class Dispatcher {\n\n    /// Dispatcher operation queue\n    final var operationQueue = OperationQueue()\n    /// Dispatcher dispatch queue\n    final var dispatchQueue = DispatchQueue(label: UUID().uuidString)\n\n    /// Main queue dispatcher\n    open static var main: Dispatcher { return MainDispatcher() }\n    /// Current queue dispatcher\n    open static var current: Dispatcher { return CurrentDispatcher() }\n    /// Dispatcher with default quality of service\n    open static var `default`: Dispatcher { return Dispatcher() }\n    /// Dispatcher with user interactive quality of service\n    open static var userInteractive: Dispatcher { return Dispatcher(qos: .userInteractive) }\n    /// Dispatcher with user initiated quality of service\n    open static var userInitiated: Dispatcher { return Dispatcher(qos: .userInitiated) }\n    /// Dispatcher with utility quality of service\n    open static var utility: Dispatcher { return Dispatcher(qos: .utility) }\n    /// Dispatcher with background quality of service\n    open static var background: Dispatcher { return Dispatcher(qos: .background) }\n\n    /// Dispatcher instance with custom OperationQueue\n    public init(name: String = UUID().uuidString, qos: QualityOfService = .default, maxConcurrentOperationCount: Int = OperationQueue.defaultMaxConcurrentOperationCount) {\n        operationQueue.name = name\n        operationQueue.qualityOfService = qos\n        operationQueue.maxConcurrentOperationCount = maxConcurrentOperationCount\n        dispatchQueue = DispatchQueue(label: name, qos: dispatchQoS(qos), attributes: .concurrent, autoreleaseFrequency: .inherit, target: operationQueue.underlyingQueue)\n    }\n\n    /// Execute Operation instance in OperationQueue\n    open func execute(_ operation: Operation) {\n        operationQueue.addOperation(operation)\n    }\n\n    /// Execute [Operation] instance collection in OperationQueue\n    open func execute(_ operations: [Operation], waitUntilFinished: Bool = false) {\n        operationQueue.addOperations(operations, waitUntilFinished: waitUntilFinished)\n    }\n\n    /// Execute block in priority queue\n    @discardableResult open func execute(_ block: @escaping () -> Void) -> Operation {\n        let blockOperation = BlockOperation(block: block)\n        execute(blockOperation)\n        return blockOperation\n    }\n\n    /// Execute [block] collection in priority queue (if possible) concurrently or sequentially\n    @discardableResult open func execute(_ blocks: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation] {\n        var lastOperation: Operation?\n        let operations = blocks.map { block -> Operation in\n            let blockOperation = BlockOperation(block: block)\n            if let lastOperation = lastOperation, !concurrent {\n                blockOperation.addDependency(lastOperation)\n            }\n            lastOperation = blockOperation\n            return blockOperation\n        }\n        execute(operations, waitUntilFinished: waitUntilFinished)\n        return operations\n    }\n\n    /// Execute block in DispatchQueue after delay\n    open func execute(after delay: DispatchTimeInterval, block: @escaping () -> Void) {\n        guard delay != .never else {\n            return\n        }\n        dispatchQueue.asyncAfter(deadline: .now() + delay, execute: block)\n    }\n\n    /// Execute DispatchWorkItem instance in DispatchQueue after delay\n    open func execute(after delay: DispatchTimeInterval, work: DispatchWorkItem) {\n        guard delay != .never else {\n            work.cancel()\n            return\n        }\n        dispatchQueue.asyncAfter(deadline: .now() + delay, execute: work)\n    }\n\n    /// Execute DispatchWorkItem instance in DispatchQueue\n    open func execute(_ work: DispatchWorkItem) {\n        dispatchQueue.async(execute: work)\n    }\n\n}\n\nprivate extension Dispatcher {\n\n    final func dispatchQoS(_ qos: QualityOfService) -> DispatchQoS {\n        switch qos {\n        case .userInteractive: return .userInteractive\n        case .userInitiated: return .userInitiated\n        case .utility: return .utility\n        case .background: return .background\n        default: return .default\n        }\n    }\n\n}\n"
  },
  {
    "path": "Pods/Kommander/Source/Kommand.swift",
    "content": "//\n//  Kommand.swift\n//  Kommander\n//\n//  Created by Alejandro Ruperez Hernando on 26/1/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n//\n\nimport Foundation\n\n/// Kommand<Result> state\npublic enum State {\n    /// Uninitialized state\n    case uninitialized\n    /// Ready state\n    case ready\n    /// Executing state\n    case running\n    /// Finished state\n    case finished\n    /// Cancelled state\n    case cancelled\n}\n\n/// Generic Kommand\nopen class Kommand<Result> {\n\n    /// Action block type\n    public typealias ActionBlock = () throws -> Result\n    /// Success block type\n    public typealias SuccessBlock = (_ result: Result) -> Void\n    /// Error block type\n    public typealias ErrorBlock = (_ error: Error?) -> Void\n\n    /// Kommand<Result> state\n    internal(set) public final var state = State.uninitialized\n\n    /// Deliverer\n    private final weak var deliverer: Dispatcher?\n    /// Executor\n    private final weak var executor: Dispatcher?\n    /// Action block\n    private(set) final var actionBlock: ActionBlock?\n    /// Success block\n    private(set) final var successBlock: SuccessBlock?\n    /// Error block\n    private(set) final var errorBlock: ErrorBlock?\n    /// Operation to cancel\n    internal(set) final weak var operation: Operation?\n\n    /// Kommand<Result> instance with deliverer, executor and actionBlock returning generic and throwing errors\n    public init(deliverer: Dispatcher = .current, executor: Dispatcher = .default, actionBlock: @escaping ActionBlock) {\n        self.deliverer = deliverer\n        self.executor = executor\n        self.actionBlock = actionBlock\n        state = .ready\n    }\n\n    /// Release all resources\n    deinit {\n        operation = nil\n        deliverer = nil\n        executor = nil\n        actionBlock = nil\n        successBlock = nil\n        errorBlock = nil\n    }\n\n    /// Specify Kommand<Result> success block\n    @discardableResult open func onSuccess(_ onSuccess: @escaping SuccessBlock) -> Self {\n        self.successBlock = onSuccess\n        return self\n    }\n\n    /// Specify Kommand<Result> error block\n    @discardableResult open func onError(_ onError: @escaping ErrorBlock) -> Self {\n        self.errorBlock = onError\n        return self\n    }\n\n    /// Execute Kommand<Result> after delay\n    @discardableResult open func execute(after delay: DispatchTimeInterval) -> Self {\n        executor?.execute(after: delay, block: { \n            self.execute()\n        })\n        return self\n    }\n\n    /// Execute Kommand<Result>\n    @discardableResult open func execute() -> Self {\n        guard state == .ready else {\n            return self\n        }\n        operation = executor?.execute {\n            do {\n                if let actionBlock = self.actionBlock {\n                    self.state = .running\n                    let result = try actionBlock()\n                    guard self.state == .running else {\n                        return\n                    }\n                    self.deliverer?.execute {\n                        self.state = .finished\n                        self.successBlock?(result)\n                    }\n                }\n            } catch {\n                guard self.state == .running else {\n                    return\n                }\n                self.deliverer?.execute {\n                    self.state = .finished\n                    self.errorBlock?(error)\n                }\n            }\n        }\n        return self\n    }\n\n    /// Cancel Kommand<Result> after delay\n    @discardableResult open func cancel(_ throwingError: Bool = false, after delay: DispatchTimeInterval) -> Self {\n        executor?.execute(after: delay, block: {\n            self.cancel(throwingError)\n        })\n        return self\n    }\n\n    /// Cancel Kommand<Result>\n    @discardableResult open func cancel(_ throwingError: Bool = false) -> Self {\n        guard state != .cancelled else {\n            return self\n        }\n        self.deliverer?.execute {\n            if throwingError {\n                self.errorBlock?(KommandCancelledError(self))\n            }\n        }\n        if let operation = operation, !operation.isFinished {\n            operation.cancel()\n        }\n        state = .cancelled\n        return self\n    }\n\n    /// Retry Kommand<Result> after delay\n    @discardableResult open func retry(after delay: DispatchTimeInterval) -> Self {\n        executor?.execute(after: delay, block: {\n            self.retry()\n        })\n        return self\n    }\n\n    /// Retry Kommand<Result>\n    @discardableResult open func retry() -> Self {\n        guard state == .cancelled else {\n            return self\n        }\n        state = .ready\n        return execute()\n    }\n\n}\n"
  },
  {
    "path": "Pods/Kommander/Source/KommandCancelledError.swift",
    "content": "//\n//  KommandCancelledError.swift\n//  Kommander\n//\n//  Created by Juan Trías on 27/10/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n//\n\nimport Foundation\n\npublic struct KommandCancelledError<Result>: RecoverableError {\n\n    private let kommand: Kommand<Result>\n\n    init(_ kommand: Kommand<Result>) {\n        self.kommand = kommand\n    }\n\n    public var recoveryOptions: [String] {\n        return [\"Retry the Kommand\"]\n    }\n\n    public func attemptRecovery(optionIndex recoveryOptionIndex: Int) -> Bool {\n        guard kommand.state == .cancelled else {\n            return false\n        }\n        kommand.retry()\n        return true\n    }\n\n}\n"
  },
  {
    "path": "Pods/Kommander/Source/Kommander.h",
    "content": "//\n//  Kommander.h\n//  Kommander\n//\n//  Created by Alejandro Ruperez Hernando on 26/1/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n//\n\n@import Foundation;\n\n//! Project version number for Kommander.\nFOUNDATION_EXPORT double KommanderVersionNumber;\n\n//! Project version string for Kommander.\nFOUNDATION_EXPORT const unsigned char KommanderVersionString[];\n"
  },
  {
    "path": "Pods/Kommander/Source/Kommander.swift",
    "content": "//\n//  Kommander.swift\n//  Kommander\n//\n//  Created by Alejandro Ruperez Hernando on 26/1/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n//\n\nimport Foundation\n\n/// Kommander manager\nopen class Kommander {\n\n    /// Deliverer\n    final let deliverer: Dispatcher\n    /// Executor\n    final let executor: Dispatcher\n\n    /// Kommander instance with CurrentDispatcher deliverer and MainDispatcher executor\n    open static var main: Kommander { return Kommander(executor: .main) }\n    /// Kommander instance with CurrentDispatcher deliverer and CurrentDispatcher executor\n    open static var current: Kommander { return Kommander(executor: .current) }\n    /// Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with default quality of service\n    open static var `default`: Kommander { return Kommander() }\n    /// Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user interactive quality of service\n    open static var userInteractive: Kommander { return Kommander(executor: .userInteractive) }\n    /// Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user initiated quality of service\n    open static var userInitiated: Kommander { return Kommander(executor: .userInitiated) }\n    /// Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with utility quality of service\n    open static var utility: Kommander { return Kommander(executor: .utility) }\n    /// Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with background quality of service\n    open static var background: Kommander { return Kommander(executor: .background) }\n\n    /// Kommander instance with deliverer and executor\n    public init(deliverer: Dispatcher = .current, executor: Dispatcher = .default) {\n        self.deliverer = deliverer\n        self.executor = executor\n    }\n\n    /// Kommander instance with deliverer and custom OperationQueue executor\n    public init(deliverer: Dispatcher = .current, name: String = UUID().uuidString, qos: QualityOfService = .default, maxConcurrentOperationCount: Int = OperationQueue.defaultMaxConcurrentOperationCount) {\n        self.deliverer = deliverer\n        executor = Dispatcher(name: name, qos: qos, maxConcurrentOperationCount: maxConcurrentOperationCount)\n    }\n\n    /// Build Kommand<Result> instance with an actionBlock returning generic and throwing errors\n    open func makeKommand<Result>(_ actionBlock: @escaping () throws -> Result) -> Kommand<Result> {\n        return Kommand<Result>(deliverer: deliverer, executor: executor, actionBlock: actionBlock)\n    }\n\n    /// Build [Kommand<Result>] instances collection with actionBlocks returning generic and throwing errors\n    open func makeKommands<Result>(_ actionBlocks: [() throws -> Result]) -> [Kommand<Result>] {\n        var kommands = [Kommand<Result>]()\n        for actionBlock in actionBlocks {\n            kommands.append(Kommand<Result>(deliverer: deliverer, executor: executor, actionBlock: actionBlock))\n        }\n        return kommands\n    }\n\n    /// Execute [Kommand<Result>] instances collection concurrently or sequentially after delay\n    open func execute<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval) {\n        executor.execute(after: delay) { \n            self.execute(kommands, concurrent: concurrent, waitUntilFinished: waitUntilFinished)\n        }\n    }\n\n    /// Execute [Kommand<Result>] instances collection concurrently or sequentially\n    open func execute<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false) {\n        let executionBlocks = kommands.map { kommand in\n            executionBlock(kommand)\n        }\n        let operations = executor.execute(executionBlocks, concurrent: concurrent, waitUntilFinished: waitUntilFinished)\n        for (index, kommand) in kommands.enumerated() {\n            kommand.operation = operations[index]\n        }\n    }\n\n    /// Cancel [Kommand<Result>] instances collection after delay\n    open func cancel<Result>(_ kommands: [Kommand<Result>], throwingError: Bool = false, after delay: DispatchTimeInterval) {\n        executor.execute(after: delay) {\n            self.cancel(kommands, throwingError: throwingError)\n        }\n    }\n\n    /// Cancel [Kommand<Result>] instances collection\n    open func cancel<Result>(_ kommands: [Kommand<Result>], throwingError: Bool = false) {\n        for kommand in kommands {\n            kommand.cancel(throwingError)\n        }\n    }\n\n    /// Retry [Kommand<Result>] instances collection after delay\n    open func retry<Result>(_ kommands: [Kommand<Result>], after delay: DispatchTimeInterval) {\n        executor.execute(after: delay) {\n            self.retry(kommands)\n        }\n    }\n\n    /// Retry [Kommand<Result>] instances collection\n    open func retry<Result>(_ kommands: [Kommand<Result>]) {\n        for kommand in kommands {\n            kommand.retry()\n        }\n    }\n\n}\n\nprivate extension Kommander {\n\n    final func executionBlock<Result>(_ kommand: Kommand<Result>) -> () -> Void {\n        return {\n            guard kommand.state == .ready else {\n                return\n            }\n            do {\n                if let actionBlock = kommand.actionBlock {\n                    kommand.state = .running\n                    let result = try actionBlock()\n                    guard kommand.state == .running else {\n                        return\n                    }\n                    self.deliverer.execute {\n                        kommand.state = .finished\n                        kommand.successBlock?(result)\n                    }\n                }\n            } catch {\n                guard kommand.state == .running else {\n                    return\n                }\n                self.deliverer.execute {\n                    kommand.state = .finished\n                    kommand.errorBlock?(error)\n                }\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Pods/Kommander/Source/MainDispatcher.swift",
    "content": "//\n//  MainDispatcher.swift\n//  Kommander\n//\n//  Created by Alejandro Ruperez Hernando on 30/1/17.\n//  Copyright © 2017 Intelygenz. All rights reserved.\n//\n\nimport Foundation\n\n/// Main queue dispatcher\nopen class MainDispatcher: Dispatcher {\n\n    /// Dispatcher instance with main OperationQueue\n    public init() {\n        super.init()\n        operationQueue = OperationQueue.main\n        dispatchQueue = DispatchQueue.main\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/Net.h",
    "content": "//\n//  Net.h\n//  Net\n//\n//  Created by Alex Rupérez on 16/3/17.\n//\n//\n\n@import Foundation;\n\n//! Project version number for Net.\nFOUNDATION_EXPORT double NetVersionNumber;\n\n//! Project version string for Net.\nFOUNDATION_EXPORT const unsigned char NetVersionString[];\n"
  },
  {
    "path": "Pods/NetClient/Core/Net.swift",
    "content": "//\n//  Net.swift\n//  Net\n//\n//  Created by Alex Rupérez on 22/3/17.\n//\n//\n\nimport Foundation\n\npublic typealias RequestInterceptor = (NetRequest.Builder) -> NetRequest.Builder\n\npublic typealias ResponseInterceptor = (NetResponse.Builder) -> NetResponse.Builder\n\npublic protocol Net: class {\n\n    static var shared: Net { get }\n\n    var requestInterceptors: [RequestInterceptor] { get set }\n\n    var responseInterceptors: [ResponseInterceptor] { get set }\n\n    var retryClosure: NetTask.RetryClosure? { get set }\n\n    func addRequestInterceptor(_ interceptor: @escaping RequestInterceptor)\n\n    func addResponseInterceptor(_ interceptor: @escaping ResponseInterceptor)\n\n    func data(_ request: NetRequest) -> NetTask\n\n    func download(_ resumeData: Data) -> NetTask\n\n    func download(_ request: NetRequest) -> NetTask\n\n    func upload(_ streamedRequest: NetRequest) -> NetTask\n\n    func upload(_ request: NetRequest, data: Data) -> NetTask\n\n    func upload(_ request: NetRequest, fileURL: URL) -> NetTask\n\n    #if !os(watchOS)\n    @available(iOS 9.0, OSX 10.11, *)\n    func stream(_ netService: NetService) -> NetTask\n\n    @available(iOS 9.0, OSX 10.11, *)\n    func stream(_ domain: String, type: String, name: String, port: Int32?) -> NetTask\n\n    @available(iOS 9.0, OSX 10.11, *)\n    func stream(_ hostName: String, port: Int) -> NetTask\n    #endif\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetAuthorization.swift",
    "content": "//\n//  NetAuthorization.swift\n//  Net\n//\n//  Created by Alex Rupérez on 26/3/17.\n//\n//\n\nimport Foundation\n\npublic enum NetAuthorization {\n    case none, basic(user: String, password: String), bearer(token: String), custom(String)\n}\n\nextension NetAuthorization: Equatable {}\n\nextension NetAuthorization: RawRepresentable {\n\n    private struct StringValue {\n        static let basic = \"Basic \"\n        static let bearer = \"Bearer \"\n    }\n\n    public typealias RawValue = String\n\n    public init(rawValue: RawValue) {\n        self = .none\n        if rawValue.hasPrefix(StringValue.basic) {\n            let base64EncodedString = \"\\(rawValue[StringValue.basic.endIndex...])\"\n            if let authorizationData = Data(base64Encoded: base64EncodedString) {\n                let authorizationComponents = String(data: authorizationData, encoding: .utf8)?.components(separatedBy: \":\")\n                if let user: String = authorizationComponents?.first, let password: String = authorizationComponents?.last {\n                    self = .basic(user: user, password: password)\n                }\n            }\n        } else if rawValue.hasPrefix(StringValue.bearer) {\n            self = .bearer(token: \"\\(rawValue[StringValue.bearer.endIndex...])\")\n        } else if rawValue.count > 0 {\n            self = .custom(rawValue)\n        }\n    }\n\n    public var rawValue: RawValue {\n        switch self {\n            case .basic(let user, let password):\n                let data = \"\\(user):\\(password)\".data(using: .utf8)!\n                return \"\\(StringValue.basic)\\(data.base64EncodedString())\"\n            case .bearer(let token):\n                return \"\\(StringValue.bearer)\\(token)\"\n            case .custom(let authorization):\n                return authorization\n            default:\n                return \"\"\n        }\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetCacheControl.swift",
    "content": "//\n//  NetCacheControl.swift\n//  Net\n//\n//  Created by Alex Rupérez on 23/3/17.\n//\n//\n\nimport Foundation\n\npublic enum NetCacheControl {\n    case maxAge(TimeInterval), maxStale(TimeInterval?), minFresh(TimeInterval), noCache, noStore, noTransform, onlyIfCached, custom(String)\n}\n\nextension NetCacheControl: Equatable {}\n\nextension NetCacheControl: RawRepresentable {\n\n    private struct StringValue {\n        static let maxAge = \"max-age\"\n        static let maxStale = \"max-stale\"\n        static let minFresh = \"min-fresh\"\n        static let noCache = \"no-cache\"\n        static let noStore = \"no-store\"\n        static let noTransform = \"no-transform\"\n        static let onlyIfCached = \"only-if-cached\"\n    }\n\n    public typealias RawValue = String\n\n    public init(rawValue: RawValue) {\n        if rawValue.hasPrefix(StringValue.maxAge), let timeInterval = TimeInterval(rawValue[rawValue.index(StringValue.maxAge.endIndex, offsetBy: 1)...]) {\n            self = .maxAge(timeInterval)\n        } else if rawValue.hasPrefix(StringValue.maxStale) {\n            if rawValue.count > StringValue.maxStale.count + 1 {\n                self = .maxStale(TimeInterval(rawValue[rawValue.index(StringValue.maxStale.endIndex, offsetBy: 1)...]))\n            } else {\n                self = .maxStale(nil)\n            }\n        } else if rawValue.hasPrefix(StringValue.minFresh), let timeInterval = TimeInterval(rawValue[rawValue.index(StringValue.minFresh.endIndex, offsetBy: 1)...]) {\n            self = .minFresh(timeInterval)\n        } else if rawValue == StringValue.noCache {\n            self = .noCache\n        } else if rawValue == StringValue.noStore {\n            self = .noStore\n        } else if rawValue == StringValue.noTransform {\n            self = .noTransform\n        } else if rawValue == StringValue.onlyIfCached {\n            self = .onlyIfCached\n        } else {\n            self = .custom(rawValue)\n        }\n    }\n\n    public var rawValue: RawValue {\n        switch self {\n        case .maxAge(let timeInterval):\n            guard let intValue = Int(exactly: Double(timeInterval)) else {\n                return \"\\(StringValue.maxAge)=\\(timeInterval)\"\n            }\n            return \"\\(StringValue.maxAge)=\\(intValue)\"\n        case .maxStale(let timeInterval):\n            guard let timeInterval = timeInterval else {\n                return StringValue.maxStale\n            }\n            guard let intValue = Int(exactly: Double(timeInterval)) else {\n                return \"\\(StringValue.maxStale)=\\(timeInterval)\"\n            }\n            return \"\\(StringValue.maxStale)=\\(intValue)\"\n        case .minFresh(let timeInterval):\n            guard let intValue = Int(exactly: Double(timeInterval)) else {\n                return \"\\(StringValue.minFresh)=\\(timeInterval)\"\n            }\n            return \"\\(StringValue.minFresh)=\\(intValue)\"\n        case .noCache:\n            return StringValue.noCache\n        case .noStore:\n            return StringValue.noStore\n        case .noTransform:\n            return StringValue.noTransform\n        case .onlyIfCached:\n            return StringValue.onlyIfCached\n        case .custom(let cacheControl):\n            return cacheControl\n        }\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetContentType.swift",
    "content": "//\n//  NetContentType.swift\n//  Net\n//\n//  Created by Alex Rupérez on 23/3/17.\n//\n//\n\nimport Foundation\n\npublic enum NetContentType {\n    case aac, avi, bin, bmp, csv, form, formURL, gif, html, ico, ics, jpeg, js, json, mpeg, mpkg, ogx, pdf, pkcs7, plist, png, rar, rtf, svg, tar, tiff, ttf, txt, wav, weba, webm, webp, wildcard, xhtml, xml, zip, custom(String)\n}\n\nextension NetContentType: RawRepresentable {\n\n    private struct StringValue {\n        static let aac = \"audio/aac\"\n        static let avi = \"video/x-msvideo\"\n        static let bin = \"application/octet-stream\"\n        static let bmp = \"image/bmp\"\n        static let csv = \"text/csv\"\n        static let form = \"multipart/form-data\"\n        static let formURL = \"application/x-www-form-urlencoded\"\n        static let gif = \"image/gif\"\n        static let html = \"text/html\"\n        static let ico = \"image/x-icon\"\n        static let ics = \"text/calendar\"\n        static let jpeg = \"image/jpeg\"\n        static let js = \"application/javascript\"\n        static let json = \"application/json\"\n        static let mpeg = \"video/mpeg\"\n        static let mpkg = \"application/vnd.apple.installer+xml\"\n        static let ogx = \"application/ogg\"\n        static let pdf = \"application/pdf\"\n        static let pkcs7 = \"application/pkcs7-mime\"\n        static let plist = \"application/x-plist\"\n        static let png = \"image/png\"\n        static let rar = \"application/x-rar-compressed\"\n        static let rtf = \"application/rtf\"\n        static let svg = \"image/svg+xml\"\n        static let tar = \"application/x-tar\"\n        static let tiff = \"image/tiff\"\n        static let ttf = \"font/ttf\"\n        static let txt = \"text/plain\"\n        static let wav = \"audio/x-wav\"\n        static let weba = \"audio/webm\"\n        static let webm = \"video/webm\"\n        static let webp = \"image/webp\"\n        static let wildcard = \"*/*\"\n        static let xhtml = \"application/xhtml+xml\"\n        static let xml = \"application/xml\"\n        static let zip = \"application/zip\"\n    }\n\n    public typealias RawValue = String\n\n    public init(rawValue: RawValue) {\n        switch rawValue {\n            case StringValue.aac: self = .aac\n            case StringValue.avi: self = .avi\n            case StringValue.bin: self = .bin\n            case StringValue.bmp: self = .bmp\n            case StringValue.csv: self = .csv\n            case StringValue.form: self = .form\n            case StringValue.formURL: self = .formURL\n            case StringValue.gif: self = .gif\n            case StringValue.html: self = .html\n            case StringValue.ico: self = .ico\n            case StringValue.ics: self = .ics\n            case StringValue.jpeg: self = .jpeg\n            case StringValue.js: self = .js\n            case StringValue.json: self = .json\n            case StringValue.mpeg: self = .mpeg\n            case StringValue.mpkg: self = .mpkg\n            case StringValue.ogx: self = .ogx\n            case StringValue.pdf: self = .pdf\n            case StringValue.pkcs7: self = .pkcs7\n            case StringValue.plist: self = .plist\n            case StringValue.png: self = .png\n            case StringValue.rar: self = .rar\n            case StringValue.rtf: self = .rtf\n            case StringValue.svg: self = .svg\n            case StringValue.tar: self = .tar\n            case StringValue.tiff: self = .tiff\n            case StringValue.ttf: self = .ttf\n            case StringValue.txt: self = .txt\n            case StringValue.wav: self = .wav\n            case StringValue.weba: self = .weba\n            case StringValue.webm: self = .webm\n            case StringValue.webp: self = .webp\n            case StringValue.wildcard: self = .wildcard\n            case StringValue.xhtml: self = .xhtml\n            case StringValue.xml: self = .xml\n            case StringValue.zip: self = .zip\n            default: self = .custom(rawValue)\n        }\n    }\n\n    public var rawValue: RawValue {\n        switch self {\n            case .aac: return StringValue.aac\n            case .avi: return StringValue.avi\n            case .bin: return StringValue.bin\n            case .bmp: return StringValue.bmp\n            case .csv: return StringValue.csv\n            case .form: return StringValue.form\n            case .formURL: return StringValue.formURL\n            case .gif: return StringValue.gif\n            case .html: return StringValue.html\n            case .ico: return StringValue.ico\n            case .ics: return StringValue.ics\n            case .jpeg: return StringValue.jpeg\n            case .js: return StringValue.js\n            case .json: return StringValue.json\n            case .mpeg: return StringValue.mpeg\n            case .mpkg: return StringValue.mpkg\n            case .ogx: return StringValue.ogx\n            case .pdf: return StringValue.pdf\n            case .pkcs7: return StringValue.pkcs7\n            case .plist: return StringValue.plist\n            case .png: return StringValue.png\n            case .rar: return StringValue.rar\n            case .rtf: return StringValue.rtf\n            case .svg: return StringValue.svg\n            case .tar: return StringValue.tar\n            case .tiff: return StringValue.tiff\n            case .ttf: return StringValue.ttf\n            case .txt: return StringValue.txt\n            case .wav: return StringValue.wav\n            case .weba: return StringValue.weba\n            case .webm: return StringValue.webm\n            case .webp: return StringValue.webp\n            case .wildcard: return StringValue.wildcard\n            case .xhtml: return StringValue.xhtml\n            case .xml: return StringValue.xml\n            case .zip: return StringValue.zip\n            case .custom(let contentType): return contentType\n        }\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetError.swift",
    "content": "//\n//  NetError.swift\n//  Net\n//\n//  Created by Alex Rupérez on 22/3/17.\n//\n//\n\nimport Foundation\n\npublic enum NetError: Error {\n    case net(code: Int?, message: String, headers: [AnyHashable : Any]?, object: Any?, underlying: Error?),\n    parse(code: Int?, message: String, object: Any?, underlying: Error?)\n}\n\nextension NetError {\n\n    public func object<T>() throws -> T {\n        switch self {\n        case .net(let code, _, _, let object, let underlying):\n            return try objectTransformation(code, object, underlying)\n        case .parse(let code, _, let object, let underlying):\n            return try objectTransformation(code, object, underlying)\n        }\n    }\n\n    public func decode<T: Decodable>() throws -> T {\n        switch self {\n        case .net(let code, _, _, let object, let underlying):\n            return try decodeTransformation(code, object, underlying)\n        case .parse(let code, _, let object, let underlying):\n            return try decodeTransformation(code, object, underlying)\n        }\n    }\n\n    private func objectTransformation<T>(_ code: Int? = nil, _ object: Any? = nil, _ underlying: Error? = nil) throws -> T {\n        do {\n            return try NetTransformer.object(object: object)\n        } catch {\n            throw handle(error, code, underlying)\n        }\n    }\n\n    private func decodeTransformation<T: Decodable>(_ code: Int? = nil, _ object: Any? = nil, _ underlying: Error? = nil) throws -> T {\n        do {\n            return try NetTransformer.decode(object: object)\n        } catch {\n            throw handle(error, code, underlying)\n        }\n    }\n\n    private func handle(_ error: Error, _ code: Int? = nil, _ underlying: Error? = nil) -> Error {\n        switch error as! NetError {\n        case .parse(let transformCode, let message, let object, let transformUnderlying):\n            return NetError.parse(code: transformCode ?? code, message: message, object: object, underlying: transformUnderlying ?? underlying)\n        default:\n            return error\n        }\n    }\n    \n}\n\nextension NetError {\n\n    public var localizedDescription: String {\n        switch self {\n        case .net(_, let message, _, _, let underlying), .parse(_, let message, _, let underlying):\n            if let localizedDescription = underlying?.localizedDescription, localizedDescription != message {\n                return message + \" \" + localizedDescription\n            }\n            return message\n        }\n    }\n\n}\n\nextension NetError: CustomStringConvertible {\n\n    public var description: String {\n        return localizedDescription\n    }\n\n}\n\nextension NetError: CustomDebugStringConvertible {\n\n    public var debugDescription: String {\n        switch self {\n        case .net(let code, _, _, _, _), .parse(let code, _, _, _):\n            if let code = code?.description {\n                return code + \" \" + localizedDescription\n            }\n            return localizedDescription\n        }\n    }\n    \n}\n\nextension NetError: CustomNSError {\n\n    public var errorCode: Int {\n        switch self {\n        case .net(let code, _, _, _, _):\n            return code ?? 0\n        case .parse(let code, _, _, _):\n            return code ?? 1\n        }\n    }\n\n    public var errorUserInfo: [String : Any] {\n        switch self {\n        case .net(_, let message, _, _, let underlying), .parse(_, let message, _, let underlying):\n            guard let underlying = underlying else {\n                return [NSLocalizedDescriptionKey: localizedDescription, NSLocalizedFailureReasonErrorKey: message]\n            }\n            return [NSLocalizedDescriptionKey: localizedDescription, NSLocalizedFailureReasonErrorKey: message, NSUnderlyingErrorKey: underlying]\n        }\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetMultipartFormData.swift",
    "content": "//\n//  NetMultipartFormData.swift\n//  Net\n//\n//  Created by Alex Rupérez on 27/4/17.\n//\n//\n\nimport Foundation\n\n#if os(iOS) || os(watchOS) || os(tvOS)\nimport MobileCoreServices\n#elseif os(macOS)\nimport CoreServices\n#endif\n\npublic class NetMultipartFormData {\n\n    struct EncodingCharacters {\n        static let crlf = \"\\r\\n\"\n    }\n\n    struct BoundaryGenerator {\n        enum BoundaryType {\n            case initial, encapsulated, final\n        }\n\n        static func randomBoundary() -> String {\n            return String(format: \"net.boundary.%08x%08x\", arc4random(), arc4random())\n        }\n\n        static func boundaryData(forBoundaryType boundaryType: BoundaryType, boundary: String) -> Data {\n            let boundaryText: String\n\n            switch boundaryType {\n            case .initial:\n                boundaryText = \"--\\(boundary)\\(EncodingCharacters.crlf)\"\n            case .encapsulated:\n                boundaryText = \"\\(EncodingCharacters.crlf)--\\(boundary)\\(EncodingCharacters.crlf)\"\n            case .final:\n                boundaryText = \"\\(EncodingCharacters.crlf)--\\(boundary)--\\(EncodingCharacters.crlf)\"\n            }\n\n            return boundaryText.data(using: String.Encoding.utf8, allowLossyConversion: false)!\n        }\n    }\n\n    class BodyPart {\n        let headers: [String : String]\n        let bodyStream: InputStream\n        let bodyContentLength: UInt64\n        var hasInitialBoundary = false\n        var hasFinalBoundary = false\n\n        init(headers: [String : String], bodyStream: InputStream, bodyContentLength: UInt64) {\n            self.headers = headers\n            self.bodyStream = bodyStream\n            self.bodyContentLength = bodyContentLength\n        }\n    }\n\n    /// The `Content-Type` header value containing the boundary used to generate the `multipart/form-data`.\n    open var contentType: String { return \"multipart/form-data; boundary=\\(boundary)\" }\n\n    /// The content length of all body parts used to generate the `multipart/form-data` not including the boundaries.\n    public var contentLength: UInt64 { return bodyParts.reduce(0) { $0 + $1.bodyContentLength } }\n\n    /// The boundary used to separate the body parts in the encoded form data.\n    public let boundary: String\n\n    private var bodyParts: [BodyPart]\n    private var bodyPartError: NetError?\n    private let streamBufferSize: Int\n\n    /// Creates a multipart form data object.\n    ///\n    /// - returns: The multipart form data object.\n    public init() {\n        self.boundary = BoundaryGenerator.randomBoundary()\n        self.bodyParts = []\n        self.streamBufferSize = 1024\n    }\n\n    /// Creates a body part from the data and appends it to the multipart form data object.\n    ///\n    /// The body part data will be encoded using the following format:\n    ///\n    /// - `Content-Disposition: form-data; name=#{name}` (HTTP Header)\n    /// - Encoded data\n    /// - Multipart form boundary\n    ///\n    /// - parameter data: The data to encode into the multipart form data.\n    /// - parameter name: The name to associate with the data in the `Content-Disposition` HTTP header.\n    public func append(_ data: Data, withName name: String) {\n        let headers = contentHeaders(withName: name)\n        let stream = InputStream(data: data)\n        let length = UInt64(data.count)\n\n        append(stream, withLength: length, headers: headers)\n    }\n\n    /// Creates a body part from the data and appends it to the multipart form data object.\n    ///\n    /// The body part data will be encoded using the following format:\n    ///\n    /// - `Content-Disposition: form-data; name=#{name}` (HTTP Header)\n    /// - `Content-Type: #{generated mimeType}` (HTTP Header)\n    /// - Encoded data\n    /// - Multipart form boundary\n    ///\n    /// - parameter data:     The data to encode into the multipart form data.\n    /// - parameter name:     The name to associate with the data in the `Content-Disposition` HTTP header.\n    /// - parameter mimeType: The MIME type to associate with the data content type in the `Content-Type` HTTP header.\n    public func append(_ data: Data, withName name: String, mimeType: String) {\n        let headers = contentHeaders(withName: name, mimeType: mimeType)\n        let stream = InputStream(data: data)\n        let length = UInt64(data.count)\n\n        append(stream, withLength: length, headers: headers)\n    }\n\n    /// Creates a body part from the data and appends it to the multipart form data object.\n    ///\n    /// The body part data will be encoded using the following format:\n    ///\n    /// - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header)\n    /// - `Content-Type: #{mimeType}` (HTTP Header)\n    /// - Encoded file data\n    /// - Multipart form boundary\n    ///\n    /// - parameter data:     The data to encode into the multipart form data.\n    /// - parameter name:     The name to associate with the data in the `Content-Disposition` HTTP header.\n    /// - parameter fileName: The filename to associate with the data in the `Content-Disposition` HTTP header.\n    /// - parameter mimeType: The MIME type to associate with the data in the `Content-Type` HTTP header.\n    public func append(_ data: Data, withName name: String, fileName: String, mimeType: String) {\n        let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType)\n        let stream = InputStream(data: data)\n        let length = UInt64(data.count)\n\n        append(stream, withLength: length, headers: headers)\n    }\n\n    /// Creates a body part from the file and appends it to the multipart form data object.\n    ///\n    /// The body part data will be encoded using the following format:\n    ///\n    /// - `Content-Disposition: form-data; name=#{name}; filename=#{generated filename}` (HTTP Header)\n    /// - `Content-Type: #{generated mimeType}` (HTTP Header)\n    /// - Encoded file data\n    /// - Multipart form boundary\n    ///\n    /// The filename in the `Content-Disposition` HTTP header is generated from the last path component of the\n    /// `fileURL`. The `Content-Type` HTTP header MIME type is generated by mapping the `fileURL` extension to the\n    /// system associated MIME type.\n    ///\n    /// - parameter fileURL: The URL of the file whose content will be encoded into the multipart form data.\n    /// - parameter name:    The name to associate with the file content in the `Content-Disposition` HTTP header.\n    public func append(_ fileURL: URL, withName name: String) {\n        let fileName = fileURL.lastPathComponent\n        let pathExtension = fileURL.pathExtension\n\n        if !fileName.isEmpty && !pathExtension.isEmpty {\n            let mime = mimeType(forPathExtension: pathExtension)\n            append(fileURL, withName: name, fileName: fileName, mimeType: mime)\n        } else {\n            setBodyPartError(\"Body part filename is invalid.\", object: fileURL, underlying: URLError(.fileDoesNotExist))\n        }\n    }\n\n    /// Creates a body part from the file and appends it to the multipart form data object.\n    ///\n    /// The body part data will be encoded using the following format:\n    ///\n    /// - Content-Disposition: form-data; name=#{name}; filename=#{filename} (HTTP Header)\n    /// - Content-Type: #{mimeType} (HTTP Header)\n    /// - Encoded file data\n    /// - Multipart form boundary\n    ///\n    /// - parameter fileURL:  The URL of the file whose content will be encoded into the multipart form data.\n    /// - parameter name:     The name to associate with the file content in the `Content-Disposition` HTTP header.\n    /// - parameter fileName: The filename to associate with the file content in the `Content-Disposition` HTTP header.\n    /// - parameter mimeType: The MIME type to associate with the file content in the `Content-Type` HTTP header.\n    public func append(_ fileURL: URL, withName name: String, fileName: String, mimeType: String) {\n        let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType)\n\n        guard fileURL.isFileURL else {\n            setBodyPartError(\"Body part URL is invalid.\", object: fileURL, underlying: URLError(.badURL))\n            return\n        }\n\n        do {\n            let isReachable = try fileURL.checkPromisedItemIsReachable()\n            guard isReachable else {\n                setBodyPartError(\"Body part file not reachable.\", object: fileURL, underlying: URLError(.cannotOpenFile))\n                return\n            }\n        } catch {\n            setBodyPartError(\"Body part file not reachable.\", object: fileURL, underlying: error)\n            return\n        }\n\n        var isDirectory: ObjCBool = false\n        let path = fileURL.path\n\n        guard FileManager.default.fileExists(atPath: path, isDirectory: &isDirectory) && !isDirectory.boolValue else {\n            setBodyPartError(\"Body part file is directory.\", object: fileURL, underlying: URLError(.fileIsDirectory))\n            return\n        }\n\n        let bodyContentLength: UInt64\n\n        do {\n            guard let fileSize = try FileManager.default.attributesOfItem(atPath: path)[.size] as? NSNumber else {\n                setBodyPartError(\"Body part file size not available.\", object: fileURL, underlying: URLError(.noPermissionsToReadFile))\n                return\n            }\n\n            bodyContentLength = fileSize.uint64Value\n        } catch {\n            setBodyPartError(\"Body part file size query failed.\", object: fileURL, underlying: error)\n            return\n        }\n\n        guard let stream = InputStream(url: fileURL) else {\n            setBodyPartError(\"Body part input stream creation failed.\", object: fileURL, underlying: URLError(.cannotCreateFile))\n            return\n        }\n\n        append(stream, withLength: bodyContentLength, headers: headers)\n    }\n\n    /// Creates a body part from the stream and appends it to the multipart form data object.\n    ///\n    /// The body part data will be encoded using the following format:\n    ///\n    /// - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header)\n    /// - `Content-Type: #{mimeType}` (HTTP Header)\n    /// - Encoded stream data\n    /// - Multipart form boundary\n    ///\n    /// - parameter stream:   The input stream to encode in the multipart form data.\n    /// - parameter length:   The content length of the stream.\n    /// - parameter name:     The name to associate with the stream content in the `Content-Disposition` HTTP header.\n    /// - parameter fileName: The filename to associate with the stream content in the `Content-Disposition` HTTP header.\n    /// - parameter mimeType: The MIME type to associate with the stream content in the `Content-Type` HTTP header.\n    public func append(\n        _ stream: InputStream,\n        withLength length: UInt64,\n        name: String,\n        fileName: String,\n        mimeType: String)\n    {\n        let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType)\n        append(stream, withLength: length, headers: headers)\n    }\n\n    /// Creates a body part with the headers, stream and length and appends it to the multipart form data object.\n    ///\n    /// The body part data will be encoded using the following format:\n    ///\n    /// - HTTP headers\n    /// - Encoded stream data\n    /// - Multipart form boundary\n    ///\n    /// - parameter stream:  The input stream to encode in the multipart form data.\n    /// - parameter length:  The content length of the stream.\n    /// - parameter headers: The HTTP headers for the body part.\n    public func append(_ stream: InputStream, withLength length: UInt64, headers: [String : String]) {\n        let bodyPart = BodyPart(headers: headers, bodyStream: stream, bodyContentLength: length)\n        bodyParts.append(bodyPart)\n    }\n\n    // MARK: - Data Encoding\n\n    /// Encodes all the appended body parts into a single `Data` value.\n    ///\n    /// It is important to note that this method will load all the appended body parts into memory all at the same\n    /// time. This method should only be used when the encoded data will have a small memory footprint. For large data\n    /// cases, please use the `writeEncodedDataToDisk(fileURL:completionHandler:)` method.\n    ///\n    /// - throws: An `AFError` if encoding encounters an error.\n    ///\n    /// - returns: The encoded `Data` if encoding is successful.\n    public func encode() throws -> Data {\n        if let bodyPartError = bodyPartError {\n            throw bodyPartError\n        }\n\n        var encoded = Data()\n\n        bodyParts.first?.hasInitialBoundary = true\n        bodyParts.last?.hasFinalBoundary = true\n\n        for bodyPart in bodyParts {\n            let encodedData = try encode(bodyPart)\n            encoded.append(encodedData)\n        }\n\n        return encoded\n    }\n\n    /// Writes the appended body parts into the given file URL.\n    ///\n    /// This process is facilitated by reading and writing with input and output streams, respectively. Thus,\n    /// this approach is very memory efficient and should be used for large body part data.\n    ///\n    /// - parameter fileURL: The file URL to write the multipart form data into.\n    ///\n    /// - throws: An `AFError` if encoding encounters an error.\n    public func writeEncodedData(to fileURL: URL) throws {\n        if let bodyPartError = bodyPartError {\n            throw bodyPartError\n        }\n\n        if FileManager.default.fileExists(atPath: fileURL.path) {\n            let underlying = URLError(.fileDoesNotExist)\n            throw NetError.parse(code: underlying._code, message: \"Output stream file already exists.\", object: fileURL, underlying: underlying)\n        } else if !fileURL.isFileURL {\n            let underlying = URLError(.badURL)\n            throw NetError.parse(code: underlying._code, message: \"Output stream URL is invalid.\", object: fileURL, underlying: underlying)\n        }\n\n        guard let outputStream = OutputStream(url: fileURL, append: false) else {\n            let underlying = URLError(.cannotCreateFile)\n            throw NetError.parse(code: underlying._code, message: \"Output stream creation failed.\", object: fileURL, underlying: underlying)\n        }\n\n        outputStream.open()\n        defer { outputStream.close() }\n\n        self.bodyParts.first?.hasInitialBoundary = true\n        self.bodyParts.last?.hasFinalBoundary = true\n\n        for bodyPart in self.bodyParts {\n            try write(bodyPart, to: outputStream)\n        }\n    }\n\n    private func encode(_ bodyPart: BodyPart) throws -> Data {\n        var encoded = Data()\n\n        let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData()\n        encoded.append(initialData)\n\n        let headerData = encodeHeaders(for: bodyPart)\n        encoded.append(headerData)\n\n        let bodyStreamData = try encodeBodyStream(for: bodyPart)\n        encoded.append(bodyStreamData)\n\n        if bodyPart.hasFinalBoundary {\n            encoded.append(finalBoundaryData())\n        }\n\n        return encoded\n    }\n\n    private func encodeHeaders(for bodyPart: BodyPart) -> Data {\n        var headerText = \"\"\n\n        for (key, value) in bodyPart.headers {\n            headerText += \"\\(key): \\(value)\\(EncodingCharacters.crlf)\"\n        }\n        headerText += EncodingCharacters.crlf\n\n        return headerText.data(using: String.Encoding.utf8, allowLossyConversion: false)!\n    }\n\n    private func encodeBodyStream(for bodyPart: BodyPart) throws -> Data {\n        let inputStream = bodyPart.bodyStream\n        inputStream.open()\n        defer { inputStream.close() }\n\n        var encoded = Data()\n\n        while inputStream.hasBytesAvailable {\n            var buffer = [UInt8](repeating: 0, count: streamBufferSize)\n            let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize)\n\n            if let streamError = inputStream.streamError {\n                throw NetError.parse(code: streamError._code, message: \"Input stream read failed.\", object: inputStream, underlying: streamError)\n            }\n\n            if bytesRead > 0 {\n                encoded.append(buffer, count: bytesRead)\n            } else {\n                break\n            }\n        }\n\n        return encoded\n    }\n\n    private func write(_ bodyPart: BodyPart, to outputStream: OutputStream) throws {\n        try writeInitialBoundaryData(for: bodyPart, to: outputStream)\n        try writeHeaderData(for: bodyPart, to: outputStream)\n        try writeBodyStream(for: bodyPart, to: outputStream)\n        try writeFinalBoundaryData(for: bodyPart, to: outputStream)\n    }\n\n    private func writeInitialBoundaryData(for bodyPart: BodyPart, to outputStream: OutputStream) throws {\n        let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData()\n        return try write(initialData, to: outputStream)\n    }\n\n    private func writeHeaderData(for bodyPart: BodyPart, to outputStream: OutputStream) throws {\n        let headerData = encodeHeaders(for: bodyPart)\n        return try write(headerData, to: outputStream)\n    }\n\n    private func writeBodyStream(for bodyPart: BodyPart, to outputStream: OutputStream) throws {\n        let inputStream = bodyPart.bodyStream\n\n        inputStream.open()\n        defer { inputStream.close() }\n\n        while inputStream.hasBytesAvailable {\n            var buffer = [UInt8](repeating: 0, count: streamBufferSize)\n            let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize)\n\n            if let streamError = inputStream.streamError {\n                throw NetError.parse(code: streamError._code, message: \"Input stream read failed.\", object: inputStream, underlying: streamError)\n            }\n\n            if bytesRead > 0 {\n                if buffer.count != bytesRead {\n                    buffer = Array(buffer[0..<bytesRead])\n                }\n\n                try write(&buffer, to: outputStream)\n            } else {\n                break\n            }\n        }\n    }\n\n    private func writeFinalBoundaryData(for bodyPart: BodyPart, to outputStream: OutputStream) throws {\n        if bodyPart.hasFinalBoundary {\n            return try write(finalBoundaryData(), to: outputStream)\n        }\n    }\n\n    private func write(_ data: Data, to outputStream: OutputStream) throws {\n        var buffer = [UInt8](repeating: 0, count: data.count)\n        data.copyBytes(to: &buffer, count: data.count)\n        \n        return try write(&buffer, to: outputStream)\n    }\n    \n    private func write(_ buffer: inout [UInt8], to outputStream: OutputStream) throws {\n        var bytesToWrite = buffer.count\n        \n        while bytesToWrite > 0, outputStream.hasSpaceAvailable {\n            let bytesWritten = outputStream.write(buffer, maxLength: bytesToWrite)\n            \n            if let streamError = outputStream.streamError {\n                throw NetError.parse(code: streamError._code, message: \"Output stream write failed.\", object: outputStream, underlying: streamError)\n            }\n            \n            bytesToWrite -= bytesWritten\n            \n            if bytesToWrite > 0 {\n                buffer = Array(buffer[bytesWritten..<buffer.count])\n            }\n        }\n    }\n\n    private func mimeType(forPathExtension pathExtension: String) -> String {\n        if\n            let id = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)?.takeRetainedValue(),\n            let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)?.takeRetainedValue()\n        {\n            return contentType as String\n        }\n        \n        return \"application/octet-stream\"\n    }\n\n    private func contentHeaders(withName name: String, fileName: String? = nil, mimeType: String? = nil) -> [String: String] {\n        var disposition = \"form-data; name=\\\"\\(name)\\\"\"\n        if let fileName = fileName { disposition += \"; filename=\\\"\\(fileName)\\\"\" }\n        \n        var headers = [\"Content-Disposition\": disposition]\n        if let mimeType = mimeType { headers[\"Content-Type\"] = mimeType }\n        \n        return headers\n    }\n\n    private func initialBoundaryData() -> Data {\n        return BoundaryGenerator.boundaryData(forBoundaryType: .initial, boundary: boundary)\n    }\n    \n    private func encapsulatedBoundaryData() -> Data {\n        return BoundaryGenerator.boundaryData(forBoundaryType: .encapsulated, boundary: boundary)\n    }\n    \n    private func finalBoundaryData() -> Data {\n        return BoundaryGenerator.boundaryData(forBoundaryType: .final, boundary: boundary)\n    }\n\n    private func setBodyPartError(_ reason: String, object: Any?, underlying: Error?) {\n        guard bodyPartError == nil else {\n            return\n        }\n        bodyPartError = NetError.parse(code: underlying?._code, message: reason, object: object, underlying: underlying)\n    }\n\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetReachability.swift",
    "content": "//\n//  NetReachability.swift\n//  Net\n//\n//  Created by Alex Rupérez on 25/4/17.\n//\n//\n\n#if !os(watchOS)\nimport SystemConfiguration\n\npublic class NetReachability {\n\n    public enum Connection {\n        case ethernetOrWiFi, wwan\n    }\n\n    public enum Status {\n        case unknown, unreachable, reachable(Connection)\n    }\n\n    public typealias ReachabilityClosure = (Status) -> Swift.Void\n\n    public static let shared = NetReachability()\n\n    public var reachable: Bool { return reachableWWAN || reachableEthernetOrWiFi }\n\n    public var reachableWWAN: Bool { return current == .reachable(.wwan) }\n\n    public var reachableEthernetOrWiFi: Bool { return current == .reachable(.ethernetOrWiFi) }\n\n    public var queue = DispatchQueue.main\n\n    public var listener: ReachabilityClosure?\n\n    public var current: Status {\n        guard let flags = self.flags else {\n            return .unknown\n        }\n        return status(flags)\n    }\n\n    private var flags: SCNetworkReachabilityFlags? {\n        var flags = SCNetworkReachabilityFlags()\n        guard SCNetworkReachabilityGetFlags(reachability, &flags) else {\n            return nil\n        }\n        return flags\n    }\n\n    private let reachability: SCNetworkReachability\n    private var previous: SCNetworkReachabilityFlags\n\n    public convenience init?() {\n        var address = sockaddr_in()\n        address.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)\n        address.sin_family = sa_family_t(AF_INET)\n\n        guard let reachability = withUnsafePointer(to: &address, { pointer in\n            return pointer.withMemoryRebound(to: sockaddr.self, capacity: MemoryLayout<sockaddr>.size) {\n                return SCNetworkReachabilityCreateWithAddress(nil, $0)\n            }\n        }) else {\n            return nil\n        }\n\n        self.init(reachability)\n    }\n\n    public convenience init?(_ host: String) {\n        guard let reachability = SCNetworkReachabilityCreateWithName(nil, host) else {\n            return nil\n        }\n\n        self.init(reachability)\n    }\n\n    private init(_ reachability: SCNetworkReachability) {\n        self.reachability = reachability\n        self.previous = SCNetworkReachabilityFlags()\n    }\n\n    deinit {\n        stop()\n    }\n\n    @discardableResult public func start() -> Bool {\n        var context = SCNetworkReachabilityContext()\n        context.info = Unmanaged.passUnretained(self).toOpaque()\n\n        let callbackEnabled = SCNetworkReachabilitySetCallback(reachability, { (_, flags, info) in\n                let reachability = Unmanaged<NetReachability>.fromOpaque(info!).takeUnretainedValue()\n                reachability.notify(flags)\n        }, &context)\n\n        let queueEnabled = SCNetworkReachabilitySetDispatchQueue(reachability, queue)\n\n        queue.async {\n            self.previous = SCNetworkReachabilityFlags()\n            self.notify(self.flags ?? SCNetworkReachabilityFlags())\n        }\n\n        return callbackEnabled && queueEnabled\n    }\n\n    public func stop() {\n        SCNetworkReachabilitySetCallback(reachability, nil, nil)\n        SCNetworkReachabilitySetDispatchQueue(reachability, nil)\n    }\n\n    func notify(_ flags: SCNetworkReachabilityFlags) {\n        guard previous != flags else {\n            return\n        }\n\n        previous = flags\n        listener?(status(flags))\n    }\n\n    func status(_ flags: SCNetworkReachabilityFlags) -> Status {\n        guard flags.contains(.reachable) else {\n            return .unreachable\n        }\n\n        var networkStatus: Status = .unreachable\n\n        if !flags.contains(.connectionRequired) {\n            networkStatus = .reachable(.ethernetOrWiFi)\n        }\n\n        if flags.contains(.connectionOnDemand) || flags.contains(.connectionOnTraffic) {\n            if !flags.contains(.interventionRequired) {\n                networkStatus = .reachable(.ethernetOrWiFi)\n            }\n        }\n\n        #if os(iOS)\n        if flags.contains(.isWWAN) {\n            networkStatus = .reachable(.wwan)\n        }\n        #endif\n\n        return networkStatus\n    }\n\n}\n\nextension NetReachability.Status: Equatable {\n\n    public static func ==(lhs: NetReachability.Status, rhs: NetReachability.Status) -> Bool {\n        switch (lhs, rhs) {\n        case (.unknown, .unknown):\n            return true\n        case (.unreachable, .unreachable):\n            return true\n        case let (.reachable(lhsConnectionType), .reachable(rhsConnectionType)):\n            return lhsConnectionType == rhsConnectionType\n        default:\n            return false\n        }\n    }\n\n}\n\nextension NetReachability.Status: CustomStringConvertible {\n\n    public var description: String {\n        switch self {\n        case .reachable(let connection):\n            return \"Reachable: \\(connection)\"\n        case .unreachable:\n            return \"Unreachable\"\n        default:\n            return \"Unknown\"\n        }\n    }\n    \n}\n\nextension NetReachability.Status: CustomDebugStringConvertible {\n\n    public var debugDescription: String {\n        return description\n    }\n\n}\n\nextension NetReachability.Connection: CustomStringConvertible {\n\n    public var description: String {\n        switch self {\n        case .ethernetOrWiFi:\n            return \"Ethernet/WiFi\"\n        default:\n            return \"WWAN\"\n        }\n    }\n    \n}\n\nextension NetReachability.Connection: CustomDebugStringConvertible {\n\n    public var debugDescription: String {\n        return description\n    }\n\n}\n#endif\n"
  },
  {
    "path": "Pods/NetClient/Core/NetRequest+Build.swift",
    "content": "//\n//  NetRequest+Build.swift\n//  Net\n//\n//  Created by Alex Rupérez on 25/3/17.\n//\n//\n\nimport Foundation\n\nextension NetRequest {\n\n    open class Builder {\n\n        open private(set) var url: URL\n\n        open private(set) var cache: NetRequest.NetCachePolicy?\n\n        open private(set) var timeout: TimeInterval?\n\n        open private(set) var mainDocumentURL: URL?\n\n        open private(set) var serviceType: NetRequest.NetServiceType?\n\n        open private(set) var contentType: NetContentType?\n\n        open private(set) var contentLength: NetContentLength?\n\n        open private(set) var accept: NetContentType?\n\n        open private(set) var acceptEncoding: [NetContentEncoding]?\n\n        open private(set) var cacheControl: [NetCacheControl]?\n\n        open private(set) var allowsCellularAccess: Bool?\n\n        open private(set) var method: NetRequest.NetMethod?\n\n        open private(set) var headers: [String : String]?\n\n        open private(set) var body: Data?\n\n        open private(set) var bodyStream: InputStream?\n\n        open private(set) var handleCookies: Bool?\n\n        open private(set) var usePipelining: Bool?\n\n        open private(set) var authorization: NetAuthorization?\n\n        public init(_ netRequest: NetRequest) {\n            url = netRequest.url\n            cache = netRequest.cache\n            timeout = netRequest.timeout\n            mainDocumentURL = netRequest.mainDocumentURL\n            serviceType = netRequest.serviceType\n            contentType = netRequest.contentType\n            contentLength = netRequest.contentLength\n            accept = netRequest.accept\n            acceptEncoding = netRequest.acceptEncoding\n            cacheControl = netRequest.cacheControl\n            allowsCellularAccess = netRequest.allowsCellularAccess\n            method = netRequest.httpMethod != .GET ? netRequest.httpMethod : nil\n            headers = netRequest.headers\n            body = netRequest.body\n            bodyStream = netRequest.bodyStream\n            handleCookies = netRequest.handleCookies\n            usePipelining = netRequest.usePipelining\n            authorization = netRequest.authorization\n        }\n\n        public convenience init?(_ urlRequest: URLRequest) {\n            guard let netRequest = urlRequest.netRequest else {\n                return nil\n            }\n            self.init(netRequest)\n        }\n\n        public init(_ url: URL) {\n            self.url = url\n        }\n\n        public convenience init?(_ urlString: String) {\n            guard let url = URL(string: urlString) else {\n                return nil\n            }\n            self.init(url)\n        }\n\n        @discardableResult open func setCache(_ cache: NetRequest.NetCachePolicy?) -> Self {\n            self.cache = cache\n            return self\n        }\n\n        @discardableResult open func setTimeout(_ timeout: TimeInterval?) -> Self {\n            self.timeout = timeout\n            return self\n        }\n\n        @discardableResult open func setMainDocumentURL(_ mainDocumentURL: URL?) -> Self {\n            self.mainDocumentURL = mainDocumentURL\n            return self\n        }\n\n        @discardableResult open func setServiceType(_ serviceType: NetRequest.NetServiceType?) -> Self {\n            self.serviceType = serviceType\n            return self\n        }\n\n        @discardableResult open func setContentType(_ contentType: NetContentType?) -> Self {\n            self.contentType = contentType\n            return self\n        }\n\n        @discardableResult open func setContentLength(_ contentLength: NetContentLength?) -> Self {\n            self.contentLength = contentLength\n            return self\n        }\n\n        @discardableResult open func setAccept(_ accept: NetContentType?) -> Self {\n            self.accept = accept\n            return self\n        }\n\n        @discardableResult open func setAcceptEncodings(_ acceptEncodings: [NetContentEncoding]?) -> Self {\n            self.acceptEncoding = acceptEncodings\n            return self\n        }\n\n        @discardableResult open func addAcceptEncoding(_ acceptEncoding: NetContentEncoding?) -> Self {\n            if self.acceptEncoding == nil {\n                setAcceptEncodings([])\n            }\n            if let acceptEncoding = acceptEncoding, var acceptEncodings = self.acceptEncoding {\n                if acceptEncodings.contains(acceptEncoding), let index = acceptEncodings.index(of: acceptEncoding) {\n                    acceptEncodings.remove(at: index)\n                }\n                acceptEncodings.append(acceptEncoding)\n                setAcceptEncodings(acceptEncodings)\n            }\n            return self\n        }\n\n        @discardableResult open func setCacheControls(_ cacheControls: [NetCacheControl]?) -> Self {\n            self.cacheControl = cacheControls\n            return self\n        }\n\n        @discardableResult open func addCacheControl(_ cacheControl: NetCacheControl?) -> Self {\n            if self.cacheControl == nil {\n                setCacheControls([])\n            }\n            if let cacheControl = cacheControl, var cacheControls = self.cacheControl {\n                if cacheControls.contains(cacheControl), let index = cacheControls.index(of: cacheControl) {\n                    cacheControls.remove(at: index)\n                }\n                cacheControls.append(cacheControl)\n                setCacheControls(cacheControls)\n            }\n            return self\n        }\n\n        @discardableResult open func setAllowsCellularAccess(_ allowsCellularAccess: Bool?) -> Self {\n            self.allowsCellularAccess = allowsCellularAccess\n            return self\n        }\n\n        @discardableResult open func setMethod(_ method: NetRequest.NetMethod?) -> Self {\n            self.method = method\n            return self\n        }\n\n        @discardableResult open func setHeaders(_ headers: [String : String]?) -> Self {\n            self.headers = headers\n            return self\n        }\n\n        @discardableResult open func addHeader(_ key: String, value: String?) -> Self {\n            if self.headers == nil {\n                setHeaders([:])\n            }\n            self.headers?[key] = value\n            return self\n        }\n\n        @discardableResult open func setBody(_ body: Data?) -> Self {\n            if body != nil {\n                setBodyStream(nil)\n                if contentType == nil {\n                    setContentType(.bin)\n                }\n                if method == nil {\n                    setMethod(.POST)\n                }\n                if contentLength == nil, let length = body?.count {\n                    setContentLength(NetContentLength(length))\n                }\n            }\n            self.body = body\n            return self\n        }\n\n        @discardableResult open func setURLParameters(_ urlParameters: [String: Any]?, resolvingAgainstBaseURL: Bool = false) -> Self {\n            if var components = URLComponents(url: url, resolvingAgainstBaseURL: resolvingAgainstBaseURL) {\n                components.percentEncodedQuery = nil\n                if let urlParameters = urlParameters, urlParameters.count > 0 {\n                    components.percentEncodedQuery = query(urlParameters)\n                }\n                if let url = components.url {\n                    self.url = url\n                }\n            }\n            return self\n        }\n\n        @discardableResult open func addURLParameter(_ key: String, value: Any?, resolvingAgainstBaseURL: Bool = false) -> Self {\n            guard let value = value else {\n                return self\n            }\n            if var components = URLComponents(url: url, resolvingAgainstBaseURL: resolvingAgainstBaseURL) {\n                let percentEncodedQuery = (components.percentEncodedQuery.map { $0 + \"&\" } ?? \"\") + query([key: value])\n                components.percentEncodedQuery = percentEncodedQuery\n                if let url = components.url {\n                    self.url = url\n                }\n            }\n            return self\n        }\n\n        @discardableResult open func setFormParameters(_ formParameters: [String: Any]?, encoding: String.Encoding = .utf8, allowLossyConversion: Bool = false) -> Self {\n            guard let formParameters = formParameters else {\n                return self\n            }\n            body = query(formParameters).data(using: encoding, allowLossyConversion: allowLossyConversion)\n            if contentType == nil {\n                setContentType(.formURL)\n            }\n            if method == nil {\n                setMethod(.POST)\n            }\n            if contentLength == nil, let length = body?.count {\n                setContentLength(NetContentLength(length))\n            }\n            return self\n        }\n\n        @discardableResult open func setStringBody(_ stringBody: String?, encoding: String.Encoding = .utf8, allowLossyConversion: Bool = false) -> Self {\n            guard let stringBody = stringBody else {\n                return self\n            }\n            body = stringBody.data(using: encoding, allowLossyConversion: allowLossyConversion)\n            if contentType == nil {\n                setContentType(.txt)\n            }\n            if method == nil {\n                setMethod(.POST)\n            }\n            if contentLength == nil, let length = body?.count {\n                setContentLength(NetContentLength(length))\n            }\n            return self\n        }\n\n        @discardableResult open func setJSONObject<T: Encodable>(_ jsonObject: T?) throws -> Self {\n            guard let jsonObject = jsonObject else {\n                return self\n            }\n            body = try JSONEncoder().encode(jsonObject)\n            if contentType == nil {\n                setContentType(.json)\n            }\n            if method == nil {\n                setMethod(.POST)\n            }\n            if contentLength == nil, let length = body?.count {\n                setContentLength(NetContentLength(length))\n            }\n            return self\n        }\n\n        @discardableResult open func setJSONBody(_ jsonBody: Any?, options: JSONSerialization.WritingOptions = .prettyPrinted) throws -> Self {\n            guard let jsonBody = jsonBody else {\n                return self\n            }\n            body = try JSONSerialization.data(withJSONObject: jsonBody, options: options)\n            if contentType == nil {\n                setContentType(.json)\n            }\n            if method == nil {\n                setMethod(.POST)\n            }\n            if contentLength == nil, let length = body?.count {\n                setContentLength(NetContentLength(length))\n            }\n            return self\n        }\n\n        @discardableResult open func setPlistObject<T: Encodable>(_ plistObject: T?) throws -> Self {\n            guard let plistObject = plistObject else {\n                return self\n            }\n            body = try PropertyListEncoder().encode(plistObject)\n            if contentType == nil {\n                setContentType(.plist)\n            }\n            if method == nil {\n                setMethod(.POST)\n            }\n            if contentLength == nil, let length = body?.count {\n                setContentLength(NetContentLength(length))\n            }\n            return self\n        }\n\n        @discardableResult open func setPlistBody(_ plistBody: Any?, format: PropertyListSerialization.PropertyListFormat = .xml, options: PropertyListSerialization.WriteOptions = 0) throws -> Self {\n            guard let plistBody = plistBody else {\n                return self\n            }\n            body = try PropertyListSerialization.data(fromPropertyList: plistBody, format: format, options: options)\n            if contentType == nil {\n                setContentType(.plist)\n            }\n            if method == nil {\n                setMethod(.POST)\n            }\n            if contentLength == nil, let length = body?.count {\n                setContentLength(NetContentLength(length))\n            }\n            return self\n        }\n\n        @discardableResult open func setBodyStream(_ bodyStream: InputStream?) -> Self {\n            if bodyStream != nil {\n                setBody(nil)\n                if contentType == nil {\n                    setContentType(.bin)\n                }\n                if method == nil {\n                    setMethod(.POST)\n                }\n            }\n            self.bodyStream = bodyStream\n            return self\n        }\n\n        @discardableResult open func setMultipartFormData(_ multipartFormData: NetMultipartFormData?) throws -> Self {\n            guard let multipartFormData = multipartFormData else {\n                return self\n            }\n            body = try multipartFormData.encode()\n            setContentType(.custom(multipartFormData.contentType))\n            setContentLength(multipartFormData.contentLength)\n            if method == nil {\n                setMethod(.POST)\n            }\n            return self\n        }\n\n        @discardableResult open func setHandleCookies(_ handleCookies: Bool?) -> Self {\n            self.handleCookies = handleCookies\n            return self\n        }\n\n        @discardableResult open func setUsePipelining(_ usePipelining: Bool?) -> Self {\n            self.usePipelining = usePipelining\n            return self\n        }\n\n        @discardableResult open func setBasicAuthorization(user: String, password: String) -> Self {\n            self.authorization = .basic(user: user, password: password)\n            return self\n        }\n\n        @discardableResult open func setBearerAuthorization(token: String) -> Self {\n            self.authorization = .bearer(token: token)\n            return self\n        }\n\n        @discardableResult open func setCustomAuthorization(_ authorization: String) -> Self {\n            self.authorization = .custom(authorization)\n            return self\n        }\n\n        public func build() -> NetRequest {\n            return NetRequest(self)\n        }\n\n    }\n\n    public static func builder(_ netRequest: NetRequest) -> Builder {\n        return Builder(netRequest)\n    }\n\n    public static func builder(_ urlRequest: URLRequest) -> Builder? {\n        return Builder(urlRequest)\n    }\n\n    public static func builder(_ url: URL) -> Builder {\n        return Builder(url)\n    }\n\n    public static func builder(_ urlString: String) -> Builder? {\n        return Builder(urlString)\n    }\n\n    public init(_ builder: Builder) {\n        self.init(builder.url, cache: builder.cache ?? .useProtocolCachePolicy, timeout: builder.timeout ?? 60, mainDocumentURL: builder.mainDocumentURL, serviceType: builder.serviceType ?? .default, contentType: builder.contentType, contentLength: builder.contentLength, accept: builder.accept, acceptEncoding: builder.acceptEncoding, cacheControl: builder.cacheControl, allowsCellularAccess: builder.allowsCellularAccess ?? true, method: builder.method ?? .GET, headers: builder.headers, body: builder.body, bodyStream: builder.bodyStream, handleCookies: builder.handleCookies ?? true, usePipelining: builder.usePipelining ?? true, authorization: builder.authorization ?? .none)\n    }\n\n    public func builder() -> Builder {\n        return NetRequest.builder(self)\n    }\n\n}\n\nextension NetRequest.Builder {\n\n    fileprivate func query(_ parameters: [String: Any]) -> String {\n        var components = [(String, String)]()\n\n        for key in parameters.keys.sorted(by: <) {\n            if let value = parameters[key] {\n                components += queryComponents(key, value: value)\n            }\n        }\n\n        return components.map { \"\\($0)=\\($1)\" }.joined(separator: \"&\")\n    }\n\n    fileprivate func queryComponents(_ key: String, value: Any) -> [(String, String)] {\n        var components: [(String, String)] = []\n\n        if let dictionary = value as? [String: Any] {\n            for (dictionaryKey, value) in dictionary {\n                components += queryComponents(\"\\(key)[\\(dictionaryKey)]\", value: value)\n            }\n        } else if let array = value as? [Any] {\n            for value in array {\n                components += queryComponents(\"\\(key)[]\", value: value)\n            }\n        } else if let value = value as? NSNumber {\n            if CFBooleanGetTypeID() == CFGetTypeID(value) {\n                components.append((escape(key), escape((value.boolValue ? \"1\" : \"0\"))))\n            } else {\n                components.append((escape(key), escape(\"\\(value)\")))\n            }\n        } else if let bool = value as? Bool {\n            components.append((escape(key), escape((bool ? \"1\" : \"0\"))))\n        } else {\n            components.append((escape(key), escape(\"\\(value)\")))\n        }\n\n        return components\n    }\n\n    fileprivate func escape(_ string: String) -> String {\n        let generalDelimitersToEncode = \":#[]@\"\n        let subDelimitersToEncode = \"!$&'()*+,;=\"\n\n        var allowedCharacterSet = CharacterSet.urlQueryAllowed\n        allowedCharacterSet.remove(charactersIn: \"\\(generalDelimitersToEncode)\\(subDelimitersToEncode)\")\n\n        return string.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet) ?? string\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetRequest+URLRequest.swift",
    "content": "//\n//  NetRequest+URLRequest.swift\n//  Net\n//\n//  Created by Alex Rupérez on 23/3/17.\n//\n//\n\nimport Foundation\n\nextension NetRequest {\n\n    private struct HTTPHeader {\n        static let contentLength = \"Content-Length\"\n        static let contentType = \"Content-Type\"\n        static let accept = \"Accept\"\n        static let acceptEncoding = \"Accept-Encoding\"\n        static let cacheControl = \"Cache-Control\"\n        static let authorization = \"Authorization\"\n    }\n\n    public init?(_ urlRequest: URLRequest) {\n        guard let url = urlRequest.url else {\n            return nil\n        }\n        var contentType: NetContentType? = nil\n        if let contentTypeValue = urlRequest.value(forHTTPHeaderField: HTTPHeader.contentType) {\n            contentType = NetContentType(rawValue: contentTypeValue)\n        }\n        var accept: NetContentType? = nil\n        if let acceptValue = urlRequest.value(forHTTPHeaderField: HTTPHeader.accept) {\n            accept = NetContentType(rawValue: acceptValue)\n        }\n        var acceptEncoding: [NetContentEncoding]? = nil\n        if let acceptEncodingValue = urlRequest.value(forHTTPHeaderField: HTTPHeader.acceptEncoding) {\n            acceptEncoding = acceptEncodingValue.components(separatedBy: \", \").flatMap({NetContentEncoding(rawValue: $0)})\n        }\n        var cacheControl: [NetCacheControl]? = nil\n        if let cacheControlValue = urlRequest.value(forHTTPHeaderField: HTTPHeader.cacheControl) {\n            cacheControl = cacheControlValue.components(separatedBy: \", \").flatMap({NetCacheControl(rawValue: $0)})\n        }\n        var authorization = NetAuthorization.none\n        if let authorizationValue = urlRequest.value(forHTTPHeaderField: HTTPHeader.authorization) {\n            authorization = NetAuthorization(rawValue: authorizationValue)\n        }\n        var method = NetMethod.GET\n        if let methodString = urlRequest.httpMethod, let methodValue = NetMethod(rawValue: methodString) {\n            method = methodValue\n        }\n        var contentLength: NetContentLength? = nil\n        if let contentLengthValue = urlRequest.value(forHTTPHeaderField: HTTPHeader.contentLength), let contentLengthInt64 = NetContentLength(contentLengthValue) {\n            contentLength = contentLengthInt64\n        }\n        self.init(url, cache: NetCachePolicy(rawValue: urlRequest.cachePolicy.rawValue) ?? .useProtocolCachePolicy, timeout: urlRequest.timeoutInterval, mainDocumentURL: urlRequest.mainDocumentURL, serviceType: NetServiceType(rawValue: urlRequest.networkServiceType.rawValue) ?? .default, contentType: contentType, contentLength: contentLength, accept: accept, acceptEncoding: acceptEncoding, cacheControl: cacheControl, allowsCellularAccess: urlRequest.allowsCellularAccess, method: method, headers: urlRequest.allHTTPHeaderFields, body: urlRequest.httpBody, bodyStream: urlRequest.httpBodyStream, handleCookies: urlRequest.httpShouldHandleCookies, usePipelining: urlRequest.httpShouldUsePipelining, authorization: authorization)\n    }\n\n    public var urlRequest: URLRequest {\n        var urlRequest = URLRequest(url: url, cachePolicy: URLRequest.CachePolicy(rawValue: cache.rawValue) ?? .useProtocolCachePolicy, timeoutInterval: timeout)\n        urlRequest.mainDocumentURL = mainDocumentURL\n        urlRequest.networkServiceType = URLRequest.NetworkServiceType(rawValue: serviceType.rawValue) ?? .default\n        urlRequest.allowsCellularAccess = allowsCellularAccess\n        urlRequest.httpMethod = httpMethod.rawValue\n        urlRequest.allHTTPHeaderFields = headers\n        urlRequest.setValue(contentType?.rawValue, forHTTPHeaderField: HTTPHeader.contentType)\n        if let contentLength = contentLength {\n            urlRequest.setValue(\"\\(contentLength)\", forHTTPHeaderField: HTTPHeader.contentLength)\n        }\n        urlRequest.setValue(accept?.rawValue, forHTTPHeaderField: HTTPHeader.accept)\n        urlRequest.setValue(acceptEncoding?.flatMap({$0.rawValue}).joined(separator: \", \"), forHTTPHeaderField: HTTPHeader.acceptEncoding)\n        urlRequest.setValue(cacheControl?.flatMap({$0.rawValue}).joined(separator: \", \"), forHTTPHeaderField: HTTPHeader.cacheControl)\n        if authorization != .none {\n            urlRequest.setValue(authorization.rawValue, forHTTPHeaderField: HTTPHeader.authorization)\n        }\n        if let body = body {\n            urlRequest.httpBody = body\n        } else if let bodyStream = bodyStream {\n            urlRequest.httpBodyStream = bodyStream\n        }\n        urlRequest.httpShouldHandleCookies = handleCookies\n        urlRequest.httpShouldUsePipelining = usePipelining\n        return urlRequest\n    }\n    \n}\n\nextension URLRequest {\n\n    public var netRequest: NetRequest? {\n        return NetRequest(self)\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetRequest.swift",
    "content": "//\n//  NetRequest.swift\n//  Net\n//\n//  Created by Alex Rupérez on 23/3/17.\n//\n//\n\nimport Foundation\n\npublic struct NetRequest {\n\n    public typealias NetContentLength = UInt64\n\n    public enum NetCachePolicy: UInt {\n        case useProtocolCachePolicy = 0, reloadIgnoringLocalCacheData = 1, returnCacheDataElseLoad = 2, returnCacheDataDontLoad = 3\n    }\n\n    public enum NetServiceType: UInt {\n        case `default`, voip, video, background, voice, callSignaling = 11\n    }\n\n    public enum NetMethod: String {\n        case GET, POST, PUT, DELETE, PATCH, UPDATE, HEAD, TRACE, OPTIONS, CONNECT, SEARCH, COPY, MERGE, LABEL, LOCK, UNLOCK, MOVE, MKCOL, PROPFIND, PROPPATCH\n    }\n\n    public enum NetContentEncoding: String {\n        case gzip, compress, deflate, identity, br\n    }\n\n    public let url: URL\n\n    public let cache: NetCachePolicy\n\n    public let timeout: TimeInterval\n\n    public let mainDocumentURL: URL?\n\n    public let serviceType: NetServiceType\n\n    public let contentType: NetContentType?\n\n    public let contentLength: NetContentLength?\n\n    public let accept: NetContentType?\n\n    public let acceptEncoding: [NetContentEncoding]?\n\n    public let cacheControl: [NetCacheControl]?\n\n    public let allowsCellularAccess: Bool\n\n    public let httpMethod: NetMethod\n\n    public let headers: [String : String]?\n\n    public let body: Data?\n\n    public let bodyStream: InputStream?\n\n    public let handleCookies: Bool\n\n    public let usePipelining: Bool\n\n    public let authorization: NetAuthorization\n\n}\n\nextension NetRequest {\n\n    public init(_ url: URL, cache: NetCachePolicy = .useProtocolCachePolicy, timeout: TimeInterval = 60, mainDocumentURL: URL? = nil, serviceType: NetServiceType = .default, contentType: NetContentType? = nil, contentLength: NetContentLength? = nil, accept: NetContentType? = nil, acceptEncoding: [NetContentEncoding]? = nil, cacheControl: [NetCacheControl]? = nil, allowsCellularAccess: Bool = true, method: NetMethod = .GET, headers: [String : String]? = nil, body: Data? = nil, bodyStream: InputStream? = nil, handleCookies: Bool = true, usePipelining: Bool = true, authorization: NetAuthorization = .none) {\n        self.url = url\n        self.cache = cache\n        self.timeout = timeout\n        self.mainDocumentURL = mainDocumentURL\n        self.serviceType = serviceType\n        self.contentType = contentType\n        self.contentLength = contentLength\n        self.accept = accept\n        self.acceptEncoding = acceptEncoding\n        self.cacheControl = cacheControl\n        self.allowsCellularAccess = allowsCellularAccess\n        self.httpMethod = method\n        self.headers = headers\n        self.body = body\n        self.bodyStream = bodyStream\n        self.handleCookies = handleCookies\n        self.usePipelining = usePipelining\n        self.authorization = authorization\n    }\n    \n}\n\nextension NetRequest {\n\n    public init?(_ urlString: String, cache: NetCachePolicy = .useProtocolCachePolicy, timeout: TimeInterval = 60, mainDocumentURL: URL? = nil, serviceType: NetServiceType = .default, contentType: NetContentType? = nil, contentLength: NetContentLength? = nil, accept: NetContentType? = nil, acceptEncoding: [NetContentEncoding]? = nil, cacheControl: [NetCacheControl]? = nil, allowsCellularAccess: Bool = true, method: NetMethod = .GET, headers: [String : String]? = nil, body: Data? = nil, bodyStream: InputStream? = nil, handleCookies: Bool = true, usePipelining: Bool = true, authorization: NetAuthorization = .none) {\n        guard let url = URL(string: urlString) else {\n            return nil\n        }\n        self.init(url, cache: cache, timeout: timeout, mainDocumentURL: mainDocumentURL, serviceType: serviceType, contentType: contentType, contentLength: contentLength, accept: accept, acceptEncoding: acceptEncoding, cacheControl: cacheControl, allowsCellularAccess: allowsCellularAccess, method: method, headers: headers, body: body, bodyStream: bodyStream, handleCookies: handleCookies, usePipelining: usePipelining, authorization: authorization)\n    }\n\n}\n\nextension NetRequest: CustomStringConvertible {\n\n    public var description: String {\n        return httpMethod.rawValue + \" \" + url.absoluteString\n    }\n\n}\n\nextension NetRequest: CustomDebugStringConvertible {\n\n    public var debugDescription: String {\n        var components = [\"$ curl -i\"]\n\n        if httpMethod != .GET {\n            components.append(\"-X \\(httpMethod.rawValue)\")\n        }\n\n        if let headers = headers {\n            for (field, value) in headers where field != \"Content-Type\" && field != \"Accept\" && field != \"Accept-Encoding\" && field != \"Cache-Control\" && field != \"Content-Length\" {\n                components.append(\"-H \\\"\\(field): \\(value)\\\"\")\n            }\n        }\n\n        if let contentType = contentType {\n            components.append(\"-H \\\"Content-Type: \\(contentType.rawValue)\\\"\")\n        }\n\n        if let contentLength = contentLength {\n            components.append(\"-H \\\"Content-Length: \\(contentLength)\\\"\")\n        }\n\n        if let accept = accept {\n            components.append(\"-H \\\"Accept: \\(accept.rawValue)\\\"\")\n        }\n\n        if let acceptEncoding = acceptEncoding {\n            components.append(\"-H \\\"Accept-Encoding: \\(acceptEncoding.flatMap({$0.rawValue}).joined(separator: \", \"))\\\"\")\n        }\n\n        if let cacheControl = cacheControl {\n            components.append(\"-H \\\"Cache-Control: \\(cacheControl.flatMap({$0.rawValue}).joined(separator: \", \"))\\\"\")\n        }\n\n        if authorization != .none {\n            components.append(\"-H \\\"Authorization: \\(authorization.rawValue)\\\"\")\n        }\n\n        if let body = body, let bodyString = String(data: body, encoding: .utf8) {\n            var escapedBody = bodyString.replacingOccurrences(of: \"\\\\\\\"\", with: \"\\\\\\\\\\\"\")\n            escapedBody = escapedBody.replacingOccurrences(of: \"\\\"\", with: \"\\\\\\\"\")\n\n            components.append(\"-d \\\"\\(escapedBody)\\\"\")\n        }\n\n        components.append(\"\\\"\\(url.absoluteString)\\\"\")\n\n        return components.joined(separator: \" \\\\\\n\\t\")\n    }\n\n}\n\nextension NetRequest: Hashable {\n\n    public var hashValue: Int {\n        return url.hashValue + httpMethod.hashValue\n    }\n\n}\n\nextension NetRequest: Equatable {\n\n    public static func ==(lhs: NetRequest, rhs: NetRequest) -> Bool {\n        return lhs.url == rhs.url && lhs.httpMethod == rhs.httpMethod\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetResponse+Build.swift",
    "content": "//\n//  NetResponse+Build.swift\n//  Net\n//\n//  Created by Alex Rupérez on 28/3/17.\n//\n//\n\nimport Foundation\n\nextension NetResponse {\n\n    open class Builder {\n\n        open private(set) var url: URL?\n\n        open private(set) var mimeType: String?\n\n        open private(set) var contentLength: Int64\n\n        open private(set) var textEncoding: String?\n\n        open private(set) var filename: String?\n\n        open private(set) var statusCode: Int?\n\n        open private(set) var headers: [AnyHashable : Any]?\n\n        open private(set) var localizedDescription: String?\n\n        open private(set) var userInfo: [AnyHashable : Any]?\n\n        open private(set) weak var netTask: NetTask?\n        \n        open private(set) var responseObject: Any?\n\n        public init(_ netResponse: NetResponse? = nil) {\n            url = netResponse?.url\n            mimeType = netResponse?.mimeType\n            contentLength = netResponse?.contentLength ?? -1\n            textEncoding = netResponse?.textEncoding\n            filename = netResponse?.filename\n            statusCode = netResponse?.statusCode\n            headers = netResponse?.headers\n            localizedDescription = netResponse?.localizedDescription\n            userInfo = netResponse?.userInfo\n            netTask = netResponse?.netTask\n            responseObject = netResponse?.responseObject\n        }\n\n        @discardableResult open func setURL(_ url: URL?) -> Self {\n            self.url = url\n            return self\n        }\n\n        @discardableResult open func setMimeType(_ mimeType: String?) -> Self {\n            self.mimeType = mimeType\n            return self\n        }\n\n        @discardableResult open func setContentLength(_ contentLength: Int64) -> Self {\n            self.contentLength = contentLength\n            return self\n        }\n\n        @discardableResult open func setTextEncoding(_ textEncoding: String?) -> Self {\n            self.textEncoding = textEncoding\n            return self\n        }\n\n        @discardableResult open func setFilename(_ filename: String?) -> Self {\n            self.filename = filename\n            return self\n        }\n\n        @discardableResult open func setStatusCode(_ statusCode: Int?) -> Self {\n            self.statusCode = statusCode\n            return self\n        }\n\n        @discardableResult open func setHeaders(_ headers: [AnyHashable : Any]?) -> Self {\n            self.headers = headers\n            return self\n        }\n\n        @discardableResult open func setDescription(_ localizedDescription: String?) -> Self {\n            self.localizedDescription = localizedDescription\n            return self\n        }\n\n        @discardableResult open func setUserInfo(_ userInfo: [AnyHashable : Any]?) -> Self {\n            self.userInfo = userInfo\n            return self\n        }\n\n        @discardableResult open func setNetTask(_ netTask: NetTask?) -> Self {\n            self.netTask = netTask\n            return self\n        }\n\n        @discardableResult open func setObject(_ responseObject: Any?) -> Self {\n            self.responseObject = responseObject\n            return self\n        }\n\n        public func build() -> NetResponse {\n            return NetResponse(self)\n        }\n\n    }\n\n    public static func builder(_ netResponse: NetResponse? = nil) -> Builder {\n        return Builder(netResponse)\n    }\n\n    public init(_ builder: Builder) {\n        self.init(builder.url, mimeType: builder.mimeType, contentLength: builder.contentLength, textEncoding: builder.textEncoding, filename: builder.filename, statusCode: builder.statusCode, headers: builder.headers, localizedDescription: builder.localizedDescription, userInfo: builder.userInfo, netTask: builder.netTask, responseObject: builder.responseObject)\n    }\n\n    public func builder() -> Builder {\n        return NetResponse.builder(self)\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetResponse+Cached​URLResponse.swift",
    "content": "//\n//  NetResponse+CachedURLResponse.swift\n//  Net\n//\n//  Created by Alex Rupérez on 22/3/17.\n//\n//\n\nimport Foundation\n\nextension NetResponse {\n\n    public init(_ cachedResponse: CachedURLResponse, _ netTask: NetTask? = nil) {\n        self.init(cachedResponse.response.url, mimeType: cachedResponse.response.mimeType, contentLength: cachedResponse.response.expectedContentLength, textEncoding: cachedResponse.response.textEncodingName, filename: cachedResponse.response.suggestedFilename, userInfo: cachedResponse.userInfo, netTask: netTask, responseObject: cachedResponse.data)\n    }\n    \n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetResponse+HTTPURLResponse.swift",
    "content": "//\n//  NetResponse+HTTPURLResponse.swift\n//  Net\n//\n//  Created by Alex Rupérez on 22/3/17.\n//\n//\n\nimport Foundation\n\nextension NetResponse {\n\n    public init(_ httpResponse: HTTPURLResponse, _ netTask: NetTask? = nil, _ responseObject: Any? = nil) {\n        self.init(httpResponse.url, mimeType: httpResponse.mimeType, contentLength: httpResponse.expectedContentLength, textEncoding: httpResponse.textEncodingName, filename: httpResponse.suggestedFilename, statusCode: httpResponse.statusCode, headers: httpResponse.allHeaderFields, localizedDescription: HTTPURLResponse.localizedString(forStatusCode: httpResponse.statusCode), netTask: netTask, responseObject: responseObject)\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetResponse+URLResponse.swift",
    "content": "//\n//  NetResponse+URLResponse.swift\n//  Net\n//\n//  Created by Alex Rupérez on 22/3/17.\n//\n//\n\nimport Foundation\n\nextension NetResponse {\n\n    public init(_ response: URLResponse, _ netTask: NetTask? = nil, _ responseObject: Any? = nil) {\n        self.init(response.url, mimeType: response.mimeType, contentLength: response.expectedContentLength, textEncoding: response.textEncodingName, filename: response.suggestedFilename, netTask: netTask, responseObject: responseObject)\n    }\n    \n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetResponse.swift",
    "content": "//\n//  NetResponse.swift\n//  Net\n//\n//  Created by Alex Rupérez on 22/3/17.\n//\n//\n\nimport Foundation\n\npublic struct NetResponse {\n\n    public let url: URL?\n\n    public let mimeType: String?\n\n    public let contentLength: Int64?\n\n    public let textEncoding: String?\n\n    public let filename: String?\n\n    public let statusCode: Int?\n\n    public let headers: [AnyHashable : Any]?\n\n    public let localizedDescription: String?\n\n    public let userInfo: [AnyHashable : Any]?\n\n    public fileprivate(set) weak var netTask: NetTask?\n\n    let responseObject: Any?\n\n}\n\nextension NetResponse {\n\n    public init(_ url: URL? = nil, mimeType: String? = nil, contentLength: Int64 = -1, textEncoding: String? = nil, filename: String? = nil, statusCode: Int? = nil, headers: [AnyHashable : Any]? = nil, localizedDescription: String? = nil, userInfo: [AnyHashable : Any]? = nil, netTask: NetTask?, responseObject: Any? = nil) {\n        self.url = url\n        self.mimeType = mimeType\n        self.contentLength = contentLength != -1 ? contentLength : nil\n        self.textEncoding = textEncoding\n        self.filename = filename\n        self.statusCode = statusCode\n        self.headers = headers\n        self.localizedDescription = localizedDescription\n        self.userInfo = userInfo\n        self.netTask = netTask\n        self.responseObject = responseObject\n    }\n\n}\n\nextension NetResponse {\n\n    public func object<T>() throws -> T {\n        do {\n            return try NetTransformer.object(object: responseObject)\n        } catch {\n            throw handle(error)\n        }\n    }\n\n    public func decode<T: Decodable>() throws -> T {\n        do {\n            return try NetTransformer.decode(object: responseObject)\n        } catch {\n            throw handle(error)\n        }\n    }\n\n    private func handle(_ error: Error) -> Error {\n        switch error as! NetError {\n        case .parse(let transformCode, let message, let object, let underlying):\n            return NetError.parse(code: transformCode ?? statusCode, message: message, object: object ?? responseObject, underlying: underlying)\n        default:\n            return error\n        }\n    }\n\n}\n\nextension NetResponse: Equatable {\n\n    public static func ==(lhs: NetResponse, rhs: NetResponse) -> Bool {\n        guard lhs.url != nil && rhs.url != nil else {\n            return false\n        }\n        return lhs.url == rhs.url\n    }\n\n}\n\nextension NetResponse: CustomStringConvertible {\n\n    public var description: String {\n        var description = \"\"\n        if let statusCode = statusCode?.description {\n            description = description + statusCode\n        }\n        if let url = url?.description {\n            if description.count > 0 {\n                description = description + \" \"\n            }\n            description = description + url\n        }\n        if let localizedDescription = localizedDescription?.description {\n            if description.count > 0 {\n                description = description + \" \"\n            }\n            description = description + \"(\\(localizedDescription))\"\n        }\n        return description\n    }\n\n}\n\nextension NetResponse: CustomDebugStringConvertible {\n\n    public var debugDescription: String {\n        return description\n    }\n    \n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetServerTrust.swift",
    "content": "//\n//  NetServerTrust.swift\n//  Net\n//\n//  Created by Alex Rupérez on 16/8/17.\n//\n//\n\nimport Foundation\n\n/// The `NetServerTrust` evaluates the server trust generally provided by an `NSURLAuthenticationChallenge` when\n/// connecting to a server over a secure HTTPS connection. The policy configuration then evaluates the server trust\n/// with a given set of criteria to determine whether the server trust is valid and the connection should be made.\n///\n/// Using pinned certificates or public keys for evaluation helps prevent man-in-the-middle (MITM) attacks and other\n/// vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged\n/// to route all communication over an HTTPS connection with pinning enabled.\n///\n/// - performDefaultEvaluation: Uses the default server trust evaluation while allowing you to control whether to\n///                             validate the host provided by the challenge. Applications are encouraged to always\n///                             validate the host in production environments to guarantee the validity of the server's\n///                             certificate chain.\n///\n/// - performRevokedEvaluation: Uses the default and revoked server trust evaluations allowing you to control whether to\n///                             validate the host provided by the challenge as well as specify the revocation flags for\n///                             testing for revoked certificates. Apple platforms did not start testing for revoked\n///                             certificates automatically until iOS 10.1, macOS 10.12 and tvOS 10.1 which is\n///                             demonstrated in our TLS tests. Applications are encouraged to always validate the host\n///                             in production environments to guarantee the validity of the server's certificate chain.\n///\n/// - pinCertificates:          Uses the pinned certificates to validate the server trust. The server trust is\n///                             considered valid if one of the pinned certificates match one of the server certificates.\n///                             By validating both the certificate chain and host, certificate pinning provides a very\n///                             secure form of server trust validation mitigating most, if not all, MITM attacks.\n///                             Applications are encouraged to always validate the host and require a valid certificate\n///                             chain in production environments.\n///\n/// - pinPublicKeys:            Uses the pinned public keys to validate the server trust. The server trust is considered\n///                             valid if one of the pinned public keys match one of the server certificate public keys.\n///                             By validating both the certificate chain and host, public key pinning provides a very\n///                             secure form of server trust validation mitigating most, if not all, MITM attacks.\n///                             Applications are encouraged to always validate the host and require a valid certificate\n///                             chain in production environments.\n///\n/// - disableEvaluation:        Disables all evaluation which in turn will always consider any server trust as valid.\n///\n/// - customEvaluation:         Uses the associated closure to evaluate the validity of the server trust.\npublic enum NetServerTrust {\n    case performDefaultEvaluation(validateHost: Bool)\n    case performRevokedEvaluation(validateHost: Bool, revocationFlags: CFOptionFlags)\n    case pinCertificates(certificates: [SecCertificate], validateCertificateChain: Bool, validateHost: Bool)\n    case pinPublicKeys(publicKeys: [SecKey], validateCertificateChain: Bool, validateHost: Bool)\n    case disableEvaluation\n    case customEvaluation((_ serverTrust: SecTrust, _ host: String) -> Bool)\n\n    // MARK: - Bundle Location\n\n    /// Returns all certificates within the given bundle with a `.cer` file extension.\n    ///\n    /// - parameter bundle: The bundle to search for all `.cer` files.\n    ///\n    /// - returns: All certificates within the given bundle.\n    public static func certificates(_ bundle: Bundle = Bundle.main) -> [SecCertificate] {\n        var certificates: [SecCertificate] = []\n\n        let paths = Set([\".cer\", \".CER\", \".crt\", \".CRT\", \".der\", \".DER\"].map { fileExtension in\n            bundle.paths(forResourcesOfType: fileExtension, inDirectory: nil)\n        }.joined())\n\n        for path in paths {\n            if\n                let certificateData = try? Data(contentsOf: URL(fileURLWithPath: path)) as CFData,\n                let certificate = SecCertificateCreateWithData(nil, certificateData)\n            {\n                certificates.append(certificate)\n            }\n        }\n\n        return certificates\n    }\n\n    /// Returns all public keys within the given bundle with a `.cer` file extension.\n    ///\n    /// - parameter bundle: The bundle to search for all `*.cer` files.\n    ///\n    /// - returns: All public keys within the given bundle.\n    public static func publicKeys(_ bundle: Bundle = Bundle.main) -> [SecKey] {\n        var publicKeys: [SecKey] = []\n\n        for certificate in certificates(bundle) {\n            if let publicKey = publicKey(certificate) {\n                publicKeys.append(publicKey)\n            }\n        }\n\n        return publicKeys\n    }\n\n    // MARK: - Evaluation\n\n    /// Evaluates whether the server trust is valid for the given host.\n    ///\n    /// - parameter serverTrust: The server trust to evaluate.\n    /// - parameter host:        The host of the challenge protection space.\n    ///\n    /// - returns: Whether the server trust is valid.\n    public func evaluate(_ serverTrust: SecTrust, host: String) -> Bool {\n        var serverTrustIsValid = false\n\n        switch self {\n        case let .performDefaultEvaluation(validateHost):\n            let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil)\n            SecTrustSetPolicies(serverTrust, policy)\n\n            serverTrustIsValid = trustIsValid(serverTrust)\n        case let .performRevokedEvaluation(validateHost, revocationFlags):\n            let defaultPolicy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil)\n            let revokedPolicy = SecPolicyCreateRevocation(revocationFlags)\n            SecTrustSetPolicies(serverTrust, [defaultPolicy, revokedPolicy] as CFTypeRef)\n\n            serverTrustIsValid = trustIsValid(serverTrust)\n        case let .pinCertificates(pinnedCertificates, validateCertificateChain, validateHost):\n            if validateCertificateChain {\n                let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil)\n                SecTrustSetPolicies(serverTrust, policy)\n\n                SecTrustSetAnchorCertificates(serverTrust, pinnedCertificates as CFArray)\n                SecTrustSetAnchorCertificatesOnly(serverTrust, true)\n\n                serverTrustIsValid = trustIsValid(serverTrust)\n            } else {\n                let serverCertificatesDataArray = certificateData(serverTrust)\n                let pinnedCertificatesDataArray = certificateData(pinnedCertificates)\n\n                outerLoop: for serverCertificateData in serverCertificatesDataArray {\n                    for pinnedCertificateData in pinnedCertificatesDataArray {\n                        if serverCertificateData == pinnedCertificateData {\n                            serverTrustIsValid = true\n                            break outerLoop\n                        }\n                    }\n                }\n            }\n        case let .pinPublicKeys(pinnedPublicKeys, validateCertificateChain, validateHost):\n            var certificateChainEvaluationPassed = true\n\n            if validateCertificateChain {\n                let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil)\n                SecTrustSetPolicies(serverTrust, policy)\n\n                certificateChainEvaluationPassed = trustIsValid(serverTrust)\n            }\n\n            if certificateChainEvaluationPassed {\n                outerLoop: for serverPublicKey in NetServerTrust.publicKeys(serverTrust) as [AnyObject] {\n                    for pinnedPublicKey in pinnedPublicKeys as [AnyObject] {\n                        if serverPublicKey.isEqual(pinnedPublicKey) {\n                            serverTrustIsValid = true\n                            break outerLoop\n                        }\n                    }\n                }\n            }\n        case .disableEvaluation:\n            serverTrustIsValid = true\n        case let .customEvaluation(closure):\n            serverTrustIsValid = closure(serverTrust, host)\n        }\n\n        return serverTrustIsValid\n    }\n\n    // MARK: - Private - Trust Validation\n\n    private func trustIsValid(_ trust: SecTrust) -> Bool {\n        var isValid = false\n\n        var result = SecTrustResultType.invalid\n        let status = SecTrustEvaluate(trust, &result)\n\n        if status == errSecSuccess {\n            let unspecified = SecTrustResultType.unspecified\n            let proceed = SecTrustResultType.proceed\n\n\n            isValid = result == unspecified || result == proceed\n        }\n\n        return isValid\n    }\n\n    // MARK: - Private - Certificate Data\n\n    private func certificateData(_ trust: SecTrust) -> [Data] {\n        var certificates: [SecCertificate] = []\n\n        for index in 0..<SecTrustGetCertificateCount(trust) {\n            if let certificate = SecTrustGetCertificateAtIndex(trust, index) {\n                certificates.append(certificate)\n            }\n        }\n\n        return certificateData(certificates)\n    }\n\n    private func certificateData(_ certificates: [SecCertificate]) -> [Data] {\n        return certificates.map { SecCertificateCopyData($0) as Data }\n    }\n\n    // MARK: - Private - Public Key Extraction\n\n    private static func publicKeys(_ trust: SecTrust) -> [SecKey] {\n        var publicKeys: [SecKey] = []\n\n        for index in 0..<SecTrustGetCertificateCount(trust) {\n            if\n                let certificate = SecTrustGetCertificateAtIndex(trust, index),\n                let publicKey = publicKey(certificate)\n            {\n                publicKeys.append(publicKey)\n            }\n        }\n\n        return publicKeys\n    }\n\n    private static func publicKey(_ certificate: SecCertificate) -> SecKey? {\n        var publicKey: SecKey?\n\n        let policy = SecPolicyCreateBasicX509()\n        var trust: SecTrust?\n        let trustCreationStatus = SecTrustCreateWithCertificates(certificate, policy, &trust)\n\n        if let trust = trust, trustCreationStatus == errSecSuccess {\n            publicKey = SecTrustCopyPublicKey(trust)\n        }\n\n        return publicKey\n    }\n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetTask.swift",
    "content": "//\n//  NetTask.swift\n//  Net\n//\n//  Created by Alex Rupérez on 25/3/17.\n//\n//\n\nimport Foundation\n\npublic typealias NetTaskIdentifier = Int\n\npublic protocol NetTaskProtocol: class {\n\n    @available(iOS 11.0, tvOS 11.0, watchOS 4.0, OSX 10.13, *)\n    var progress: Progress { get }\n\n    func cancel()\n\n    func suspend()\n\n    func resume()\n\n}\n\nopen class NetTask {\n\n    public enum NetState : Int {\n        case running, suspended, canceling, completed\n    }\n\n    open let identifier: NetTaskIdentifier\n\n    open internal(set) var request: NetRequest?\n\n    open internal(set) var response: NetResponse? {\n        didSet {\n            state = .completed\n        }\n    }\n\n    open let taskDescription: String?\n\n    open internal(set) var state: NetState\n\n    open internal(set) var error: NetError? {\n        didSet {\n            state = .completed\n        }\n    }\n\n    open internal(set) var priority: Float?\n\n    open internal(set) var progress: Progress\n\n    open internal(set) var metrics: NetTaskMetrics?\n\n    var netTask: NetTaskProtocol?\n\n    open internal(set) var retryCount: UInt = 0\n\n    fileprivate(set) var dispatchSemaphore: DispatchSemaphore?\n\n    var completionClosure: CompletionClosure?\n\n    fileprivate(set) var retryClosure: RetryClosure?\n\n    var progressClosure: ProgressClosure?\n\n    public init(_ identifier: NetTaskIdentifier? = nil, request: NetRequest? = nil , response: NetResponse? = nil, taskDescription: String? = nil, state: NetState = .suspended, error: NetError? = nil, priority: Float? = nil, progress: Progress? = nil, metrics: NetTaskMetrics? = nil, task: NetTaskProtocol? = nil) {\n        self.request = request\n        self.identifier = identifier ?? NetTaskIdentifier(arc4random())\n        self.response = response\n        self.taskDescription = taskDescription ?? request?.description\n        self.state = state\n        self.error = error\n        self.priority = priority\n        if let progress = progress {\n            self.progress = progress\n        } else if #available(iOS 11.0, tvOS 11.0, watchOS 4.0, OSX 10.13, *), let progress = task?.progress {\n            self.progress = progress\n        } else {\n            self.progress = Progress(totalUnitCount: Int64(request?.contentLength ?? 0))\n        }\n        self.netTask = task\n    }\n\n}\n\nextension NetTask {\n\n    public typealias CompletionClosure = (NetResponse?, NetError?) -> Swift.Void\n    public typealias RetryClosure = (NetResponse?, NetError?, UInt) -> Bool\n\n    @discardableResult open func async(_ completion: CompletionClosure? = nil) -> Self {\n        guard state == .suspended else {\n            return self\n        }\n        completionClosure = completion\n        resume()\n        return self\n    }\n\n    open func sync() throws -> NetResponse {\n        guard state == .suspended else {\n            if let response = response {\n                return response\n            } else if let error = error {\n                throw error\n            } else {\n                throw NetError.net(code: error?._code, message: error?.localizedDescription ?? \"\", headers: response?.headers, object: response?.responseObject, underlying: error)\n            }\n        }\n        dispatchSemaphore = DispatchSemaphore(value: 0)\n        resume()\n        let dispatchTimeoutResult = dispatchSemaphore?.wait(timeout: DispatchTime.distantFuture)\n        if dispatchTimeoutResult == .timedOut {\n            let urlError = URLError(.timedOut)\n            error = NetError.net(code: urlError._code, message: urlError.localizedDescription, headers: response?.headers, object: response?.responseObject, underlying: urlError)\n        }\n        if let error = error {\n            throw error\n        }\n        return response!\n    }\n\n    open func cached() throws -> NetResponse {\n        if let response = response {\n            return response\n        }\n        guard let urlRequest = request?.urlRequest else {\n            guard let taskError = error else {\n                let error = URLError(.resourceUnavailable)\n                throw NetError.net(code: error._code, message: \"Request not found.\", headers: response?.headers, object: response?.responseObject, underlying: error)\n            }\n            throw taskError\n        }\n        if let cachedResponse = URLCache.shared.cachedResponse(for: urlRequest) {\n            return NetResponse(cachedResponse, self)\n        }\n        guard let taskError = error else {\n            let error = URLError(.resourceUnavailable)\n            throw NetError.net(code: error._code, message: \"Cached response not found.\", headers: response?.headers, object: response?.responseObject, underlying: error)\n        }\n        throw taskError\n    }\n\n    @discardableResult open func retry(_ retry: @escaping RetryClosure) -> Self {\n        retryClosure = retry\n        return self\n    }\n\n}\n\nextension NetTask {\n\n    public typealias ProgressClosure = (Progress) -> Swift.Void\n\n    @discardableResult open func progress(_ progressClosure: ProgressClosure?) -> Self {\n        self.progressClosure = progressClosure\n        return self\n    }\n\n}\n\nextension NetTask: NetTaskProtocol {\n\n    open func cancel() {\n        state = .canceling\n        netTask?.cancel()\n    }\n\n    open func suspend() {\n        state = .suspended\n        netTask?.suspend()\n    }\n\n    open func resume() {\n        state = .running\n        netTask?.resume()\n    }\n\n}\n\nextension NetTask: Hashable {\n\n    open var hashValue: Int {\n        return identifier.hashValue\n    }\n    \n}\n\nextension NetTask: Equatable {\n\n    open static func ==(lhs: NetTask, rhs: NetTask) -> Bool {\n        return lhs.identifier == rhs.identifier\n    }\n\n}\n\nextension NetTask: CustomStringConvertible {\n\n    open var description: String {\n        var description = String(describing: NetTask.self) + \" \" + identifier.description + \" (\" + String(describing: state) + \")\"\n        if let taskDescription = taskDescription {\n            description = description + \" \" + taskDescription\n        }\n        return description\n    }\n\n}\n\nextension NetTask: CustomDebugStringConvertible {\n\n    open var debugDescription: String {\n        return description\n    }\n    \n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetTaskMetrics+URLSessionTaskMetrics.swift",
    "content": "//\n//  NetTaskMetrics+URLSessionTaskMetrics.swift\n//  Net\n//\n//  Created by Alex Rupérez on 25/3/17.\n//\n//\n\nimport Foundation\n\n@available(iOS 10.0, tvOS 10.0, watchOS 3.0, OSX 10.12, *)\nextension NetTaskMetrics {\n\n    public init(_ urlSessionTaskMetrics: URLSessionTaskMetrics, request: NetRequest? = nil, response: NetResponse? = nil) {\n        var transactionMetrics = [NetTransactionMetrics]()\n        #if !os(watchOS)\n        transactionMetrics = urlSessionTaskMetrics.transactionMetrics.flatMap { transactionMetrics -> NetTransactionMetrics in\n            NetTransactionMetrics(request: request, response: response, fetchStartDate: transactionMetrics.fetchStartDate, domainLookupStartDate: transactionMetrics.domainLookupStartDate, domainLookupEndDate: transactionMetrics.domainLookupEndDate, connectStartDate: transactionMetrics.connectStartDate, secureConnectionStartDate: transactionMetrics.secureConnectionStartDate, secureConnectionEndDate: transactionMetrics.secureConnectionEndDate, connectEndDate: transactionMetrics.connectEndDate, requestStartDate: transactionMetrics.requestStartDate, requestEndDate: transactionMetrics.requestEndDate, responseStartDate: transactionMetrics.responseStartDate, responseEndDate: transactionMetrics.responseEndDate, networkProtocolName: transactionMetrics.networkProtocolName, isProxyConnection: transactionMetrics.isProxyConnection, isReusedConnection: transactionMetrics.isReusedConnection, resourceFetchType: NetTransactionMetrics.NetResourceFetchType(rawValue: transactionMetrics.resourceFetchType.rawValue) ?? .unknown)\n        }\n        #endif\n        self.init(transactionMetrics: transactionMetrics, taskInterval: urlSessionTaskMetrics.taskInterval.duration, redirectCount: urlSessionTaskMetrics.redirectCount)\n    }\n    \n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetTaskMetrics.swift",
    "content": "//\n//  NetTaskMetrics.swift\n//  Net\n//\n//  Created by Alex Rupérez on 25/3/17.\n//\n//\n\nimport Foundation\n\npublic struct NetTaskMetrics {\n\n    public struct NetTransactionMetrics {\n\n        public enum NetResourceFetchType : Int {\n            case unknown, networkLoad, serverPush, localCache\n        }\n\n        public let request: NetRequest?\n\n        public let response: NetResponse?\n\n        public let fetchStartDate: Date?\n\n        public let domainLookupStartDate: Date?\n\n        public let domainLookupEndDate: Date?\n\n        public let connectStartDate: Date?\n\n        public let secureConnectionStartDate: Date?\n\n        public let secureConnectionEndDate: Date?\n\n        public let connectEndDate: Date?\n\n        public let requestStartDate: Date?\n\n        public let requestEndDate: Date?\n\n        public let responseStartDate: Date?\n\n        public let responseEndDate: Date?\n\n        public let networkProtocolName: String?\n\n        public let isProxyConnection: Bool\n\n        public let isReusedConnection: Bool\n\n        public let resourceFetchType: NetResourceFetchType\n\n    }\n\n    public let transactionMetrics: [NetTransactionMetrics]\n\n    public let taskInterval: TimeInterval\n\n    public let redirectCount: Int\n    \n}\n"
  },
  {
    "path": "Pods/NetClient/Core/NetTransformer.swift",
    "content": "//\n//  NetTransformer.swift\n//  Net\n//\n//  Created by Alex Rupérez on 5/4/17.\n//\n//\n\nimport Foundation\n\nclass NetTransformer {\n\n    static func object<T>(object: Any?) throws -> T {\n        if let responseObject = object as? T {\n            return responseObject\n        }\n        var underlying: Error?\n        if let data = object as? Data {\n            if T.self == String.self, let stringObject = String(data: data, encoding: .utf8) as? T {\n                return stringObject\n            }\n            do {\n                if let jsonObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? T {\n                    return jsonObject\n                }\n            } catch {\n                underlying = error\n            }\n            do {\n                if let propertyListObject = try PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? T {\n                    return propertyListObject\n                }\n            } catch {\n                if underlying == nil {\n                    underlying = error\n                }\n            }\n        }\n        throw NetError.parse(code: underlying?._code, message: \"The data couldn’t be transformed into \\(T.self).\", object: object, underlying: underlying)\n    }\n\n    static func decode<T: Decodable>(object: Any?) throws -> T {\n        var underlying: Error?\n        if let data = object as? Data {\n            do {\n                return try JSONDecoder().decode(T.self, from: data)\n            } catch {\n                underlying = error\n            }\n            do {\n                return try PropertyListDecoder().decode(T.self, from: data)\n            } catch {\n                if underlying == nil {\n                    underlying = error\n                }\n            }\n        }\n        throw NetError.parse(code: underlying?._code, message: \"The data couldn’t be transformed into \\(T.self).\", object: object, underlying: underlying)\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 Intelygenz <alejandro.ruperez@intelygenz.com>\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": "Pods/NetClient/README.md",
    "content": "<p align=\"center\">\n  <img src=\"https://github.com/intelygenz/NetClient-iOS/raw/develop/Logo.png\">\n</p>\n\n[![Twitter](https://img.shields.io/badge/contact-@intelygenz-0FABFF.svg?style=flat)](http://twitter.com/intelygenz)\n[![Version](https://img.shields.io/cocoapods/v/NetClient.svg?style=flat)](http://cocoapods.org/pods/NetClient)\n[![License](https://img.shields.io/cocoapods/l/NetClient.svg?style=flat)](http://cocoapods.org/pods/NetClient)\n[![Platform](https://img.shields.io/cocoapods/p/NetClient.svg?style=flat)](http://cocoapods.org/pods/NetClient)\n[![Swift](https://img.shields.io/badge/Swift-4-orange.svg?style=flat)](https://swift.org)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![Swift Package Manager Compatible](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-4BC51D.svg?style=flat)](https://github.com/apple/swift-package-manager)\n[![Build Status](https://travis-ci.org/intelygenz/NetClient-iOS.svg?branch=master)](https://travis-ci.org/intelygenz/NetClient-iOS)\n\n**Net** is a versatile HTTP networking library written in Swift.\n\n## 🌟 Features\n\n- [x] URL / JSON / Property List Parameter Encoding\n- [x] Upload File / Data / Stream / Multipart Form Data\n- [x] Download File using Request or Resume Data\n- [x] Authentication with URLCredential\n- [x] Basic, Bearer and Custom Authorization Handling\n- [x] Default and Custom Cache Controls\n- [x] Default and Custom Content Types\n- [x] Upload and Download Progress Closures with Progress\n- [x] cURL Command Debug Output\n- [x] Request and Response Interceptors\n- [x] Asynchronous and synchronous task execution\n- [x] Inference of response object type\n- [x] Network reachability\n- [x] TLS Certificate and Public Key Pinning\n- [x] Retry requests\n- [x] Codable / Decodable / Encodable protocols compatible (JSON / Property List)\n- [x] watchOS Compatible\n- [x] tvOS Compatible\n- [x] macOS Compatible\n- [x] [Alamofire](https://github.com/Alamofire/Alamofire) Implementation\n- [x] [Moya](https://github.com/Moya/Moya)Provider Extension\n- [x] [Kommander](https://github.com/intelygenz/Kommander-iOS) Extension\n\n## 📋 Requirements\n\n- iOS 8.0+ / macOS 10.9+ / tvOS 9.0+ / watchOS 2.0+\n- Xcode 9.0+\n- Swift 4.0+\n\n## 📲 Installation\n\nNet is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod 'NetClient'\n```\n\nFor Swift 3 compatibility use:\n\n```ruby\npod 'NetClient', '~> 0.2'\n```\n\n#### Or you can install it with [Carthage](https://github.com/Carthage/Carthage):\n\n```ogdl\ngithub \"intelygenz/NetClient-iOS\"\n```\n\n#### Or install it with [Swift Package Manager](https://swift.org/package-manager/):\n\n```swift\ndependencies: [\n    .Package(url: \"https://github.com/intelygenz/NetClient-iOS.git\")\n]\n```\n\n## 🐒 Usage\n\n### Build a NetRequest\n\n```swift\nimport Net\n\nlet request = NetRequest.builder(\"YOUR_URL\")!\n            .setAccept(.json)\n            .setCache(.reloadIgnoringLocalCacheData)\n            .setMethod(.PATCH)\n            .setTimeout(20)\n            .setJSONBody([\"foo\", \"bar\"])\n            .setContentType(.json)\n            .setServiceType(.background)\n            .setCacheControls([.maxAge(500)])\n            .setURLParameters([\"foo\": \"bar\"])\n            .setAcceptEncodings([.gzip, .deflate])\n            .setBasicAuthorization(user: \"user\", password: \"password\")\n            .setHeaders([\"foo\": \"bar\"])\n            .build()\n```\n\n### Request asynchronously\n\n```swift\nimport Net\n\nlet net = NetURLSession.shared\n\nnet.data(URL(string: \"YOUR_URL\")!).async { (response, error) in\n    do {\n        if let object: [AnyHashable: Any] = try response?.object() {\n            print(\"Response dictionary: \\(object)\")\n        } else if let error = error {\n            print(\"Net error: \\(error)\")\n        }\n    } catch {\n        print(\"Parse error: \\(error)\")\n    }\n}\n```\n\n### Request synchronously\n\n```swift\nimport Net\n\nlet net = NetURLSession.shared\n\ndo {\n    let object: [AnyHashable: Any] = try net.data(\"YOUR_URL\").sync().object()\n    print(\"Response dictionary: \\(object)\")\n} catch {\n    print(\"Error: \\(error)\")\n}\n```\n\n### Request from cache\n\n```swift\nimport Net\n\nlet net = NetURLSession.shared\n\ndo {\n    let object: [AnyHashable: Any] = try net.data(\"YOUR_URL\").cached().object()\n    print(\"Response dictionary: \\(object)\")\n} catch {\n    print(\"Error: \\(error)\")\n}\n```\n\n### Track progress\n\n```swift\nimport Net\n\nlet net = NetURLSession.shared\n\ndo {\n    let task = try net.data(\"YOUR_URL\").progress({ progress in\n        print(progress)\n    }).sync()\n} catch {\n    print(\"Error: \\(error)\")\n}\n```\n\n### Add interceptors for all requests\n\n```swift\nimport Net\n\nlet net = NetURLSession.shared\n\nnet.addRequestInterceptor { request in\n    request.addHeader(\"foo\", value: \"bar\")\n    request.setBearerAuthorization(token: \"token\")\n    return request\n}\n```\n\n### Retry requests\n\n```swift\nimport Net\n\nlet net = NetURLSession.shared\n\nnet.retryClosure = { response, _, _ in response?.statusCode == XXX }\n\ndo {\n    let task = try net.data(\"YOUR_URL\").retry({ response, error, retryCount in\n        return retryCount < 2\n    }).sync()\n} catch {\n    print(\"Error: \\(error)\")\n}\n```\n\n## 🧙‍♂️ Codable\n\n### Encodable\n\n```swift\nimport Net\n\nlet request = NetRequest.builder(\"YOUR_URL\")!\n            .setJSONObject(Encodable)\n            .build()\n```\n\n### Decodable\n\n```swift\nimport Net\n\nlet net = NetURLSession.shared\n\ndo {\n    let object: Decodable = try net.data(\"YOUR_URL\").sync().decode()\n    print(\"Response object: \\(object)\")\n} catch {\n    print(\"Error: \\(error)\")\n}\n```\n\n## 🤝 Integrations\n\n### Love [Alamofire](https://github.com/Alamofire/Alamofire)?\n\n```ruby\npod 'NetClient/Alamofire'\n```\n\n```swift\nimport Net\n\nlet net = NetAlamofire.shared\n\n...\n```\n\n### Love [Moya](https://github.com/Moya/Moya)?\n\n```ruby\npod 'NetClient/Moya'\n```\n\n```swift\nimport Net\nimport Moya\n\nlet request = NetRequest(\"YOUR_URL\")!\nlet provider = MoyaProvider<NetRequest>()\nprovider.request(request) { result in\n    switch result {\n    case let .success(response):\n        print(\"Response: \\(response)\")\n    case let .failure(error):\n        print(\"Error: \\(error)\")\n    }\n}\n```\n\n### Love [Kommander](https://github.com/intelygenz/Kommander-iOS)?\n\n```ruby\npod 'NetClient/Kommander'\n```\n\n```swift\nimport Net\nimport Kommander\n\nlet net = NetURLSession.shared\nlet kommander = Kommander.default\n\nnet.data(URL(string: \"YOUR_URL\")!).execute(by: kommander, onSuccess: { object in\n    print(\"Response dictionary: \\(object as [AnyHashable: Any])\")\n}) { error in\n    print(\"Error: \\(String(describing: error?.localizedDescription))\")\n}\n\nnet.data(URL(string: \"YOUR_URL\")!).executeDecoding(by: kommander, onSuccess: { object in\n\tprint(\"Response object: \\(object as Decodable)\")\n}) { error in\n    print(\"Error: \\(String(describing: error?.localizedDescription))\")\n}\n```\n\n## ❤️ Etc.\n\n* Contributions are very welcome.\n* Attribution is appreciated (let's spread the word!), but not mandatory.\n\n## 👨‍💻 Authors\n\n[alexruperez](https://github.com/alexruperez), alejandro.ruperez@intelygenz.com\n\n## 👮‍♂️ License\n\nNet is available under the MIT license. See the LICENSE file for more info.\n"
  },
  {
    "path": "Pods/NetClient/URLSession/NetTask+URLSessionTask.swift",
    "content": "//\n//  NetTask+URLSessionTask.swift\n//  Net\n//\n//  Created by Alex Rupérez on 25/3/17.\n//\n//\n\nimport Foundation\n\nextension NetTask {\n\n    public convenience init(_ urlSessionTask: URLSessionTask, request: NetRequest? = nil, response: NetResponse? = nil, error: NetError? = nil) {\n        self.init(urlSessionTask.taskIdentifier, request: request, response: response, taskDescription: urlSessionTask.taskDescription, state: NetState(rawValue: urlSessionTask.state.rawValue) ?? .suspended, error: error, priority: urlSessionTask.priority, task: urlSessionTask)\n    }\n    \n}\n\nextension URLSessionTask: NetTaskProtocol {}\n"
  },
  {
    "path": "Pods/NetClient/URLSession/NetURLSession+Data.swift",
    "content": "//\n//  NetURLSession+Data.swift\n//  Net\n//\n//  Created by Alex Rupérez on 17/3/17.\n//\n//\n\nextension NetURLSession {\n\n    open func data(_ request: NetRequest) -> NetTask {\n        var netDataTask: NetTask?\n        let task = session.dataTask(with: urlRequest(request)) { [weak self] (data, response, error) in\n            let netResponse = self?.netResponse(response, netDataTask, data)\n            let netError = self?.netError(error, data, response)\n            self?.process(netDataTask, netResponse, netError)\n        }\n        netDataTask = netTask(task, request)\n        observe(task, netDataTask)\n        return netDataTask!\n    }\n\n    open func data(_ request: URLRequest) throws -> NetTask {\n        guard let netRequest = request.netRequest else {\n            throw netError(URLError(.badURL))!\n        }\n        return data(netRequest)\n    }\n\n    open func data(_ url: URL, cachePolicy: NetRequest.NetCachePolicy? = nil, timeoutInterval: TimeInterval? = nil) -> NetTask {\n        return data(netRequest(url, cache: cachePolicy, timeout: timeoutInterval))\n    }\n\n    open func data(_ urlString: String, cachePolicy: NetRequest.NetCachePolicy? = nil, timeoutInterval: TimeInterval? = nil) throws -> NetTask {\n        guard let url = URL(string: urlString) else {\n            throw netError(URLError(.badURL))!\n        }\n        return data(url, cachePolicy: cachePolicy, timeoutInterval: timeoutInterval)\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/URLSession/NetURLSession+Download.swift",
    "content": "//\n//  NetURLSession+Download.swift\n//  Net\n//\n//  Created by Alex Rupérez on 17/3/17.\n//\n//\n\nextension NetURLSession {\n\n    open func download(_ resumeData: Data) -> NetTask {\n        var netDownloadTask: NetTask?\n        let task = session.downloadTask(withResumeData: resumeData) { [weak self] (url, response, error) in\n            let netResponse = self?.netResponse(response, netDownloadTask, url)\n            let netError = self?.netError(error, url, response)\n            self?.process(netDownloadTask, netResponse, netError)\n        }\n        netDownloadTask = netTask(task)\n        observe(task, netDownloadTask)\n        return netDownloadTask!\n    }\n\n    open func download(_ request: NetRequest) -> NetTask {\n        var netDownloadTask: NetTask?\n        let task = session.downloadTask(with: urlRequest(request)) { [weak self] (url, response, error) in\n            let netResponse = self?.netResponse(response, netDownloadTask, url)\n            let netError = self?.netError(error, url, response)\n            self?.process(netDownloadTask, netResponse, netError)\n        }\n        netDownloadTask = netTask(task, request)\n        observe(task, netDownloadTask)\n        return netDownloadTask!\n    }\n\n    open func download(_ request: URLRequest) throws -> NetTask {\n        guard let netRequest = request.netRequest else {\n            throw netError(URLError(.badURL))!\n        }\n        return download(netRequest)\n    }\n\n    open func download(_ url: URL, cachePolicy: NetRequest.NetCachePolicy? = nil, timeoutInterval: TimeInterval? = nil) -> NetTask {\n        return download(netRequest(url, cache: cachePolicy, timeout: timeoutInterval))\n    }\n\n    open func download(_ urlString: String, cachePolicy: NetRequest.NetCachePolicy? = nil, timeoutInterval: TimeInterval? = nil) throws -> NetTask {\n        guard let url = URL(string: urlString) else {\n            throw netError(URLError(.badURL))!\n        }\n        return download(url, cachePolicy: cachePolicy, timeoutInterval: timeoutInterval)\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/URLSession/NetURLSession+Stream.swift",
    "content": "//\n//  NetURLSession+Stream.swift\n//  Net\n//\n//  Created by Alex Rupérez on 17/3/17.\n//\n//\n\n#if !os(watchOS)\n@available(iOS 9.0, OSX 10.11, *)\nextension NetURLSession {\n\n    open func stream(_ netService: NetService) -> NetTask {\n        let task = session.streamTask(with: netService)\n        let netStreamTask = netTask(task)\n        observe(task, netStreamTask)\n        return netStreamTask\n    }\n\n    open func stream(_ domain: String, type: String, name: String = \"\", port: Int32? = nil) -> NetTask {\n        guard let port = port else {\n            return stream(NetService(domain: domain, type: type, name: name))\n        }\n        return stream(NetService(domain: domain, type: type, name: name, port: port))\n    }\n\n    open func stream(_ hostName: String, port: Int) -> NetTask {\n        let task = session.streamTask(withHostName: hostName, port: port)\n        let netStreamTask = netTask(task)\n        observe(task, netStreamTask)\n        return netStreamTask\n    }\n\n}\n#endif\n"
  },
  {
    "path": "Pods/NetClient/URLSession/NetURLSession+Upload.swift",
    "content": "//\n//  NetURLSession+Upload.swift\n//  Net\n//\n//  Created by Alex Rupérez on 17/3/17.\n//\n//\n\nextension NetURLSession {\n\n    open func upload(_ streamedRequest: NetRequest) -> NetTask {\n        let task = session.uploadTask(withStreamedRequest: urlRequest(streamedRequest))\n        let netUploadTask = netTask(task, streamedRequest)\n        observe(task, netUploadTask)\n        return netUploadTask\n    }\n\n    open func upload(_ streamedRequest: URLRequest) throws -> NetTask {\n        guard let netRequest = streamedRequest.netRequest else {\n            throw netError(URLError(.badURL))!\n        }\n        return upload(netRequest)\n    }\n\n    open func upload(_ streamedURL: URL, cachePolicy: NetRequest.NetCachePolicy? = nil, timeoutInterval: TimeInterval? = nil) -> NetTask {\n        return upload(netRequest(streamedURL, cache: cachePolicy, timeout: timeoutInterval))\n    }\n\n    open func upload(_ streamedURLString: String, cachePolicy: NetRequest.NetCachePolicy? = nil, timeoutInterval: TimeInterval? = nil) throws -> NetTask {\n        guard let url = URL(string: streamedURLString) else {\n            throw netError(URLError(.badURL))!\n        }\n        return upload(url, cachePolicy: cachePolicy, timeoutInterval: timeoutInterval)\n    }\n\n    open func upload(_ request: NetRequest, data: Data) -> NetTask {\n        var netUploadTask: NetTask?\n        let task = session.uploadTask(with: urlRequest(request), from: data) { [weak self] (data, response, error) in\n            let netResponse = self?.netResponse(response, netUploadTask, data)\n            let netError = self?.netError(error, data, response)\n            self?.process(netUploadTask, netResponse, netError)\n        }\n        netUploadTask = netTask(task, request)\n        observe(task, netUploadTask)\n        return netUploadTask!\n    }\n\n    open func upload(_ request: URLRequest, data: Data) throws -> NetTask {\n        guard let netRequest = request.netRequest else {\n            throw netError(URLError(.badURL))!\n        }\n        return upload(netRequest, data: data)\n    }\n\n    open func upload(_ url: URL, data: Data, cachePolicy: NetRequest.NetCachePolicy? = nil, timeoutInterval: TimeInterval? = nil) -> NetTask {\n        return upload(netRequest(url, cache: cachePolicy, timeout: timeoutInterval), data: data)\n    }\n\n    open func upload(_ urlString: String, data: Data, cachePolicy: NetRequest.NetCachePolicy? = nil, timeoutInterval: TimeInterval? = nil) throws -> NetTask {\n        guard let url = URL(string: urlString) else {\n            throw netError(URLError(.badURL))!\n        }\n        return upload(url, data: data, cachePolicy: cachePolicy, timeoutInterval: timeoutInterval)\n    }\n\n    open func upload(_ request: NetRequest, fileURL: URL) -> NetTask {\n        var netUploadTask: NetTask?\n        let task = session.uploadTask(with: urlRequest(request), fromFile: fileURL) { [weak self] (data, response, error) in\n            let netResponse = self?.netResponse(response, netUploadTask, data)\n            let netError = self?.netError(error, data, response)\n            self?.process(netUploadTask, netResponse, netError)\n        }\n        netUploadTask = netTask(task, request)\n        observe(task, netUploadTask)\n        return netUploadTask!\n    }\n\n    open func upload(_ request: URLRequest, fileURL: URL) throws -> NetTask {\n        guard let netRequest = request.netRequest else {\n            throw netError(URLError(.badURL))!\n        }\n        return upload(netRequest, fileURL: fileURL)\n    }\n\n    open func upload(_ url: URL, fileURL: URL, cachePolicy: NetRequest.NetCachePolicy? = nil, timeoutInterval: TimeInterval? = nil) -> NetTask {\n        return upload(netRequest(url, cache: cachePolicy, timeout: timeoutInterval), fileURL: fileURL)\n    }\n\n    open func upload(_ urlString: String, fileURL: URL, cachePolicy: NetRequest.NetCachePolicy? = nil, timeoutInterval: TimeInterval? = nil) throws -> NetTask {\n        guard let url = URL(string: urlString) else {\n            throw netError(URLError(.badURL))!\n        }\n        return upload(url, fileURL: fileURL, cachePolicy: cachePolicy, timeoutInterval: timeoutInterval)\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/URLSession/NetURLSession.swift",
    "content": "//\n//  NetURLSession.swift\n//  Net\n//\n//  Created by Alex Rupérez on 16/3/17.\n//\n//\n\nimport Foundation\n\npublic class NetURLSession: Net {\n\n    open static let shared: Net = NetURLSession(URLSession.shared)\n\n    open static let defaultCache: URLCache = {\n        let defaultMemoryCapacity = 4 * 1024 * 1024\n        let defaultDiskCapacity = 5 * defaultMemoryCapacity\n        let cachesDirectoryURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first\n        let cacheURL = cachesDirectoryURL?.appendingPathComponent(String(describing: NetURLSession.self))\n        var defaultDiskPath = cacheURL?.path\n        #if os(OSX)\n        defaultDiskPath = cacheURL?.absoluteString\n        #endif\n        return URLCache(memoryCapacity: defaultMemoryCapacity, diskCapacity: defaultDiskCapacity, diskPath: defaultDiskPath)\n    }()\n\n    open private(set) var session: URLSession!\n\n    open var delegate: URLSessionDelegate? { return session.delegate }\n\n    open var delegateQueue: OperationQueue { return session.delegateQueue }\n\n    open var configuration: URLSessionConfiguration { return session.configuration }\n\n    open var sessionDescription: String? {\n        get {\n            return session.sessionDescription\n        }\n        set {\n            session.sessionDescription = newValue\n        }\n    }\n\n    open var requestInterceptors = [RequestInterceptor]()\n\n    open var responseInterceptors = [ResponseInterceptor]()\n\n    open var retryClosure: NetTask.RetryClosure?\n\n    open private(set) var authChallenge: ((URLAuthenticationChallenge, (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) -> Swift.Void)?\n\n    open private(set) var serverTrust = [String: NetServerTrust]()\n\n    fileprivate final var taskObserver: NetURLSessionTaskObserver? = NetURLSessionTaskObserver()\n\n    public convenience init() {\n        let defaultConfiguration = URLSessionConfiguration.default\n        defaultConfiguration.urlCache = NetURLSession.defaultCache\n        self.init(defaultConfiguration)\n    }\n\n    public init(_ urlSession: URLSession) {\n        session = urlSession\n    }\n\n    public init(_ configuration: URLSessionConfiguration, delegateQueue: OperationQueue? = nil, delegate: URLSessionDelegate? = nil) {\n        let sessionDelegate = delegate ?? NetURLSessionDelegate(self)\n        session = URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: delegateQueue)\n    }\n\n    public init(_ configuration: URLSessionConfiguration, challengeQueue: OperationQueue? = nil, authenticationChallenge: @escaping (URLAuthenticationChallenge, (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) -> Swift.Void) {\n        session = URLSession(configuration: configuration, delegate: NetURLSessionDelegate(self), delegateQueue: challengeQueue)\n        authChallenge = authenticationChallenge\n    }\n\n    public init(_ configuration: URLSessionConfiguration, challengeQueue: OperationQueue? = nil, serverTrustPolicies: [String: NetServerTrust]) {\n        session = URLSession(configuration: configuration, delegate: NetURLSessionDelegate(self), delegateQueue: challengeQueue)\n        serverTrust = serverTrustPolicies\n    }\n\n    open func addRequestInterceptor(_ interceptor: @escaping RequestInterceptor) {\n        requestInterceptors.append(interceptor)\n    }\n\n    open func addResponseInterceptor(_ interceptor: @escaping ResponseInterceptor) {\n        responseInterceptors.append(interceptor)\n    }\n\n    deinit {\n        taskObserver = nil\n        authChallenge = nil\n        session.invalidateAndCancel()\n        session = nil\n    }\n    \n}\n\nextension NetURLSession {\n\n    func observe(_ task: URLSessionTask, _ netTask: NetTask?) {\n        taskObserver?.add(task, netTask)\n        if let delegate = delegate as? NetURLSessionDelegate {\n            delegate.add(task, netTask)\n        }\n    }\n\n    func urlRequest(_ netRequest: NetRequest) -> URLRequest {\n        var builder = netRequest.builder()\n        requestInterceptors.forEach({ interceptor in\n            builder = interceptor(builder)\n        })\n        return builder.build().urlRequest\n    }\n\n    func netRequest(_ url: URL, cache: NetRequest.NetCachePolicy? = nil, timeout: TimeInterval? = nil) -> NetRequest {\n        let cache = cache ?? NetRequest.NetCachePolicy(rawValue: session.configuration.requestCachePolicy.rawValue) ?? .useProtocolCachePolicy\n        let timeout = timeout ?? session.configuration.timeoutIntervalForRequest\n        return NetRequest(url, cache: cache, timeout: timeout)\n    }\n\n    func netTask(_ urlSessionTask: URLSessionTask, _ request: NetRequest? = nil) -> NetTask {\n        if let currentRequest = urlSessionTask.currentRequest {\n            return NetTask(urlSessionTask, request: currentRequest.netRequest)\n        } else if let originalRequest = urlSessionTask.originalRequest {\n            return NetTask(urlSessionTask, request: originalRequest.netRequest)\n        }\n        return NetTask(urlSessionTask, request: request)\n    }\n\n    func netResponse(_ response: URLResponse?, _ netTask: NetTask? = nil, _ responseObject: Any? = nil) -> NetResponse? {\n        var netResponse: NetResponse?\n        if let httpResponse = response as? HTTPURLResponse {\n            netResponse = NetResponse(httpResponse, netTask, responseObject)\n        } else if let response = response {\n            netResponse = NetResponse(response, netTask, responseObject)\n        }\n        guard let response = netResponse else {\n            return nil\n        }\n        var builder = response.builder()\n        responseInterceptors.forEach({ interceptor in\n            builder = interceptor(builder)\n        })\n        return builder.build()\n    }\n\n    func netError(_ error: Error?, _ responseObject: Any? = nil, _ response: URLResponse? = nil) -> NetError? {\n        if let error = error {\n            return NetError.net(code: error._code, message: error.localizedDescription, headers: (response as? HTTPURLResponse)?.allHeaderFields, object: responseObject, underlying: error)\n        }\n        return nil\n    }\n\n    func process(_ netTask: NetTask?, _ netResponse: NetResponse?, _ netError: NetError?) {\n        netTask?.response = netResponse\n        netTask?.error = netError\n        if let request = netTask?.request, let retryCount = netTask?.retryCount, netTask?.retryClosure?(netResponse, netError, retryCount) == true || retryClosure?(netResponse, netError, retryCount) == true {\n            let retryTask = self.data(request)\n            netTask?.netTask = retryTask.netTask\n            netTask?.state = .suspended\n            netTask?.retryCount += 1\n            retryTask.request = nil\n            retryTask.progressClosure = { progress in\n                netTask?.progress = progress\n                netTask?.progressClosure?(progress)\n            }\n            retryTask.completionClosure = { response, error in\n                netTask?.metrics = retryTask.metrics\n                self.process(netTask, response, error)\n            }\n            netTask?.resume()\n        } else {\n            netTask?.dispatchSemaphore?.signal()\n            netTask?.completionClosure?(netResponse, netError)\n        }\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/URLSession/NetURLSessionDelegate.swift",
    "content": "//\n//  NetURLSessionDelegate.swift\n//  Net\n//\n//  Created by Alex Rupérez on 17/3/17.\n//\n//\n\nimport Foundation\n\nclass NetURLSessionDelegate: NSObject {\n\n    fileprivate weak final var netURLSession: NetURLSession?\n\n    final var tasks = [URLSessionTask: NetTask]()\n\n    init(_ urlSession: NetURLSession) {\n        netURLSession = urlSession\n        super.init()\n    }\n\n    func add(_ task: URLSessionTask, _ netTask: NetTask?) {\n        tasks[task] = netTask\n    }\n\n    deinit {\n        tasks.removeAll()\n        netURLSession = nil\n    }\n\n}\n\nextension NetURLSessionDelegate: URLSessionDelegate {}\n\nextension NetURLSessionDelegate: URLSessionTaskDelegate {\n\n    func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) {\n        handle(challenge, tasks[task], completion: completionHandler)\n    }\n\n    @available(iOS 10.0, tvOS 10.0, watchOS 3.0, OSX 10.12, *)\n    func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting taskMetrics: URLSessionTaskMetrics) {\n        if let netTask = tasks[task] {\n            netTask.metrics = NetTaskMetrics(taskMetrics, request: netTask.request, response: netTask.response)\n        }\n        tasks[task] = nil\n    }\n\n    @available(iOS 11.0, tvOS 11.0, watchOS 4.0, OSX 10.13, *)\n    func urlSession(_ session: URLSession, task: URLSessionTask, willBeginDelayedRequest request: URLRequest, completionHandler: @escaping (URLSession.DelayedRequestDisposition, URLRequest?) -> Void) {\n        completionHandler(.continueLoading, nil)\n    }\n\n}\n\nextension NetURLSessionDelegate: URLSessionDataDelegate {}\n\n\nextension NetURLSessionDelegate: URLSessionDownloadDelegate {\n\n    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {}\n    \n}\n\n@available(iOS 9.0, *)\nextension NetURLSessionDelegate: URLSessionStreamDelegate {}\n\nextension NetURLSessionDelegate {\n\n    fileprivate func handle(_ challenge: URLAuthenticationChallenge, _ netTask: NetTask? = nil, completion: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) {\n        guard let authChallenge = netURLSession?.authChallenge else {\n            guard challenge.previousFailureCount == 0 else {\n                challenge.sender?.cancel(challenge)\n                if let realm = challenge.protectionSpace.realm {\n                    print(realm)\n                    print(challenge.protectionSpace.authenticationMethod)\n                }\n                completion(.cancelAuthenticationChallenge, nil)\n                return\n            }\n\n            var credential: URLCredential? = challenge.proposedCredential\n\n            if credential?.hasPassword != true, challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodHTTPBasic || challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodHTTPDigest, let request = netTask?.request {\n                switch request.authorization {\n                case .basic(let user, let password):\n                    credential = URLCredential(user: user, password: password, persistence: .forSession)\n                default:\n                    break\n                }\n            }\n\n            if credential == nil, challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust, let serverTrust = challenge.protectionSpace.serverTrust {\n                let host = challenge.protectionSpace.host\n                if let policy = netURLSession?.serverTrust[host] {\n                    if policy.evaluate(serverTrust, host: host) {\n                        credential = URLCredential(trust: serverTrust)\n                    } else {\n                        credential = nil\n                    }\n                } else {\n                    credential = URLCredential(trust: serverTrust)\n                }\n            }\n\n            completion(credential != nil ? .useCredential : .cancelAuthenticationChallenge, credential)\n            return\n        }\n        authChallenge(challenge, completion)\n    }\n\n}\n"
  },
  {
    "path": "Pods/NetClient/URLSession/NetURLSessionTaskObserver.swift",
    "content": "//\n//  NetURLSessionTaskObserver.swift\n//  Net\n//\n//  Created by Alex Rupérez on 18/3/17.\n//\n//\n\nimport Foundation\n\nclass NetURLSessionTaskObserver: NSObject {\n\n    private enum ObservedKeyPath: String {\n        case countOfBytesReceived,\n             countOfBytesSent,\n             countOfBytesExpectedToSend,\n             countOfBytesExpectedToReceive,\n             state\n\n        static let all = [countOfBytesReceived,\n                          countOfBytesSent,\n                          countOfBytesExpectedToSend,\n                          countOfBytesExpectedToReceive,\n                          state]\n    }\n\n    final var tasks = [URLSessionTask: NetTask]()\n\n    func add(_ task: URLSessionTask, _ netTask: NetTask?) {\n        tasks[task] = netTask\n        for observedKeyPath in ObservedKeyPath.all {\n            task.addObserver(self, forKeyPath: observedKeyPath.rawValue, options: .new, context: nil)\n        }\n    }\n\n    deinit {\n        for netTask in tasks.values {\n            if netTask.progress == Progress.current() {\n                netTask.progress.resignCurrent()\n            }\n            netTask.progress.cancel()\n        }\n        tasks.removeAll()\n    }\n\n    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {\n        guard let keyPath = keyPath, let task = object as? URLSessionTask, let newValue = change?[.newKey] else {\n            return\n        }\n        var taskProgress = tasks[task]?.progress\n        if ObservedKeyPath(rawValue: keyPath) == .state, let intValue = newValue as? Int, let state = URLSessionTask.State(rawValue: intValue) {\n            if let netState = NetTask.NetState(rawValue: state.rawValue) {\n                tasks[task]?.state = netState\n            }\n            if state != .running {\n                if taskProgress == Progress.current() {\n                    taskProgress?.resignCurrent()\n                }\n                if state == .suspended {\n                    taskProgress?.pause()\n                } else {\n                    if state == .canceling {\n                        taskProgress?.cancel()\n                    }\n                    if taskProgress != nil {\n                        for observedValue in ObservedKeyPath.all {\n                            task.removeObserver(self, forKeyPath: observedValue.rawValue, context: context)\n                        }\n                    }\n                    tasks[task] = nil\n                    return\n                }\n            } else if #available(iOS 9.0, OSX 10.11, *), taskProgress?.isPaused == true {\n                taskProgress?.resume()\n            }\n        }\n        let completedUnitCount = max(task.countOfBytesReceived, task.countOfBytesSent)\n        var totalUnitCount = max(task.countOfBytesExpectedToReceive, task.countOfBytesExpectedToSend)\n        if let response = task.response as? HTTPURLResponse, let contentLengthString = response.allHeaderFields[\"X-Uncompressed-Content-Length\"] as? String, let contentLength = Int64(contentLengthString) {\n            totalUnitCount = contentLength\n        }\n        if taskProgress == nil {\n            let progress = syncProgress(task, totalUnitCount: totalUnitCount)\n            tasks[task]?.progress = progress\n            progress.becomeCurrent(withPendingUnitCount: totalUnitCount)\n            taskProgress = progress\n        }\n        taskProgress?.completedUnitCount = completedUnitCount\n        taskProgress?.totalUnitCount = totalUnitCount\n        if let task = tasks[task], let progress = taskProgress {\n            task.progressClosure?(progress)\n        }\n    }\n\n}\n\nextension NetURLSessionTaskObserver {\n\n    fileprivate func syncProgress(_ task: URLSessionTask, totalUnitCount: Int64) -> Progress {\n        let taskProgress = Progress(totalUnitCount: totalUnitCount)\n        taskProgress.isPausable = true\n        taskProgress.isCancellable = true\n        taskProgress.pausingHandler = { [weak task] in\n            if task?.state != .suspended {\n                task?.suspend()\n            }\n        }\n        taskProgress.cancellationHandler = { [weak task] in\n            if task?.state != .canceling {\n                task?.cancel()\n            }\n        }\n        if #available(iOS 9.0, OSX 10.11, *) {\n            taskProgress.resumingHandler = { [weak task] in\n                if task?.state != .running {\n                    task?.resume()\n                }\n            }\n        }\n        return taskProgress\n    }\n\n}\n"
  },
  {
    "path": "Pods/ObjcExceptionBridging/LICENSE.txt",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Pods/ObjcExceptionBridging/README.md",
    "content": "![XCGLogger][xcglogger-logo]\n\n[![badge-language]][swift.org]\n[![badge-platforms]][swift.org]\n[![badge-license]][license]\n\n[![badge-travis]][travis]\n[![badge-swiftpm]][swiftpm]\n[![badge-cocoapods]][cocoapods-xcglogger]\n[![badge-carthage]][carthage]\n\n[![badge-sponsors]][cerebral-gardens]\n[![badge-twitter]][twitter-davewoodx]\n\n## tl;dr\nXCGLogger is the original debug log module for use in Swift projects. \n\nSwift does not include a C preprocessor so developers are unable to use the debug log `#define` macros they would use in Objective-C. This means our traditional way of generating nice debug logs no longer works. Resorting to just plain old `print` calls means you lose a lot of helpful information, or requires you to type a lot more code.\n\nXCGLogger allows you to log details to the console (and optionally a file, or other custom destinations), just like you would have with `NSLog()` or `print()`, but with additional information, such as the date, function name, filename and line number.\n\nGo from this:\n\n```Simple message```\n\nto this:\n\n```2014-06-09 06:44:43.600 [Debug] [AppDelegate.swift:40] application(_:didFinishLaunchingWithOptions:): Simple message```\n\n#### Example\n<img src=\"https://raw.githubusercontent.com/DaveWoodCom/XCGLogger/master/ReadMeImages/SampleLog.png\" alt=\"Example\" style=\"width: 690px;\" />\n\n### Communication _(Hat Tip AlamoFire)_\n\n* If you need help, use [Stack Overflow][stackoverflow] (Tag '[xcglogger][stackoverflow]').\n* If you'd like to ask a general question, use [Stack Overflow][stackoverflow].\n* If you've found a bug, open an issue.\n* If you have a feature request, open an issue.\n* If you want to contribute, submit a pull request.\n* If you use XCGLogger, please Star the project on [GitHub][github-xcglogger]\n\n## Installation\n\n### Git Submodule\n\nExecute:\n\n```git submodule add https://github.com/DaveWoodCom/XCGLogger.git```\n\t\nin your repository folder.\n\n### [Carthage][carthage]\n\nAdd the following line to your `Cartfile`.\n\n```github \"DaveWoodCom/XCGLogger\" ~> 5.0.1```\n\nThen run `carthage update --no-use-binaries` or just `carthage update`. For details of the installation and usage of Carthage, visit [it's project page][carthage].\n\n### [CocoaPods][cocoapods]\n\nAdd something similar to the following lines to your `Podfile`. You may need to adjust based on your platform, version/branch etc.\n\n```\nsource 'https://github.com/CocoaPods/Specs.git'\nplatform :ios, '8.0'\nuse_frameworks!\n\npod 'XCGLogger', '~> 5.0.1'\n```\n\nSpecifying the pod `XCGLogger` on its own will include the core framework. We're starting to add subspecs to allow you to include optional components as well:\n\n`pod 'XCGLogger/UserInfoHelpers', '~> 5.0.1'`: Include some experimental code to help deal with using UserInfo dictionaries to tag log messages.\n\nThen run `pod install`. For details of the installation and usage of CocoaPods, visit [it's official web site][cocoapods].\n\n### [Swift Package Manager][swiftpm]\n\nAdd the following entry to your package's dependencies:\n\n```\n.Package(url: \"https://github.com/DaveWoodCom/XCGLogger.git\", majorVersion: 5)\n```\t\n\n### Backwards Compatibility\n\nUse:\n* XCGLogger version [5.0.1][xcglogger-5.0.1] for Swift 3.0-3.1\n* XCGLogger version [3.6.0][xcglogger-3.6.0] for Swift 2.3\n* XCGLogger version [3.5.3][xcglogger-3.5.3] for Swift 2.2\n* XCGLogger version [3.2][xcglogger-3.2] for Swift 2.0-2.1\n* XCGLogger version [2.x][xcglogger-2.x] for Swift 1.2\n* XCGLogger version [1.x][xcglogger-1.x] for Swift 1.1 and below.\n\n## Basic Usage (Quick Start)\n\n_This quick start method is intended just to get you up and running with the logger. You should however use the [advanced usage below](#advanced-usage-recommended) to get the most out of this library._\n\nAdd the XCGLogger project as a subproject to your project, and add the appropriate library as a dependancy of your target(s).\nUnder the `General` tab of your target, add `XCGLogger.framework` and `ObjcExceptionBridging.framework` to the `Embedded Binaries` section.\n\nThen, in each source file:\n\n```Swift\nimport XCGLogger\n```\n\nIn your AppDelegate (or other global file), declare a global constant to the default XCGLogger instance.\n\n```Swift\nlet log = XCGLogger.default\n```\n\nIn the\n```Swift\napplication(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) // iOS, tvOS\n```\n\nor\n\n```Swift\napplicationDidFinishLaunching(_ notification: Notification) // macOS\n```\n\nfunction, configure the options you need:\n\n```Swift\nlog.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: \"path/to/file\", fileLevel: .debug)\n```\n\nThe value for `writeToFile:` can be a `String` or `URL`. If the file already exists, it will be cleared before we use it. Omit the parameter or set it to `nil` to log to the console only. You can optionally set a different log level for the file output using the `fileLevel:` parameter. Set it to `nil` or omit it to use the same log level as the console.\n\nThen, whenever you'd like to log something, use one of the convenience methods:\n\n```Swift\nlog.verbose(\"A verbose message, usually useful when working on a specific problem\")\nlog.debug(\"A debug message\")\nlog.info(\"An info message, probably useful to power users looking in console.app\")\nlog.warning(\"A warning message, may indicate a possible error\")\nlog.error(\"An error occurred, but it's recoverable, just info about what happened\")\nlog.severe(\"A severe error occurred, we are likely about to crash now\")\n```\n\nThe different methods set the log level of the message. XCGLogger will only print messages with a log level that is greater to or equal to it's current log level setting. So a logger with a level of `.error` will only output log messages with a level of `.error`, or `.severe`.\n\n## Advanced Usage (Recommended)\n\nXCGLogger aims to be simple to use and get you up and running quickly with as few as 2 lines of code above. But it allows for much greater control and flexibility. \n\nA logger can be configured to deliver log messages to a variety of destinations. Using the basic setup above, the logger will output log messages to the standard Xcode debug console, and optionally a file if a path is provided. It's quite likely you'll want to send logs to more interesting places, such as the Apple System Console, a database, third party server, or another application such as [NSLogger][NSLogger]. This is accomplished by adding the destination to the logger.\n\nHere's an example of configuring the logger to output to the Apple System Log as well as a file.\n\n```Swift\n// Create a logger object with no destinations\nlet log = XCGLogger(identifier: \"advancedLogger\", includeDefaultDestinations: false)\n\n// Create a destination for the system console log (via NSLog)\nlet systemDestination = AppleSystemLogDestination(identifier: \"advancedLogger.systemDestination\")\n\n// Optionally set some configuration options\nsystemDestination.outputLevel = .Debug\nsystemDestination.showLogIdentifier = false\nsystemDestination.showFunctionName = true\nsystemDestination.showThreadName = true\nsystemDestination.showLevel = true\nsystemDestination.showFileName = true\nsystemDestination.showLineNumber = true\nsystemDestination.showDate = true\n\n// Add the destination to the logger\nlog.add(destination: systemDestination)\n\n// Create a file log destination\nlet fileDestination = FileDestination(writeToFile: \"/path/to/file\", identifier: \"advancedLogger.fileDestination\")\n\n// Optionally set some configuration options\nfileDestination.outputLevel = .Debug\nfileDestination.showLogIdentifier = false\nfileDestination.showFunctionName = true\nfileDestination.showThreadName = true\nfileDestination.showLevel = true\nfileDestination.showFileName = true\nfileDestination.showLineNumber = true\nfileDestination.showDate = true\n\n// Process this destination in the background\nfileDestination.logQueue = XCGLogger.logQueue\n\n// Add the destination to the logger\nlog.add(destination: fileDestination)\n\n// Add basic app info, version info etc, to the start of the logs\nlog.logAppDetails()\n```\n\nYou can configure each log destination with different options depending on your needs.\n\nAnother common usage pattern is to have multiple loggers, perhaps one for UI issues, one for networking, and another for data issues.\n\nEach log destination can have its own log level. As a convenience, you can set the log level on the log object itself and it will pass that level to each destination. Then set the destinations that need to be different.\n\n**Note**: A destination object can only be added to one logger object, adding it to a second will remove it from the first.\n\n### Initialization Using A Closure\n\nAlternatively you can use a closure to initialize your global variable, so that all initialization is done in one place\n```Swift\nlet log: XCGLogger = {\n    let log = XCGLogger(identifier: \"advancedLogger\", includeDefaultDestinations: false)\n\n\t// Customize as needed\n    \n    return log\n}()\n```\n\n**Note**: This creates the log object lazily, which means it's not created until it's actually needed. This delays the initial output of the app information details. Because of this, I recommend forcing the log object to be created at app launch by adding the line `let _ = log` at the top of your `didFinishLaunching` method if you don't already log something on app launch.\n\n### Log Anything\n\nYou can log strings:\n\n```Swift\nlog.debug(\"Hi there!\")\n```\n\nor pretty much anything you want:\n\n```Swift\nlog.debug(true)\nlog.debug(CGPoint(x: 1.1, y: 2.2))\nlog.debug(MyEnum.Option)\nlog.debug((4, 2))\nlog.debug([\"Device\": \"iPhone\", \"Version\": 7])\n```\n\n### Filtering Log Messages\n\nNew to XCGLogger 4, you can now create filters to apply to your logger (or to specific destinations). Create and configure your filters (examples below), and then add them to the logger or destination objects by setting the optional `filters` property to an array containing the filters. Filters are applied in the order they exist in the array. During processing, each filter is asked if the log message should be excluded from the log. If any filter excludes the log message, it's excluded. Filters have no way to reverse the exclusion of another filter.\n\nIf a destination's `filters` property is `nil`, the log's `filters` property is used instead. To have one destination log everything, while having all other destinations filter something, add the filters to the log object and set the one destination's `filters` property to an empty array `[]`. \n\n**Note**: Unlike destinations, you can add the same filter object to multiple loggers and/or multiple destinations.\n\n#### Filter by Filename\n\nTo exclude all log messages from a specific file, create an exclusion filter like so:\n\n```Swift\nlog.filters = [FileNameFilter(excludeFrom: [\"AppDelegate.swift\"], excludePathWhenMatching: true)]\n```\n\n`excludeFrom:` takes an `Array<String>` or `Set<String>` so you can specify multiple files at the same time.\n\n`excludePathWhenMatching:` defaults to `true` so you can omit it unless you want to match path's as well.\n\nTo include log messages only for a specific set to files, create the filter using the `includeFrom:` initializer. It's also possible to just toggle the `inverse` property to flip the exclusion filter to an inclusion filter.\n\t\n#### Filter by Tag\n\nIn order to filter log messages by tag, you must of course be able to set a tag on the log messages. Each log message can now have additional, user defined data attached to them, to be used by filters (and/or formatters etc). This is handled with a `userInfo: Dictionary<String, Any>` object. The dictionary key should be a namespaced string to avoid collisions with future additions. Official keys will begin with `com.cerebralgardens.xcglogger`. The tag key can be accessed by `XCGLogger.Constants.userInfoKeyTags`. You definitely don't want to be typing that, so feel free to create a global shortcut: `let tags = XCGLogger.Constants.userInfoKeyTags`. Now you can easily tag your logs:\n\n```Swift\nlet sensitiveTag = \"Sensitive\"\nlog.debug(\"A tagged log message\", userInfo: [tags: sensitiveTag])\n```\n\nThe value for tags can be an `Array<String>`, `Set<String>`, or just a `String`, depending on your needs. They'll all work the same way when filtered.\n\nDepending on your workflow and usage, you'll probably create faster methods to set up the `userInfo` dictionary. See [below](#mixing-and-matching) for other possible shortcuts.\n\nNow that you have your logs tagged, you can filter easily:\n\n```Swift\nlog.filters = [TagFilter(excludeFrom: [sensitiveTag])]\n```\n\nJust like the `FileNameFilter`, you can use `includeFrom:` or toggle `inverse` to include only log messages that have the specified tags.\n\n#### Filter by Developer\n\nFiltering by developer is exactly like filtering by tag, only using the `userInfo` key of `XCGLogger.Constants.userInfoKeyDevs`. In fact, both filters are subclasses of the `UserInfoFilter` class that you can use to create additional filters. See [Extending XCGLogger](#extending-xcglogger) below.\n\n#### Mixing and Matching\n\nIn large projects with multiple developers, you'll probably want to start tagging log messages, as well as indicate the developer that added the message.\n\nWhile extremely flexible, the `userInfo` dictionary can be a little cumbersome to use. There are a few possible methods you can use to simply things. I'm still testing these out myself so they're not officially part of the library yet (I'd love feedback or other suggestions).\n\nI have created some experimental code to help create the UserInfo dictionaries. (Include the optional `UserInfoHelpers` subspec if using CocoaPods). Check the iOS Demo app to see it in use.\n\nThere are two structs that conform to the `UserInfoTaggingProtocol` protocol. `Tag` and `Dev`.\n\nYou can create an extension on each of these that suit your project. For example:\n\n```Swift\nextension Tag {\n    static let sensitive = Tag(\"sensitive\")\n    static let ui = Tag(\"ui\")\n    static let data = Tag(\"data\")\n}\n\nextension Dev {\n    static let dave = Dev(\"dave\")\n    static let sabby = Dev(\"sabby\")\n}\n```\n\nAlong with these types, there's an overloaded operator `|` that can be used to merge them together into a dictionary compatible with the `UserInfo:` parameter of the logging calls.\n\nThen you can log messages like this:\n\n```Swift\nlog.debug(\"A tagged log message\", userInfo: Dev.dave | Tag.sensitive)\n```\n\nThere are some current issues I see with these `UserInfoHelpers`, which is why I've made it optional/experimental for now. I'd love to hear comments/suggestions for improvements.\n\n1. The overloaded operator `|` merges dictionaries so long as there are no `Set`s. If one of the dictionaries contains a `Set`, it'll use one of them, without merging them. Preferring the left hand side if both sides have a set for the same key.\n2. Since the `userInfo:` parameter needs a dictionary, you can't pass in a single Dev or Tag object. You need to use at least two with the `|` operator to have it automatically convert to a compatible dictionary. If you only want one Tag for example, you must access the `.dictionary` parameter manually: `userInfo: Tag(\"Blah\").dictionary`.\n\n### Selectively Executing Code\n\nAll log methods operate on closures. Using the same syntactic sugar as Swift's `assert()` function, this approach ensures we don't waste resources building log messages that won't be output anyway, while at the same time preserving a clean call site.\n\nFor example, the following log statement won't waste resources if the debug log level is suppressed:\n\n```Swift\nlog.debug(\"The description of \\(thisObject) is really expensive to create\")\n```\n\nSimilarly, let's say you have to iterate through a loop in order to do some calculation before logging the result. In Objective-C, you could put that code block between `#if` `#endif`, and prevent the code from running. But in Swift, previously you would need to still process that loop, wasting resources. With `XCGLogger` it's as simple as:\n\n```Swift\nlog.debug {\n    var total = 0.0\n    for receipt in receipts {\n        total += receipt.total\n    }\n\n    return \"Total of all receipts: \\(total)\"\n}\n```\n\nIn cases where you wish to selectively execute code without generating a log line, return `nil`, or use one of the methods: `verboseExec`, `debugExec`, `infoExec`, `warningExec`, `errorExec`, and `severeExec`.\n\n### Custom Date Formats\n\nYou can create your own `DateFormatter` object and assign it to the logger.\n\n```Swift\nlet dateFormatter = DateFormatter()\ndateFormatter.dateFormat = \"MM/dd/yyyy hh:mma\"\ndateFormatter.locale = Locale.current\nlog.dateFormatter = dateFormatter\n```\n\n### Enhancing Log Messages With Colour\n\nXCGLogger supports adding formatting codes to your log messages to enable colour in various places. The original option was to use the [XcodeColors plug-in][XcodeColors]. However, Xcode 8 no longer officially supports plug-ins. You can still view your logs in colour, just not in Xcode 8 at the moment ([see note below](#restore-plug-in-support)). You can still use Xcode 7 if desired (after adding the Swift 3 toolchain), or you can use the new ANSI colour support to add colour to your fileDestination objects and view your logs via a terminal window. This gives you some extra options such as adding Bold, Italics, or (please don't) Blinking!\n\nOnce enabled, each log level can have its own colour. These colours can be customized as desired. If using multiple loggers, you could alternatively set each logger to its own colour.\n\nAn example of setting up the ANSI formatter:\n\n```Swift\nif let fileDestination: FileDestination = log.destination(withIdentifier: XCGLogger.Constants.fileDestinationIdentifier) as? FileDestination {\n    let ansiColorLogFormatter: ANSIColorLogFormatter = ANSIColorLogFormatter()\n    ansiColorLogFormatter.colorize(level: .verbose, with: .colorIndex(number: 244), options: [.faint])\n    ansiColorLogFormatter.colorize(level: .debug, with: .black)\n    ansiColorLogFormatter.colorize(level: .info, with: .blue, options: [.underline])\n    ansiColorLogFormatter.colorize(level: .warning, with: .red, options: [.faint])\n    ansiColorLogFormatter.colorize(level: .error, with: .red, options: [.bold])\n    ansiColorLogFormatter.colorize(level: .severe, with: .white, on: .red)\n    fileDestination.formatters = [ansiColorLogFormatter]\n}\n```\n\nAs with filters, you can use the same formatter objects for multiple loggers and/or multiple destinations. If a destination's `formatters` property is `nil`, the logger's `formatters` property will be used instead.\n\nSee [Extending XCGLogger](#extending-xcglogger) below for info on creating your own custom formatters.\n\n### Alternate Configurations\n\nBy using Swift build flags, different log levels can be used in debugging versus staging/production.\nGo to Build Settings -> Swift Compiler - Custom Flags -> Other Swift Flags and add `-DDEBUG` to the Debug entry.\n\n```Swift\n#if DEBUG\n    log.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true)\n#else\n    log.setup(level: .severe, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true)\n#endif\n```\n\nYou can set any number of options up in a similar fashion. See the updated iOSDemo app for an example of using different log destinations based on options, search for `USE_NSLOG`.\n\n### Background Log Processing\n\nBy default, the supplied log destinations will process the logs on the thread they're called on. This is to ensure the log message is displayed immediately when debugging an application. You can add a breakpoint immediately after a log call and see the results when the breakpoint hits.\n\nHowever, if you're not actively debugging the application, processing the logs on the current thread can introduce a performance hit. You can now specify a destination process it's logs on a dispatch queue of your choice (or even use a default supplied one).\n\n```Swift\nfileDestination.logQueue = XCGLogger.logQueue\n```\t\n\nor even\n\n```Swift\nfileDestination.logQueue = DispatchQueue.global(qos: .background)\n```\n\nThis works extremely well when combined with the [Alternate Configurations](#alternate-configurations) method above.\n\n```Swift\n#if DEBUG\n    log.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true)\n#else\n    log.setup(level: .severe, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true)\n    if let consoleLog = log.logDestination(XCGLogger.Constants.baseConsoleDestinationIdentifier) as? ConsoleDestination {\n        consoleLog.logQueue = XCGLogger.logQueue\n    }\n#endif\n```\n\n### Append To Existing Log File\n\nWhen using the advanced configuration of the logger (see [Advanced Usage above](#advanced-usage-recommended)), you can now specify that the logger append to an existing log file, instead of automatically overwriting it.\n\nAdd the optional `shouldAppend:` parameter when initializing the `FileDestination` object. You can also add the `appendMarker:` parameter to add a marker to the log file indicating where a new instance of your app started appending. By default we'll add `-- ** ** ** --` if the parameter is omitted. Set it to `nil` to skip appending the marker.\n\n```let fileDestination = FileDestination(writeToFile: \"/path/to/file\", identifier: \"advancedLogger.fileDestination\", shouldAppend: true, appendMarker: \"-- Relauched App --\")```\n\n\n### Automatic Log File Rotation\n\nWhen logging to a file, you have the option to automatically rotate the log file to an archived destination, and have the logger automatically create a new log file in place of the old one.\n\nCreate a destination using the `AutoRotatingFileDestination` class and set the following properties:\n\n`targetMaxFileSize`: Auto rotate once the file is larger than this\n\n`targetMaxTimeInterval`: Auto rotate after this many seconds\n\n`targetMaxLogFiles`: Number of archived log files to keep, older ones are automatically deleted\n\nThose are all guidelines for the logger, not hard limits.\n\n### Extending XCGLogger\n\nYou can create alternate log destinations (besides the built in ones). Your custom log destination must implement the `DestinationProtocol` protocol. Instantiate your object, configure it, and then add it to the `XCGLogger` object with `add(destination:)`. There are two base destination classes (`BaseDestination` and `BaseQueuedDestination`) you can inherit from to handle most of the process for you, requiring you to only implement one additional method in your custom class. Take a look at `ConsoleDestination` and `FileDestination` for examples.\n\nYou can also create custom filters or formatters. Take a look at the provided versions as a starting point. Note that filters and formatters have the ability to alter the log messages as they're processed. This means you can create a filter that strips passwords, highlights specific words, encrypts messages, etc.\n\n## Contributing\n\nXCGLogger is the best logger available for Swift because of the contributions from the community like you. There are many ways you can help continue to make it great.\n\n1. Star the project on [GitHub][github-xcglogger].\n2. Report issues/bugs you find.\n3. Suggest features.\n4. Submit pull requests.\n\n**Note**: when submitting a pull request, please use lots of small commits verses one huge commit. It makes it much easier to merge in when there are several pull requests that need to be combined for a new version.\n\n## Third Party Tools That Work With XCGLogger\n\n**Note**: These plug-ins no longer 'officially' work in Xcode 8. File a [bug report](http://openradar.appspot.com/27447585) if you'd like to see plug-ins return to Xcode. See [below](#xcode_8_tips) for a workaround...\n\n[**XcodeColors:**][XcodeColors] Enable colour in the Xcode console\n<br />\n[**KZLinkedConsole:**][KZLinkedConsole] Link from a log line directly to the code that produced it\n\n**Note**: These may not yet work with the Swift 3 version of XCGLogger.\n\n[**XCGLoggerNSLoggerConnector:**][XCGLoggerNSLoggerConnector] Send your logs to [NSLogger][NSLogger]\n\n## Xcode 8 Tips\n\n### Restore Plug-In Support\n\nOne of the biggest issues you'll notice when using Xcode 8, is that by default it will no longer load plug-ins. Personally, I really like the benefits the plug-ins add to Xcode, especially XcodeColors. With so many other frameworks, or even Xcode itself spewing messages into the debug console, it's really helpful to be able to have your logs stand out with colour. It is currently possible to re-enable plug-ins in Xcode 8. If you do so, you'll be able to use the new `XcodeColorsLogFormatter` class to colour your log messages again. See the demo apps for example code.\n\n**Be Warned**: If you follow these instructions to re-enable plug-ins, there could be unforeseen consequences. I would definitely only do this on a development machine, with the assumption that you have another machine (or at least an unmodified version of Xcode) to do your App Store/Distribution builds. **Do not** attempt to upload a binary to Apple that was built with a modified version of Xcode. **I take no responsibility for anything that happens if you follow these instructions. You have been warned**.\n\nNow, assuming you've read the above warning, and you have a development only machine, and you really want to use your awesome plug-ins, here's my recommended method to re-enable plug-ins.\n\n1. Clone the [unsign](https://github.com/steakknife/unsign) repository.\n2. Build it following their dead-simple instructions (`make`).\n3. Close Xcode if it's open.\n4. In your favourite shell/terminal, execute the following commands (may need to be root, or just `sudo`):\n\n\n\t`cd /Applications/Xcode.app/Contents/MacOS` *Substitute another Xcode path if you like*\n\t\n\t`/path/to/unsign Xcode` *Creates a new `Xcode.unsigned` binary*\n\t\n\t`mv Xcode Xcode.signed` *Move the original file*\n\t\n\t`ln -sf Xcode.unsigned Xcode` *Link the unsigned version to the original filename*\n\n5. Launch Xcode and use your favourite plug-ins. You may have to reauthorize access to your keychain, but it should be a one time task.\n6. You can flip back and forth between the signed and unsigned versions by repeating the `ln -sf Xcode.unsigned Xcode` command, just changing `.unsigned` to `.signed` etc.\n7. Do not use this version of Xcode to submit apps!\n8. Pray Apple doesn't disable this workaround.\n9. File a radar requesting official plug-in support again. You can dup this [radar](http://openradar.appspot.com/27447585).\n\nThanks to [@inket](https://github.com/inket/update_xcode_plugins) and [@steakknife](https://github.com/steakknife/unsign) for providing the knowledge and tools for this tip!\n\n<!-- This tip no longer works as of macOS 10.12.4, it appears to disable all logs, on iOS now. \n-- ### Disable Xcode's Log Noise\n-- \n-- For some reason, the simulators in the final version of Xcode 8 are printing lots of their own debug messages to the console. These messages make reading your own debug logs cumbersome. You can prevent those logs from being displayed by adding the environment variable `OS_ACTIVITY_MODE` to your debug scheme, and setting the value to `disable`.\n-- \n-- <img src=\"https://raw.githubusercontent.com/DaveWoodCom/XCGLogger/swift_3.0/ReadMeImages/OSActivityMode.png\" alt=\"Environment Variable\" style=\"width: 690px; height: 401px;\" />\n-- \n-- Thanks to [@rustyshelf](https://twitter.com/rustyshelf/status/775505191160328194) and [@bersaelor](https://twitter.com/bersaelor/status/776317530549919744) for this tip!\n-->\n\n## To Do\n\n- Add more examples of some advanced use cases\n- Add additional log destination types\n- Add Objective-C support\n- Add Linux support\n\n## More\n\nIf you find this library helpful, you'll definitely find these other tools helpful:\n\nWatchdog: http://watchdogforxcode.com/  \nSlender: http://martiancraft.com/products/slender  \nBriefs: http://giveabrief.com/  \n\nAlso, please check out some of my other projects:\n\nRudoku: [App Store](https://itunes.apple.com/app/apple-store/id965105321?pt=17255&ct=github&mt=8&at=11lMGu)  \nTV Tune Up: https://www.cerebralgardens.com/tvtuneup  \n\n### Change Log\n\nThe change log is now in it's own file: [CHANGELOG.md](CHANGELOG.md)\n\n[xcglogger-logo]: https://github.com/DaveWoodCom/XCGLogger/raw/master/ReadMeImages/XCGLoggerLogo_326x150.png\n[swift.org]: https://swift.org/\n[license]: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n[travis]: https://travis-ci.org/DaveWoodCom/XCGLogger\n[swiftpm]: https://swift.org/package-manager/\n[cocoapods]: https://cocoapods.org/\n[cocoapods-xcglogger]: https://cocoapods.org/pods/XCGLogger\n[carthage]: https://github.com/Carthage/Carthage\n[cerebral-gardens]: https://www.cerebralgardens.com/\n[twitter-davewoodx]: https://twitter.com/davewoodx\n[github-xcglogger]: https://github.com/DaveWoodCom/XCGLogger\n[stackoverflow]: http://stackoverflow.com/questions/tagged/xcglogger\n\n[badge-language]: https://img.shields.io/badge/Swift-1.x%20%7C%202.x%20%7C%203.x-orange.svg?style=flat\n[badge-platforms]: https://img.shields.io/badge/Platforms-macOS%20%7C%20iOS%20%7C%20tvOS%20%7C%20watchOS-lightgray.svg?style=flat\n[badge-license]: https://img.shields.io/badge/License-MIT-lightgrey.svg?style=flat\n[badge-travis]: https://img.shields.io/travis/DaveWoodCom/XCGLogger/master.svg?style=flat\n[badge-swiftpm]: https://img.shields.io/badge/Swift_Package_Manager-v5.0.1-64a6dd.svg?style=flat\n[badge-cocoapods]: https://img.shields.io/cocoapods/v/XCGLogger.svg?style=flat\n[badge-carthage]: https://img.shields.io/badge/Carthage-v5.0.1-64a6dd.svg?style=flat\n\n[badge-sponsors]: https://img.shields.io/badge/Sponsors-Cerebral%20Gardens-orange.svg?style=flat\n[badge-twitter]: https://img.shields.io/twitter/follow/DaveWoodX.svg?style=social\n\n[XcodeColors]: https://github.com/robbiehanson/XcodeColors\n[KZLinkedConsole]: https://github.com/krzysztofzablocki/KZLinkedConsole\n[NSLogger]: https://github.com/fpillet/NSLogger\n[XCGLoggerNSLoggerConnector]: https://github.com/markuswinkler/XCGLoggerNSLoggerConnector\n[Firelog]: http://jogabo.github.io/firelog/\n[Firebase]: https://www.firebase.com/\n\n[xcglogger-5.0.1]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/5.0.1\n[xcglogger-3.6.0]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.6.0\n[xcglogger-3.5.3]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.5.3\n[xcglogger-3.2]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.2.0\n[xcglogger-2.x]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/2.4.0\n[xcglogger-1.x]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/1.8.1\n"
  },
  {
    "path": "Pods/ObjcExceptionBridging/Sources/ObjcExceptionBridging/ObjectiveCMarker.m",
    "content": "//\n// This file is unused and only exists so the Swift Package Manager can identify this module as one using Objective-C.\n//\n"
  },
  {
    "path": "Pods/ObjcExceptionBridging/Sources/ObjcExceptionBridging/include/ObjcExceptionBridging.h",
    "content": "//\n//  ObjcExceptionBridging.h\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2014-06-06.\n//  Copyright © 2014 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n#import <Foundation/Foundation.h>\n\n//! Project version number for ObjcExceptionBridging.\nFOUNDATION_EXPORT double ObjcExceptionBridgingVersionNumber;\n\n//! Project version string for ObjcExceptionBridging.\nFOUNDATION_EXPORT const unsigned char ObjcExceptionBridgingVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <ObjcExceptionBridging/PublicHeader.h>\n\n/**\n Execute Swift code that could generate an Objective-C exception in here to catch and handle it gracefully (ie don't crash)\n\n @param tryBlock Block/Closure to execute that could thrown an Objective-C exception\n @param catchBlock Block/Closure to use if an exception is thrown in the tryBlock\n @param finallyBlock Block/Closure to execute after the tryBlock (or catchBlock if an exception was thrown)\n\n @note Loosely based on the code here: https://stackoverflow.com/a/35003095/144857 and here: https://github.com/williamFalcon/SwiftTryCatch\n */\nNS_INLINE void _try_objc(void(^_Nonnull tryBlock)(void), void(^_Nonnull catchBlock)(NSException* _Nonnull exception), void(^_Nonnull finallyBlock)(void)) {\n    @try {\n        tryBlock();\n    }\n    @catch (NSException* exception) {\n        catchBlock(exception);\n    }\n    @finally {\n        finallyBlock();\n    }\n}\n\n/**\n Throw an Objective-C exception\n\n @param exception NSException object to throw\n\n @note Loosely based on the code here: https://github.com/williamFalcon/SwiftTryCatch\n */\nNS_INLINE void _throw_objc(NSException* _Nonnull exception)\n{\n    @throw exception;\n}\n"
  },
  {
    "path": "Pods/Pods.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 48;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t00765725FC1A3DAA2AF9D291BEDF2AFB /* GHComment.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BB0073F04C86CB83C780A8B30B7726E /* GHComment.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t010B5B2C12CD95DB5BA9E4F884D3B6DE /* ImageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85206E038BF7A1DE4819B3CF2EC67B6 /* ImageProcessor.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t02B5DBC50EF40818993C4A0029381F29 /* Cucumberish.m in Sources */ = {isa = PBXBuildFile; fileRef = E347DAEA2CCBE0A8030261AC0200C22F /* Cucumberish.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t02CFE8E81D41D8A89B93B6D5B2744991 /* NetCacheControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E1DCDB7FEECCDFC9EF05CD2ED343F7 /* NetCacheControl.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t02F9B35A3C0F8BFDD9AD5C8DECD87CED /* GHScenarioDefinition_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 23725B3E391C2CA4E764B98EA6616FCA /* GHScenarioDefinition_Private.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t032982BB82CC43083B0847FF036998DE /* Dispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 272F4493B363C0E7240E5CD4E86EF054 /* Dispatcher.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t03ACFC15A6A3C99B2C4B7CFB5FB99B01 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\t0531C88E021A5D16963F500AF67973C9 /* GHAstNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A6A05B9B5579FB89375C6829A443AA /* GHAstNode.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t06C360FAD51A87CBCA7DC2E536C9798C /* ANSIColorLogFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7706E5140D81057771F7284126CF1516 /* ANSIColorLogFormatter.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t070A5FEF730C74D8C0F4DEF56D3C940E /* Pods-Domain-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F508C634E8DB74799380F1DAA96F541C /* Pods-Domain-dummy.m */; };\n\t\t0722811654DF468FF08A76E37596A069 /* NetTask+URLSessionTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = D21F7CAA251E028DC99798301BEB9B92 /* NetTask+URLSessionTask.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t07F56266B4D1A320ED1E5CDA88CD6A96 /* GHTag.h in Headers */ = {isa = PBXBuildFile; fileRef = 800A06DEF441E24C02887CCB12466104 /* GHTag.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0ACFE9FFD55E687B101865B77DDA5AFC /* NSObject+Dictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 09D0110497B78198A8771C61A499CD69 /* NSObject+Dictionary.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0B3F64CE4A4242C1994085B8CEE6339F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\t0B7E61C3F494176980A6DC826E355FA8 /* NetRequest+URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07965558AED140C574B015AF94F18CC8 /* NetRequest+URLRequest.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t0C54AC5F3FCCBE79348541775C3CBD8A /* ObjcExceptionBridging-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FCF4078A036BB2B0AA1433788C643E42 /* ObjcExceptionBridging-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0C615CFBA1C18F845B23E567B5356C85 /* NetRequest+Build.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF6D625E298BE2BC6C1C5036BDE3228 /* NetRequest+Build.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t0CA6357476373C221D44C498AA1D65FE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\t0D942EBE4CB3E6153BB191F9DFC45C01 /* GHTokenMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = F23E2D6F14D9EAA391BB5D4843B7B3CB /* GHTokenMatcher.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t0F403DB8E1776C29261EA7844434F27C /* GHAstNode.h in Headers */ = {isa = PBXBuildFile; fileRef = FE094F3E9D445A94931C7919BADF1390 /* GHAstNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0F4EED34A8A4F638927410BC9FEE2287 /* FormatIndicatedCacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3342D73F450C731992C709364E409AB1 /* FormatIndicatedCacheSerializer.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t1039129DE0484A38086668D5092BAEF6 /* String+MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = A13E41155BAAD04E0AE171E2F709E942 /* String+MD5.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t11C76A923C1932A287BF19E0B274116A /* Kommander-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DC032BB5C053769E7CCC82B4C33C2E19 /* Kommander-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1316C5B6437562DD70FA6688C6333E84 /* Pods-Core-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 33DC377F603E6E9CE5554EF0EC9E02BE /* Pods-Core-dummy.m */; };\n\t\t131E69057392CB70E1F9E8BA61AAB309 /* GHBackground.m in Sources */ = {isa = PBXBuildFile; fileRef = C124D3C1326C8260DBA30CBB3E96E453 /* GHBackground.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t13CE71A758FF204168A9801E1F695242 /* CCIFeaturesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 89FF1CB6FFED5315635EE8CBADA274C2 /* CCIFeaturesManager.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t144FEBEBAE6F2C4C96F8C1F7C8E5BCCE /* GherkinLanguages.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 024F1BFA1F5C914C134BCF9DEE64A78D /* GherkinLanguages.bundle */; };\n\t\t14DEAF03175A8C55BFC909F4C1801EF9 /* CCIStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 0552564CCC68274EB114B7A64D598D4F /* CCIStep.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t14F2B18FFD24D4D89601C814C7D7E4DC /* ImageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1778866AEAC8C44E035E896079F89AB2 /* ImageDownloader.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t17E1022F5CDE697AE67BC2509BCDCF94 /* NetRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64EA67365050760C82B4410A49741CF3 /* NetRequest.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t19FF158C157329D235AF71AAB53ADACA /* NetMultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF872733CE64BD029A1AD2E609819268 /* NetMultipartFormData.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t1A568D6CECD35803569032D4484C44B2 /* GHGherkinDialectProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 32532D9DE5706FC96085974F240572C5 /* GHGherkinDialectProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1B6B91EE4BBDEDD602A8B6E68FB4A376 /* CCILocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 81890B8400E3025A7A93365DE3898F99 /* CCILocation.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1BE4500E46B3019974E7DA25E13ED134 /* NetTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA565B9D1032B85422094A7A64AC658C /* NetTransformer.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t1C020DECEC209AB9BC2E0D6B3070BAFD /* GHScenarioDefinition.h in Headers */ = {isa = PBXBuildFile; fileRef = 990155647EA01472CEB25BD59F1824D5 /* GHScenarioDefinition.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1D43F7CC1D96FC85F8107AF2F08A81E4 /* CCILoggingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A5AC995988DFCCE0705EDDDA040C1EC /* CCILoggingManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1E89317DE0734B56D83C143ED59D5814 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\t1EA5110ABE668ED203140A72746192D7 /* RequestModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = D036B514C5E8E7C6D53654A520FBCAFC /* RequestModifier.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t21558EFEBD879226D60D094C8825A80B /* ConsoleDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D2806BDDE05BB656A21B0580369ADA7 /* ConsoleDestination.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t2193444227A0D1DD4CF8FC5F42E4D982 /* GHParserException.h in Headers */ = {isa = PBXBuildFile; fileRef = 0693820A57511F4E33398A52B401BD9C /* GHParserException.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t225014332534358CB9AAF761F8F90D4B /* Pods-Core-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C0FE5B24513E16E99665A1BFDA597AE /* Pods-Core-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t231CFC69CCC10A5A032B5669DA477791 /* ObjcExceptionBridging-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 97B032C2F74B48C801293BF2DD52F567 /* ObjcExceptionBridging-dummy.m */; };\n\t\t242E05C725A85287849A84D8BD293A85 /* CCIStepsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A1008700022E9325453C8CECD8D71B9E /* CCIStepsManager.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t24C93725983A12A9239A59D40EBAA038 /* Pods-ArchitUITests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D7EAFE6A941D9220D4DAD48D3F9D10F /* Pods-ArchitUITests-dummy.m */; };\n\t\t2513A6DC3E7F3992C4223FAB8691B42E /* Pods-ArchitUITests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A789ACDF548A52ADE6E3F3CC8A093C5F /* Pods-ArchitUITests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t25BF76F86631B6A1FE6325F49BF3CB48 /* GHDataTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DCEB59DBD81630136214A71DD857E32 /* GHDataTable.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t266B03E59F034981A8D8EC781154449E /* GHGherkinDialect.m in Sources */ = {isa = PBXBuildFile; fileRef = E35F5DD30454E46196B0025711A434F9 /* GHGherkinDialect.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t27CB724262DDB39A8161563F8EA3F172 /* GHHasTagsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EEF7062B0BF8D10A2699B940473F555 /* GHHasTagsProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2929B7A117AE6E033F7C059BB28F9D54 /* GHParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 719C0B609A4CF5650DC5271C807E0EB9 /* GHParser.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t2A565D3E80B26F63885D6F8A64F4CA90 /* CCIStepDefinition.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DB61AAAC05F4E4E0E8988F9FDE7F1AA /* CCIStepDefinition.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2B7AD418F2EF5145A0F64EDE5B2EB9B0 /* CCIHock.h in Headers */ = {isa = PBXBuildFile; fileRef = AC0499F00F455EC6DA3C5F4197D99BCB /* CCIHock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2DA1CB2598193DC6CBC6B52BA5B5A488 /* GHAstBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D71080F074D6ADB23EC163974386BD4 /* GHAstBuilder.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t2F288ED3641B2B4775884C462AE377E6 /* Kingfisher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BCEC4C5C0D9894F1608ECF4AA1B07DAD /* Kingfisher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t2F90120D20E6022A4076DF0CC308ADFB /* Cucumberish-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 02E495A5BB9CDACCACCD0DBE30DE1ED0 /* Cucumberish-dummy.m */; };\n\t\t312837097D2DAE14B135232184AD00A8 /* CCIStep.m in Sources */ = {isa = PBXBuildFile; fileRef = C79358242879D3127D17078740D41FFA /* CCIStep.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t3130C1F8D873C94DC829059468926987 /* GHTokenScanner.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DEA872E0A0B67DA1199F5CC862218FD /* GHTokenScanner.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t31D24DA6775E54B5B98647B97CA2A23E /* Kommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 810EFCD05DCD0BEE4C35FBC5CFF3D411 /* Kommand.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t325F9F9566F1B1570A0400DC034A3247 /* HelperFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38D94846A5CD346D62433EA36DB78117 /* HelperFunctions.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t32B92283834C6A0A76979EB318D1D099 /* AutoRotatingFileDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFDB653F29AFC0C536DDCC2F8B1B899C /* AutoRotatingFileDestination.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t337B7C4B17B21087732A2B2170F537D4 /* CurrentDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 917CEB139B2DD57B86BCE40B54ABFCF7 /* CurrentDispatcher.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t347E267C86D7C5E0386D2790C49A180F /* NetResponse+URLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EF069576558D2E644F4FA351A1007AC /* NetResponse+URLResponse.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t364F78C03C67D26FF50F72BDD867D892 /* NetURLSession+Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD5B64BEEEB0E82D42B71E37B1E74DDC /* NetURLSession+Data.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t37E3439D5F5649D4A4D7CBE20814C994 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\t399330182B858D0D87F6F95686A5E7F9 /* Kommander.h in Headers */ = {isa = PBXBuildFile; fileRef = D06DEFFA68E8BDCCF3720E8A8D9DAA09 /* Kommander.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t3BBB1EBBD19C3AB446F90453B564E0A4 /* UserInfoFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 127AA63D48E5CB0A4000883D5F23E7D0 /* UserInfoFilter.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t3EC4933635344D02DB636500470E8CAD /* ImageTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AC7C905881720410817B9FE2FA1CB49 /* ImageTransition.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t3EFF1EB46E9FCBFE65A26D3A0C0C96BB /* GHGherkinLanguageConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = FD451E77F4E7D2A366131BA99AADF3CF /* GHGherkinLanguageConstants.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3F6EB12E7F74110DF491E169E099DC9D /* BaseDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9C4080B3B60A11B84CFB2C0C10C8C9 /* BaseDestination.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t411DEA49C6963285F84D423AA4E41D55 /* CCIBlockDefinitions.h in Headers */ = {isa = PBXBuildFile; fileRef = F3DEEFAD9DA6698CDF2CD9F0E9E7B4CA /* CCIBlockDefinitions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t419A66DC7CCA52C3D54B98610F412E72 /* NetURLSession+Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93DF98BDE895DFEB375198C5E2C3C0E7 /* NetURLSession+Download.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t42A18808B310BEB20B4646D3FED0D438 /* GHGherkinLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 87B4DFCFC8497CA3E7442CF4FE55673D /* GHGherkinLine.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4407DB2436072E9358CB20C87698BABD /* GHExamples.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF0C23B444FE365419FB5A0C9E6F1BE /* GHExamples.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t445A2939EE7133C0AFEE2D6B8D002C7F /* PrePostFixLogFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86FF2BE732E2017353DC0ADCA9B9D0D /* PrePostFixLogFormatter.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t447BDB5D42EA6C04156E1C284FC5056F /* AnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6ABF2311950829EF5F98457A36389D4 /* AnimatedImageView.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t44CA726228D100D56774854A021DE3E7 /* Pods-Domain-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 86B2B3F017862511356BF3EEE68B888B /* Pods-Domain-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t46F01848C415CED795AD46F9BA9A17A9 /* NetTaskMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D8E4A7D7C63DC9265B9893D03B02558 /* NetTaskMetrics.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t47F120267BD3D086D42C6384932D82FA /* GHTableRow.h in Headers */ = {isa = PBXBuildFile; fileRef = DE23E812682CCFD62DA9D7B25902370D /* GHTableRow.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t480B137E2CD1B0BAB2FD46DEE357F0B0 /* CCIExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E93F14C3FC833DED3FA5E0CB946A764 /* CCIExample.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t4881E456D6D306D4BD0D55F1E43B48C4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\t4A02A546484FD3426D258BEAA1D07A5E /* GHGherkinLineSpan.m in Sources */ = {isa = PBXBuildFile; fileRef = BB373B2B2E91704313660CA0F66AD6FB /* GHGherkinLineSpan.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t4C079F276D78FCE815F5EBB3A6859133 /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE5F978C70DB73BFDE50DCD9391B0BE5 /* ImageCache.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t4C344D0108F4ED1143A04DF74390EB0E /* .swift-version in Resources */ = {isa = PBXBuildFile; fileRef = 5169C87334029720F6E17D158ECB0A28 /* .swift-version */; };\n\t\t4C893C3A249C0DD09B13712023FD7304 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\t4E22D2D51248EFB87EF0349F8C58DDD4 /* Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1589C165185593FB7B69A714F92F961E /* Kingfisher.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t4F1A6506DDB54703C7935747FEEB550E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\t4FCF471EDDA34DD54DA0F3842CF49C89 /* GHGherkinDialectProviderProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 68DE7FC880BB051360BACB0A8880970C /* GHGherkinDialectProviderProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t503A59EDE755226081081CEED1DCD5B5 /* Pods-DomainTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C6D6B5617EB213560D427F81EECA6F /* Pods-DomainTests-dummy.m */; };\n\t\t50B005C06620EDE2B7C5FF3D4B02BB39 /* Cucumberish.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DE97AC266A92516C0139B4860B32610 /* Cucumberish.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t50FC8EDEBB6C1810BF0DF98E3A70DCED /* URL+XCGAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A1ECC686AEF48839C644422566579EF /* URL+XCGAdditions.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t51478937D03B0C67ED99704A3B2D21BB /* Reusable-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5172B96C1E26286778A4C6079E9FBE12 /* Reusable-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t518006F5E9ABE7A3742B7F91AB2258FA /* KommandCancelledError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DC48FBEDA6F09BC8787BCD0C4B21BD8 /* KommandCancelledError.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t518F7251989027076D4319E457671798 /* Pods-CoreTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 598379A44F04CB77AA27D6523E196E54 /* Pods-CoreTests-dummy.m */; };\n\t\t52416A6AC7387ECACCC45596498D96AD /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E523B74BB2B6DB84FEB7E50525A35866 /* CFNetwork.framework */; };\n\t\t53E18AA935F29E65EEB1FCEED3035F20 /* GHStep.h in Headers */ = {isa = PBXBuildFile; fileRef = CE315FDC4F26443A9092E941EEEA1876 /* GHStep.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5423F5E90C38445C2C70673CE6AFFB54 /* MainDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92AC63201DF010FC16FA08D329ED5A71 /* MainDispatcher.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t5457AE40BD8B5084DDCE3C71E10A47A1 /* CCIFeaturesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 44263B067C45A490F610AB9818C19B01 /* CCIFeaturesManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5492E776306374DF34FDF284A5A64B65 /* NetReachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8DC3772EB96DD3E5BD0B3BE510620E /* NetReachability.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t555F2811A5380017DBA82FD9A907A71C /* GHFeature.m in Sources */ = {isa = PBXBuildFile; fileRef = CF07B002EC2017639A519F9C59204E60 /* GHFeature.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t56E81EEF4B273A45CBF38AFE79C06EBA /* CCIJSONDumper.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A4BAFE1D1959599D3219E156E8328BE /* CCIJSONDumper.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5712C10C32BBC8580522EB9725E98664 /* GHNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C6B9CA0F6F5E2442A4067B74D2D3B34 /* GHNode.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t57526FDA59A5D311A20489E851EDF211 /* GHScenarioOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F2B901EC1A0827ED823DCB13B541AF9 /* GHScenarioOutline.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t578F72BF592FEC12E99ED50FCABC1979 /* NetTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DDB61DA3E813E04833121E76DDFFB3 /* NetTask.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t599651F977311AF3C3D2D2EB2E443F9D /* GHTableRow.m in Sources */ = {isa = PBXBuildFile; fileRef = E1C09E1C073F1350B0ACEBB550505416 /* GHTableRow.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t59D2576C76C3F7665B9831E04268B858 /* NSString+Formatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F986A35BFB685A700BD9896FF4EF5D9 /* NSString+Formatter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5A0DAEEAA36A22BE0E597D058404EFD2 /* GHLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 589AFCEDBF784755427EB89289E36047 /* GHLocation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5ABEB0DBA79C9EC8E90CFA1B43393C6F /* CCIAroundHock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DD61270413D8587F8EFA23DADC88632 /* CCIAroundHock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5ADD144FBCC3F241953A2ED36DA90006 /* TestDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A2F28D71EE85A11EF8E507AB5AD895 /* TestDestination.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t5B5D8AE167BD8E304CE474A9B8DBA2B4 /* Kingfisher.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B32F38F425C6DBCF4AD69F96FC4834C /* Kingfisher.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5CB1E97E87EA861F0CA46364FA1D82E0 /* CCIScenarioDefinition.h in Headers */ = {isa = PBXBuildFile; fileRef = B12EC4587159A3E3339B3738838EFBD5 /* CCIScenarioDefinition.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5D26A20B10115EAAC82AA67219B914F7 /* NetURLSession+Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72063305E3ADA155EB457CB94D659186 /* NetURLSession+Upload.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t5DD7E65BC7F21B4C02718193401D356A /* NSString+Trim.m in Sources */ = {isa = PBXBuildFile; fileRef = 9471BE4B988273354734C37BE0DC21F4 /* NSString+Trim.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t5E632DDFA44C09C21110169843F23FBC /* ObjcExceptionBridging.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D4ECDBDBBAFCBAF7FDFE0FD6236AF91 /* ObjcExceptionBridging.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5F978FFABF9C8D142F1E477456003823 /* NetAuthorization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D37F1CD65E914D7CBAAF06AD142E961 /* NetAuthorization.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t5FB2535CA93CC18996A8393A10ACFF1B /* CacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5847CC73FFA604FADBEC258F90A7F52B /* CacheSerializer.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t6327175C4E0CB8EF4C9D5388DC0DC0CD /* GHGherkinLanguageSetting.m in Sources */ = {isa = PBXBuildFile; fileRef = 283192F63BB88978964150A6F66637DE /* GHGherkinLanguageSetting.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t6360477D3C59ADCF1B2A84064F2D023A /* GHGherkinDialect.h in Headers */ = {isa = PBXBuildFile; fileRef = BC937B695EB156019AF75F8B90BC760C /* GHGherkinDialect.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t670703FBB7D2FFBE02375B608A2F3E1A /* FilterProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8A9688B146E1617BE63EC6A7E538467 /* FilterProtocol.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t6E28875617E4F36C41B8D967A8EB61CE /* NetURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39913A61C69ECE17F63E12771748A49 /* NetURLSession.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t6EC5F2A5CB44095B545F0003F80B9F5A /* Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92BCC674AE0D2A90265DBE2A2637FBB2 /* Resource.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t6F172AE2BA037F0C909A9D947D59AAA8 /* NSArray+Hashes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BFC380FEA301BBA034FB710B0A76804 /* NSArray+Hashes.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t71DC0C14DC24E3AFC91CFB4CAA98FDD9 /* GHGherkinDialectProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 05E3DACC5F82ECA03D42109E0C6B77A5 /* GHGherkinDialectProvider.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t76FA83265537D29800AC9D9979BCA924 /* NibLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E8F2DFFE07B51FA3A2A0FB538F04DBC /* NibLoadable.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t7776AF1FEF112F6245DDFDDDE56E6D68 /* ObjectiveCMarker.m in Sources */ = {isa = PBXBuildFile; fileRef = 9551ADB9D573A9A4878DF8F17112A650 /* ObjectiveCMarker.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t77FDBFDCEFB9A449C43C3A40EF5271CA /* GHParser+Extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B6BC129FC70C91D115252944C04CE3 /* GHParser+Extensions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7A1C340BD3470E41BA8224C7E1CEBBC3 /* Pods-ArchitTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BDE70461FFB96B0F12CF5C388D89E94F /* Pods-ArchitTests-dummy.m */; };\n\t\t7C663005430C858E5D86C20916FABAC2 /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB25291CD253A8A1F7F455D81677C87 /* ImagePrefetcher.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t80E3B85E43E1799738B3DA6D0B228EB0 /* ObjcExceptionBridging.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AE3BEBF88AEB8861BDBC46832BD6697 /* ObjcExceptionBridging.framework */; };\n\t\t80F5C59A429366988690F3D62D62826F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E64EFC30FE270B36BAA70D5C31FB432 /* UIKit.framework */; };\n\t\t8275E4E972071F016A493A6FB0B40F40 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049C712C1B79DB0BD7CF02446C5F4991 /* Placeholder.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t827908C12A394C1309860C7402996A76 /* Pods-DomainTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C9D4C509E0A2BC5CC77C09F946BCB9 /* Pods-DomainTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t82A5A2AB167C19E3E8F8E9080CD67ACB /* Kommander.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5589CEA036AA85F8B9ECD1717D36818F /* Kommander.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t8448904574BA9E216EF2B8BC5D779068 /* NetServerTrust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 302B7A6DF8D3B6BFAA5CBD7ABCD43A8A /* NetServerTrust.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t857C2FE94D315B6362134113FA009652 /* CCILoggingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEAFAD156E2A5C8489CA69CBB3FDBB8 /* CCILoggingManager.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t8675C94B2A6FD104180C642A55DEE1F2 /* CCIExample.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B522DEE8F4DB082FECE75A9010BDADB /* CCIExample.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t886271C8BF2746B515121D676A264674 /* NetResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46E45DFC572385823168759E23393BFF /* NetResponse.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t89336A52BBA47EF814EEE974A534AA3D /* GHScenario.h in Headers */ = {isa = PBXBuildFile; fileRef = BAB40416E8E0EC13C9965BB164545F0E /* GHScenario.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8A596628D1172E0BBE74C8B70C077905 /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D95B1222FB6485CB626A7449573FF19 /* Box.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t8A988F41A07E47F8D5E3732947B9F1BB /* NetContentType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAD52DD7A2ADAF0265DA9B7BA5614196 /* NetContentType.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t8BABA99FEBA8069DB4DCD0F22F441069 /* GHStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C668F4BAFDDC55DBC24654ADB44DEF3 /* GHStep.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t8D11993D294507A7EF4C13F0077EBF67 /* XCGLogger-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 209222D1F1EE679A7479C1E9468AD2D4 /* XCGLogger-dummy.m */; };\n\t\t8F37FDAD26B5386D1E91576F4D2C579E /* UIButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D313E373EAF782C1EDCBE1F8D4B35B7F /* UIButton+Kingfisher.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t8F83D3A1439E462EF6DA5AFF408EC880 /* CCIArgument.m in Sources */ = {isa = PBXBuildFile; fileRef = 0458852D8F4EF599D95B6E92DD7A52AD /* CCIArgument.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t8FBAAAF795A9215767FEA93457333F1D /* Kommander-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F17C4D07C1C72244041C64D336103E8A /* Kommander-dummy.m */; };\n\t\t9147A3DFB908355B66812DE65402A128 /* GHGherkinLine.m in Sources */ = {isa = PBXBuildFile; fileRef = 8116E903ABDACA0722DCE04CFC6E3995 /* GHGherkinLine.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t91695834575E2AB820DE34B660735A90 /* GHHasDescriptionProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D90E2FEA217C023BC14D73A75B7278D /* GHHasDescriptionProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t916F615039ADEBFF29CD2B233DF5BE6D /* CCIJSONDumper.m in Sources */ = {isa = PBXBuildFile; fileRef = 552E8CBF921CF3F8FF4F52CBF82787D0 /* CCIJSONDumper.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t91A58AD15F502DD817DD676E14AD6B66 /* Reusable-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F6FE3B02B7186A27A5CF0D1D661A54F /* Reusable-dummy.m */; };\n\t\t92011EB8586C8B1B22A120645279393C /* NibOwnerLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBB6084406A8FA1D3882ACE24BBBC4E2 /* NibOwnerLoadable.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t94E437332009CD5928DDF37A42E14004 /* Net.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5F2C6C4BE3664B1941451CEB76FC1C8 /* Net.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t95F20504AE5CE445C423294D159485E1 /* CCIBackground.m in Sources */ = {isa = PBXBuildFile; fileRef = 280CC88593999D040602158CD7ADF1C9 /* CCIBackground.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t966270DF4CA76BC195BB0E8DABB541FE /* Pods-Archit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 885247A7BF6CCC8F0FB83008F1432EEA /* Pods-Archit-dummy.m */; };\n\t\t96F21A7ED33C7F68A53E303922B7034C /* CCIFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = A1573E3ECC284EBCA32592F458E68F62 /* CCIFeature.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t977112B3C78B4D5CDE3F862372CE3D70 /* CCIHock.m in Sources */ = {isa = PBXBuildFile; fileRef = 57687BA7AFDEF345B0BADFC4D301D2D1 /* CCIHock.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t982CFC4903C2AAB0D8F7B27AEF922F45 /* Pods-Archit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8554460064553348A0170DBB2B665C /* Pods-Archit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9A773350D6B7FDDAD34C2523EA1983B4 /* GHBackground.h in Headers */ = {isa = PBXBuildFile; fileRef = CCA11081C724388BA3B8994B4B5FDD3C /* GHBackground.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9B7CF3F9B7EAA68D6A13806DA7451F03 /* GHLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 08B8360C41083D8035B6E606A6DBCE3F /* GHLocation.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t9C2B0CEFD6D46C1D99ADE9F415FD545D /* UITableView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1E66BBA492F54AA5E363F69E79FFEAA /* UITableView+Reusable.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t9D6DC57549F30278BE6B993902CB38C0 /* Pods-ArchitTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A04D1F57C465AFA338DB3122EABD175A /* Pods-ArchitTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9D8433877EEF871BDD4C52D2FED841C3 /* GHNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 55743C6CBE6477E747DFDEEF8B477C84 /* GHNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9E0B64984AD97AB40BF03A37983EC35C /* GHGherkinLanguageSetting.h in Headers */ = {isa = PBXBuildFile; fileRef = D188E1D30BAE02CD5ACECC273AC372C3 /* GHGherkinLanguageSetting.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA12D191EFBDB11F04A6DD5CBA3A497BB /* GHParser+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = B9A837B3EB58DC57E304B3E04DC0FEF8 /* GHParser+Extensions.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tA47513AAA9E650897D079552AD719B1D /* NetResponse+HTTPURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 940AD48F501BB7FDC72FD05AC76EFAB7 /* NetResponse+HTTPURLResponse.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tA4C1986F220525D7D3C1CD9BEBCF5320 /* gherkin-languages.json in Resources */ = {isa = PBXBuildFile; fileRef = 78298952BE663DA372F7862BACD74848 /* gherkin-languages.json */; };\n\t\tA4D79FF5AA9398ECCC446AD6485712ED /* ImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DF285CD2ED31CDA6615B60DB6707BA4 /* ImageView+Kingfisher.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tA4DF73A7A66BCB0711DED161B6348748 /* LogDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54D36C136C1793DE836ADAC645C395E7 /* LogDetails.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tA5DB00233E2F6344D95AA710210F9855 /* GHParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 79D7E6C88897758D8EA53B57205E4BE3 /* GHParser.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA6E1E980C9E36BABF9079D084510C50C /* NSArray+Hashes.m in Sources */ = {isa = PBXBuildFile; fileRef = C4FD7E63CE8C13F307D3B8E42F58E4EC /* NSArray+Hashes.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tA721D676182C131AFDE544CC2F8D5F56 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\tA7D993D9C0850B594C508B8123E7CB5A /* NSString+Formatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 27EC930C02E33F84E1CE81238D94A80F /* NSString+Formatter.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tA9B82BE9934E812CD8A2470D0120E214 /* CCIArgument.h in Headers */ = {isa = PBXBuildFile; fileRef = D83D2F2AC2A421B7A0B5CF66E2DD75BD /* CCIArgument.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tABB39C4F6E127847DFB6BC8979E18F72 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC2C43D3EA7E7F62C4CCCF0D8C588F06 /* Image.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tABE46FE3DE4313913C03D268C3F31009 /* NetError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8422FD8607F7E62209A911410F51D7B1 /* NetError.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tAC30A0FE40768E5B7544D80ABD80DC4A /* UICollectionView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2855453511DA3D7D812E1AA692CE0CC /* UICollectionView+Reusable.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tADA2FBDD515F79725F822B8346B1C154 /* XcodeColorsLogFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3632F1CBB5B9E2BC67F21B44065E1496 /* XcodeColorsLogFormatter.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tAE1EDF8E65AC4244558141DD64B5E7FD /* GHGherkinLanguageConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AF5D02ED6DD038A430BB8389EBBB02A /* GHGherkinLanguageConstants.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tAE65E9439900F353395A432B7EA2FEE0 /* GHTableCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CEC37C9AECE2940EDD3FEFD1815B9A4 /* GHTableCell.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAF6C316FB023469C303B1BE124A825AE /* CCIStepDefinition.m in Sources */ = {isa = PBXBuildFile; fileRef = EF3A943FBEA3AB9A6927AF33DE43F8F0 /* CCIStepDefinition.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tB39E271B43A1E341A1BB68A351AF14B2 /* GHHasLocationProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C1E1451646FBAB00C5B9B6F471312C3 /* GHHasLocationProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB3CE2C47482E6C67201575ACB7927BCA /* Net.h in Headers */ = {isa = PBXBuildFile; fileRef = 84176253DDDBA214DE4A70D2B16ED15C /* Net.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB5152FB9483578B74F2168101E3E072B /* GHComment.m in Sources */ = {isa = PBXBuildFile; fileRef = E46C9FD338ABD2E46E789E9BF5D633D8 /* GHComment.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tB523A50D28CE2C84D9E2FD5A2B52CD2E /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33A598FBDF7AEB2198A1BF7E462541A1 /* Indicator.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tB5880C43852C32D1A52BA78C14931D52 /* GHScenario.m in Sources */ = {isa = PBXBuildFile; fileRef = 247385816C28A2D0F418C6FAEDC05AF1 /* GHScenario.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tB6495CFB7414A9CC51F1C33650368272 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\tB684009BED94E45876B73CD59AC95BFE /* GHDocString.h in Headers */ = {isa = PBXBuildFile; fileRef = D3985EFB34342C3E89C38F04756E73A2 /* GHDocString.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB901615F30064AA769A71D4B71AA6CE3 /* NetResponse+Build.swift in Sources */ = {isa = PBXBuildFile; fileRef = F558D5D192AB512B2C547488FEB9E7A5 /* NetResponse+Build.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tB91552B58FE81C86CA64E82F8632D1E4 /* GHStepArgument.m in Sources */ = {isa = PBXBuildFile; fileRef = 32EF88E31B89594CF1BF52AE3F8AFC1F /* GHStepArgument.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tB93EF875C805A918FBD7B24BBFBA6BCA /* StoryboardBased.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4948F5126549E0FB3411465739B7433 /* StoryboardBased.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tBA64071C9C10E14D75D41D5CD813B10C /* CCILocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DF6BBE7E43DB2364A9B0D38CE530851 /* CCILocation.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tBB6346706B07DB1368FEB5B9A319F48B /* GHHasStepsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = D9AFE777FE7481AF1AB0F1BCE10A1F6D /* GHHasStepsProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBB647D66B8244AD79D09D76FA4FBDEBA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\tBB69D00427D01D38249B48B73605B7E9 /* LogFormatterProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41C39F595A72D5544DF40D592C8B4693 /* LogFormatterProtocol.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tBCA0066D9DA92975699787191A9C280F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\tBE99DDB8959688DB9695DCA7494A39E4 /* GHTokenMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 516B48924FFA28C2E93219EB040196F1 /* GHTokenMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBF35347A195DF2232B482B05BC2D1722 /* CCIAroundHock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AD50214589598F8F7D1F4D8541B44E3 /* CCIAroundHock.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tC175C7CF94FC1ACB02CFAA83334C4ED4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\tC2CC9FCDF0B02D683F22E129F5D35F25 /* Kingfisher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AF5F20DFC7975AE3C74C78441094F20 /* Kingfisher-dummy.m */; };\n\t\tC40D7FBD7DD8B366CB89564B406511F3 /* XCGLogger-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CDE7AF2EA81695CB38C86BBC025F384F /* XCGLogger-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tC40F709E537035F4208B90871A65DF07 /* KingfisherManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88CE3E4C3B9BE233126726B126DD2F8C /* KingfisherManager.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tC72D49310B9B454D0A40969A3378E118 /* NSString+Trim.h in Headers */ = {isa = PBXBuildFile; fileRef = 8647D5CA2DC3C052C9E3A4798DF0AB29 /* NSString+Trim.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC96C30663D16476EA65AB33615DE46AA /* NSObject+Dictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 19A9E7C075D34520056448079CA10CB3 /* NSObject+Dictionary.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tC9F07D942847BAF21633F8B1D24DB010 /* GHAstBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F8DB3747431EF23E6BD537ED582113F /* GHAstBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCA893D46DF745C32064E5C3ECF9CF378 /* GHToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 07203E6001DA4D28FC9B5EF4006A6D45 /* GHToken.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCABF873D847F68F51F2DABBEF2921D37 /* NetTaskMetrics+URLSessionTaskMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77FE5D389919ED2685B4717BF6908635 /* NetTaskMetrics+URLSessionTaskMetrics.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tCB1E778A18E18EF37E9D17C822795ADB /* GHStepArgument.h in Headers */ = {isa = PBXBuildFile; fileRef = 736E7C57EFC76D466F48655D2D706476 /* GHStepArgument.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCBC4979F49026C733C2965C0A16BB063 /* AppleSystemLogDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EAAB904F80D7E850A156769F24BCC94 /* AppleSystemLogDestination.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tCC7AF8272E28BD7CAEAF80B769A8E42A /* CCIBackground.h in Headers */ = {isa = PBXBuildFile; fileRef = D8AFEA284A9649421F49DC070EF5D249 /* CCIBackground.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tCE39D91D0BB690C3A014A9FA4B6E2C4A /* BaseQueuedDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D9500BC14B04A176B982545ABC22158 /* BaseQueuedDestination.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tCED6BC1F81E2BEDA1E30682E09A374D0 /* FileNameFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43D981C24DE43915DCDE6AF4369F309A /* FileNameFilter.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tD01D28DF417A450E93130044E6AC32BD /* CCIStepsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DD002F3118549FC318E08DDA04483C4C /* CCIStepsManager.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tD0BED64882233D4E636D5DD54A1D1A2F /* GHTag.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A506C557952D1F849B264E6B4D949D3 /* GHTag.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tD18FCC0D2F39664A387177649B63E21A /* GHDocString.m in Sources */ = {isa = PBXBuildFile; fileRef = 7658ABF3F94439D812F0CDCE8F8055B2 /* GHDocString.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tD431B161924A8DCC8F532687D58AD59E /* Base64LogFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72682A730F7B2AB8B698AB98C1F8BE51 /* Base64LogFormatter.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tD4C21B2C05BE7B8467CB3EB1CAD7CAD1 /* GHDataTable.m in Sources */ = {isa = PBXBuildFile; fileRef = A9724D9E2ADA44DD16AC57C867A37290 /* GHDataTable.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tD53A7859509C220EB400C6C67E532AFB /* GHParserException.m in Sources */ = {isa = PBXBuildFile; fileRef = B29581C168F621CCCF1A23C071B5CD2F /* GHParserException.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tD5F510C1918F6DE0AEBA4F75C1D1C5C0 /* GHScenarioOutline.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CBA27520657D6545288B7386C2B261A /* GHScenarioOutline.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD5F9061787AB4384454FCA48D7AB57DC /* Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E5662D40E78AAD333E69B4AA56C03EC /* Reusable.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tD66018C5BFD7DABDB5838C19BAE3FA98 /* KingfisherOptionsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DC1D92C5089A8E6D0C259A9571704A /* KingfisherOptionsInfo.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tD693D1391BB584628B984893615436C9 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D55EEE3EC2DE00DF094CD4C605AEC614 /* XCTest.framework */; };\n\t\tD7639AEF0DD7A828243919B5FDD8E150 /* ThreadHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FADBC8762995973B0DD96E4017B0B95E /* ThreadHelper.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tD9D37E9A72367D9E7A630AF9322D31FF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */; };\n\t\tDA306B26CA4424083CD6C9F1C7060808 /* NetClient-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B9F29A654AF391298893AA3EFEE27378 /* NetClient-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tDB4F5423BF8FF0B32443D41779C8EB11 /* CCIScenarioDefinition.m in Sources */ = {isa = PBXBuildFile; fileRef = B3512734BFB13288A3DA50876210F20B /* CCIScenarioDefinition.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tDC0D523C7FBC155BE18A946723866612 /* GHGherkinLineProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = B406BF25F2781FDB6DF98AB9312F0D37 /* GHGherkinLineProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDC609F1AE4BCD83F1CE3A7D9D69DE445 /* TagFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB5E3D7F0E4F300EDEA6E8C981C4D760 /* TagFilter.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tDCF7D4CCBDD59823A44B262A41C7E9FB /* GHFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FDD3E5FF3EA5618961B4FB07E4F761B /* GHFeature.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDDEDA85C8025D170FC3C5A0FC6B9FD2B /* DispatchQueue+XCGAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A35BC40D19E88B6D3857106A78512EF /* DispatchQueue+XCGAdditions.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tE17E4D6FEA6B87AE31B478E1446714E6 /* NetClient-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A29BE02AC796F62BA4DB2A1F10649D5 /* NetClient-dummy.m */; };\n\t\tE1A0A0F0D5CFD271A8F6AD41980C7E43 /* GHToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 4179A4BD2F63CD58DD7EFDD1C2D485CE /* GHToken.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tE4A9930ACC30B142F671BE52FEEFB424 /* NetURLSessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F723B9B5E58FF163EBD6A9B92EE7B16 /* NetURLSessionDelegate.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tE5FFC1E3DED9E093B42CA963C5B3ECD7 /* GHGherkinLineSpan.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CB88CCC0EDCBB1BFF3352D35116FA24 /* GHGherkinLineSpan.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE685C576F1A060B334C1FB759675F084 /* Cucumberish-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CB26E9E01266A1016C264B6F2BA870E1 /* Cucumberish-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE744C608F95EB6361766839E135D9B22 /* NetURLSessionTaskObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38A1247587CCB78098E809EC836EE56F /* NetURLSessionTaskObserver.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tE81384DF91581A799533F8CA96B805FF /* CCIFeature.m in Sources */ = {isa = PBXBuildFile; fileRef = 289AC8BC81B1A2FB6F7585C7B8D3FE0A /* CCIFeature.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tE8F1C92D1994449D49D6E7AFB4087B40 /* Pods-CoreTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FC0A1A134909DFF3806F903F538BC6E /* Pods-CoreTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tEA50D4F48AB601157CD85FA165DBC0E6 /* GHTokenScanner.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B02F00FC5B40530DB42C51CA132C901 /* GHTokenScanner.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEAFBC438AA244E0F4C4013A4E4C2C838 /* GHTableCell.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1E6B48492D474140694458748C2B68 /* GHTableCell.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tEFC53F45D1F211F4BBB1E45C1988C0A9 /* GHExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A2D5092FCD06374B8ED3404D9B5BF7B /* GHExamples.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tF1898DCC76147ADFA9981A427A7B3133 /* NetURLSession+Stream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE6206187579FA2E7B9D3F64B9FC234 /* NetURLSession+Stream.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tF2B10D036D0A5CCEBC39744B33828B3C /* FileDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7979E474296ACAC3790F5E380263E6F /* FileDestination.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tF3CA9E91B4B86BFB435A6520B26567F2 /* XCGLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AA940340D89913607E74C6A8498E486 /* XCGLogger.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tF597FE5626EF7EBDB6437B5256EFB66B /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22493A26F7CEEA74E6D7EDA894C0F894 /* Filter.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tF80F9B3F1C5D88145E9762665DC43314 /* DestinationProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0624018E09478E6B145E853F89EB7D90 /* DestinationProtocol.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tF83D76D568A76D700515723D4A0F373D /* NetResponse+Cached​URLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584981606FBFBBE70866FF2B01CDDBEA /* NetResponse+Cached​URLResponse.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tFC37DF9AFC69916B4B1C6B6FB814EEC5 /* DevFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53A873F2E916A66823C12D14ECD9DC1 /* DevFilter.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tFC4DAC18846C1685687DC91E44F661E0 /* GHScenarioDefinition.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A02E08E6B36D255D51BC3F85B1AAB4C /* GHScenarioDefinition.m */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tFC4EEBAAA63FAD3189D087F6F3B65571 /* StoryboardSceneBased.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BCF13011B49521532F9DF15E119906 /* StoryboardSceneBased.swift */; settings = {COMPILER_FLAGS = \"-w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\tFFBABBD3633F8BF1183557A3A5320234 /* GHHasRowsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = B729115D536BFE943B6BDC5F01180B70 /* GHHasRowsProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t05BD26E8EC9291BAE46B0AAE44F26580 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2F9219DC3436F4A71BD490ADED213426;\n\t\t\tremoteInfo = \"Cucumberish-GherkinLanguages\";\n\t\t};\n\t\t1143DE0DB010785B69951F29E80FA24F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E6AE18E7BA96DB0599AEB8F02C885BBC;\n\t\t\tremoteInfo = XCGLogger;\n\t\t};\n\t\t1DFB29C13222DADAC7B04091B8F96635 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 68BBA27FABB4188F082A1A9FDD1A9B37;\n\t\t\tremoteInfo = Cucumberish;\n\t\t};\n\t\t20DD979D927B37CBB1A019943483B8C1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 6F712943B3C5592E82604940D11CE08A;\n\t\t\tremoteInfo = Kingfisher;\n\t\t};\n\t\t2EFD9F462448292770D150DE09FC522D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E6AE18E7BA96DB0599AEB8F02C885BBC;\n\t\t\tremoteInfo = XCGLogger;\n\t\t};\n\t\t36C1D0C2F07E4156A379E8A2167C08A3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5B0B5B8A1476F8AA333AA7B53F47E96B;\n\t\t\tremoteInfo = ObjcExceptionBridging;\n\t\t};\n\t\t372326D3A382B3BAEDD941A5AF707C7C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5B0B5B8A1476F8AA333AA7B53F47E96B;\n\t\t\tremoteInfo = ObjcExceptionBridging;\n\t\t};\n\t\t4843C92ED1F848A138DD920820363E89 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E6AE18E7BA96DB0599AEB8F02C885BBC;\n\t\t\tremoteInfo = XCGLogger;\n\t\t};\n\t\t4B213DE4F54DDB5A296767708948F303 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 69EAE86324AC6EEB091FB936BCE91285;\n\t\t\tremoteInfo = NetClient;\n\t\t};\n\t\t4E55A98804B1DD47081CA7E8685E2620 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 69EAE86324AC6EEB091FB936BCE91285;\n\t\t\tremoteInfo = NetClient;\n\t\t};\n\t\t6BEF2258BA5ED61DC55E2474E76CD6EF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 3FDA40B8508AD3C18A8D7F9AA00C680E;\n\t\t\tremoteInfo = Reusable;\n\t\t};\n\t\t6C3C8B5AFE493487D01792451001D459 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5B0B5B8A1476F8AA333AA7B53F47E96B;\n\t\t\tremoteInfo = ObjcExceptionBridging;\n\t\t};\n\t\t848AF9343B6AE663D8776E5622B028E5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 69EAE86324AC6EEB091FB936BCE91285;\n\t\t\tremoteInfo = NetClient;\n\t\t};\n\t\t8685FF2EF53DA0004A38266B0659E9C8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 22315F6812B77D86273C98095D3BBC79;\n\t\t\tremoteInfo = Kommander;\n\t\t};\n\t\tA77B4A39844DF54B62DEA4088C519960 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5B0B5B8A1476F8AA333AA7B53F47E96B;\n\t\t\tremoteInfo = ObjcExceptionBridging;\n\t\t};\n\t\tAC459263CF006AD5D39B049EB1FAEF51 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5B0B5B8A1476F8AA333AA7B53F47E96B;\n\t\t\tremoteInfo = ObjcExceptionBridging;\n\t\t};\n\t\tACE64CF5955B48235FB7CDEBD30472E9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E6AE18E7BA96DB0599AEB8F02C885BBC;\n\t\t\tremoteInfo = XCGLogger;\n\t\t};\n\t\tC8276A809B5E608592A1291D9A5398CB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E6AE18E7BA96DB0599AEB8F02C885BBC;\n\t\t\tremoteInfo = XCGLogger;\n\t\t};\n\t\tCB9B0619F9402FEEADFC59DE77E3B540 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5B0B5B8A1476F8AA333AA7B53F47E96B;\n\t\t\tremoteInfo = ObjcExceptionBridging;\n\t\t};\n\t\tCF94DCE4512ED688EC6BC3B4BAA60F8F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5B0B5B8A1476F8AA333AA7B53F47E96B;\n\t\t\tremoteInfo = ObjcExceptionBridging;\n\t\t};\n\t\tE40EC53EBBF106E04DC10C48B485B891 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5B0B5B8A1476F8AA333AA7B53F47E96B;\n\t\t\tremoteInfo = ObjcExceptionBridging;\n\t\t};\n\t\tEE19F9DF99633A80B3322D454ED29066 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E6AE18E7BA96DB0599AEB8F02C885BBC;\n\t\t\tremoteInfo = XCGLogger;\n\t\t};\n\t\tF565716D7F4810091B0221BA53D18D3A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E6AE18E7BA96DB0599AEB8F02C885BBC;\n\t\t\tremoteInfo = XCGLogger;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t024F1BFA1F5C914C134BCF9DEE64A78D /* GherkinLanguages.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = GherkinLanguages.bundle; path = GherkinLanguages.bundle; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t02E495A5BB9CDACCACCD0DBE30DE1ED0 /* Cucumberish-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Cucumberish-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t0458852D8F4EF599D95B6E92DD7A52AD /* CCIArgument.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIArgument.m; path = Cucumberish/Core/Models/CCIArgument.m; sourceTree = \"<group>\"; };\n\t\t049C712C1B79DB0BD7CF02446C5F4991 /* Placeholder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Placeholder.swift; path = Sources/Placeholder.swift; sourceTree = \"<group>\"; };\n\t\t04CB4E210232B9C02DA56949BCD4E6B8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t0552564CCC68274EB114B7A64D598D4F /* CCIStep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIStep.h; path = Cucumberish/Core/Models/CCIStep.h; sourceTree = \"<group>\"; };\n\t\t05E3DACC5F82ECA03D42109E0C6B77A5 /* GHGherkinDialectProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHGherkinDialectProvider.m; path = Cucumberish/Dependencies/Gherkin/GHGherkinDialectProvider.m; sourceTree = \"<group>\"; };\n\t\t0624018E09478E6B145E853F89EB7D90 /* DestinationProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DestinationProtocol.swift; path = Sources/XCGLogger/Destinations/DestinationProtocol.swift; sourceTree = \"<group>\"; };\n\t\t0693820A57511F4E33398A52B401BD9C /* GHParserException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHParserException.h; path = Cucumberish/Dependencies/Gherkin/GHParserException.h; sourceTree = \"<group>\"; };\n\t\t06A2035B4F67F24157E408A67BA56240 /* Pods-Archit-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-Archit-resources.sh\"; sourceTree = \"<group>\"; };\n\t\t070B33C739C487B3842A891D416B5958 /* Pods-DomainTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-DomainTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t07203E6001DA4D28FC9B5EF4006A6D45 /* GHToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHToken.h; path = Cucumberish/Dependencies/Gherkin/GHToken.h; sourceTree = \"<group>\"; };\n\t\t0765DD4F2C53115BC2CB9ABFC12273C3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t07965558AED140C574B015AF94F18CC8 /* NetRequest+URLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetRequest+URLRequest.swift\"; path = \"Core/NetRequest+URLRequest.swift\"; sourceTree = \"<group>\"; };\n\t\t08B8360C41083D8035B6E606A6DBCE3F /* GHLocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHLocation.m; path = Cucumberish/Dependencies/Gherkin/GHLocation.m; sourceTree = \"<group>\"; };\n\t\t08BCF13011B49521532F9DF15E119906 /* StoryboardSceneBased.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryboardSceneBased.swift; path = Sources/Storyboard/StoryboardSceneBased.swift; sourceTree = \"<group>\"; };\n\t\t09B6BC129FC70C91D115252944C04CE3 /* GHParser+Extensions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"GHParser+Extensions.h\"; path = \"Cucumberish/Dependencies/Gherkin/GHParser+Extensions.h\"; sourceTree = \"<group>\"; };\n\t\t09D0110497B78198A8771C61A499CD69 /* NSObject+Dictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSObject+Dictionary.h\"; path = \"Cucumberish/Utils/NSObject+Dictionary.h\"; sourceTree = \"<group>\"; };\n\t\t09D613AA7147EEC3CE2D31406F92B9A0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t09EFCC168921B6990215221984644031 /* Pods-DomainTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-DomainTests-resources.sh\"; sourceTree = \"<group>\"; };\n\t\t0A4BAFE1D1959599D3219E156E8328BE /* CCIJSONDumper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIJSONDumper.h; path = Cucumberish/Core/Models/CCIJSONDumper.h; sourceTree = \"<group>\"; };\n\t\t0AA940340D89913607E74C6A8498E486 /* XCGLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XCGLogger.swift; path = Sources/XCGLogger/XCGLogger.swift; sourceTree = \"<group>\"; };\n\t\t0AB2B51A6D227BD1629D6F6AF16F7E7A /* Pods-ArchitUITests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-ArchitUITests-resources.sh\"; sourceTree = \"<group>\"; };\n\t\t0B47BEE2C81FF9656D8D4FFA92A63E0B /* Pods-ArchitUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-ArchitUITests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t0C668F4BAFDDC55DBC24654ADB44DEF3 /* GHStep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHStep.m; path = Cucumberish/Dependencies/Gherkin/GHStep.m; sourceTree = \"<group>\"; };\n\t\t0D2806BDDE05BB656A21B0580369ADA7 /* ConsoleDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConsoleDestination.swift; path = Sources/XCGLogger/Destinations/ConsoleDestination.swift; sourceTree = \"<group>\"; };\n\t\t0D8E4A7D7C63DC9265B9893D03B02558 /* NetTaskMetrics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetTaskMetrics.swift; path = Core/NetTaskMetrics.swift; sourceTree = \"<group>\"; };\n\t\t127AA63D48E5CB0A4000883D5F23E7D0 /* UserInfoFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UserInfoFilter.swift; path = Sources/XCGLogger/Filters/UserInfoFilter.swift; sourceTree = \"<group>\"; };\n\t\t13FC122766C0198A7B29A390C10E4A2A /* Pods-ArchitTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-ArchitTests-frameworks.sh\"; sourceTree = \"<group>\"; };\n\t\t1589C165185593FB7B69A714F92F961E /* Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kingfisher.swift; path = Sources/Kingfisher.swift; sourceTree = \"<group>\"; };\n\t\t16A6173FEEE586769F692FDE36C7EDA4 /* Pods-ArchitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-ArchitTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t175BBA1528D7CF40BD92A70126DC262E /* Net.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Net.framework; path = NetClient.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1778866AEAC8C44E035E896079F89AB2 /* ImageDownloader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloader.swift; path = Sources/ImageDownloader.swift; sourceTree = \"<group>\"; };\n\t\t17A167250DC2EDEE01DBAFF5B71AFC40 /* Reusable-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Reusable-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t18AEA03BD4222257CC534EABD98C31A0 /* XCGLogger.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = XCGLogger.xcconfig; sourceTree = \"<group>\"; };\n\t\t18E6502A9C5FCDC2320188C894359256 /* NetClient-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"NetClient-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t18EB88F0DF5991EF500034BB99921FA9 /* Pods-Core-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-Core-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\t19A9E7C075D34520056448079CA10CB3 /* NSObject+Dictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSObject+Dictionary.m\"; path = \"Cucumberish/Utils/NSObject+Dictionary.m\"; sourceTree = \"<group>\"; };\n\t\t1A145CA3A03A864043DF7885BC3FC8B7 /* Pods-CoreTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-CoreTests-resources.sh\"; sourceTree = \"<group>\"; };\n\t\t1A1ECC686AEF48839C644422566579EF /* URL+XCGAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"URL+XCGAdditions.swift\"; path = \"Sources/XCGLogger/Extensions/URL+XCGAdditions.swift\"; sourceTree = \"<group>\"; };\n\t\t1AF5F20DFC7975AE3C74C78441094F20 /* Kingfisher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Kingfisher-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t1B766E86F5BA95880D2A0F1F1C64C54F /* Pods-ArchitTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-ArchitTests-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\t1C0FE5B24513E16E99665A1BFDA597AE /* Pods-Core-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Pods-Core-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t1C365F08CA60049024C6E549C4F3FC4F /* Pods-ArchitUITests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-ArchitUITests-frameworks.sh\"; sourceTree = \"<group>\"; };\n\t\t1C6534BB3D00F92E777C57AA07E3C4F2 /* Pods_Domain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Domain.framework; path = \"Pods-Domain.framework\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1DE97AC266A92516C0139B4860B32610 /* Cucumberish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Cucumberish.h; path = Cucumberish/Cucumberish.h; sourceTree = \"<group>\"; };\n\t\t1DF285CD2ED31CDA6615B60DB6707BA4 /* ImageView+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"ImageView+Kingfisher.swift\"; path = \"Sources/ImageView+Kingfisher.swift\"; sourceTree = \"<group>\"; };\n\t\t1FE6206187579FA2E7B9D3F64B9FC234 /* NetURLSession+Stream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetURLSession+Stream.swift\"; path = \"URLSession/NetURLSession+Stream.swift\"; sourceTree = \"<group>\"; };\n\t\t209222D1F1EE679A7479C1E9468AD2D4 /* XCGLogger-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"XCGLogger-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t214179387CD062C71B2573A909838F05 /* Pods-CoreTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-CoreTests-frameworks.sh\"; sourceTree = \"<group>\"; };\n\t\t22493A26F7CEEA74E6D7EDA894C0F894 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Filter.swift; sourceTree = \"<group>\"; };\n\t\t23725B3E391C2CA4E764B98EA6616FCA /* GHScenarioDefinition_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHScenarioDefinition_Private.h; path = Cucumberish/Dependencies/Gherkin/GHScenarioDefinition_Private.h; sourceTree = \"<group>\"; };\n\t\t24432C75FEC44700FD2A5BCD4C239F15 /* Reusable.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Reusable.framework; path = Reusable.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t247385816C28A2D0F418C6FAEDC05AF1 /* GHScenario.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHScenario.m; path = Cucumberish/Dependencies/Gherkin/GHScenario.m; sourceTree = \"<group>\"; };\n\t\t24CD43CB964E9343A1C3F27D9551E3FE /* Kingfisher.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.xcconfig; sourceTree = \"<group>\"; };\n\t\t272F4493B363C0E7240E5CD4E86EF054 /* Dispatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Dispatcher.swift; path = Source/Dispatcher.swift; sourceTree = \"<group>\"; };\n\t\t27EC930C02E33F84E1CE81238D94A80F /* NSString+Formatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSString+Formatter.m\"; path = \"Cucumberish/Utils/NSString+Formatter.m\"; sourceTree = \"<group>\"; };\n\t\t27F0CF2CCE185770EB62463C19446F0D /* ResourceBundle-GherkinLanguages-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"ResourceBundle-GherkinLanguages-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t280CC88593999D040602158CD7ADF1C9 /* CCIBackground.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIBackground.m; path = Cucumberish/Core/Models/CCIBackground.m; sourceTree = \"<group>\"; };\n\t\t283192F63BB88978964150A6F66637DE /* GHGherkinLanguageSetting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHGherkinLanguageSetting.m; path = Cucumberish/Dependencies/Gherkin/GHGherkinLanguageSetting.m; sourceTree = \"<group>\"; };\n\t\t289AC8BC81B1A2FB6F7585C7B8D3FE0A /* CCIFeature.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIFeature.m; path = Cucumberish/Core/Models/CCIFeature.m; sourceTree = \"<group>\"; };\n\t\t28B3A7207EE2C825AA396316726E2203 /* Pods-Domain.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-Domain.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t2A02E08E6B36D255D51BC3F85B1AAB4C /* GHScenarioDefinition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHScenarioDefinition.m; path = Cucumberish/Dependencies/Gherkin/GHScenarioDefinition.m; sourceTree = \"<group>\"; };\n\t\t2B32F38F425C6DBCF4AD69F96FC4834C /* Kingfisher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Kingfisher.h; path = Sources/Kingfisher.h; sourceTree = \"<group>\"; };\n\t\t2B522DEE8F4DB082FECE75A9010BDADB /* CCIExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIExample.h; path = Cucumberish/Core/Models/CCIExample.h; sourceTree = \"<group>\"; };\n\t\t2CBA27520657D6545288B7386C2B261A /* GHScenarioOutline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHScenarioOutline.h; path = Cucumberish/Dependencies/Gherkin/GHScenarioOutline.h; sourceTree = \"<group>\"; };\n\t\t2D4ECDBDBBAFCBAF7FDFE0FD6236AF91 /* ObjcExceptionBridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ObjcExceptionBridging.h; path = Sources/ObjcExceptionBridging/include/ObjcExceptionBridging.h; sourceTree = \"<group>\"; };\n\t\t2D582B86547532E026BDF51F54D2008F /* Pods-Archit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-Archit.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t2D95B1222FB6485CB626A7449573FF19 /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Box.swift; sourceTree = \"<group>\"; };\n\t\t2E64EFC30FE270B36BAA70D5C31FB432 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };\n\t\t2F723B9B5E58FF163EBD6A9B92EE7B16 /* NetURLSessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetURLSessionDelegate.swift; path = URLSession/NetURLSessionDelegate.swift; sourceTree = \"<group>\"; };\n\t\t2FC0A1A134909DFF3806F903F538BC6E /* Pods-CoreTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Pods-CoreTests-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t302B7A6DF8D3B6BFAA5CBD7ABCD43A8A /* NetServerTrust.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetServerTrust.swift; path = Core/NetServerTrust.swift; sourceTree = \"<group>\"; };\n\t\t32532D9DE5706FC96085974F240572C5 /* GHGherkinDialectProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHGherkinDialectProvider.h; path = Cucumberish/Dependencies/Gherkin/GHGherkinDialectProvider.h; sourceTree = \"<group>\"; };\n\t\t32EF88E31B89594CF1BF52AE3F8AFC1F /* GHStepArgument.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHStepArgument.m; path = Cucumberish/Dependencies/Gherkin/GHStepArgument.m; sourceTree = \"<group>\"; };\n\t\t3342D73F450C731992C709364E409AB1 /* FormatIndicatedCacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FormatIndicatedCacheSerializer.swift; path = Sources/FormatIndicatedCacheSerializer.swift; sourceTree = \"<group>\"; };\n\t\t33A598FBDF7AEB2198A1BF7E462541A1 /* Indicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Indicator.swift; path = Sources/Indicator.swift; sourceTree = \"<group>\"; };\n\t\t33DC377F603E6E9CE5554EF0EC9E02BE /* Pods-Core-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-Core-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t3632F1CBB5B9E2BC67F21B44065E1496 /* XcodeColorsLogFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XcodeColorsLogFormatter.swift; path = Sources/XCGLogger/LogFormatters/XcodeColorsLogFormatter.swift; sourceTree = \"<group>\"; };\n\t\t36D38A27BC5B8897613AAE16F3E553E5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t3809D5920B405BB206F4D732E79EDEFD /* Pods-ArchitUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-ArchitUITests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t383B0EDA3F08D7963858E04777179246 /* Kommander.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kommander.xcconfig; sourceTree = \"<group>\"; };\n\t\t388D71F84F62D26C9DE0BD494FFF242C /* Cucumberish.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Cucumberish.modulemap; sourceTree = \"<group>\"; };\n\t\t38A1247587CCB78098E809EC836EE56F /* NetURLSessionTaskObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetURLSessionTaskObserver.swift; path = URLSession/NetURLSessionTaskObserver.swift; sourceTree = \"<group>\"; };\n\t\t38D94846A5CD346D62433EA36DB78117 /* HelperFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HelperFunctions.swift; path = Sources/XCGLogger/Misc/HelperFunctions.swift; sourceTree = \"<group>\"; };\n\t\t39DB0E5CDFD94637D8DD315CC37424FA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t3A9E74153AD3B1646713859420B22FEF /* Cucumberish.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Cucumberish.framework; path = Cucumberish.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t3AD50214589598F8F7D1F4D8541B44E3 /* CCIAroundHock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIAroundHock.m; path = Cucumberish/Core/Models/CCIAroundHock.m; sourceTree = \"<group>\"; };\n\t\t3C1E1451646FBAB00C5B9B6F471312C3 /* GHHasLocationProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHHasLocationProtocol.h; path = Cucumberish/Dependencies/Gherkin/GHHasLocationProtocol.h; sourceTree = \"<group>\"; };\n\t\t3CEC37C9AECE2940EDD3FEFD1815B9A4 /* GHTableCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHTableCell.h; path = Cucumberish/Dependencies/Gherkin/GHTableCell.h; sourceTree = \"<group>\"; };\n\t\t3D37F1CD65E914D7CBAAF06AD142E961 /* NetAuthorization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetAuthorization.swift; path = Core/NetAuthorization.swift; sourceTree = \"<group>\"; };\n\t\t3D9500BC14B04A176B982545ABC22158 /* BaseQueuedDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseQueuedDestination.swift; path = Sources/XCGLogger/Destinations/BaseQueuedDestination.swift; sourceTree = \"<group>\"; };\n\t\t3DD61270413D8587F8EFA23DADC88632 /* CCIAroundHock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIAroundHock.h; path = Cucumberish/Core/Models/CCIAroundHock.h; sourceTree = \"<group>\"; };\n\t\t3EEF7062B0BF8D10A2699B940473F555 /* GHHasTagsProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHHasTagsProtocol.h; path = Cucumberish/Dependencies/Gherkin/GHHasTagsProtocol.h; sourceTree = \"<group>\"; };\n\t\t3FECBA62E1B86B79D69748298F0BDF0D /* ObjcExceptionBridging-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"ObjcExceptionBridging-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t4179A4BD2F63CD58DD7EFDD1C2D485CE /* GHToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHToken.m; path = Cucumberish/Dependencies/Gherkin/GHToken.m; sourceTree = \"<group>\"; };\n\t\t41C39F595A72D5544DF40D592C8B4693 /* LogFormatterProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogFormatterProtocol.swift; path = Sources/XCGLogger/LogFormatters/LogFormatterProtocol.swift; sourceTree = \"<group>\"; };\n\t\t43D981C24DE43915DCDE6AF4369F309A /* FileNameFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileNameFilter.swift; path = Sources/XCGLogger/Filters/FileNameFilter.swift; sourceTree = \"<group>\"; };\n\t\t43F4BA3E1262D6147C24E0BCFF98A7C5 /* Pods_ArchitUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ArchitUITests.framework; path = \"Pods-ArchitUITests.framework\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t44263B067C45A490F610AB9818C19B01 /* CCIFeaturesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIFeaturesManager.h; path = Cucumberish/Core/Managers/CCIFeaturesManager.h; sourceTree = \"<group>\"; };\n\t\t44CA7A988FA43047D3751C332A052E30 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t45C6D6B5617EB213560D427F81EECA6F /* Pods-DomainTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-DomainTests-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t46E45DFC572385823168759E23393BFF /* NetResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetResponse.swift; path = Core/NetResponse.swift; sourceTree = \"<group>\"; };\n\t\t4A2D5092FCD06374B8ED3404D9B5BF7B /* GHExamples.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHExamples.m; path = Cucumberish/Dependencies/Gherkin/GHExamples.m; sourceTree = \"<group>\"; };\n\t\t4A35BC40D19E88B6D3857106A78512EF /* DispatchQueue+XCGAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"DispatchQueue+XCGAdditions.swift\"; path = \"Sources/XCGLogger/Extensions/DispatchQueue+XCGAdditions.swift\"; sourceTree = \"<group>\"; };\n\t\t4AF5D02ED6DD038A430BB8389EBBB02A /* GHGherkinLanguageConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHGherkinLanguageConstants.m; path = Cucumberish/Dependencies/Gherkin/GHGherkinLanguageConstants.m; sourceTree = \"<group>\"; };\n\t\t4CEAFAD156E2A5C8489CA69CBB3FDBB8 /* CCILoggingManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCILoggingManager.m; path = Cucumberish/Core/Managers/CCILoggingManager.m; sourceTree = \"<group>\"; };\n\t\t4D7EAFE6A941D9220D4DAD48D3F9D10F /* Pods-ArchitUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-ArchitUITests-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t4DB61AAAC05F4E4E0E8988F9FDE7F1AA /* CCIStepDefinition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIStepDefinition.h; path = Cucumberish/Core/Models/CCIStepDefinition.h; sourceTree = \"<group>\"; };\n\t\t4DCEB59DBD81630136214A71DD857E32 /* GHDataTable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHDataTable.h; path = Cucumberish/Dependencies/Gherkin/GHDataTable.h; sourceTree = \"<group>\"; };\n\t\t4FDD3E5FF3EA5618961B4FB07E4F761B /* GHFeature.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHFeature.h; path = Cucumberish/Dependencies/Gherkin/GHFeature.h; sourceTree = \"<group>\"; };\n\t\t4FF6D625E298BE2BC6C1C5036BDE3228 /* NetRequest+Build.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetRequest+Build.swift\"; path = \"Core/NetRequest+Build.swift\"; sourceTree = \"<group>\"; };\n\t\t5169C87334029720F6E17D158ECB0A28 /* .swift-version */ = {isa = PBXFileReference; includeInIndex = 1; path = \".swift-version\"; sourceTree = \"<group>\"; };\n\t\t516B48924FFA28C2E93219EB040196F1 /* GHTokenMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHTokenMatcher.h; path = Cucumberish/Dependencies/Gherkin/GHTokenMatcher.h; sourceTree = \"<group>\"; };\n\t\t5172B96C1E26286778A4C6079E9FBE12 /* Reusable-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Reusable-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t54D36C136C1793DE836ADAC645C395E7 /* LogDetails.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogDetails.swift; path = Sources/XCGLogger/Misc/LogDetails.swift; sourceTree = \"<group>\"; };\n\t\t552E8CBF921CF3F8FF4F52CBF82787D0 /* CCIJSONDumper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIJSONDumper.m; path = Cucumberish/Core/Models/CCIJSONDumper.m; sourceTree = \"<group>\"; };\n\t\t55743C6CBE6477E747DFDEEF8B477C84 /* GHNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHNode.h; path = Cucumberish/Dependencies/Gherkin/GHNode.h; sourceTree = \"<group>\"; };\n\t\t5589CEA036AA85F8B9ECD1717D36818F /* Kommander.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kommander.swift; path = Source/Kommander.swift; sourceTree = \"<group>\"; };\n\t\t56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };\n\t\t5743B7F59B6201AC0D0712C20BAC394B /* NetClient.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = NetClient.modulemap; sourceTree = \"<group>\"; };\n\t\t57687BA7AFDEF345B0BADFC4D301D2D1 /* CCIHock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIHock.m; path = Cucumberish/Core/Models/CCIHock.m; sourceTree = \"<group>\"; };\n\t\t5847CC73FFA604FADBEC258F90A7F52B /* CacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CacheSerializer.swift; path = Sources/CacheSerializer.swift; sourceTree = \"<group>\"; };\n\t\t584981606FBFBBE70866FF2B01CDDBEA /* NetResponse+Cached​URLResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetResponse+Cached​URLResponse.swift\"; path = \"Core/NetResponse+Cached​URLResponse.swift\"; sourceTree = \"<group>\"; };\n\t\t589AFCEDBF784755427EB89289E36047 /* GHLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHLocation.h; path = Cucumberish/Dependencies/Gherkin/GHLocation.h; sourceTree = \"<group>\"; };\n\t\t598379A44F04CB77AA27D6523E196E54 /* Pods-CoreTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-CoreTests-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t5A29BE02AC796F62BA4DB2A1F10649D5 /* NetClient-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"NetClient-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t5AC7C905881720410817B9FE2FA1CB49 /* ImageTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageTransition.swift; path = Sources/ImageTransition.swift; sourceTree = \"<group>\"; };\n\t\t5AE3BEBF88AEB8861BDBC46832BD6697 /* ObjcExceptionBridging.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ObjcExceptionBridging.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t5BB0073F04C86CB83C780A8B30B7726E /* GHComment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHComment.h; path = Cucumberish/Dependencies/Gherkin/GHComment.h; sourceTree = \"<group>\"; };\n\t\t5F616FFB7BFA4E34E72CD5F9B95E5A4E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t5F986A35BFB685A700BD9896FF4EF5D9 /* NSString+Formatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSString+Formatter.h\"; path = \"Cucumberish/Utils/NSString+Formatter.h\"; sourceTree = \"<group>\"; };\n\t\t62F58D2543C335F96AD6688C9DF9C88C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t64EA67365050760C82B4410A49741CF3 /* NetRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetRequest.swift; path = Core/NetRequest.swift; sourceTree = \"<group>\"; };\n\t\t677A33CBA782D55A9424CFC2E2AFE5F5 /* Pods-Archit-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-Archit-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\t68DE7FC880BB051360BACB0A8880970C /* GHGherkinDialectProviderProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHGherkinDialectProviderProtocol.h; path = Cucumberish/Dependencies/Gherkin/GHGherkinDialectProviderProtocol.h; sourceTree = \"<group>\"; };\n\t\t690CF362B156CA19B45EB39CB5581A57 /* Pods-Archit-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-Archit-frameworks.sh\"; sourceTree = \"<group>\"; };\n\t\t6B5B5164932F7FD9F1088A46959C1E76 /* ObjcExceptionBridging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ObjcExceptionBridging.xcconfig; sourceTree = \"<group>\"; };\n\t\t6C6B9CA0F6F5E2442A4067B74D2D3B34 /* GHNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHNode.m; path = Cucumberish/Dependencies/Gherkin/GHNode.m; sourceTree = \"<group>\"; };\n\t\t6C875240E691E363E5AE0E8E8227C3A3 /* Pods-DomainTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-DomainTests-frameworks.sh\"; sourceTree = \"<group>\"; };\n\t\t6CB88CCC0EDCBB1BFF3352D35116FA24 /* GHGherkinLineSpan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHGherkinLineSpan.h; path = Cucumberish/Dependencies/Gherkin/GHGherkinLineSpan.h; sourceTree = \"<group>\"; };\n\t\t6DF6BBE7E43DB2364A9B0D38CE530851 /* CCILocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCILocation.m; path = Cucumberish/Core/Models/CCILocation.m; sourceTree = \"<group>\"; };\n\t\t6E031FA5BCC86339320E4F120AF591FB /* Reusable.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Reusable.xcconfig; sourceTree = \"<group>\"; };\n\t\t6E93F14C3FC833DED3FA5E0CB946A764 /* CCIExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIExample.m; path = Cucumberish/Core/Models/CCIExample.m; sourceTree = \"<group>\"; };\n\t\t6EB6F7F9BF4D83227CF14535C40809F3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t6F26CE83D5ABDEB9DD06D83AC9C0C28E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t719C0B609A4CF5650DC5271C807E0EB9 /* GHParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHParser.m; path = Cucumberish/Dependencies/Gherkin/GHParser.m; sourceTree = \"<group>\"; };\n\t\t72063305E3ADA155EB457CB94D659186 /* NetURLSession+Upload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetURLSession+Upload.swift\"; path = \"URLSession/NetURLSession+Upload.swift\"; sourceTree = \"<group>\"; };\n\t\t72682A730F7B2AB8B698AB98C1F8BE51 /* Base64LogFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Base64LogFormatter.swift; path = Sources/XCGLogger/LogFormatters/Base64LogFormatter.swift; sourceTree = \"<group>\"; };\n\t\t736E7C57EFC76D466F48655D2D706476 /* GHStepArgument.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHStepArgument.h; path = Cucumberish/Dependencies/Gherkin/GHStepArgument.h; sourceTree = \"<group>\"; };\n\t\t74AA467DB101B341CF0DD110468F98E3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t7658ABF3F94439D812F0CDCE8F8055B2 /* GHDocString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHDocString.m; path = Cucumberish/Dependencies/Gherkin/GHDocString.m; sourceTree = \"<group>\"; };\n\t\t76C9D4C509E0A2BC5CC77C09F946BCB9 /* Pods-DomainTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Pods-DomainTests-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t76E9A10230C1FFFED3BBC3C628C3DB87 /* Kingfisher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Kingfisher.modulemap; sourceTree = \"<group>\"; };\n\t\t7706E5140D81057771F7284126CF1516 /* ANSIColorLogFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ANSIColorLogFormatter.swift; path = Sources/XCGLogger/LogFormatters/ANSIColorLogFormatter.swift; sourceTree = \"<group>\"; };\n\t\t77FE5D389919ED2685B4717BF6908635 /* NetTaskMetrics+URLSessionTaskMetrics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetTaskMetrics+URLSessionTaskMetrics.swift\"; path = \"Core/NetTaskMetrics+URLSessionTaskMetrics.swift\"; sourceTree = \"<group>\"; };\n\t\t78298952BE663DA372F7862BACD74848 /* gherkin-languages.json */ = {isa = PBXFileReference; includeInIndex = 1; name = \"gherkin-languages.json\"; path = \"Cucumberish/Dependencies/Gherkin/gherkin-languages.json\"; sourceTree = \"<group>\"; };\n\t\t799AB5BC0DA35F7EB256BD820DD2EBB8 /* Pods-Archit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-Archit.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t79D7E6C88897758D8EA53B57205E4BE3 /* GHParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHParser.h; path = Cucumberish/Dependencies/Gherkin/GHParser.h; sourceTree = \"<group>\"; };\n\t\t7BFC380FEA301BBA034FB710B0A76804 /* NSArray+Hashes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSArray+Hashes.h\"; path = \"Cucumberish/Utils/NSArray+Hashes.h\"; sourceTree = \"<group>\"; };\n\t\t7DEA872E0A0B67DA1199F5CC862218FD /* GHTokenScanner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHTokenScanner.m; path = Cucumberish/Dependencies/Gherkin/GHTokenScanner.m; sourceTree = \"<group>\"; };\n\t\t7E91B468D6A4421DCB89650E121954C2 /* Pods-DomainTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = \"Pods-DomainTests.modulemap\"; sourceTree = \"<group>\"; };\n\t\t7E9E16609A161C51161CB8A33D965A6B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t7EAAB904F80D7E850A156769F24BCC94 /* AppleSystemLogDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppleSystemLogDestination.swift; path = Sources/XCGLogger/Destinations/AppleSystemLogDestination.swift; sourceTree = \"<group>\"; };\n\t\t7EF069576558D2E644F4FA351A1007AC /* NetResponse+URLResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetResponse+URLResponse.swift\"; path = \"Core/NetResponse+URLResponse.swift\"; sourceTree = \"<group>\"; };\n\t\t7F6FE3B02B7186A27A5CF0D1D661A54F /* Reusable-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Reusable-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t7F8DB3747431EF23E6BD537ED582113F /* GHAstBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHAstBuilder.h; path = Cucumberish/Dependencies/Gherkin/GHAstBuilder.h; sourceTree = \"<group>\"; };\n\t\t800A06DEF441E24C02887CCB12466104 /* GHTag.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHTag.h; path = Cucumberish/Dependencies/Gherkin/GHTag.h; sourceTree = \"<group>\"; };\n\t\t809806B63801D68CB331823C47DCCB0B /* NetClient.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NetClient.xcconfig; sourceTree = \"<group>\"; };\n\t\t810EFCD05DCD0BEE4C35FBC5CFF3D411 /* Kommand.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kommand.swift; path = Source/Kommand.swift; sourceTree = \"<group>\"; };\n\t\t8116E903ABDACA0722DCE04CFC6E3995 /* GHGherkinLine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHGherkinLine.m; path = Cucumberish/Dependencies/Gherkin/GHGherkinLine.m; sourceTree = \"<group>\"; };\n\t\t81530EA72074D8E365687C78BD9830B2 /* Cucumberish-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Cucumberish-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t81890B8400E3025A7A93365DE3898F99 /* CCILocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCILocation.h; path = Cucumberish/Core/Models/CCILocation.h; sourceTree = \"<group>\"; };\n\t\t83C6EF3D403F166BEF9373C6707EDAC2 /* Pods-Core.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-Core.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t84176253DDDBA214DE4A70D2B16ED15C /* Net.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Net.h; path = Core/Net.h; sourceTree = \"<group>\"; };\n\t\t8422FD8607F7E62209A911410F51D7B1 /* NetError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetError.swift; path = Core/NetError.swift; sourceTree = \"<group>\"; };\n\t\t84D12BC4944210E4BD3FC93AEE7BFDC8 /* ObjcExceptionBridging.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = ObjcExceptionBridging.modulemap; sourceTree = \"<group>\"; };\n\t\t8647D5CA2DC3C052C9E3A4798DF0AB29 /* NSString+Trim.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSString+Trim.h\"; path = \"Cucumberish/Dependencies/Gherkin/NSString+Trim.h\"; sourceTree = \"<group>\"; };\n\t\t86B2B3F017862511356BF3EEE68B888B /* Pods-Domain-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Pods-Domain-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t87B4DFCFC8497CA3E7442CF4FE55673D /* GHGherkinLine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHGherkinLine.h; path = Cucumberish/Dependencies/Gherkin/GHGherkinLine.h; sourceTree = \"<group>\"; };\n\t\t882C797FFD93A8E21656C9033972F2B8 /* Pods-CoreTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-CoreTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t885247A7BF6CCC8F0FB83008F1432EEA /* Pods-Archit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-Archit-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t88A6A05B9B5579FB89375C6829A443AA /* GHAstNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHAstNode.m; path = Cucumberish/Dependencies/Gherkin/GHAstNode.m; sourceTree = \"<group>\"; };\n\t\t88CE3E4C3B9BE233126726B126DD2F8C /* KingfisherManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherManager.swift; path = Sources/KingfisherManager.swift; sourceTree = \"<group>\"; };\n\t\t89F240BC570AC47F0FC178D62760F0A5 /* Pods-Domain.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-Domain.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t89FF1CB6FFED5315635EE8CBADA274C2 /* CCIFeaturesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIFeaturesManager.m; path = Cucumberish/Core/Managers/CCIFeaturesManager.m; sourceTree = \"<group>\"; };\n\t\t8A506C557952D1F849B264E6B4D949D3 /* GHTag.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHTag.m; path = Cucumberish/Dependencies/Gherkin/GHTag.m; sourceTree = \"<group>\"; };\n\t\t8B02F00FC5B40530DB42C51CA132C901 /* GHTokenScanner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHTokenScanner.h; path = Cucumberish/Dependencies/Gherkin/GHTokenScanner.h; sourceTree = \"<group>\"; };\n\t\t8D90E2FEA217C023BC14D73A75B7278D /* GHHasDescriptionProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHHasDescriptionProtocol.h; path = Cucumberish/Dependencies/Gherkin/GHHasDescriptionProtocol.h; sourceTree = \"<group>\"; };\n\t\t8E8F2DFFE07B51FA3A2A0FB538F04DBC /* NibLoadable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NibLoadable.swift; path = Sources/View/NibLoadable.swift; sourceTree = \"<group>\"; };\n\t\t8FA2C25C05947EBEE15D4B9EFDB7840D /* XCGLogger.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = XCGLogger.modulemap; sourceTree = \"<group>\"; };\n\t\t903030E0FF5B9A9C54E6B198C0EE940D /* Kommander.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Kommander.framework; path = Kommander.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t90A2F28D71EE85A11EF8E507AB5AD895 /* TestDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestDestination.swift; path = Sources/XCGLogger/Destinations/TestDestination.swift; sourceTree = \"<group>\"; };\n\t\t917CEB139B2DD57B86BCE40B54ABFCF7 /* CurrentDispatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurrentDispatcher.swift; path = Source/CurrentDispatcher.swift; sourceTree = \"<group>\"; };\n\t\t92AC63201DF010FC16FA08D329ED5A71 /* MainDispatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MainDispatcher.swift; path = Source/MainDispatcher.swift; sourceTree = \"<group>\"; };\n\t\t92BCC674AE0D2A90265DBE2A2637FBB2 /* Resource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resource.swift; path = Sources/Resource.swift; sourceTree = \"<group>\"; };\n\t\t93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t93DF98BDE895DFEB375198C5E2C3C0E7 /* NetURLSession+Download.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetURLSession+Download.swift\"; path = \"URLSession/NetURLSession+Download.swift\"; sourceTree = \"<group>\"; };\n\t\t940AD48F501BB7FDC72FD05AC76EFAB7 /* NetResponse+HTTPURLResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetResponse+HTTPURLResponse.swift\"; path = \"Core/NetResponse+HTTPURLResponse.swift\"; sourceTree = \"<group>\"; };\n\t\t9471BE4B988273354734C37BE0DC21F4 /* NSString+Trim.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSString+Trim.m\"; path = \"Cucumberish/Dependencies/Gherkin/NSString+Trim.m\"; sourceTree = \"<group>\"; };\n\t\t9551ADB9D573A9A4878DF8F17112A650 /* ObjectiveCMarker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ObjectiveCMarker.m; path = Sources/ObjcExceptionBridging/ObjectiveCMarker.m; sourceTree = \"<group>\"; };\n\t\t969BD9D60F4EFB04F44CE5E3455F143A /* Pods-ArchitUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-ArchitUITests-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\t96A18659E1406BAF35B5EBD50D511207 /* Pods-CoreTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = \"Pods-CoreTests.modulemap\"; sourceTree = \"<group>\"; };\n\t\t97B032C2F74B48C801293BF2DD52F567 /* ObjcExceptionBridging-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"ObjcExceptionBridging-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t9862748DC703866E85FE417177C0104D /* Pods-Core-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-Core-resources.sh\"; sourceTree = \"<group>\"; };\n\t\t990155647EA01472CEB25BD59F1824D5 /* GHScenarioDefinition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHScenarioDefinition.h; path = Cucumberish/Dependencies/Gherkin/GHScenarioDefinition.h; sourceTree = \"<group>\"; };\n\t\t9A5AC995988DFCCE0705EDDDA040C1EC /* CCILoggingManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCILoggingManager.h; path = Cucumberish/Core/Managers/CCILoggingManager.h; sourceTree = \"<group>\"; };\n\t\t9D71080F074D6ADB23EC163974386BD4 /* GHAstBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHAstBuilder.m; path = Cucumberish/Dependencies/Gherkin/GHAstBuilder.m; sourceTree = \"<group>\"; };\n\t\t9DA7FD47E181978972C8FABACFFC7EE4 /* Pods_Archit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Archit.framework; path = \"Pods-Archit.framework\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9DC48FBEDA6F09BC8787BCD0C4B21BD8 /* KommandCancelledError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KommandCancelledError.swift; path = Source/KommandCancelledError.swift; sourceTree = \"<group>\"; };\n\t\t9E5662D40E78AAD333E69B4AA56C03EC /* Reusable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reusable.swift; path = Sources/View/Reusable.swift; sourceTree = \"<group>\"; };\n\t\t9EF0C23B444FE365419FB5A0C9E6F1BE /* GHExamples.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHExamples.h; path = Cucumberish/Dependencies/Gherkin/GHExamples.h; sourceTree = \"<group>\"; };\n\t\t9F2B901EC1A0827ED823DCB13B541AF9 /* GHScenarioOutline.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHScenarioOutline.m; path = Cucumberish/Dependencies/Gherkin/GHScenarioOutline.m; sourceTree = \"<group>\"; };\n\t\t9FAB7A7991C9133BF9565C813ED61CDC /* Pods-DomainTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-DomainTests-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\tA04D1F57C465AFA338DB3122EABD175A /* Pods-ArchitTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Pods-ArchitTests-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tA1008700022E9325453C8CECD8D71B9E /* CCIStepsManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIStepsManager.h; path = Cucumberish/Core/Managers/CCIStepsManager.h; sourceTree = \"<group>\"; };\n\t\tA13E41155BAAD04E0AE171E2F709E942 /* String+MD5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"String+MD5.swift\"; path = \"Sources/String+MD5.swift\"; sourceTree = \"<group>\"; };\n\t\tA1573E3ECC284EBCA32592F458E68F62 /* CCIFeature.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIFeature.h; path = Cucumberish/Core/Models/CCIFeature.h; sourceTree = \"<group>\"; };\n\t\tA214800FC56DE44F3E2BF5641D59C437 /* Pods-Domain-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-Domain-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\tA53A873F2E916A66823C12D14ECD9DC1 /* DevFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DevFilter.swift; path = Sources/XCGLogger/Filters/DevFilter.swift; sourceTree = \"<group>\"; };\n\t\tA789ACDF548A52ADE6E3F3CC8A093C5F /* Pods-ArchitUITests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Pods-ArchitUITests-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tA9724D9E2ADA44DD16AC57C867A37290 /* GHDataTable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHDataTable.m; path = Cucumberish/Dependencies/Gherkin/GHDataTable.m; sourceTree = \"<group>\"; };\n\t\tAB5E3D7F0E4F300EDEA6E8C981C4D760 /* TagFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TagFilter.swift; path = Sources/XCGLogger/Filters/TagFilter.swift; sourceTree = \"<group>\"; };\n\t\tABD0EE1C07BCBF8B8B68667C7C0D4872 /* Pods_CoreTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_CoreTests.framework; path = \"Pods-CoreTests.framework\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tAC0499F00F455EC6DA3C5F4197D99BCB /* CCIHock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIHock.h; path = Cucumberish/Core/Models/CCIHock.h; sourceTree = \"<group>\"; };\n\t\tACC5338598E07175135CD0DF2381DA2D /* Pods-Core-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-Core-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\tAD27C15D49A723F9D2F550322C928DF9 /* Pods-ArchitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-ArchitTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tAE0363BC153EEB6F5A3AADD8333D167A /* Kingfisher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Kingfisher.framework; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB034BC3F76A7EBBC1AF87C4DB16B6E3A /* Cucumberish.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Cucumberish.xcconfig; sourceTree = \"<group>\"; };\n\t\tB12EC4587159A3E3339B3738838EFBD5 /* CCIScenarioDefinition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIScenarioDefinition.h; path = Cucumberish/Core/Models/CCIScenarioDefinition.h; sourceTree = \"<group>\"; };\n\t\tB29581C168F621CCCF1A23C071B5CD2F /* GHParserException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHParserException.m; path = Cucumberish/Dependencies/Gherkin/GHParserException.m; sourceTree = \"<group>\"; };\n\t\tB3512734BFB13288A3DA50876210F20B /* CCIScenarioDefinition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIScenarioDefinition.m; path = Cucumberish/Core/Models/CCIScenarioDefinition.m; sourceTree = \"<group>\"; };\n\t\tB406BF25F2781FDB6DF98AB9312F0D37 /* GHGherkinLineProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHGherkinLineProtocol.h; path = Cucumberish/Dependencies/Gherkin/GHGherkinLineProtocol.h; sourceTree = \"<group>\"; };\n\t\tB4BC84FF242FC46B48979E97C5109556 /* Pods-Core.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = \"Pods-Core.modulemap\"; sourceTree = \"<group>\"; };\n\t\tB5DCA9F3CA7399787F1DCF8105F7074D /* Pods-ArchitTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = \"Pods-ArchitTests.modulemap\"; sourceTree = \"<group>\"; };\n\t\tB6A3EA28FF6080B82C0B8BA7E99CE611 /* Kommander-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Kommander-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tB6ABF2311950829EF5F98457A36389D4 /* AnimatedImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedImageView.swift; path = Sources/AnimatedImageView.swift; sourceTree = \"<group>\"; };\n\t\tB729115D536BFE943B6BDC5F01180B70 /* GHHasRowsProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHHasRowsProtocol.h; path = Cucumberish/Dependencies/Gherkin/GHHasRowsProtocol.h; sourceTree = \"<group>\"; };\n\t\tB836779A8878AEEC925E3BD7CD911633 /* Pods-CoreTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-CoreTests-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\tB86FF2BE732E2017353DC0ADCA9B9D0D /* PrePostFixLogFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrePostFixLogFormatter.swift; path = Sources/XCGLogger/LogFormatters/PrePostFixLogFormatter.swift; sourceTree = \"<group>\"; };\n\t\tB9A837B3EB58DC57E304B3E04DC0FEF8 /* GHParser+Extensions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"GHParser+Extensions.m\"; path = \"Cucumberish/Dependencies/Gherkin/GHParser+Extensions.m\"; sourceTree = \"<group>\"; };\n\t\tB9F29A654AF391298893AA3EFEE27378 /* NetClient-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"NetClient-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tBA565B9D1032B85422094A7A64AC658C /* NetTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetTransformer.swift; path = Core/NetTransformer.swift; sourceTree = \"<group>\"; };\n\t\tBAB40416E8E0EC13C9965BB164545F0E /* GHScenario.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHScenario.h; path = Cucumberish/Dependencies/Gherkin/GHScenario.h; sourceTree = \"<group>\"; };\n\t\tBAD52DD7A2ADAF0265DA9B7BA5614196 /* NetContentType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetContentType.swift; path = Core/NetContentType.swift; sourceTree = \"<group>\"; };\n\t\tBB373B2B2E91704313660CA0F66AD6FB /* GHGherkinLineSpan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHGherkinLineSpan.m; path = Cucumberish/Dependencies/Gherkin/GHGherkinLineSpan.m; sourceTree = \"<group>\"; };\n\t\tBC5C0F7ADBAA75597EEBE354F7C9AAB4 /* Pods-ArchitUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-ArchitUITests-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\tBC937B695EB156019AF75F8B90BC760C /* GHGherkinDialect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHGherkinDialect.h; path = Cucumberish/Dependencies/Gherkin/GHGherkinDialect.h; sourceTree = \"<group>\"; };\n\t\tBCEC4C5C0D9894F1608ECF4AA1B07DAD /* Kingfisher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Kingfisher-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tBD5B64BEEEB0E82D42B71E37B1E74DDC /* NetURLSession+Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetURLSession+Data.swift\"; path = \"URLSession/NetURLSession+Data.swift\"; sourceTree = \"<group>\"; };\n\t\tBDE70461FFB96B0F12CF5C388D89E94F /* Pods-ArchitTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-ArchitTests-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tC0DC1D92C5089A8E6D0C259A9571704A /* KingfisherOptionsInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherOptionsInfo.swift; path = Sources/KingfisherOptionsInfo.swift; sourceTree = \"<group>\"; };\n\t\tC0DDB61DA3E813E04833121E76DDFFB3 /* NetTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetTask.swift; path = Core/NetTask.swift; sourceTree = \"<group>\"; };\n\t\tC124D3C1326C8260DBA30CBB3E96E453 /* GHBackground.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHBackground.m; path = Cucumberish/Dependencies/Gherkin/GHBackground.m; sourceTree = \"<group>\"; };\n\t\tC1D1C5E8351C5299DF5A7BFBBAB13DEA /* Pods-Core.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-Core.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC28AB4551A7D8E418237BD756B906E4D /* XCGLogger.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = XCGLogger.framework; path = XCGLogger.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC39913A61C69ECE17F63E12771748A49 /* NetURLSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetURLSession.swift; path = URLSession/NetURLSession.swift; sourceTree = \"<group>\"; };\n\t\tC4B4DC22AF40366009034ADDD5EEA8C3 /* Pods-Domain.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = \"Pods-Domain.modulemap\"; sourceTree = \"<group>\"; };\n\t\tC4FD7E63CE8C13F307D3B8E42F58E4EC /* NSArray+Hashes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSArray+Hashes.m\"; path = \"Cucumberish/Utils/NSArray+Hashes.m\"; sourceTree = \"<group>\"; };\n\t\tC79358242879D3127D17078740D41FFA /* CCIStep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIStep.m; path = Cucumberish/Core/Models/CCIStep.m; sourceTree = \"<group>\"; };\n\t\tCA8DC3772EB96DD3E5BD0B3BE510620E /* NetReachability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetReachability.swift; path = Core/NetReachability.swift; sourceTree = \"<group>\"; };\n\t\tCA9C4080B3B60A11B84CFB2C0C10C8C9 /* BaseDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseDestination.swift; path = Sources/XCGLogger/Destinations/BaseDestination.swift; sourceTree = \"<group>\"; };\n\t\tCB26E9E01266A1016C264B6F2BA870E1 /* Cucumberish-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Cucumberish-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tCCA11081C724388BA3B8994B4B5FDD3C /* GHBackground.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHBackground.h; path = Cucumberish/Dependencies/Gherkin/GHBackground.h; sourceTree = \"<group>\"; };\n\t\tCD31386903D892F58FFDE449474BDC14 /* XCGLogger-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"XCGLogger-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tCDE7AF2EA81695CB38C86BBC025F384F /* XCGLogger-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"XCGLogger-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tCE315FDC4F26443A9092E941EEEA1876 /* GHStep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHStep.h; path = Cucumberish/Dependencies/Gherkin/GHStep.h; sourceTree = \"<group>\"; };\n\t\tCEBBA9E5F9EDC5E7E7CF8E2A875CB53E /* Pods_ArchitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ArchitTests.framework; path = \"Pods-ArchitTests.framework\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tCF07B002EC2017639A519F9C59204E60 /* GHFeature.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHFeature.m; path = Cucumberish/Dependencies/Gherkin/GHFeature.m; sourceTree = \"<group>\"; };\n\t\tCF880E52430C729585447E0ED19EE4C9 /* Pods-DomainTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-DomainTests-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\tCF961A5793F2FBBFDF38AA510754C4EE /* Pods_DomainTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_DomainTests.framework; path = \"Pods-DomainTests.framework\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tCFFDE271E0656856D9E780441AC19596 /* Pods-DomainTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-DomainTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD036B514C5E8E7C6D53654A520FBCAFC /* RequestModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestModifier.swift; path = Sources/RequestModifier.swift; sourceTree = \"<group>\"; };\n\t\tD06DEFFA68E8BDCCF3720E8A8D9DAA09 /* Kommander.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Kommander.h; path = Source/Kommander.h; sourceTree = \"<group>\"; };\n\t\tD188E1D30BAE02CD5ACECC273AC372C3 /* GHGherkinLanguageSetting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHGherkinLanguageSetting.h; path = Cucumberish/Dependencies/Gherkin/GHGherkinLanguageSetting.h; sourceTree = \"<group>\"; };\n\t\tD1E66BBA492F54AA5E363F69E79FFEAA /* UITableView+Reusable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"UITableView+Reusable.swift\"; path = \"Sources/View/UITableView+Reusable.swift\"; sourceTree = \"<group>\"; };\n\t\tD21F7CAA251E028DC99798301BEB9B92 /* NetTask+URLSessionTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetTask+URLSessionTask.swift\"; path = \"URLSession/NetTask+URLSessionTask.swift\"; sourceTree = \"<group>\"; };\n\t\tD2F82F844E64998B7D898A67DA267D24 /* Pods-ArchitTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-ArchitTests-resources.sh\"; sourceTree = \"<group>\"; };\n\t\tD313E373EAF782C1EDCBE1F8D4B35B7F /* UIButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"UIButton+Kingfisher.swift\"; path = \"Sources/UIButton+Kingfisher.swift\"; sourceTree = \"<group>\"; };\n\t\tD3985EFB34342C3E89C38F04756E73A2 /* GHDocString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHDocString.h; path = Cucumberish/Dependencies/Gherkin/GHDocString.h; sourceTree = \"<group>\"; };\n\t\tD55EEE3EC2DE00DF094CD4C605AEC614 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };\n\t\tD5BEA86FDD966AAAA1566BB2B18B60C0 /* Pods-CoreTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-CoreTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD5F2C6C4BE3664B1941451CEB76FC1C8 /* Net.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Net.swift; path = Core/Net.swift; sourceTree = \"<group>\"; };\n\t\tD73567FDC5F0D54B3843E4CE85CDBB55 /* Pods-Domain-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-Domain-resources.sh\"; sourceTree = \"<group>\"; };\n\t\tD7979E474296ACAC3790F5E380263E6F /* FileDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileDestination.swift; path = Sources/XCGLogger/Destinations/FileDestination.swift; sourceTree = \"<group>\"; };\n\t\tD83D2F2AC2A421B7A0B5CF66E2DD75BD /* CCIArgument.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIArgument.h; path = Cucumberish/Core/Models/CCIArgument.h; sourceTree = \"<group>\"; };\n\t\tD8AFEA284A9649421F49DC070EF5D249 /* CCIBackground.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIBackground.h; path = Cucumberish/Core/Models/CCIBackground.h; sourceTree = \"<group>\"; };\n\t\tD9AFE777FE7481AF1AB0F1BCE10A1F6D /* GHHasStepsProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHHasStepsProtocol.h; path = Cucumberish/Dependencies/Gherkin/GHHasStepsProtocol.h; sourceTree = \"<group>\"; };\n\t\tDA8554460064553348A0170DBB2B665C /* Pods-Archit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Pods-Archit-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tDC032BB5C053769E7CCC82B4C33C2E19 /* Kommander-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Kommander-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tDD002F3118549FC318E08DDA04483C4C /* CCIStepsManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIStepsManager.m; path = Cucumberish/Core/Managers/CCIStepsManager.m; sourceTree = \"<group>\"; };\n\t\tDD88DF05E93303C5A097C7B48B10756C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tDE23E812682CCFD62DA9D7B25902370D /* GHTableRow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHTableRow.h; path = Cucumberish/Dependencies/Gherkin/GHTableRow.h; sourceTree = \"<group>\"; };\n\t\tDE25DB4D2D4E6ED3F317B7417A7D6AA2 /* Kommander.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Kommander.modulemap; sourceTree = \"<group>\"; };\n\t\tDE5F978C70DB73BFDE50DCD9391B0BE5 /* ImageCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCache.swift; path = Sources/ImageCache.swift; sourceTree = \"<group>\"; };\n\t\tDEB25291CD253A8A1F7F455D81677C87 /* ImagePrefetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePrefetcher.swift; path = Sources/ImagePrefetcher.swift; sourceTree = \"<group>\"; };\n\t\tDF0D8E10D6BFBC54FD70C3DE684246C3 /* Pods-CoreTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-CoreTests-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\tE0821091D933313BC630E83E179ACA4F /* Reusable.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Reusable.modulemap; sourceTree = \"<group>\"; };\n\t\tE1C09E1C073F1350B0ACEBB550505416 /* GHTableRow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHTableRow.m; path = Cucumberish/Dependencies/Gherkin/GHTableRow.m; sourceTree = \"<group>\"; };\n\t\tE347DAEA2CCBE0A8030261AC0200C22F /* Cucumberish.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Cucumberish.m; path = Cucumberish/Cucumberish.m; sourceTree = \"<group>\"; };\n\t\tE35F5DD30454E46196B0025711A434F9 /* GHGherkinDialect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHGherkinDialect.m; path = Cucumberish/Dependencies/Gherkin/GHGherkinDialect.m; sourceTree = \"<group>\"; };\n\t\tE438CE442D914478C77EB6ACFBF5F55C /* Pods_Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Core.framework; path = \"Pods-Core.framework\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE46C9FD338ABD2E46E789E9BF5D633D8 /* GHComment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHComment.m; path = Cucumberish/Dependencies/Gherkin/GHComment.m; sourceTree = \"<group>\"; };\n\t\tE4A49A80501F08526B4C63790F816664 /* Pods-Archit-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-Archit-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\tE523B74BB2B6DB84FEB7E50525A35866 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; };\n\t\tE5F423AE2B2BB407D6C22839F271910D /* Pods-Domain-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-Domain-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\tE67D3F05D8BFB2B049B700F687A4614A /* Kingfisher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Kingfisher-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tE7748B8EC45B7599B4E1709C740ACCEF /* Pods-ArchitTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-ArchitTests-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\tE8A9688B146E1617BE63EC6A7E538467 /* FilterProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FilterProtocol.swift; path = Sources/XCGLogger/Filters/FilterProtocol.swift; sourceTree = \"<group>\"; };\n\t\tEAC31E840258EC9B049D69CFD7991EEF /* Pods-Archit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = \"Pods-Archit.modulemap\"; sourceTree = \"<group>\"; };\n\t\tEBB6084406A8FA1D3882ACE24BBBC4E2 /* NibOwnerLoadable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NibOwnerLoadable.swift; path = Sources/View/NibOwnerLoadable.swift; sourceTree = \"<group>\"; };\n\t\tED1E6B48492D474140694458748C2B68 /* GHTableCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHTableCell.m; path = Cucumberish/Dependencies/Gherkin/GHTableCell.m; sourceTree = \"<group>\"; };\n\t\tEDA86AE18B1E499675F080E114B8EBCE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tEF3A943FBEA3AB9A6927AF33DE43F8F0 /* CCIStepDefinition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CCIStepDefinition.m; path = Cucumberish/Core/Models/CCIStepDefinition.m; sourceTree = \"<group>\"; };\n\t\tEFC7D998D706E658B794A9ADA917033B /* Pods-ArchitUITests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = \"Pods-ArchitUITests.modulemap\"; sourceTree = \"<group>\"; };\n\t\tEFDB653F29AFC0C536DDCC2F8B1B899C /* AutoRotatingFileDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AutoRotatingFileDestination.swift; path = Sources/XCGLogger/Destinations/AutoRotatingFileDestination.swift; sourceTree = \"<group>\"; };\n\t\tF17C4D07C1C72244041C64D336103E8A /* Kommander-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Kommander-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tF23E2D6F14D9EAA391BB5D4843B7B3CB /* GHTokenMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GHTokenMatcher.m; path = Cucumberish/Dependencies/Gherkin/GHTokenMatcher.m; sourceTree = \"<group>\"; };\n\t\tF2855453511DA3D7D812E1AA692CE0CC /* UICollectionView+Reusable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"UICollectionView+Reusable.swift\"; path = \"Sources/View/UICollectionView+Reusable.swift\"; sourceTree = \"<group>\"; };\n\t\tF29F5A1B68A0F8A7BF9047789733A0F4 /* ObjcExceptionBridging.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ObjcExceptionBridging.framework; path = ObjcExceptionBridging.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF3DEEFAD9DA6698CDF2CD9F0E9E7B4CA /* CCIBlockDefinitions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CCIBlockDefinitions.h; path = Cucumberish/Core/CCIBlockDefinitions.h; sourceTree = \"<group>\"; };\n\t\tF4948F5126549E0FB3411465739B7433 /* StoryboardBased.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryboardBased.swift; path = Sources/Storyboard/StoryboardBased.swift; sourceTree = \"<group>\"; };\n\t\tF508C634E8DB74799380F1DAA96F541C /* Pods-Domain-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-Domain-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tF558D5D192AB512B2C547488FEB9E7A5 /* NetResponse+Build.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NetResponse+Build.swift\"; path = \"Core/NetResponse+Build.swift\"; sourceTree = \"<group>\"; };\n\t\tF85206E038BF7A1DE4819B3CF2EC67B6 /* ImageProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessor.swift; path = Sources/ImageProcessor.swift; sourceTree = \"<group>\"; };\n\t\tF9E1DCDB7FEECCDFC9EF05CD2ED343F7 /* NetCacheControl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetCacheControl.swift; path = Core/NetCacheControl.swift; sourceTree = \"<group>\"; };\n\t\tFADBC8762995973B0DD96E4017B0B95E /* ThreadHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThreadHelper.swift; path = Sources/ThreadHelper.swift; sourceTree = \"<group>\"; };\n\t\tFC2C43D3EA7E7F62C4CCCF0D8C588F06 /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Image.swift; sourceTree = \"<group>\"; };\n\t\tFCF4078A036BB2B0AA1433788C643E42 /* ObjcExceptionBridging-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"ObjcExceptionBridging-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tFD451E77F4E7D2A366131BA99AADF3CF /* GHGherkinLanguageConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHGherkinLanguageConstants.h; path = Cucumberish/Dependencies/Gherkin/GHGherkinLanguageConstants.h; sourceTree = \"<group>\"; };\n\t\tFE094F3E9D445A94931C7919BADF1390 /* GHAstNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GHAstNode.h; path = Cucumberish/Dependencies/Gherkin/GHAstNode.h; sourceTree = \"<group>\"; };\n\t\tFF872733CE64BD029A1AD2E609819268 /* NetMultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetMultipartFormData.swift; path = Core/NetMultipartFormData.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t07ED5F55E90EB4D4966830F0D807F046 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC175C7CF94FC1ACB02CFAA83334C4ED4 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t0CD3D9E133F44876BA0B056ABF7DABCC /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA721D676182C131AFDE544CC2F8D5F56 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4AF8078BAD55CA9AB1F38E566F60CF75 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB6495CFB7414A9CC51F1C33650368272 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4C146F478B96AEF2B978F256BE7D6055 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t03ACFC15A6A3C99B2C4B7CFB5FB99B01 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t593E7C083F563F36EDCEAFCA53BDFDA1 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4C893C3A249C0DD09B13712023FD7304 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t59732DB5603B2543D049AE6D35E83C41 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tBB647D66B8244AD79D09D76FA4FBDEBA /* Foundation.framework in Frameworks */,\n\t\t\t\t80E3B85E43E1799738B3DA6D0B228EB0 /* ObjcExceptionBridging.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t83E8A67E9F05FA071037C1B448B0300D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4881E456D6D306D4BD0D55F1E43B48C4 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8815F24B654013E3DC3EAB7A12BDEF52 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t37E3439D5F5649D4A4D7CBE20814C994 /* Foundation.framework in Frameworks */,\n\t\t\t\t80F5C59A429366988690F3D62D62826F /* UIKit.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9EDAFB3E97770906C03E14DA2C61CC9A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4F1A6506DDB54703C7935747FEEB550E /* Foundation.framework in Frameworks */,\n\t\t\t\tD693D1391BB584628B984893615436C9 /* XCTest.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA0A5FF8A043362D3027C86F56B2A158E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0B3F64CE4A4242C1994085B8CEE6339F /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA84C07F8F20CAD26DF2E23C84E086FDA /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1E89317DE0734B56D83C143ED59D5814 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC0B9722E352CF90C920286E6F029D3C0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t52416A6AC7387ECACCC45596498D96AD /* CFNetwork.framework in Frameworks */,\n\t\t\t\t0CA6357476373C221D44C498AA1D65FE /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD193E8D1DFD105207F457560B2C53A47 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tBCA0066D9DA92975699787191A9C280F /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE77CA0801FF101D0F4F11C189B5EDCF8 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD9D37E9A72367D9E7A630AF9322D31FF /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEA95EF8CCBB3CDDF35082DA165BE7AFF /* 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\t00B2AB72D9CE406DEC87F5A2C3E25E62 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDD88DF05E93303C5A097C7B48B10756C /* Info.plist */,\n\t\t\t\t5743B7F59B6201AC0D0712C20BAC394B /* NetClient.modulemap */,\n\t\t\t\t809806B63801D68CB331823C47DCCB0B /* NetClient.xcconfig */,\n\t\t\t\t5A29BE02AC796F62BA4DB2A1F10649D5 /* NetClient-dummy.m */,\n\t\t\t\t18E6502A9C5FCDC2320188C894359256 /* NetClient-prefix.pch */,\n\t\t\t\tB9F29A654AF391298893AA3EFEE27378 /* NetClient-umbrella.h */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/NetClient\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0B3E1E09A1F1E7C8E5DB9BC26891BC74 /* SwiftLint */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = SwiftLint;\n\t\t\tpath = SwiftLint;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0FBBD0F4131EA1CF965EDBBDCDC990F1 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3A9E74153AD3B1646713859420B22FEF /* Cucumberish.framework */,\n\t\t\t\t024F1BFA1F5C914C134BCF9DEE64A78D /* GherkinLanguages.bundle */,\n\t\t\t\tAE0363BC153EEB6F5A3AADD8333D167A /* Kingfisher.framework */,\n\t\t\t\t903030E0FF5B9A9C54E6B198C0EE940D /* Kommander.framework */,\n\t\t\t\t175BBA1528D7CF40BD92A70126DC262E /* Net.framework */,\n\t\t\t\tF29F5A1B68A0F8A7BF9047789733A0F4 /* ObjcExceptionBridging.framework */,\n\t\t\t\t9DA7FD47E181978972C8FABACFFC7EE4 /* Pods_Archit.framework */,\n\t\t\t\tCEBBA9E5F9EDC5E7E7CF8E2A875CB53E /* Pods_ArchitTests.framework */,\n\t\t\t\t43F4BA3E1262D6147C24E0BCFF98A7C5 /* Pods_ArchitUITests.framework */,\n\t\t\t\tE438CE442D914478C77EB6ACFBF5F55C /* Pods_Core.framework */,\n\t\t\t\tABD0EE1C07BCBF8B8B68667C7C0D4872 /* Pods_CoreTests.framework */,\n\t\t\t\t1C6534BB3D00F92E777C57AA07E3C4F2 /* Pods_Domain.framework */,\n\t\t\t\tCF961A5793F2FBBFDF38AA510754C4EE /* Pods_DomainTests.framework */,\n\t\t\t\t24432C75FEC44700FD2A5BCD4C239F15 /* Reusable.framework */,\n\t\t\t\tC28AB4551A7D8E418237BD756B906E4D /* XCGLogger.framework */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t13874F755E6FB6829565242DCFB5F823 /* Kingfisher */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB6ABF2311950829EF5F98457A36389D4 /* AnimatedImageView.swift */,\n\t\t\t\t2D95B1222FB6485CB626A7449573FF19 /* Box.swift */,\n\t\t\t\t5847CC73FFA604FADBEC258F90A7F52B /* CacheSerializer.swift */,\n\t\t\t\t22493A26F7CEEA74E6D7EDA894C0F894 /* Filter.swift */,\n\t\t\t\t3342D73F450C731992C709364E409AB1 /* FormatIndicatedCacheSerializer.swift */,\n\t\t\t\tFC2C43D3EA7E7F62C4CCCF0D8C588F06 /* Image.swift */,\n\t\t\t\tDE5F978C70DB73BFDE50DCD9391B0BE5 /* ImageCache.swift */,\n\t\t\t\t1778866AEAC8C44E035E896079F89AB2 /* ImageDownloader.swift */,\n\t\t\t\tDEB25291CD253A8A1F7F455D81677C87 /* ImagePrefetcher.swift */,\n\t\t\t\tF85206E038BF7A1DE4819B3CF2EC67B6 /* ImageProcessor.swift */,\n\t\t\t\t5AC7C905881720410817B9FE2FA1CB49 /* ImageTransition.swift */,\n\t\t\t\t1DF285CD2ED31CDA6615B60DB6707BA4 /* ImageView+Kingfisher.swift */,\n\t\t\t\t33A598FBDF7AEB2198A1BF7E462541A1 /* Indicator.swift */,\n\t\t\t\t2B32F38F425C6DBCF4AD69F96FC4834C /* Kingfisher.h */,\n\t\t\t\t1589C165185593FB7B69A714F92F961E /* Kingfisher.swift */,\n\t\t\t\t88CE3E4C3B9BE233126726B126DD2F8C /* KingfisherManager.swift */,\n\t\t\t\tC0DC1D92C5089A8E6D0C259A9571704A /* KingfisherOptionsInfo.swift */,\n\t\t\t\t049C712C1B79DB0BD7CF02446C5F4991 /* Placeholder.swift */,\n\t\t\t\tD036B514C5E8E7C6D53654A520FBCAFC /* RequestModifier.swift */,\n\t\t\t\t92BCC674AE0D2A90265DBE2A2637FBB2 /* Resource.swift */,\n\t\t\t\tA13E41155BAAD04E0AE171E2F709E942 /* String+MD5.swift */,\n\t\t\t\tFADBC8762995973B0DD96E4017B0B95E /* ThreadHelper.swift */,\n\t\t\t\tD313E373EAF782C1EDCBE1F8D4B35B7F /* UIButton+Kingfisher.swift */,\n\t\t\t\tA15EA6F03AD3BA5EB5F631D43C9B9B7D /* Support Files */,\n\t\t\t);\n\t\t\tname = Kingfisher;\n\t\t\tpath = Kingfisher;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t16CD8B956AAA3076E7EFC360A5866D16 /* Targets Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2C676EA67281ED513F595C0DB109D0DC /* Pods-Archit */,\n\t\t\t\tD58667525326B4EE0F5899E3941215CC /* Pods-ArchitTests */,\n\t\t\t\t6AE363A56673B838CEC77588C1A316E8 /* Pods-ArchitUITests */,\n\t\t\t\tAC0BE58B9BD3EB737BE28986618D6928 /* Pods-Core */,\n\t\t\t\tD930D8A5C8ED1FD9C448A62416C8F6BD /* Pods-CoreTests */,\n\t\t\t\t4F5FD1B0CC00485D57E48A9E7E867DA2 /* Pods-Domain */,\n\t\t\t\t3A7B270F5AB3D42B80428073FD2E254A /* Pods-DomainTests */,\n\t\t\t);\n\t\t\tname = \"Targets Support Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2C676EA67281ED513F595C0DB109D0DC /* Pods-Archit */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t44CA7A988FA43047D3751C332A052E30 /* Info.plist */,\n\t\t\t\tEAC31E840258EC9B049D69CFD7991EEF /* Pods-Archit.modulemap */,\n\t\t\t\tE4A49A80501F08526B4C63790F816664 /* Pods-Archit-acknowledgements.markdown */,\n\t\t\t\t677A33CBA782D55A9424CFC2E2AFE5F5 /* Pods-Archit-acknowledgements.plist */,\n\t\t\t\t885247A7BF6CCC8F0FB83008F1432EEA /* Pods-Archit-dummy.m */,\n\t\t\t\t690CF362B156CA19B45EB39CB5581A57 /* Pods-Archit-frameworks.sh */,\n\t\t\t\t06A2035B4F67F24157E408A67BA56240 /* Pods-Archit-resources.sh */,\n\t\t\t\tDA8554460064553348A0170DBB2B665C /* Pods-Archit-umbrella.h */,\n\t\t\t\t2D582B86547532E026BDF51F54D2008F /* Pods-Archit.debug.xcconfig */,\n\t\t\t\t799AB5BC0DA35F7EB256BD820DD2EBB8 /* Pods-Archit.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-Archit\";\n\t\t\tpath = \"Target Support Files/Pods-Archit\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3A7B270F5AB3D42B80428073FD2E254A /* Pods-DomainTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7E9E16609A161C51161CB8A33D965A6B /* Info.plist */,\n\t\t\t\t7E91B468D6A4421DCB89650E121954C2 /* Pods-DomainTests.modulemap */,\n\t\t\t\t9FAB7A7991C9133BF9565C813ED61CDC /* Pods-DomainTests-acknowledgements.markdown */,\n\t\t\t\tCF880E52430C729585447E0ED19EE4C9 /* Pods-DomainTests-acknowledgements.plist */,\n\t\t\t\t45C6D6B5617EB213560D427F81EECA6F /* Pods-DomainTests-dummy.m */,\n\t\t\t\t6C875240E691E363E5AE0E8E8227C3A3 /* Pods-DomainTests-frameworks.sh */,\n\t\t\t\t09EFCC168921B6990215221984644031 /* Pods-DomainTests-resources.sh */,\n\t\t\t\t76C9D4C509E0A2BC5CC77C09F946BCB9 /* Pods-DomainTests-umbrella.h */,\n\t\t\t\t070B33C739C487B3842A891D416B5958 /* Pods-DomainTests.debug.xcconfig */,\n\t\t\t\tCFFDE271E0656856D9E780441AC19596 /* Pods-DomainTests.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-DomainTests\";\n\t\t\tpath = \"Target Support Files/Pods-DomainTests\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t43690DD8BE9BC9ABEAD9A3508B3E9D0D /* Reusable */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF5C684E1CE2FBA3ADDC7FDA267FAFF83 /* Storyboard */,\n\t\t\t\tB68D7986F9DEA530AC3D54AA81B981B2 /* Support Files */,\n\t\t\t\t752A05BB4D5A073A34965A35F197F76D /* View */,\n\t\t\t);\n\t\t\tname = Reusable;\n\t\t\tpath = Reusable;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4F5FD1B0CC00485D57E48A9E7E867DA2 /* Pods-Domain */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t62F58D2543C335F96AD6688C9DF9C88C /* Info.plist */,\n\t\t\t\tC4B4DC22AF40366009034ADDD5EEA8C3 /* Pods-Domain.modulemap */,\n\t\t\t\tE5F423AE2B2BB407D6C22839F271910D /* Pods-Domain-acknowledgements.markdown */,\n\t\t\t\tA214800FC56DE44F3E2BF5641D59C437 /* Pods-Domain-acknowledgements.plist */,\n\t\t\t\tF508C634E8DB74799380F1DAA96F541C /* Pods-Domain-dummy.m */,\n\t\t\t\tD73567FDC5F0D54B3843E4CE85CDBB55 /* Pods-Domain-resources.sh */,\n\t\t\t\t86B2B3F017862511356BF3EEE68B888B /* Pods-Domain-umbrella.h */,\n\t\t\t\t28B3A7207EE2C825AA396316726E2203 /* Pods-Domain.debug.xcconfig */,\n\t\t\t\t89F240BC570AC47F0FC178D62760F0A5 /* Pods-Domain.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-Domain\";\n\t\t\tpath = \"Target Support Files/Pods-Domain\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t522ACBF1214EDB6D452A48E7C0CF1121 /* Core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84176253DDDBA214DE4A70D2B16ED15C /* Net.h */,\n\t\t\t\tD5F2C6C4BE3664B1941451CEB76FC1C8 /* Net.swift */,\n\t\t\t\t3D37F1CD65E914D7CBAAF06AD142E961 /* NetAuthorization.swift */,\n\t\t\t\tF9E1DCDB7FEECCDFC9EF05CD2ED343F7 /* NetCacheControl.swift */,\n\t\t\t\tBAD52DD7A2ADAF0265DA9B7BA5614196 /* NetContentType.swift */,\n\t\t\t\t8422FD8607F7E62209A911410F51D7B1 /* NetError.swift */,\n\t\t\t\tFF872733CE64BD029A1AD2E609819268 /* NetMultipartFormData.swift */,\n\t\t\t\tCA8DC3772EB96DD3E5BD0B3BE510620E /* NetReachability.swift */,\n\t\t\t\t64EA67365050760C82B4410A49741CF3 /* NetRequest.swift */,\n\t\t\t\t4FF6D625E298BE2BC6C1C5036BDE3228 /* NetRequest+Build.swift */,\n\t\t\t\t07965558AED140C574B015AF94F18CC8 /* NetRequest+URLRequest.swift */,\n\t\t\t\t46E45DFC572385823168759E23393BFF /* NetResponse.swift */,\n\t\t\t\tF558D5D192AB512B2C547488FEB9E7A5 /* NetResponse+Build.swift */,\n\t\t\t\t584981606FBFBBE70866FF2B01CDDBEA /* NetResponse+Cached​URLResponse.swift */,\n\t\t\t\t940AD48F501BB7FDC72FD05AC76EFAB7 /* NetResponse+HTTPURLResponse.swift */,\n\t\t\t\t7EF069576558D2E644F4FA351A1007AC /* NetResponse+URLResponse.swift */,\n\t\t\t\t302B7A6DF8D3B6BFAA5CBD7ABCD43A8A /* NetServerTrust.swift */,\n\t\t\t\tC0DDB61DA3E813E04833121E76DDFFB3 /* NetTask.swift */,\n\t\t\t\t0D8E4A7D7C63DC9265B9893D03B02558 /* NetTaskMetrics.swift */,\n\t\t\t\t77FE5D389919ED2685B4717BF6908635 /* NetTaskMetrics+URLSessionTaskMetrics.swift */,\n\t\t\t\tBA565B9D1032B85422094A7A64AC658C /* NetTransformer.swift */,\n\t\t\t);\n\t\t\tname = Core;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C946EE0B852C3A31A08991E9B7790C7 /* URLSession */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD21F7CAA251E028DC99798301BEB9B92 /* NetTask+URLSessionTask.swift */,\n\t\t\t\tC39913A61C69ECE17F63E12771748A49 /* NetURLSession.swift */,\n\t\t\t\tBD5B64BEEEB0E82D42B71E37B1E74DDC /* NetURLSession+Data.swift */,\n\t\t\t\t93DF98BDE895DFEB375198C5E2C3C0E7 /* NetURLSession+Download.swift */,\n\t\t\t\t1FE6206187579FA2E7B9D3F64B9FC234 /* NetURLSession+Stream.swift */,\n\t\t\t\t72063305E3ADA155EB457CB94D659186 /* NetURLSession+Upload.swift */,\n\t\t\t\t2F723B9B5E58FF163EBD6A9B92EE7B16 /* NetURLSessionDelegate.swift */,\n\t\t\t\t38A1247587CCB78098E809EC836EE56F /* NetURLSessionTaskObserver.swift */,\n\t\t\t);\n\t\t\tname = URLSession;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t62F74D8DD86772FBACC12BCF05007D9E /* Cucumberish */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD83D2F2AC2A421B7A0B5CF66E2DD75BD /* CCIArgument.h */,\n\t\t\t\t0458852D8F4EF599D95B6E92DD7A52AD /* CCIArgument.m */,\n\t\t\t\t3DD61270413D8587F8EFA23DADC88632 /* CCIAroundHock.h */,\n\t\t\t\t3AD50214589598F8F7D1F4D8541B44E3 /* CCIAroundHock.m */,\n\t\t\t\tD8AFEA284A9649421F49DC070EF5D249 /* CCIBackground.h */,\n\t\t\t\t280CC88593999D040602158CD7ADF1C9 /* CCIBackground.m */,\n\t\t\t\tF3DEEFAD9DA6698CDF2CD9F0E9E7B4CA /* CCIBlockDefinitions.h */,\n\t\t\t\t2B522DEE8F4DB082FECE75A9010BDADB /* CCIExample.h */,\n\t\t\t\t6E93F14C3FC833DED3FA5E0CB946A764 /* CCIExample.m */,\n\t\t\t\tA1573E3ECC284EBCA32592F458E68F62 /* CCIFeature.h */,\n\t\t\t\t289AC8BC81B1A2FB6F7585C7B8D3FE0A /* CCIFeature.m */,\n\t\t\t\t44263B067C45A490F610AB9818C19B01 /* CCIFeaturesManager.h */,\n\t\t\t\t89FF1CB6FFED5315635EE8CBADA274C2 /* CCIFeaturesManager.m */,\n\t\t\t\tAC0499F00F455EC6DA3C5F4197D99BCB /* CCIHock.h */,\n\t\t\t\t57687BA7AFDEF345B0BADFC4D301D2D1 /* CCIHock.m */,\n\t\t\t\t0A4BAFE1D1959599D3219E156E8328BE /* CCIJSONDumper.h */,\n\t\t\t\t552E8CBF921CF3F8FF4F52CBF82787D0 /* CCIJSONDumper.m */,\n\t\t\t\t81890B8400E3025A7A93365DE3898F99 /* CCILocation.h */,\n\t\t\t\t6DF6BBE7E43DB2364A9B0D38CE530851 /* CCILocation.m */,\n\t\t\t\t9A5AC995988DFCCE0705EDDDA040C1EC /* CCILoggingManager.h */,\n\t\t\t\t4CEAFAD156E2A5C8489CA69CBB3FDBB8 /* CCILoggingManager.m */,\n\t\t\t\tB12EC4587159A3E3339B3738838EFBD5 /* CCIScenarioDefinition.h */,\n\t\t\t\tB3512734BFB13288A3DA50876210F20B /* CCIScenarioDefinition.m */,\n\t\t\t\t0552564CCC68274EB114B7A64D598D4F /* CCIStep.h */,\n\t\t\t\tC79358242879D3127D17078740D41FFA /* CCIStep.m */,\n\t\t\t\t4DB61AAAC05F4E4E0E8988F9FDE7F1AA /* CCIStepDefinition.h */,\n\t\t\t\tEF3A943FBEA3AB9A6927AF33DE43F8F0 /* CCIStepDefinition.m */,\n\t\t\t\tA1008700022E9325453C8CECD8D71B9E /* CCIStepsManager.h */,\n\t\t\t\tDD002F3118549FC318E08DDA04483C4C /* CCIStepsManager.m */,\n\t\t\t\t1DE97AC266A92516C0139B4860B32610 /* Cucumberish.h */,\n\t\t\t\tE347DAEA2CCBE0A8030261AC0200C22F /* Cucumberish.m */,\n\t\t\t\t7F8DB3747431EF23E6BD537ED582113F /* GHAstBuilder.h */,\n\t\t\t\t9D71080F074D6ADB23EC163974386BD4 /* GHAstBuilder.m */,\n\t\t\t\tFE094F3E9D445A94931C7919BADF1390 /* GHAstNode.h */,\n\t\t\t\t88A6A05B9B5579FB89375C6829A443AA /* GHAstNode.m */,\n\t\t\t\tCCA11081C724388BA3B8994B4B5FDD3C /* GHBackground.h */,\n\t\t\t\tC124D3C1326C8260DBA30CBB3E96E453 /* GHBackground.m */,\n\t\t\t\t5BB0073F04C86CB83C780A8B30B7726E /* GHComment.h */,\n\t\t\t\tE46C9FD338ABD2E46E789E9BF5D633D8 /* GHComment.m */,\n\t\t\t\t4DCEB59DBD81630136214A71DD857E32 /* GHDataTable.h */,\n\t\t\t\tA9724D9E2ADA44DD16AC57C867A37290 /* GHDataTable.m */,\n\t\t\t\tD3985EFB34342C3E89C38F04756E73A2 /* GHDocString.h */,\n\t\t\t\t7658ABF3F94439D812F0CDCE8F8055B2 /* GHDocString.m */,\n\t\t\t\t9EF0C23B444FE365419FB5A0C9E6F1BE /* GHExamples.h */,\n\t\t\t\t4A2D5092FCD06374B8ED3404D9B5BF7B /* GHExamples.m */,\n\t\t\t\t4FDD3E5FF3EA5618961B4FB07E4F761B /* GHFeature.h */,\n\t\t\t\tCF07B002EC2017639A519F9C59204E60 /* GHFeature.m */,\n\t\t\t\tBC937B695EB156019AF75F8B90BC760C /* GHGherkinDialect.h */,\n\t\t\t\tE35F5DD30454E46196B0025711A434F9 /* GHGherkinDialect.m */,\n\t\t\t\t32532D9DE5706FC96085974F240572C5 /* GHGherkinDialectProvider.h */,\n\t\t\t\t05E3DACC5F82ECA03D42109E0C6B77A5 /* GHGherkinDialectProvider.m */,\n\t\t\t\t68DE7FC880BB051360BACB0A8880970C /* GHGherkinDialectProviderProtocol.h */,\n\t\t\t\tFD451E77F4E7D2A366131BA99AADF3CF /* GHGherkinLanguageConstants.h */,\n\t\t\t\t4AF5D02ED6DD038A430BB8389EBBB02A /* GHGherkinLanguageConstants.m */,\n\t\t\t\tD188E1D30BAE02CD5ACECC273AC372C3 /* GHGherkinLanguageSetting.h */,\n\t\t\t\t283192F63BB88978964150A6F66637DE /* GHGherkinLanguageSetting.m */,\n\t\t\t\t87B4DFCFC8497CA3E7442CF4FE55673D /* GHGherkinLine.h */,\n\t\t\t\t8116E903ABDACA0722DCE04CFC6E3995 /* GHGherkinLine.m */,\n\t\t\t\tB406BF25F2781FDB6DF98AB9312F0D37 /* GHGherkinLineProtocol.h */,\n\t\t\t\t6CB88CCC0EDCBB1BFF3352D35116FA24 /* GHGherkinLineSpan.h */,\n\t\t\t\tBB373B2B2E91704313660CA0F66AD6FB /* GHGherkinLineSpan.m */,\n\t\t\t\t8D90E2FEA217C023BC14D73A75B7278D /* GHHasDescriptionProtocol.h */,\n\t\t\t\t3C1E1451646FBAB00C5B9B6F471312C3 /* GHHasLocationProtocol.h */,\n\t\t\t\tB729115D536BFE943B6BDC5F01180B70 /* GHHasRowsProtocol.h */,\n\t\t\t\tD9AFE777FE7481AF1AB0F1BCE10A1F6D /* GHHasStepsProtocol.h */,\n\t\t\t\t3EEF7062B0BF8D10A2699B940473F555 /* GHHasTagsProtocol.h */,\n\t\t\t\t589AFCEDBF784755427EB89289E36047 /* GHLocation.h */,\n\t\t\t\t08B8360C41083D8035B6E606A6DBCE3F /* GHLocation.m */,\n\t\t\t\t55743C6CBE6477E747DFDEEF8B477C84 /* GHNode.h */,\n\t\t\t\t6C6B9CA0F6F5E2442A4067B74D2D3B34 /* GHNode.m */,\n\t\t\t\t79D7E6C88897758D8EA53B57205E4BE3 /* GHParser.h */,\n\t\t\t\t719C0B609A4CF5650DC5271C807E0EB9 /* GHParser.m */,\n\t\t\t\t09B6BC129FC70C91D115252944C04CE3 /* GHParser+Extensions.h */,\n\t\t\t\tB9A837B3EB58DC57E304B3E04DC0FEF8 /* GHParser+Extensions.m */,\n\t\t\t\t0693820A57511F4E33398A52B401BD9C /* GHParserException.h */,\n\t\t\t\tB29581C168F621CCCF1A23C071B5CD2F /* GHParserException.m */,\n\t\t\t\tBAB40416E8E0EC13C9965BB164545F0E /* GHScenario.h */,\n\t\t\t\t247385816C28A2D0F418C6FAEDC05AF1 /* GHScenario.m */,\n\t\t\t\t990155647EA01472CEB25BD59F1824D5 /* GHScenarioDefinition.h */,\n\t\t\t\t2A02E08E6B36D255D51BC3F85B1AAB4C /* GHScenarioDefinition.m */,\n\t\t\t\t23725B3E391C2CA4E764B98EA6616FCA /* GHScenarioDefinition_Private.h */,\n\t\t\t\t2CBA27520657D6545288B7386C2B261A /* GHScenarioOutline.h */,\n\t\t\t\t9F2B901EC1A0827ED823DCB13B541AF9 /* GHScenarioOutline.m */,\n\t\t\t\tCE315FDC4F26443A9092E941EEEA1876 /* GHStep.h */,\n\t\t\t\t0C668F4BAFDDC55DBC24654ADB44DEF3 /* GHStep.m */,\n\t\t\t\t736E7C57EFC76D466F48655D2D706476 /* GHStepArgument.h */,\n\t\t\t\t32EF88E31B89594CF1BF52AE3F8AFC1F /* GHStepArgument.m */,\n\t\t\t\t3CEC37C9AECE2940EDD3FEFD1815B9A4 /* GHTableCell.h */,\n\t\t\t\tED1E6B48492D474140694458748C2B68 /* GHTableCell.m */,\n\t\t\t\tDE23E812682CCFD62DA9D7B25902370D /* GHTableRow.h */,\n\t\t\t\tE1C09E1C073F1350B0ACEBB550505416 /* GHTableRow.m */,\n\t\t\t\t800A06DEF441E24C02887CCB12466104 /* GHTag.h */,\n\t\t\t\t8A506C557952D1F849B264E6B4D949D3 /* GHTag.m */,\n\t\t\t\t07203E6001DA4D28FC9B5EF4006A6D45 /* GHToken.h */,\n\t\t\t\t4179A4BD2F63CD58DD7EFDD1C2D485CE /* GHToken.m */,\n\t\t\t\t516B48924FFA28C2E93219EB040196F1 /* GHTokenMatcher.h */,\n\t\t\t\tF23E2D6F14D9EAA391BB5D4843B7B3CB /* GHTokenMatcher.m */,\n\t\t\t\t8B02F00FC5B40530DB42C51CA132C901 /* GHTokenScanner.h */,\n\t\t\t\t7DEA872E0A0B67DA1199F5CC862218FD /* GHTokenScanner.m */,\n\t\t\t\t7BFC380FEA301BBA034FB710B0A76804 /* NSArray+Hashes.h */,\n\t\t\t\tC4FD7E63CE8C13F307D3B8E42F58E4EC /* NSArray+Hashes.m */,\n\t\t\t\t09D0110497B78198A8771C61A499CD69 /* NSObject+Dictionary.h */,\n\t\t\t\t19A9E7C075D34520056448079CA10CB3 /* NSObject+Dictionary.m */,\n\t\t\t\t5F986A35BFB685A700BD9896FF4EF5D9 /* NSString+Formatter.h */,\n\t\t\t\t27EC930C02E33F84E1CE81238D94A80F /* NSString+Formatter.m */,\n\t\t\t\t8647D5CA2DC3C052C9E3A4798DF0AB29 /* NSString+Trim.h */,\n\t\t\t\t9471BE4B988273354734C37BE0DC21F4 /* NSString+Trim.m */,\n\t\t\t\tFA74E3CBAD456E1E5C1E7A3E4DEDFB46 /* Resources */,\n\t\t\t\t9ADF31C6795F8633B8CBC38028B57307 /* Support Files */,\n\t\t\t);\n\t\t\tname = Cucumberish;\n\t\t\tpath = Cucumberish;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AE363A56673B838CEC77588C1A316E8 /* Pods-ArchitUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t09D613AA7147EEC3CE2D31406F92B9A0 /* Info.plist */,\n\t\t\t\tEFC7D998D706E658B794A9ADA917033B /* Pods-ArchitUITests.modulemap */,\n\t\t\t\tBC5C0F7ADBAA75597EEBE354F7C9AAB4 /* Pods-ArchitUITests-acknowledgements.markdown */,\n\t\t\t\t969BD9D60F4EFB04F44CE5E3455F143A /* Pods-ArchitUITests-acknowledgements.plist */,\n\t\t\t\t4D7EAFE6A941D9220D4DAD48D3F9D10F /* Pods-ArchitUITests-dummy.m */,\n\t\t\t\t1C365F08CA60049024C6E549C4F3FC4F /* Pods-ArchitUITests-frameworks.sh */,\n\t\t\t\t0AB2B51A6D227BD1629D6F6AF16F7E7A /* Pods-ArchitUITests-resources.sh */,\n\t\t\t\tA789ACDF548A52ADE6E3F3CC8A093C5F /* Pods-ArchitUITests-umbrella.h */,\n\t\t\t\t3809D5920B405BB206F4D732E79EDEFD /* Pods-ArchitUITests.debug.xcconfig */,\n\t\t\t\t0B47BEE2C81FF9656D8D4FFA92A63E0B /* Pods-ArchitUITests.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-ArchitUITests\";\n\t\t\tpath = \"Target Support Files/Pods-ArchitUITests\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t752A05BB4D5A073A34965A35F197F76D /* View */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8E8F2DFFE07B51FA3A2A0FB538F04DBC /* NibLoadable.swift */,\n\t\t\t\tEBB6084406A8FA1D3882ACE24BBBC4E2 /* NibOwnerLoadable.swift */,\n\t\t\t\t9E5662D40E78AAD333E69B4AA56C03EC /* Reusable.swift */,\n\t\t\t\tF2855453511DA3D7D812E1AA692CE0CC /* UICollectionView+Reusable.swift */,\n\t\t\t\tD1E66BBA492F54AA5E363F69E79FFEAA /* UITableView+Reusable.swift */,\n\t\t\t);\n\t\t\tname = View;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7DB346D0F39D3F0E887471402A8071AB = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */,\n\t\t\t\tD4222C174FC9D4FCBD645D509BCB4C4B /* Frameworks */,\n\t\t\t\t943B8D5BC2081FD8EBA63713D6FF6434 /* Pods */,\n\t\t\t\t0FBBD0F4131EA1CF965EDBBDCDC990F1 /* Products */,\n\t\t\t\t16CD8B956AAA3076E7EFC360A5866D16 /* Targets Support Files */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t83FC7DB563250606D98915800E84DC3B /* XCGLogger */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t98B59ECC8E5BB589B9FD826B4C8CCC7B /* Core */,\n\t\t\t\tC6F8DE72804EB8BA39B3BF0A598945A4 /* Support Files */,\n\t\t\t);\n\t\t\tname = XCGLogger;\n\t\t\tpath = XCGLogger;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8957168027CEB4617B05F77BE57ECE0F /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t39DB0E5CDFD94637D8DD315CC37424FA /* Info.plist */,\n\t\t\t\tDE25DB4D2D4E6ED3F317B7417A7D6AA2 /* Kommander.modulemap */,\n\t\t\t\t383B0EDA3F08D7963858E04777179246 /* Kommander.xcconfig */,\n\t\t\t\tF17C4D07C1C72244041C64D336103E8A /* Kommander-dummy.m */,\n\t\t\t\tB6A3EA28FF6080B82C0B8BA7E99CE611 /* Kommander-prefix.pch */,\n\t\t\t\tDC032BB5C053769E7CCC82B4C33C2E19 /* Kommander-umbrella.h */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/Kommander\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t943B8D5BC2081FD8EBA63713D6FF6434 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t62F74D8DD86772FBACC12BCF05007D9E /* Cucumberish */,\n\t\t\t\t13874F755E6FB6829565242DCFB5F823 /* Kingfisher */,\n\t\t\t\tD69ACDC620315C75C0450CF55BA13872 /* Kommander */,\n\t\t\t\tADEB1BEB159EA08662F2245B5C3ED375 /* NetClient */,\n\t\t\t\tD8BF91FD88F1FBCC903815ADFE502218 /* ObjcExceptionBridging */,\n\t\t\t\t43690DD8BE9BC9ABEAD9A3508B3E9D0D /* Reusable */,\n\t\t\t\t0B3E1E09A1F1E7C8E5DB9BC26891BC74 /* SwiftLint */,\n\t\t\t\t83FC7DB563250606D98915800E84DC3B /* XCGLogger */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t98B59ECC8E5BB589B9FD826B4C8CCC7B /* Core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7706E5140D81057771F7284126CF1516 /* ANSIColorLogFormatter.swift */,\n\t\t\t\t7EAAB904F80D7E850A156769F24BCC94 /* AppleSystemLogDestination.swift */,\n\t\t\t\tEFDB653F29AFC0C536DDCC2F8B1B899C /* AutoRotatingFileDestination.swift */,\n\t\t\t\t72682A730F7B2AB8B698AB98C1F8BE51 /* Base64LogFormatter.swift */,\n\t\t\t\tCA9C4080B3B60A11B84CFB2C0C10C8C9 /* BaseDestination.swift */,\n\t\t\t\t3D9500BC14B04A176B982545ABC22158 /* BaseQueuedDestination.swift */,\n\t\t\t\t0D2806BDDE05BB656A21B0580369ADA7 /* ConsoleDestination.swift */,\n\t\t\t\t0624018E09478E6B145E853F89EB7D90 /* DestinationProtocol.swift */,\n\t\t\t\tA53A873F2E916A66823C12D14ECD9DC1 /* DevFilter.swift */,\n\t\t\t\t4A35BC40D19E88B6D3857106A78512EF /* DispatchQueue+XCGAdditions.swift */,\n\t\t\t\tD7979E474296ACAC3790F5E380263E6F /* FileDestination.swift */,\n\t\t\t\t43D981C24DE43915DCDE6AF4369F309A /* FileNameFilter.swift */,\n\t\t\t\tE8A9688B146E1617BE63EC6A7E538467 /* FilterProtocol.swift */,\n\t\t\t\t38D94846A5CD346D62433EA36DB78117 /* HelperFunctions.swift */,\n\t\t\t\t54D36C136C1793DE836ADAC645C395E7 /* LogDetails.swift */,\n\t\t\t\t41C39F595A72D5544DF40D592C8B4693 /* LogFormatterProtocol.swift */,\n\t\t\t\tB86FF2BE732E2017353DC0ADCA9B9D0D /* PrePostFixLogFormatter.swift */,\n\t\t\t\tAB5E3D7F0E4F300EDEA6E8C981C4D760 /* TagFilter.swift */,\n\t\t\t\t90A2F28D71EE85A11EF8E507AB5AD895 /* TestDestination.swift */,\n\t\t\t\t1A1ECC686AEF48839C644422566579EF /* URL+XCGAdditions.swift */,\n\t\t\t\t127AA63D48E5CB0A4000883D5F23E7D0 /* UserInfoFilter.swift */,\n\t\t\t\t0AA940340D89913607E74C6A8498E486 /* XCGLogger.swift */,\n\t\t\t\t3632F1CBB5B9E2BC67F21B44065E1496 /* XcodeColorsLogFormatter.swift */,\n\t\t\t\tAF92FFDE82DDAF8AC97DA25647E1DA5B /* Resources */,\n\t\t\t);\n\t\t\tname = Core;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9ADF31C6795F8633B8CBC38028B57307 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t388D71F84F62D26C9DE0BD494FFF242C /* Cucumberish.modulemap */,\n\t\t\t\tB034BC3F76A7EBBC1AF87C4DB16B6E3A /* Cucumberish.xcconfig */,\n\t\t\t\t02E495A5BB9CDACCACCD0DBE30DE1ED0 /* Cucumberish-dummy.m */,\n\t\t\t\t81530EA72074D8E365687C78BD9830B2 /* Cucumberish-prefix.pch */,\n\t\t\t\tCB26E9E01266A1016C264B6F2BA870E1 /* Cucumberish-umbrella.h */,\n\t\t\t\t74AA467DB101B341CF0DD110468F98E3 /* Info.plist */,\n\t\t\t\t27F0CF2CCE185770EB62463C19446F0D /* ResourceBundle-GherkinLanguages-Info.plist */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/Cucumberish\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA15EA6F03AD3BA5EB5F631D43C9B9B7D /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEDA86AE18B1E499675F080E114B8EBCE /* Info.plist */,\n\t\t\t\t76E9A10230C1FFFED3BBC3C628C3DB87 /* Kingfisher.modulemap */,\n\t\t\t\t24CD43CB964E9343A1C3F27D9551E3FE /* Kingfisher.xcconfig */,\n\t\t\t\t1AF5F20DFC7975AE3C74C78441094F20 /* Kingfisher-dummy.m */,\n\t\t\t\tE67D3F05D8BFB2B049B700F687A4614A /* Kingfisher-prefix.pch */,\n\t\t\t\tBCEC4C5C0D9894F1608ECF4AA1B07DAD /* Kingfisher-umbrella.h */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/Kingfisher\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA8F4B07823C5E155CF7A3BE6F6EBEA1A /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6F26CE83D5ABDEB9DD06D83AC9C0C28E /* Info.plist */,\n\t\t\t\t84D12BC4944210E4BD3FC93AEE7BFDC8 /* ObjcExceptionBridging.modulemap */,\n\t\t\t\t6B5B5164932F7FD9F1088A46959C1E76 /* ObjcExceptionBridging.xcconfig */,\n\t\t\t\t97B032C2F74B48C801293BF2DD52F567 /* ObjcExceptionBridging-dummy.m */,\n\t\t\t\t3FECBA62E1B86B79D69748298F0BDF0D /* ObjcExceptionBridging-prefix.pch */,\n\t\t\t\tFCF4078A036BB2B0AA1433788C643E42 /* ObjcExceptionBridging-umbrella.h */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/ObjcExceptionBridging\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAA43E5A2831D5211E92B0D592A611996 /* iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE523B74BB2B6DB84FEB7E50525A35866 /* CFNetwork.framework */,\n\t\t\t\t56F5A5E33B9AA536786348972054BE65 /* Foundation.framework */,\n\t\t\t\t2E64EFC30FE270B36BAA70D5C31FB432 /* UIKit.framework */,\n\t\t\t\tD55EEE3EC2DE00DF094CD4C605AEC614 /* XCTest.framework */,\n\t\t\t);\n\t\t\tname = iOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAC0BE58B9BD3EB737BE28986618D6928 /* Pods-Core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t04CB4E210232B9C02DA56949BCD4E6B8 /* Info.plist */,\n\t\t\t\tB4BC84FF242FC46B48979E97C5109556 /* Pods-Core.modulemap */,\n\t\t\t\t18EB88F0DF5991EF500034BB99921FA9 /* Pods-Core-acknowledgements.markdown */,\n\t\t\t\tACC5338598E07175135CD0DF2381DA2D /* Pods-Core-acknowledgements.plist */,\n\t\t\t\t33DC377F603E6E9CE5554EF0EC9E02BE /* Pods-Core-dummy.m */,\n\t\t\t\t9862748DC703866E85FE417177C0104D /* Pods-Core-resources.sh */,\n\t\t\t\t1C0FE5B24513E16E99665A1BFDA597AE /* Pods-Core-umbrella.h */,\n\t\t\t\tC1D1C5E8351C5299DF5A7BFBBAB13DEA /* Pods-Core.debug.xcconfig */,\n\t\t\t\t83C6EF3D403F166BEF9373C6707EDAC2 /* Pods-Core.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-Core\";\n\t\t\tpath = \"Target Support Files/Pods-Core\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tADEB1BEB159EA08662F2245B5C3ED375 /* NetClient */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t522ACBF1214EDB6D452A48E7C0CF1121 /* Core */,\n\t\t\t\t00B2AB72D9CE406DEC87F5A2C3E25E62 /* Support Files */,\n\t\t\t\t5C946EE0B852C3A31A08991E9B7790C7 /* URLSession */,\n\t\t\t);\n\t\t\tname = NetClient;\n\t\t\tpath = NetClient;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF92FFDE82DDAF8AC97DA25647E1DA5B /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5169C87334029720F6E17D158ECB0A28 /* .swift-version */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB68D7986F9DEA530AC3D54AA81B981B2 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6EB6F7F9BF4D83227CF14535C40809F3 /* Info.plist */,\n\t\t\t\tE0821091D933313BC630E83E179ACA4F /* Reusable.modulemap */,\n\t\t\t\t6E031FA5BCC86339320E4F120AF591FB /* Reusable.xcconfig */,\n\t\t\t\t7F6FE3B02B7186A27A5CF0D1D661A54F /* Reusable-dummy.m */,\n\t\t\t\t17A167250DC2EDEE01DBAFF5B71AFC40 /* Reusable-prefix.pch */,\n\t\t\t\t5172B96C1E26286778A4C6079E9FBE12 /* Reusable-umbrella.h */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/Reusable\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC6F8DE72804EB8BA39B3BF0A598945A4 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t36D38A27BC5B8897613AAE16F3E553E5 /* Info.plist */,\n\t\t\t\t8FA2C25C05947EBEE15D4B9EFDB7840D /* XCGLogger.modulemap */,\n\t\t\t\t18AEA03BD4222257CC534EABD98C31A0 /* XCGLogger.xcconfig */,\n\t\t\t\t209222D1F1EE679A7479C1E9468AD2D4 /* XCGLogger-dummy.m */,\n\t\t\t\tCD31386903D892F58FFDE449474BDC14 /* XCGLogger-prefix.pch */,\n\t\t\t\tCDE7AF2EA81695CB38C86BBC025F384F /* XCGLogger-umbrella.h */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/XCGLogger\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD4222C174FC9D4FCBD645D509BCB4C4B /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5AE3BEBF88AEB8861BDBC46832BD6697 /* ObjcExceptionBridging.framework */,\n\t\t\t\tAA43E5A2831D5211E92B0D592A611996 /* iOS */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD58667525326B4EE0F5899E3941215CC /* Pods-ArchitTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0765DD4F2C53115BC2CB9ABFC12273C3 /* Info.plist */,\n\t\t\t\tB5DCA9F3CA7399787F1DCF8105F7074D /* Pods-ArchitTests.modulemap */,\n\t\t\t\t1B766E86F5BA95880D2A0F1F1C64C54F /* Pods-ArchitTests-acknowledgements.markdown */,\n\t\t\t\tE7748B8EC45B7599B4E1709C740ACCEF /* Pods-ArchitTests-acknowledgements.plist */,\n\t\t\t\tBDE70461FFB96B0F12CF5C388D89E94F /* Pods-ArchitTests-dummy.m */,\n\t\t\t\t13FC122766C0198A7B29A390C10E4A2A /* Pods-ArchitTests-frameworks.sh */,\n\t\t\t\tD2F82F844E64998B7D898A67DA267D24 /* Pods-ArchitTests-resources.sh */,\n\t\t\t\tA04D1F57C465AFA338DB3122EABD175A /* Pods-ArchitTests-umbrella.h */,\n\t\t\t\t16A6173FEEE586769F692FDE36C7EDA4 /* Pods-ArchitTests.debug.xcconfig */,\n\t\t\t\tAD27C15D49A723F9D2F550322C928DF9 /* Pods-ArchitTests.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-ArchitTests\";\n\t\t\tpath = \"Target Support Files/Pods-ArchitTests\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD69ACDC620315C75C0450CF55BA13872 /* Kommander */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t917CEB139B2DD57B86BCE40B54ABFCF7 /* CurrentDispatcher.swift */,\n\t\t\t\t272F4493B363C0E7240E5CD4E86EF054 /* Dispatcher.swift */,\n\t\t\t\t810EFCD05DCD0BEE4C35FBC5CFF3D411 /* Kommand.swift */,\n\t\t\t\t9DC48FBEDA6F09BC8787BCD0C4B21BD8 /* KommandCancelledError.swift */,\n\t\t\t\tD06DEFFA68E8BDCCF3720E8A8D9DAA09 /* Kommander.h */,\n\t\t\t\t5589CEA036AA85F8B9ECD1717D36818F /* Kommander.swift */,\n\t\t\t\t92AC63201DF010FC16FA08D329ED5A71 /* MainDispatcher.swift */,\n\t\t\t\t8957168027CEB4617B05F77BE57ECE0F /* Support Files */,\n\t\t\t);\n\t\t\tname = Kommander;\n\t\t\tpath = Kommander;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD8BF91FD88F1FBCC903815ADFE502218 /* ObjcExceptionBridging */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF8EEA1A79B995E43CB2B1794853DFBE1 /* ObjcExceptionBridging */,\n\t\t\t\tA8F4B07823C5E155CF7A3BE6F6EBEA1A /* Support Files */,\n\t\t\t);\n\t\t\tname = ObjcExceptionBridging;\n\t\t\tpath = ObjcExceptionBridging;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD930D8A5C8ED1FD9C448A62416C8F6BD /* Pods-CoreTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5F616FFB7BFA4E34E72CD5F9B95E5A4E /* Info.plist */,\n\t\t\t\t96A18659E1406BAF35B5EBD50D511207 /* Pods-CoreTests.modulemap */,\n\t\t\t\tB836779A8878AEEC925E3BD7CD911633 /* Pods-CoreTests-acknowledgements.markdown */,\n\t\t\t\tDF0D8E10D6BFBC54FD70C3DE684246C3 /* Pods-CoreTests-acknowledgements.plist */,\n\t\t\t\t598379A44F04CB77AA27D6523E196E54 /* Pods-CoreTests-dummy.m */,\n\t\t\t\t214179387CD062C71B2573A909838F05 /* Pods-CoreTests-frameworks.sh */,\n\t\t\t\t1A145CA3A03A864043DF7885BC3FC8B7 /* Pods-CoreTests-resources.sh */,\n\t\t\t\t2FC0A1A134909DFF3806F903F538BC6E /* Pods-CoreTests-umbrella.h */,\n\t\t\t\tD5BEA86FDD966AAAA1566BB2B18B60C0 /* Pods-CoreTests.debug.xcconfig */,\n\t\t\t\t882C797FFD93A8E21656C9033972F2B8 /* Pods-CoreTests.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-CoreTests\";\n\t\t\tpath = \"Target Support Files/Pods-CoreTests\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF5C684E1CE2FBA3ADDC7FDA267FAFF83 /* Storyboard */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF4948F5126549E0FB3411465739B7433 /* StoryboardBased.swift */,\n\t\t\t\t08BCF13011B49521532F9DF15E119906 /* StoryboardSceneBased.swift */,\n\t\t\t);\n\t\t\tname = Storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF8EEA1A79B995E43CB2B1794853DFBE1 /* ObjcExceptionBridging */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2D4ECDBDBBAFCBAF7FDFE0FD6236AF91 /* ObjcExceptionBridging.h */,\n\t\t\t\t9551ADB9D573A9A4878DF8F17112A650 /* ObjectiveCMarker.m */,\n\t\t\t);\n\t\t\tname = ObjcExceptionBridging;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFA74E3CBAD456E1E5C1E7A3E4DEDFB46 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t78298952BE663DA372F7862BACD74848 /* gherkin-languages.json */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t13973163827786E29E596A9CD0FC7632 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA9B82BE9934E812CD8A2470D0120E214 /* CCIArgument.h in Headers */,\n\t\t\t\t5ABEB0DBA79C9EC8E90CFA1B43393C6F /* CCIAroundHock.h in Headers */,\n\t\t\t\tCC7AF8272E28BD7CAEAF80B769A8E42A /* CCIBackground.h in Headers */,\n\t\t\t\t411DEA49C6963285F84D423AA4E41D55 /* CCIBlockDefinitions.h in Headers */,\n\t\t\t\t8675C94B2A6FD104180C642A55DEE1F2 /* CCIExample.h in Headers */,\n\t\t\t\t96F21A7ED33C7F68A53E303922B7034C /* CCIFeature.h in Headers */,\n\t\t\t\t5457AE40BD8B5084DDCE3C71E10A47A1 /* CCIFeaturesManager.h in Headers */,\n\t\t\t\t2B7AD418F2EF5145A0F64EDE5B2EB9B0 /* CCIHock.h in Headers */,\n\t\t\t\t56E81EEF4B273A45CBF38AFE79C06EBA /* CCIJSONDumper.h in Headers */,\n\t\t\t\t1B6B91EE4BBDEDD602A8B6E68FB4A376 /* CCILocation.h in Headers */,\n\t\t\t\t1D43F7CC1D96FC85F8107AF2F08A81E4 /* CCILoggingManager.h in Headers */,\n\t\t\t\t5CB1E97E87EA861F0CA46364FA1D82E0 /* CCIScenarioDefinition.h in Headers */,\n\t\t\t\t14DEAF03175A8C55BFC909F4C1801EF9 /* CCIStep.h in Headers */,\n\t\t\t\t2A565D3E80B26F63885D6F8A64F4CA90 /* CCIStepDefinition.h in Headers */,\n\t\t\t\t242E05C725A85287849A84D8BD293A85 /* CCIStepsManager.h in Headers */,\n\t\t\t\tE685C576F1A060B334C1FB759675F084 /* Cucumberish-umbrella.h in Headers */,\n\t\t\t\t50B005C06620EDE2B7C5FF3D4B02BB39 /* Cucumberish.h in Headers */,\n\t\t\t\tC9F07D942847BAF21633F8B1D24DB010 /* GHAstBuilder.h in Headers */,\n\t\t\t\t0F403DB8E1776C29261EA7844434F27C /* GHAstNode.h in Headers */,\n\t\t\t\t9A773350D6B7FDDAD34C2523EA1983B4 /* GHBackground.h in Headers */,\n\t\t\t\t00765725FC1A3DAA2AF9D291BEDF2AFB /* GHComment.h in Headers */,\n\t\t\t\t25BF76F86631B6A1FE6325F49BF3CB48 /* GHDataTable.h in Headers */,\n\t\t\t\tB684009BED94E45876B73CD59AC95BFE /* GHDocString.h in Headers */,\n\t\t\t\t4407DB2436072E9358CB20C87698BABD /* GHExamples.h in Headers */,\n\t\t\t\tDCF7D4CCBDD59823A44B262A41C7E9FB /* GHFeature.h in Headers */,\n\t\t\t\t6360477D3C59ADCF1B2A84064F2D023A /* GHGherkinDialect.h in Headers */,\n\t\t\t\t1A568D6CECD35803569032D4484C44B2 /* GHGherkinDialectProvider.h in Headers */,\n\t\t\t\t4FCF471EDDA34DD54DA0F3842CF49C89 /* GHGherkinDialectProviderProtocol.h in Headers */,\n\t\t\t\t3EFF1EB46E9FCBFE65A26D3A0C0C96BB /* GHGherkinLanguageConstants.h in Headers */,\n\t\t\t\t9E0B64984AD97AB40BF03A37983EC35C /* GHGherkinLanguageSetting.h in Headers */,\n\t\t\t\t42A18808B310BEB20B4646D3FED0D438 /* GHGherkinLine.h in Headers */,\n\t\t\t\tDC0D523C7FBC155BE18A946723866612 /* GHGherkinLineProtocol.h in Headers */,\n\t\t\t\tE5FFC1E3DED9E093B42CA963C5B3ECD7 /* GHGherkinLineSpan.h in Headers */,\n\t\t\t\t91695834575E2AB820DE34B660735A90 /* GHHasDescriptionProtocol.h in Headers */,\n\t\t\t\tB39E271B43A1E341A1BB68A351AF14B2 /* GHHasLocationProtocol.h in Headers */,\n\t\t\t\tFFBABBD3633F8BF1183557A3A5320234 /* GHHasRowsProtocol.h in Headers */,\n\t\t\t\tBB6346706B07DB1368FEB5B9A319F48B /* GHHasStepsProtocol.h in Headers */,\n\t\t\t\t27CB724262DDB39A8161563F8EA3F172 /* GHHasTagsProtocol.h in Headers */,\n\t\t\t\t5A0DAEEAA36A22BE0E597D058404EFD2 /* GHLocation.h in Headers */,\n\t\t\t\t9D8433877EEF871BDD4C52D2FED841C3 /* GHNode.h in Headers */,\n\t\t\t\t77FDBFDCEFB9A449C43C3A40EF5271CA /* GHParser+Extensions.h in Headers */,\n\t\t\t\tA5DB00233E2F6344D95AA710210F9855 /* GHParser.h in Headers */,\n\t\t\t\t2193444227A0D1DD4CF8FC5F42E4D982 /* GHParserException.h in Headers */,\n\t\t\t\t89336A52BBA47EF814EEE974A534AA3D /* GHScenario.h in Headers */,\n\t\t\t\t1C020DECEC209AB9BC2E0D6B3070BAFD /* GHScenarioDefinition.h in Headers */,\n\t\t\t\t02F9B35A3C0F8BFDD9AD5C8DECD87CED /* GHScenarioDefinition_Private.h in Headers */,\n\t\t\t\tD5F510C1918F6DE0AEBA4F75C1D1C5C0 /* GHScenarioOutline.h in Headers */,\n\t\t\t\t53E18AA935F29E65EEB1FCEED3035F20 /* GHStep.h in Headers */,\n\t\t\t\tCB1E778A18E18EF37E9D17C822795ADB /* GHStepArgument.h in Headers */,\n\t\t\t\tAE65E9439900F353395A432B7EA2FEE0 /* GHTableCell.h in Headers */,\n\t\t\t\t47F120267BD3D086D42C6384932D82FA /* GHTableRow.h in Headers */,\n\t\t\t\t07F56266B4D1A320ED1E5CDA88CD6A96 /* GHTag.h in Headers */,\n\t\t\t\tCA893D46DF745C32064E5C3ECF9CF378 /* GHToken.h in Headers */,\n\t\t\t\tBE99DDB8959688DB9695DCA7494A39E4 /* GHTokenMatcher.h in Headers */,\n\t\t\t\tEA50D4F48AB601157CD85FA165DBC0E6 /* GHTokenScanner.h in Headers */,\n\t\t\t\t6F172AE2BA037F0C909A9D947D59AAA8 /* NSArray+Hashes.h in Headers */,\n\t\t\t\t0ACFE9FFD55E687B101865B77DDA5AFC /* NSObject+Dictionary.h in Headers */,\n\t\t\t\t59D2576C76C3F7665B9831E04268B858 /* NSString+Formatter.h in Headers */,\n\t\t\t\tC72D49310B9B454D0A40969A3378E118 /* NSString+Trim.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t15A08DA06516BA386D51DF320CFF5CE1 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t11C76A923C1932A287BF19E0B274116A /* Kommander-umbrella.h in Headers */,\n\t\t\t\t399330182B858D0D87F6F95686A5E7F9 /* Kommander.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t16373936124F0057C61B6F697D298869 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t827908C12A394C1309860C7402996A76 /* Pods-DomainTests-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t182A47F13C3537708778307EC01250D0 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t982CFC4903C2AAB0D8F7B27AEF922F45 /* Pods-Archit-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1A035238C89E268A7D08E24C4E402860 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t225014332534358CB9AAF761F8F90D4B /* Pods-Core-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t264CBCADD427C150D6917C431EE62C1F /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC40D7FBD7DD8B366CB89564B406511F3 /* XCGLogger-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t537141F273172D1C6B91BFBD1DC319A8 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t44CA726228D100D56774854A021DE3E7 /* Pods-Domain-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6972E0A9C2D0A6D0E4DF93513D57A7F3 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB3CE2C47482E6C67201575ACB7927BCA /* Net.h in Headers */,\n\t\t\t\tDA306B26CA4424083CD6C9F1C7060808 /* NetClient-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7DA8EC9CF537F24CDAB9570F3ACEF4BD /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE8F1C92D1994449D49D6E7AFB4087B40 /* Pods-CoreTests-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t84676F7D46FF521291CDEB2AB04A454C /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2F288ED3641B2B4775884C462AE377E6 /* Kingfisher-umbrella.h in Headers */,\n\t\t\t\t5B5D8AE167BD8E304CE474A9B8DBA2B4 /* Kingfisher.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8E4430AF6874BB9DA22735AC056BC031 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0C54AC5F3FCCBE79348541775C3CBD8A /* ObjcExceptionBridging-umbrella.h in Headers */,\n\t\t\t\t5E632DDFA44C09C21110169843F23FBC /* ObjcExceptionBridging.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD289EF4168473D6A01946F5D7AA070FB /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9D6DC57549F30278BE6B993902CB38C0 /* Pods-ArchitTests-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tECC83DF3FBBE744ED11818D30B84BD8C /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2513A6DC3E7F3992C4223FAB8691B42E /* Pods-ArchitUITests-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF78047BA4381A2B138BD83C82CA6A63A /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t51478937D03B0C67ED99704A3B2D21BB /* Reusable-umbrella.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\t07D8D160D0BEC9D509FBD22A52348504 /* Pods-Core */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 698A860BBE61325637E5DA22EA82E91C /* Build configuration list for PBXNativeTarget \"Pods-Core\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9CDB3B550DD0EB579653B8B65D1670C0 /* Sources */,\n\t\t\t\tD193E8D1DFD105207F457560B2C53A47 /* Frameworks */,\n\t\t\t\t1A035238C89E268A7D08E24C4E402860 /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tA02FA6EA6C33C8B44D8127075BA86FDC /* PBXTargetDependency */,\n\t\t\t\tDD43363EFED3C9328D16370D048D8C85 /* PBXTargetDependency */,\n\t\t\t\t1D505DB398F14ADB7CA381ED6B9B3A66 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-Core\";\n\t\t\tproductName = \"Pods-Core\";\n\t\t\tproductReference = E438CE442D914478C77EB6ACFBF5F55C /* Pods_Core.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t19C61632E6C69EB20C345EEA239FE24D /* Pods-Archit */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7B172032A8DFBB0394B7B8216544082B /* Build configuration list for PBXNativeTarget \"Pods-Archit\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA8842EF097EFA826CB092B5EA85803BA /* Sources */,\n\t\t\t\tA0A5FF8A043362D3027C86F56B2A158E /* Frameworks */,\n\t\t\t\t182A47F13C3537708778307EC01250D0 /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tDF4E583E68B90CA76B3D39935F4EAFE8 /* PBXTargetDependency */,\n\t\t\t\t39911DB3263ADA625D527AF01174CF7F /* PBXTargetDependency */,\n\t\t\t\tA0DFD94B61F5FC77B0CA115EDC5FDFC2 /* PBXTargetDependency */,\n\t\t\t\t3990F2E2F00B1FC74C6A2CEE9BC403B9 /* PBXTargetDependency */,\n\t\t\t\tE48B305B398C982EBE73581E2653130D /* PBXTargetDependency */,\n\t\t\t\t01449406F85EF3C4E292C69AA2595F37 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-Archit\";\n\t\t\tproductName = \"Pods-Archit\";\n\t\t\tproductReference = 9DA7FD47E181978972C8FABACFFC7EE4 /* Pods_Archit.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t22315F6812B77D86273C98095D3BBC79 /* Kommander */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 2D78B3BA9B8B9824C7FC2EBE8AD1B0B8 /* Build configuration list for PBXNativeTarget \"Kommander\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC1ECAA1D642C59D996BB91C2BB4A3D21 /* Sources */,\n\t\t\t\tE77CA0801FF101D0F4F11C189B5EDCF8 /* Frameworks */,\n\t\t\t\t15A08DA06516BA386D51DF320CFF5CE1 /* 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 = Kommander;\n\t\t\tproductName = Kommander;\n\t\t\tproductReference = 903030E0FF5B9A9C54E6B198C0EE940D /* Kommander.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t2F9219DC3436F4A71BD490ADED213426 /* Cucumberish-GherkinLanguages */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4598CC59AFF3A3C3F087827EBA6ABECF /* Build configuration list for PBXNativeTarget \"Cucumberish-GherkinLanguages\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5DDDE3EAB0371A4EC4FEB200EF9D5B04 /* Sources */,\n\t\t\t\tEA95EF8CCBB3CDDF35082DA165BE7AFF /* Frameworks */,\n\t\t\t\t33014FEF743396ED1ADA51AC662B9CC0 /* 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 = \"Cucumberish-GherkinLanguages\";\n\t\t\tproductName = \"Cucumberish-GherkinLanguages\";\n\t\t\tproductReference = 024F1BFA1F5C914C134BCF9DEE64A78D /* GherkinLanguages.bundle */;\n\t\t\tproductType = \"com.apple.product-type.bundle\";\n\t\t};\n\t\t3FDA40B8508AD3C18A8D7F9AA00C680E /* Reusable */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = CCCCA0DABCA1114155872D150AACE5A2 /* Build configuration list for PBXNativeTarget \"Reusable\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC42A1E1165750BBC74BFF0F3B0120634 /* Sources */,\n\t\t\t\t8815F24B654013E3DC3EAB7A12BDEF52 /* Frameworks */,\n\t\t\t\tF78047BA4381A2B138BD83C82CA6A63A /* 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 = Reusable;\n\t\t\tproductName = Reusable;\n\t\t\tproductReference = 24432C75FEC44700FD2A5BCD4C239F15 /* Reusable.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t5B0B5B8A1476F8AA333AA7B53F47E96B /* ObjcExceptionBridging */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C4195B567D4F3F2206FEDC07DA2C6626 /* Build configuration list for PBXNativeTarget \"ObjcExceptionBridging\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t75363A2730F54ADF4C39F84C448A861C /* Sources */,\n\t\t\t\t4AF8078BAD55CA9AB1F38E566F60CF75 /* Frameworks */,\n\t\t\t\t8E4430AF6874BB9DA22735AC056BC031 /* 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 = ObjcExceptionBridging;\n\t\t\tproductName = ObjcExceptionBridging;\n\t\t\tproductReference = F29F5A1B68A0F8A7BF9047789733A0F4 /* ObjcExceptionBridging.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t68BBA27FABB4188F082A1A9FDD1A9B37 /* Cucumberish */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = CD058521C7433D2BEC19AFDA890177C9 /* Build configuration list for PBXNativeTarget \"Cucumberish\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t7EE53573C1B505200ECD9FB00A05D8A1 /* Sources */,\n\t\t\t\t9EDAFB3E97770906C03E14DA2C61CC9A /* Frameworks */,\n\t\t\t\t3367D84C85E23D075CF249FBF92F0B1F /* Resources */,\n\t\t\t\t13973163827786E29E596A9CD0FC7632 /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tACB34E8D41B25FEFBCFF43E757089E2C /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Cucumberish;\n\t\t\tproductName = Cucumberish;\n\t\t\tproductReference = 3A9E74153AD3B1646713859420B22FEF /* Cucumberish.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t69EAE86324AC6EEB091FB936BCE91285 /* NetClient */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 2B896BECE71D3981EF3DAAABD5A50A3E /* Build configuration list for PBXNativeTarget \"NetClient\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tDBE06D284B54E460C37D8DA088C4E3B0 /* Sources */,\n\t\t\t\t07ED5F55E90EB4D4966830F0D807F046 /* Frameworks */,\n\t\t\t\t6972E0A9C2D0A6D0E4DF93513D57A7F3 /* 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 = NetClient;\n\t\t\tproductName = NetClient;\n\t\t\tproductReference = 175BBA1528D7CF40BD92A70126DC262E /* Net.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t6F712943B3C5592E82604940D11CE08A /* Kingfisher */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 8C1E4CEFB2390CBE75E70BAC20F44BBF /* Build configuration list for PBXNativeTarget \"Kingfisher\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA8FC7294FA3C08FF7BF775ECCF5D0A8F /* Sources */,\n\t\t\t\tC0B9722E352CF90C920286E6F029D3C0 /* Frameworks */,\n\t\t\t\t84676F7D46FF521291CDEB2AB04A454C /* 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 = Kingfisher;\n\t\t\tproductName = Kingfisher;\n\t\t\tproductReference = AE0363BC153EEB6F5A3AADD8333D167A /* Kingfisher.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t71BF2427B7455146EE704CE6651168EF /* Pods-CoreTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9F3F5058E79FDEB47CEC7DE1C92B5078 /* Build configuration list for PBXNativeTarget \"Pods-CoreTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t063FC465B3BEFC55B68B819E1154083F /* Sources */,\n\t\t\t\t4C146F478B96AEF2B978F256BE7D6055 /* Frameworks */,\n\t\t\t\t7DA8EC9CF537F24CDAB9570F3ACEF4BD /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t442E257D262579286588EB2F8915A603 /* PBXTargetDependency */,\n\t\t\t\t1FD15D573076F7A18AECF3C40CB4DF08 /* PBXTargetDependency */,\n\t\t\t\tB6C65CD4DADCADAF3B93117D375E4D3E /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-CoreTests\";\n\t\t\tproductName = \"Pods-CoreTests\";\n\t\t\tproductReference = ABD0EE1C07BCBF8B8B68667C7C0D4872 /* Pods_CoreTests.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t7714EBE331D5395049D5020C484FD1BC /* Pods-DomainTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 89F02D0314344D9D9BFCE20C7C90331C /* Build configuration list for PBXNativeTarget \"Pods-DomainTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t80290586E66C67C1971759BB20861187 /* Sources */,\n\t\t\t\t593E7C083F563F36EDCEAFCA53BDFDA1 /* Frameworks */,\n\t\t\t\t16373936124F0057C61B6F697D298869 /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t46E93239627BC18333DFE97F7FA935E5 /* PBXTargetDependency */,\n\t\t\t\t03FE5FF5C64A19C41E47D2BA1EC04D90 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-DomainTests\";\n\t\t\tproductName = \"Pods-DomainTests\";\n\t\t\tproductReference = CF961A5793F2FBBFDF38AA510754C4EE /* Pods_DomainTests.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t8884CC7E492BBCBF1341CB5B6B387977 /* Pods-ArchitUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B2DC16467E2171FFFCF97A3D189DBAB3 /* Build configuration list for PBXNativeTarget \"Pods-ArchitUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t0FBB0F9096E9E6AFDFBAADAD2CAC0644 /* Sources */,\n\t\t\t\t0CD3D9E133F44876BA0B056ABF7DABCC /* Frameworks */,\n\t\t\t\tECC83DF3FBBE744ED11818D30B84BD8C /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tC8E28CA91D77204C59F7277F7FE1C0A5 /* PBXTargetDependency */,\n\t\t\t\tA4D032752C69769F95BA7697B4173D18 /* PBXTargetDependency */,\n\t\t\t\tA83911B183C24C0B75646B2EED24C66F /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-ArchitUITests\";\n\t\t\tproductName = \"Pods-ArchitUITests\";\n\t\t\tproductReference = 43F4BA3E1262D6147C24E0BCFF98A7C5 /* Pods_ArchitUITests.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tAF6E903FEC7BD07F9D279B4EC1DFB39D /* Pods-Domain */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 8A6CC7BA04335E320A3352B0A7588343 /* Build configuration list for PBXNativeTarget \"Pods-Domain\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t542AC1B789B4331FB66EA38241258C1C /* Sources */,\n\t\t\t\tA84C07F8F20CAD26DF2E23C84E086FDA /* Frameworks */,\n\t\t\t\t537141F273172D1C6B91BFBD1DC319A8 /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t28E41E63CDD5D6CA91966CCECAB9B2B8 /* PBXTargetDependency */,\n\t\t\t\t7E8238E765879D709F197BDFB10486A2 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-Domain\";\n\t\t\tproductName = \"Pods-Domain\";\n\t\t\tproductReference = 1C6534BB3D00F92E777C57AA07E3C4F2 /* Pods_Domain.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tE6AE18E7BA96DB0599AEB8F02C885BBC /* XCGLogger */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E8581228C0892567BBAE53DDB6D925EC /* Build configuration list for PBXNativeTarget \"XCGLogger\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8F038459929D6EA8F318D4485CCEEC9F /* Sources */,\n\t\t\t\t59732DB5603B2543D049AE6D35E83C41 /* Frameworks */,\n\t\t\t\tE2E3329A1D12F8D0C2EE81910D067F51 /* Resources */,\n\t\t\t\t264CBCADD427C150D6917C431EE62C1F /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tE98C4BB9E532E63179BBA607CBE5E1D0 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = XCGLogger;\n\t\t\tproductName = XCGLogger;\n\t\t\tproductReference = C28AB4551A7D8E418237BD756B906E4D /* XCGLogger.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tED3F441D585A60E14ECC9153C2A5A934 /* Pods-ArchitTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 75A7B02EED270EC751EF0CE987C63D66 /* Build configuration list for PBXNativeTarget \"Pods-ArchitTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA700D6DBDBF7662387C05A4CC11865BE /* Sources */,\n\t\t\t\t83E8A67E9F05FA071037C1B448B0300D /* Frameworks */,\n\t\t\t\tD289EF4168473D6A01946F5D7AA070FB /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t5307548803EDFEF7B0CF1C69F1024B0A /* PBXTargetDependency */,\n\t\t\t\t8D9297F485E8BDAF99DAC99713D4C71B /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-ArchitTests\";\n\t\t\tproductName = \"Pods-ArchitTests\";\n\t\t\tproductReference = CEBBA9E5F9EDC5E7E7CF8E2A875CB53E /* Pods_ArchitTests.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tD41D8CD98F00B204E9800998ECF8427E /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0830;\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t};\n\t\t\tbuildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject \"Pods\" */;\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 = 7DB346D0F39D3F0E887471402A8071AB;\n\t\t\tproductRefGroup = 0FBBD0F4131EA1CF965EDBBDCDC990F1 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t68BBA27FABB4188F082A1A9FDD1A9B37 /* Cucumberish */,\n\t\t\t\t2F9219DC3436F4A71BD490ADED213426 /* Cucumberish-GherkinLanguages */,\n\t\t\t\t6F712943B3C5592E82604940D11CE08A /* Kingfisher */,\n\t\t\t\t22315F6812B77D86273C98095D3BBC79 /* Kommander */,\n\t\t\t\t69EAE86324AC6EEB091FB936BCE91285 /* NetClient */,\n\t\t\t\t5B0B5B8A1476F8AA333AA7B53F47E96B /* ObjcExceptionBridging */,\n\t\t\t\t19C61632E6C69EB20C345EEA239FE24D /* Pods-Archit */,\n\t\t\t\tED3F441D585A60E14ECC9153C2A5A934 /* Pods-ArchitTests */,\n\t\t\t\t8884CC7E492BBCBF1341CB5B6B387977 /* Pods-ArchitUITests */,\n\t\t\t\t07D8D160D0BEC9D509FBD22A52348504 /* Pods-Core */,\n\t\t\t\t71BF2427B7455146EE704CE6651168EF /* Pods-CoreTests */,\n\t\t\t\tAF6E903FEC7BD07F9D279B4EC1DFB39D /* Pods-Domain */,\n\t\t\t\t7714EBE331D5395049D5020C484FD1BC /* Pods-DomainTests */,\n\t\t\t\t3FDA40B8508AD3C18A8D7F9AA00C680E /* Reusable */,\n\t\t\t\tE6AE18E7BA96DB0599AEB8F02C885BBC /* XCGLogger */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t33014FEF743396ED1ADA51AC662B9CC0 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA4C1986F220525D7D3C1CD9BEBCF5320 /* gherkin-languages.json in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t3367D84C85E23D075CF249FBF92F0B1F /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t144FEBEBAE6F2C4C96F8C1F7C8E5BCCE /* GherkinLanguages.bundle in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE2E3329A1D12F8D0C2EE81910D067F51 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4C344D0108F4ED1143A04DF74390EB0E /* .swift-version 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\t063FC465B3BEFC55B68B819E1154083F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t518F7251989027076D4319E457671798 /* Pods-CoreTests-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t0FBB0F9096E9E6AFDFBAADAD2CAC0644 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t24C93725983A12A9239A59D40EBAA038 /* Pods-ArchitUITests-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t542AC1B789B4331FB66EA38241258C1C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t070A5FEF730C74D8C0F4DEF56D3C940E /* Pods-Domain-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5DDDE3EAB0371A4EC4FEB200EF9D5B04 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t75363A2730F54ADF4C39F84C448A861C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t231CFC69CCC10A5A032B5669DA477791 /* ObjcExceptionBridging-dummy.m in Sources */,\n\t\t\t\t7776AF1FEF112F6245DDFDDDE56E6D68 /* ObjectiveCMarker.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7EE53573C1B505200ECD9FB00A05D8A1 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8F83D3A1439E462EF6DA5AFF408EC880 /* CCIArgument.m in Sources */,\n\t\t\t\tBF35347A195DF2232B482B05BC2D1722 /* CCIAroundHock.m in Sources */,\n\t\t\t\t95F20504AE5CE445C423294D159485E1 /* CCIBackground.m in Sources */,\n\t\t\t\t480B137E2CD1B0BAB2FD46DEE357F0B0 /* CCIExample.m in Sources */,\n\t\t\t\tE81384DF91581A799533F8CA96B805FF /* CCIFeature.m in Sources */,\n\t\t\t\t13CE71A758FF204168A9801E1F695242 /* CCIFeaturesManager.m in Sources */,\n\t\t\t\t977112B3C78B4D5CDE3F862372CE3D70 /* CCIHock.m in Sources */,\n\t\t\t\t916F615039ADEBFF29CD2B233DF5BE6D /* CCIJSONDumper.m in Sources */,\n\t\t\t\tBA64071C9C10E14D75D41D5CD813B10C /* CCILocation.m in Sources */,\n\t\t\t\t857C2FE94D315B6362134113FA009652 /* CCILoggingManager.m in Sources */,\n\t\t\t\tDB4F5423BF8FF0B32443D41779C8EB11 /* CCIScenarioDefinition.m in Sources */,\n\t\t\t\t312837097D2DAE14B135232184AD00A8 /* CCIStep.m in Sources */,\n\t\t\t\tAF6C316FB023469C303B1BE124A825AE /* CCIStepDefinition.m in Sources */,\n\t\t\t\tD01D28DF417A450E93130044E6AC32BD /* CCIStepsManager.m in Sources */,\n\t\t\t\t2F90120D20E6022A4076DF0CC308ADFB /* Cucumberish-dummy.m in Sources */,\n\t\t\t\t02B5DBC50EF40818993C4A0029381F29 /* Cucumberish.m in Sources */,\n\t\t\t\t2DA1CB2598193DC6CBC6B52BA5B5A488 /* GHAstBuilder.m in Sources */,\n\t\t\t\t0531C88E021A5D16963F500AF67973C9 /* GHAstNode.m in Sources */,\n\t\t\t\t131E69057392CB70E1F9E8BA61AAB309 /* GHBackground.m in Sources */,\n\t\t\t\tB5152FB9483578B74F2168101E3E072B /* GHComment.m in Sources */,\n\t\t\t\tD4C21B2C05BE7B8467CB3EB1CAD7CAD1 /* GHDataTable.m in Sources */,\n\t\t\t\tD18FCC0D2F39664A387177649B63E21A /* GHDocString.m in Sources */,\n\t\t\t\tEFC53F45D1F211F4BBB1E45C1988C0A9 /* GHExamples.m in Sources */,\n\t\t\t\t555F2811A5380017DBA82FD9A907A71C /* GHFeature.m in Sources */,\n\t\t\t\t266B03E59F034981A8D8EC781154449E /* GHGherkinDialect.m in Sources */,\n\t\t\t\t71DC0C14DC24E3AFC91CFB4CAA98FDD9 /* GHGherkinDialectProvider.m in Sources */,\n\t\t\t\tAE1EDF8E65AC4244558141DD64B5E7FD /* GHGherkinLanguageConstants.m in Sources */,\n\t\t\t\t6327175C4E0CB8EF4C9D5388DC0DC0CD /* GHGherkinLanguageSetting.m in Sources */,\n\t\t\t\t9147A3DFB908355B66812DE65402A128 /* GHGherkinLine.m in Sources */,\n\t\t\t\t4A02A546484FD3426D258BEAA1D07A5E /* GHGherkinLineSpan.m in Sources */,\n\t\t\t\t9B7CF3F9B7EAA68D6A13806DA7451F03 /* GHLocation.m in Sources */,\n\t\t\t\t5712C10C32BBC8580522EB9725E98664 /* GHNode.m in Sources */,\n\t\t\t\tA12D191EFBDB11F04A6DD5CBA3A497BB /* GHParser+Extensions.m in Sources */,\n\t\t\t\t2929B7A117AE6E033F7C059BB28F9D54 /* GHParser.m in Sources */,\n\t\t\t\tD53A7859509C220EB400C6C67E532AFB /* GHParserException.m in Sources */,\n\t\t\t\tB5880C43852C32D1A52BA78C14931D52 /* GHScenario.m in Sources */,\n\t\t\t\tFC4DAC18846C1685687DC91E44F661E0 /* GHScenarioDefinition.m in Sources */,\n\t\t\t\t57526FDA59A5D311A20489E851EDF211 /* GHScenarioOutline.m in Sources */,\n\t\t\t\t8BABA99FEBA8069DB4DCD0F22F441069 /* GHStep.m in Sources */,\n\t\t\t\tB91552B58FE81C86CA64E82F8632D1E4 /* GHStepArgument.m in Sources */,\n\t\t\t\tEAFBC438AA244E0F4C4013A4E4C2C838 /* GHTableCell.m in Sources */,\n\t\t\t\t599651F977311AF3C3D2D2EB2E443F9D /* GHTableRow.m in Sources */,\n\t\t\t\tD0BED64882233D4E636D5DD54A1D1A2F /* GHTag.m in Sources */,\n\t\t\t\tE1A0A0F0D5CFD271A8F6AD41980C7E43 /* GHToken.m in Sources */,\n\t\t\t\t0D942EBE4CB3E6153BB191F9DFC45C01 /* GHTokenMatcher.m in Sources */,\n\t\t\t\t3130C1F8D873C94DC829059468926987 /* GHTokenScanner.m in Sources */,\n\t\t\t\tA6E1E980C9E36BABF9079D084510C50C /* NSArray+Hashes.m in Sources */,\n\t\t\t\tC96C30663D16476EA65AB33615DE46AA /* NSObject+Dictionary.m in Sources */,\n\t\t\t\tA7D993D9C0850B594C508B8123E7CB5A /* NSString+Formatter.m in Sources */,\n\t\t\t\t5DD7E65BC7F21B4C02718193401D356A /* NSString+Trim.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t80290586E66C67C1971759BB20861187 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t503A59EDE755226081081CEED1DCD5B5 /* Pods-DomainTests-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8F038459929D6EA8F318D4485CCEEC9F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t06C360FAD51A87CBCA7DC2E536C9798C /* ANSIColorLogFormatter.swift in Sources */,\n\t\t\t\tCBC4979F49026C733C2965C0A16BB063 /* AppleSystemLogDestination.swift in Sources */,\n\t\t\t\t32B92283834C6A0A76979EB318D1D099 /* AutoRotatingFileDestination.swift in Sources */,\n\t\t\t\tD431B161924A8DCC8F532687D58AD59E /* Base64LogFormatter.swift in Sources */,\n\t\t\t\t3F6EB12E7F74110DF491E169E099DC9D /* BaseDestination.swift in Sources */,\n\t\t\t\tCE39D91D0BB690C3A014A9FA4B6E2C4A /* BaseQueuedDestination.swift in Sources */,\n\t\t\t\t21558EFEBD879226D60D094C8825A80B /* ConsoleDestination.swift in Sources */,\n\t\t\t\tF80F9B3F1C5D88145E9762665DC43314 /* DestinationProtocol.swift in Sources */,\n\t\t\t\tFC37DF9AFC69916B4B1C6B6FB814EEC5 /* DevFilter.swift in Sources */,\n\t\t\t\tDDEDA85C8025D170FC3C5A0FC6B9FD2B /* DispatchQueue+XCGAdditions.swift in Sources */,\n\t\t\t\tF2B10D036D0A5CCEBC39744B33828B3C /* FileDestination.swift in Sources */,\n\t\t\t\tCED6BC1F81E2BEDA1E30682E09A374D0 /* FileNameFilter.swift in Sources */,\n\t\t\t\t670703FBB7D2FFBE02375B608A2F3E1A /* FilterProtocol.swift in Sources */,\n\t\t\t\t325F9F9566F1B1570A0400DC034A3247 /* HelperFunctions.swift in Sources */,\n\t\t\t\tA4DF73A7A66BCB0711DED161B6348748 /* LogDetails.swift in Sources */,\n\t\t\t\tBB69D00427D01D38249B48B73605B7E9 /* LogFormatterProtocol.swift in Sources */,\n\t\t\t\t445A2939EE7133C0AFEE2D6B8D002C7F /* PrePostFixLogFormatter.swift in Sources */,\n\t\t\t\tDC609F1AE4BCD83F1CE3A7D9D69DE445 /* TagFilter.swift in Sources */,\n\t\t\t\t5ADD144FBCC3F241953A2ED36DA90006 /* TestDestination.swift in Sources */,\n\t\t\t\t50FC8EDEBB6C1810BF0DF98E3A70DCED /* URL+XCGAdditions.swift in Sources */,\n\t\t\t\t3BBB1EBBD19C3AB446F90453B564E0A4 /* UserInfoFilter.swift in Sources */,\n\t\t\t\t8D11993D294507A7EF4C13F0077EBF67 /* XCGLogger-dummy.m in Sources */,\n\t\t\t\tF3CA9E91B4B86BFB435A6520B26567F2 /* XCGLogger.swift in Sources */,\n\t\t\t\tADA2FBDD515F79725F822B8346B1C154 /* XcodeColorsLogFormatter.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9CDB3B550DD0EB579653B8B65D1670C0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1316C5B6437562DD70FA6688C6333E84 /* Pods-Core-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA700D6DBDBF7662387C05A4CC11865BE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7A1C340BD3470E41BA8224C7E1CEBBC3 /* Pods-ArchitTests-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA8842EF097EFA826CB092B5EA85803BA /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t966270DF4CA76BC195BB0E8DABB541FE /* Pods-Archit-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA8FC7294FA3C08FF7BF775ECCF5D0A8F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t447BDB5D42EA6C04156E1C284FC5056F /* AnimatedImageView.swift in Sources */,\n\t\t\t\t8A596628D1172E0BBE74C8B70C077905 /* Box.swift in Sources */,\n\t\t\t\t5FB2535CA93CC18996A8393A10ACFF1B /* CacheSerializer.swift in Sources */,\n\t\t\t\tF597FE5626EF7EBDB6437B5256EFB66B /* Filter.swift in Sources */,\n\t\t\t\t0F4EED34A8A4F638927410BC9FEE2287 /* FormatIndicatedCacheSerializer.swift in Sources */,\n\t\t\t\tABB39C4F6E127847DFB6BC8979E18F72 /* Image.swift in Sources */,\n\t\t\t\t4C079F276D78FCE815F5EBB3A6859133 /* ImageCache.swift in Sources */,\n\t\t\t\t14F2B18FFD24D4D89601C814C7D7E4DC /* ImageDownloader.swift in Sources */,\n\t\t\t\t7C663005430C858E5D86C20916FABAC2 /* ImagePrefetcher.swift in Sources */,\n\t\t\t\t010B5B2C12CD95DB5BA9E4F884D3B6DE /* ImageProcessor.swift in Sources */,\n\t\t\t\t3EC4933635344D02DB636500470E8CAD /* ImageTransition.swift in Sources */,\n\t\t\t\tA4D79FF5AA9398ECCC446AD6485712ED /* ImageView+Kingfisher.swift in Sources */,\n\t\t\t\tB523A50D28CE2C84D9E2FD5A2B52CD2E /* Indicator.swift in Sources */,\n\t\t\t\tC2CC9FCDF0B02D683F22E129F5D35F25 /* Kingfisher-dummy.m in Sources */,\n\t\t\t\t4E22D2D51248EFB87EF0349F8C58DDD4 /* Kingfisher.swift in Sources */,\n\t\t\t\tC40F709E537035F4208B90871A65DF07 /* KingfisherManager.swift in Sources */,\n\t\t\t\tD66018C5BFD7DABDB5838C19BAE3FA98 /* KingfisherOptionsInfo.swift in Sources */,\n\t\t\t\t8275E4E972071F016A493A6FB0B40F40 /* Placeholder.swift in Sources */,\n\t\t\t\t1EA5110ABE668ED203140A72746192D7 /* RequestModifier.swift in Sources */,\n\t\t\t\t6EC5F2A5CB44095B545F0003F80B9F5A /* Resource.swift in Sources */,\n\t\t\t\t1039129DE0484A38086668D5092BAEF6 /* String+MD5.swift in Sources */,\n\t\t\t\tD7639AEF0DD7A828243919B5FDD8E150 /* ThreadHelper.swift in Sources */,\n\t\t\t\t8F37FDAD26B5386D1E91576F4D2C579E /* UIButton+Kingfisher.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC1ECAA1D642C59D996BB91C2BB4A3D21 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t337B7C4B17B21087732A2B2170F537D4 /* CurrentDispatcher.swift in Sources */,\n\t\t\t\t032982BB82CC43083B0847FF036998DE /* Dispatcher.swift in Sources */,\n\t\t\t\t31D24DA6775E54B5B98647B97CA2A23E /* Kommand.swift in Sources */,\n\t\t\t\t518006F5E9ABE7A3742B7F91AB2258FA /* KommandCancelledError.swift in Sources */,\n\t\t\t\t8FBAAAF795A9215767FEA93457333F1D /* Kommander-dummy.m in Sources */,\n\t\t\t\t82A5A2AB167C19E3E8F8E9080CD67ACB /* Kommander.swift in Sources */,\n\t\t\t\t5423F5E90C38445C2C70673CE6AFFB54 /* MainDispatcher.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC42A1E1165750BBC74BFF0F3B0120634 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t76FA83265537D29800AC9D9979BCA924 /* NibLoadable.swift in Sources */,\n\t\t\t\t92011EB8586C8B1B22A120645279393C /* NibOwnerLoadable.swift in Sources */,\n\t\t\t\t91A58AD15F502DD817DD676E14AD6B66 /* Reusable-dummy.m in Sources */,\n\t\t\t\tD5F9061787AB4384454FCA48D7AB57DC /* Reusable.swift in Sources */,\n\t\t\t\tB93EF875C805A918FBD7B24BBFBA6BCA /* StoryboardBased.swift in Sources */,\n\t\t\t\tFC4EEBAAA63FAD3189D087F6F3B65571 /* StoryboardSceneBased.swift in Sources */,\n\t\t\t\tAC30A0FE40768E5B7544D80ABD80DC4A /* UICollectionView+Reusable.swift in Sources */,\n\t\t\t\t9C2B0CEFD6D46C1D99ADE9F415FD545D /* UITableView+Reusable.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDBE06D284B54E460C37D8DA088C4E3B0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t94E437332009CD5928DDF37A42E14004 /* Net.swift in Sources */,\n\t\t\t\t5F978FFABF9C8D142F1E477456003823 /* NetAuthorization.swift in Sources */,\n\t\t\t\t02CFE8E81D41D8A89B93B6D5B2744991 /* NetCacheControl.swift in Sources */,\n\t\t\t\tE17E4D6FEA6B87AE31B478E1446714E6 /* NetClient-dummy.m in Sources */,\n\t\t\t\t8A988F41A07E47F8D5E3732947B9F1BB /* NetContentType.swift in Sources */,\n\t\t\t\tABE46FE3DE4313913C03D268C3F31009 /* NetError.swift in Sources */,\n\t\t\t\t19FF158C157329D235AF71AAB53ADACA /* NetMultipartFormData.swift in Sources */,\n\t\t\t\t5492E776306374DF34FDF284A5A64B65 /* NetReachability.swift in Sources */,\n\t\t\t\t0C615CFBA1C18F845B23E567B5356C85 /* NetRequest+Build.swift in Sources */,\n\t\t\t\t0B7E61C3F494176980A6DC826E355FA8 /* NetRequest+URLRequest.swift in Sources */,\n\t\t\t\t17E1022F5CDE697AE67BC2509BCDCF94 /* NetRequest.swift in Sources */,\n\t\t\t\tB901615F30064AA769A71D4B71AA6CE3 /* NetResponse+Build.swift in Sources */,\n\t\t\t\tF83D76D568A76D700515723D4A0F373D /* NetResponse+Cached​URLResponse.swift in Sources */,\n\t\t\t\tA47513AAA9E650897D079552AD719B1D /* NetResponse+HTTPURLResponse.swift in Sources */,\n\t\t\t\t347E267C86D7C5E0386D2790C49A180F /* NetResponse+URLResponse.swift in Sources */,\n\t\t\t\t886271C8BF2746B515121D676A264674 /* NetResponse.swift in Sources */,\n\t\t\t\t8448904574BA9E216EF2B8BC5D779068 /* NetServerTrust.swift in Sources */,\n\t\t\t\t0722811654DF468FF08A76E37596A069 /* NetTask+URLSessionTask.swift in Sources */,\n\t\t\t\t578F72BF592FEC12E99ED50FCABC1979 /* NetTask.swift in Sources */,\n\t\t\t\tCABF873D847F68F51F2DABBEF2921D37 /* NetTaskMetrics+URLSessionTaskMetrics.swift in Sources */,\n\t\t\t\t46F01848C415CED795AD46F9BA9A17A9 /* NetTaskMetrics.swift in Sources */,\n\t\t\t\t1BE4500E46B3019974E7DA25E13ED134 /* NetTransformer.swift in Sources */,\n\t\t\t\t364F78C03C67D26FF50F72BDD867D892 /* NetURLSession+Data.swift in Sources */,\n\t\t\t\t419A66DC7CCA52C3D54B98610F412E72 /* NetURLSession+Download.swift in Sources */,\n\t\t\t\tF1898DCC76147ADFA9981A427A7B3133 /* NetURLSession+Stream.swift in Sources */,\n\t\t\t\t5D26A20B10115EAAC82AA67219B914F7 /* NetURLSession+Upload.swift in Sources */,\n\t\t\t\t6E28875617E4F36C41B8D967A8EB61CE /* NetURLSession.swift in Sources */,\n\t\t\t\tE4A9930ACC30B142F671BE52FEEFB424 /* NetURLSessionDelegate.swift in Sources */,\n\t\t\t\tE744C608F95EB6361766839E135D9B22 /* NetURLSessionTaskObserver.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\t01449406F85EF3C4E292C69AA2595F37 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = XCGLogger;\n\t\t\ttarget = E6AE18E7BA96DB0599AEB8F02C885BBC /* XCGLogger */;\n\t\t\ttargetProxy = ACE64CF5955B48235FB7CDEBD30472E9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t03FE5FF5C64A19C41E47D2BA1EC04D90 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = XCGLogger;\n\t\t\ttarget = E6AE18E7BA96DB0599AEB8F02C885BBC /* XCGLogger */;\n\t\t\ttargetProxy = C8276A809B5E608592A1291D9A5398CB /* PBXContainerItemProxy */;\n\t\t};\n\t\t1D505DB398F14ADB7CA381ED6B9B3A66 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = XCGLogger;\n\t\t\ttarget = E6AE18E7BA96DB0599AEB8F02C885BBC /* XCGLogger */;\n\t\t\ttargetProxy = 2EFD9F462448292770D150DE09FC522D /* PBXContainerItemProxy */;\n\t\t};\n\t\t1FD15D573076F7A18AECF3C40CB4DF08 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ObjcExceptionBridging;\n\t\t\ttarget = 5B0B5B8A1476F8AA333AA7B53F47E96B /* ObjcExceptionBridging */;\n\t\t\ttargetProxy = AC459263CF006AD5D39B049EB1FAEF51 /* PBXContainerItemProxy */;\n\t\t};\n\t\t28E41E63CDD5D6CA91966CCECAB9B2B8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ObjcExceptionBridging;\n\t\t\ttarget = 5B0B5B8A1476F8AA333AA7B53F47E96B /* ObjcExceptionBridging */;\n\t\t\ttargetProxy = CB9B0619F9402FEEADFC59DE77E3B540 /* PBXContainerItemProxy */;\n\t\t};\n\t\t3990F2E2F00B1FC74C6A2CEE9BC403B9 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ObjcExceptionBridging;\n\t\t\ttarget = 5B0B5B8A1476F8AA333AA7B53F47E96B /* ObjcExceptionBridging */;\n\t\t\ttargetProxy = E40EC53EBBF106E04DC10C48B485B891 /* PBXContainerItemProxy */;\n\t\t};\n\t\t39911DB3263ADA625D527AF01174CF7F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Kommander;\n\t\t\ttarget = 22315F6812B77D86273C98095D3BBC79 /* Kommander */;\n\t\t\ttargetProxy = 8685FF2EF53DA0004A38266B0659E9C8 /* PBXContainerItemProxy */;\n\t\t};\n\t\t442E257D262579286588EB2F8915A603 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = NetClient;\n\t\t\ttarget = 69EAE86324AC6EEB091FB936BCE91285 /* NetClient */;\n\t\t\ttargetProxy = 4E55A98804B1DD47081CA7E8685E2620 /* PBXContainerItemProxy */;\n\t\t};\n\t\t46E93239627BC18333DFE97F7FA935E5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ObjcExceptionBridging;\n\t\t\ttarget = 5B0B5B8A1476F8AA333AA7B53F47E96B /* ObjcExceptionBridging */;\n\t\t\ttargetProxy = CF94DCE4512ED688EC6BC3B4BAA60F8F /* PBXContainerItemProxy */;\n\t\t};\n\t\t5307548803EDFEF7B0CF1C69F1024B0A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ObjcExceptionBridging;\n\t\t\ttarget = 5B0B5B8A1476F8AA333AA7B53F47E96B /* ObjcExceptionBridging */;\n\t\t\ttargetProxy = 372326D3A382B3BAEDD941A5AF707C7C /* PBXContainerItemProxy */;\n\t\t};\n\t\t7E8238E765879D709F197BDFB10486A2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = XCGLogger;\n\t\t\ttarget = E6AE18E7BA96DB0599AEB8F02C885BBC /* XCGLogger */;\n\t\t\ttargetProxy = 4843C92ED1F848A138DD920820363E89 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8D9297F485E8BDAF99DAC99713D4C71B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = XCGLogger;\n\t\t\ttarget = E6AE18E7BA96DB0599AEB8F02C885BBC /* XCGLogger */;\n\t\t\ttargetProxy = F565716D7F4810091B0221BA53D18D3A /* PBXContainerItemProxy */;\n\t\t};\n\t\tA02FA6EA6C33C8B44D8127075BA86FDC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = NetClient;\n\t\t\ttarget = 69EAE86324AC6EEB091FB936BCE91285 /* NetClient */;\n\t\t\ttargetProxy = 848AF9343B6AE663D8776E5622B028E5 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA0DFD94B61F5FC77B0CA115EDC5FDFC2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = NetClient;\n\t\t\ttarget = 69EAE86324AC6EEB091FB936BCE91285 /* NetClient */;\n\t\t\ttargetProxy = 4B213DE4F54DDB5A296767708948F303 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA4D032752C69769F95BA7697B4173D18 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ObjcExceptionBridging;\n\t\t\ttarget = 5B0B5B8A1476F8AA333AA7B53F47E96B /* ObjcExceptionBridging */;\n\t\t\ttargetProxy = 6C3C8B5AFE493487D01792451001D459 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA83911B183C24C0B75646B2EED24C66F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = XCGLogger;\n\t\t\ttarget = E6AE18E7BA96DB0599AEB8F02C885BBC /* XCGLogger */;\n\t\t\ttargetProxy = EE19F9DF99633A80B3322D454ED29066 /* PBXContainerItemProxy */;\n\t\t};\n\t\tACB34E8D41B25FEFBCFF43E757089E2C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"Cucumberish-GherkinLanguages\";\n\t\t\ttarget = 2F9219DC3436F4A71BD490ADED213426 /* Cucumberish-GherkinLanguages */;\n\t\t\ttargetProxy = 05BD26E8EC9291BAE46B0AAE44F26580 /* PBXContainerItemProxy */;\n\t\t};\n\t\tB6C65CD4DADCADAF3B93117D375E4D3E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = XCGLogger;\n\t\t\ttarget = E6AE18E7BA96DB0599AEB8F02C885BBC /* XCGLogger */;\n\t\t\ttargetProxy = 1143DE0DB010785B69951F29E80FA24F /* PBXContainerItemProxy */;\n\t\t};\n\t\tC8E28CA91D77204C59F7277F7FE1C0A5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Cucumberish;\n\t\t\ttarget = 68BBA27FABB4188F082A1A9FDD1A9B37 /* Cucumberish */;\n\t\t\ttargetProxy = 1DFB29C13222DADAC7B04091B8F96635 /* PBXContainerItemProxy */;\n\t\t};\n\t\tDD43363EFED3C9328D16370D048D8C85 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ObjcExceptionBridging;\n\t\t\ttarget = 5B0B5B8A1476F8AA333AA7B53F47E96B /* ObjcExceptionBridging */;\n\t\t\ttargetProxy = 36C1D0C2F07E4156A379E8A2167C08A3 /* PBXContainerItemProxy */;\n\t\t};\n\t\tDF4E583E68B90CA76B3D39935F4EAFE8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Kingfisher;\n\t\t\ttarget = 6F712943B3C5592E82604940D11CE08A /* Kingfisher */;\n\t\t\ttargetProxy = 20DD979D927B37CBB1A019943483B8C1 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE48B305B398C982EBE73581E2653130D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Reusable;\n\t\t\ttarget = 3FDA40B8508AD3C18A8D7F9AA00C680E /* Reusable */;\n\t\t\ttargetProxy = 6BEF2258BA5ED61DC55E2474E76CD6EF /* PBXContainerItemProxy */;\n\t\t};\n\t\tE98C4BB9E532E63179BBA607CBE5E1D0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ObjcExceptionBridging;\n\t\t\ttarget = 5B0B5B8A1476F8AA333AA7B53F47E96B /* ObjcExceptionBridging */;\n\t\t\ttargetProxy = A77B4A39844DF54B62DEA4088C519960 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t0C56450175B0324F3DA3E6F8F4A11AC6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 18AEA03BD4222257CC534EABD98C31A0 /* XCGLogger.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/XCGLogger/XCGLogger-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/XCGLogger/Info.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\tMODULEMAP_FILE = \"Target Support Files/XCGLogger/XCGLogger.modulemap\";\n\t\t\t\tPRODUCT_NAME = XCGLogger;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t12C4B864767C59600DBFA238F1E2F8BC /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_DOCUMENTATION_COMMENTS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGNING_REQUIRED = NO;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"POD_CONFIGURATION_RELEASE=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/;\n\t\t\t\tSTRIP_INSTALLED_PRODUCT = NO;\n\t\t\t\tSYMROOT = \"${SRCROOT}/../build\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1C66E7C3DFCAD8C6D4BCF2C7B2128A1C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6B5B5164932F7FD9F1088A46959C1E76 /* ObjcExceptionBridging.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/ObjcExceptionBridging/Info.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\tMODULEMAP_FILE = \"Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.modulemap\";\n\t\t\t\tPRODUCT_NAME = ObjcExceptionBridging;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t1E3644454530B7DDB8A3C0FAEF024A04 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6B5B5164932F7FD9F1088A46959C1E76 /* ObjcExceptionBridging.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/ObjcExceptionBridging/Info.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\tMODULEMAP_FILE = \"Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.modulemap\";\n\t\t\t\tPRODUCT_NAME = ObjcExceptionBridging;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t1EAED51947C12C957B7F6111A53317A4 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = B034BC3F76A7EBBC1AF87C4DB16B6E3A /* Cucumberish.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/Cucumberish/Cucumberish-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Cucumberish/Info.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\tMODULEMAP_FILE = \"Target Support Files/Cucumberish/Cucumberish.modulemap\";\n\t\t\t\tPRODUCT_NAME = Cucumberish;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t2E26123081A1ABEC0EC77DA94F9AD9A6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = B034BC3F76A7EBBC1AF87C4DB16B6E3A /* Cucumberish.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/Cucumberish/Cucumberish-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Cucumberish/Info.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\tMODULEMAP_FILE = \"Target Support Files/Cucumberish/Cucumberish.modulemap\";\n\t\t\t\tPRODUCT_NAME = Cucumberish;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t3517B6CC528D94EC9E33C4A2E05FB287 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 799AB5BC0DA35F7EB256BD820DD2EBB8 /* Pods-Archit.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-Archit/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-Archit/Pods-Archit.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_Archit;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\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\t37B44FD87D4D504D7DAF373672EBD215 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 16A6173FEEE586769F692FDE36C7EDA4 /* Pods-ArchitTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-ArchitTests/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-ArchitTests/Pods-ArchitTests.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_ArchitTests;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\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\t4963081614901E304B3623C38AE15583 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 383B0EDA3F08D7963858E04777179246 /* Kommander.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/Kommander/Kommander-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Kommander/Info.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\tMODULEMAP_FILE = \"Target Support Files/Kommander/Kommander.modulemap\";\n\t\t\t\tPRODUCT_NAME = Kommander;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t4CF9C4742EFC714CCF1EA4CFD4F68752 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 383B0EDA3F08D7963858E04777179246 /* Kommander.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/Kommander/Kommander-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Kommander/Info.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\tMODULEMAP_FILE = \"Target Support Files/Kommander/Kommander.modulemap\";\n\t\t\t\tPRODUCT_NAME = Kommander;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t576C583E88A92DC2279EB3BFC2CA8A6C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 24CD43CB964E9343A1C3F27D9551E3FE /* Kingfisher.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/Kingfisher/Kingfisher-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Kingfisher/Info.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\tMODULEMAP_FILE = \"Target Support Files/Kingfisher/Kingfisher.modulemap\";\n\t\t\t\tPRODUCT_NAME = Kingfisher;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t59F0302F2371FCC6B73EF0A418D40734 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_DOCUMENTATION_COMMENTS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGNING_REQUIRED = NO;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"POD_CONFIGURATION_DEBUG=1\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\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\tPROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/;\n\t\t\t\tSTRIP_INSTALLED_PRODUCT = NO;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSYMROOT = \"${SRCROOT}/../build\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t5E899639BF2E9C6E305070EE304AD7C1 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 809806B63801D68CB331823C47DCCB0B /* NetClient.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/NetClient/NetClient-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/NetClient/Info.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\tMODULEMAP_FILE = \"Target Support Files/NetClient/NetClient.modulemap\";\n\t\t\t\tPRODUCT_NAME = Net;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t6492175056A767094F85A2FB3A89DDFC /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 28B3A7207EE2C825AA396316726E2203 /* Pods-Domain.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-Domain/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-Domain/Pods-Domain.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_Domain;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\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\t7224D0E21DC406BC22417CFED7E82F59 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D5BEA86FDD966AAAA1566BB2B18B60C0 /* Pods-CoreTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-CoreTests/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-CoreTests/Pods-CoreTests.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_CoreTests;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\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\t75118BFB71D48090AACA47913F2CFBD8 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 809806B63801D68CB331823C47DCCB0B /* NetClient.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/NetClient/NetClient-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/NetClient/Info.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\tMODULEMAP_FILE = \"Target Support Files/NetClient/NetClient.modulemap\";\n\t\t\t\tPRODUCT_NAME = Net;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t7EF6D6F9969B2A0C2C5097B9A51FEB4A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6E031FA5BCC86339320E4F120AF591FB /* Reusable.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/Reusable/Reusable-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Reusable/Info.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\tMODULEMAP_FILE = \"Target Support Files/Reusable/Reusable.modulemap\";\n\t\t\t\tPRODUCT_NAME = Reusable;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\t84E2F904DD24CFAF56CE6BC53760D76C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = CFFDE271E0656856D9E780441AC19596 /* Pods-DomainTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-DomainTests/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-DomainTests/Pods-DomainTests.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_DomainTests;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\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\t8D3D7C1BE4908EEAD242F8EB5505CF87 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = B034BC3F76A7EBBC1AF87C4DB16B6E3A /* Cucumberish.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCONFIGURATION_BUILD_DIR = \"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Cucumberish\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Cucumberish/ResourceBundle-GherkinLanguages-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tPRODUCT_NAME = GherkinLanguages;\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\tWRAPPER_EXTENSION = bundle;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t909ED5FEA9B70B10C5CA37DF1D225490 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = B034BC3F76A7EBBC1AF87C4DB16B6E3A /* Cucumberish.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCONFIGURATION_BUILD_DIR = \"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Cucumberish\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Cucumberish/ResourceBundle-GherkinLanguages-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tPRODUCT_NAME = GherkinLanguages;\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\tWRAPPER_EXTENSION = bundle;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9533E307B101DD7AC5A1C8BADEBFEF81 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 070B33C739C487B3842A891D416B5958 /* Pods-DomainTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-DomainTests/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-DomainTests/Pods-DomainTests.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_DomainTests;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\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\tA1D03FCBE868AD2F6595DF35297A2B5B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 89F240BC570AC47F0FC178D62760F0A5 /* Pods-Domain.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-Domain/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-Domain/Pods-Domain.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_Domain;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\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\tA6F2931FE8AB6972564D5076EC0FEB4F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6E031FA5BCC86339320E4F120AF591FB /* Reusable.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/Reusable/Reusable-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Reusable/Info.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\tMODULEMAP_FILE = \"Target Support Files/Reusable/Reusable.modulemap\";\n\t\t\t\tPRODUCT_NAME = Reusable;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\tA838CED686586CE0116E7A3B651CCAD7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = C1D1C5E8351C5299DF5A7BFBBAB13DEA /* Pods-Core.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-Core/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-Core/Pods-Core.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_Core;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\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\tC595F3119132BBA9FECF053686DD7C1B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 2D582B86547532E026BDF51F54D2008F /* Pods-Archit.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-Archit/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-Archit/Pods-Archit.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_Archit;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\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\tD0764333EB800B829D444C6CD6EFC775 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 18AEA03BD4222257CC534EABD98C31A0 /* XCGLogger.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/XCGLogger/XCGLogger-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/XCGLogger/Info.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\tMODULEMAP_FILE = \"Target Support Files/XCGLogger/XCGLogger.modulemap\";\n\t\t\t\tPRODUCT_NAME = XCGLogger;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\tD12930DAAFDCBB229A6893AE9AA8CD1B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 0B47BEE2C81FF9656D8D4FFA92A63E0B /* Pods-ArchitUITests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-ArchitUITests/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_ArchitUITests;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\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\tE8652F35BF322A3957D0F62338910B79 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 24CD43CB964E9343A1C3F27D9551E3FE /* Kingfisher.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tGCC_PREFIX_HEADER = \"Target Support Files/Kingfisher/Kingfisher-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Kingfisher/Info.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\tMODULEMAP_FILE = \"Target Support Files/Kingfisher/Kingfisher.modulemap\";\n\t\t\t\tPRODUCT_NAME = Kingfisher;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tSWIFT_VERSION = 4.0;\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\tEF640AF38A4BED81061535048813398C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 882C797FFD93A8E21656C9033972F2B8 /* Pods-CoreTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-CoreTests/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-CoreTests/Pods-CoreTests.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_CoreTests;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\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\tF787635D3CAB936E50BD734BBED2A6E7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 3809D5920B405BB206F4D732E79EDEFD /* Pods-ArchitUITests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-ArchitUITests/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_ArchitUITests;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\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\tF972945BA15643BD766C22C2C06FAEF8 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = AD27C15D49A723F9D2F550322C928DF9 /* Pods-ArchitTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-ArchitTests/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-ArchitTests/Pods-ArchitTests.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_ArchitTests;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\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\tFDF824587EE91623B60970679F9AA8D7 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 83C6EF3D403F166BEF9373C6707EDAC2 /* Pods-Core.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\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\tINFOPLIST_FILE = \"Target Support Files/Pods-Core/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-Core/Pods-Core.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = Pods_Core;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\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/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t2B896BECE71D3981EF3DAAABD5A50A3E /* Build configuration list for PBXNativeTarget \"NetClient\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t5E899639BF2E9C6E305070EE304AD7C1 /* Debug */,\n\t\t\t\t75118BFB71D48090AACA47913F2CFBD8 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t2D78B3BA9B8B9824C7FC2EBE8AD1B0B8 /* Build configuration list for PBXNativeTarget \"Kommander\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4963081614901E304B3623C38AE15583 /* Debug */,\n\t\t\t\t4CF9C4742EFC714CCF1EA4CFD4F68752 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject \"Pods\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t59F0302F2371FCC6B73EF0A418D40734 /* Debug */,\n\t\t\t\t12C4B864767C59600DBFA238F1E2F8BC /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4598CC59AFF3A3C3F087827EBA6ABECF /* Build configuration list for PBXNativeTarget \"Cucumberish-GherkinLanguages\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t909ED5FEA9B70B10C5CA37DF1D225490 /* Debug */,\n\t\t\t\t8D3D7C1BE4908EEAD242F8EB5505CF87 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t698A860BBE61325637E5DA22EA82E91C /* Build configuration list for PBXNativeTarget \"Pods-Core\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA838CED686586CE0116E7A3B651CCAD7 /* Debug */,\n\t\t\t\tFDF824587EE91623B60970679F9AA8D7 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t75A7B02EED270EC751EF0CE987C63D66 /* Build configuration list for PBXNativeTarget \"Pods-ArchitTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t37B44FD87D4D504D7DAF373672EBD215 /* Debug */,\n\t\t\t\tF972945BA15643BD766C22C2C06FAEF8 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t7B172032A8DFBB0394B7B8216544082B /* Build configuration list for PBXNativeTarget \"Pods-Archit\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC595F3119132BBA9FECF053686DD7C1B /* Debug */,\n\t\t\t\t3517B6CC528D94EC9E33C4A2E05FB287 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t89F02D0314344D9D9BFCE20C7C90331C /* Build configuration list for PBXNativeTarget \"Pods-DomainTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9533E307B101DD7AC5A1C8BADEBFEF81 /* Debug */,\n\t\t\t\t84E2F904DD24CFAF56CE6BC53760D76C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t8A6CC7BA04335E320A3352B0A7588343 /* Build configuration list for PBXNativeTarget \"Pods-Domain\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6492175056A767094F85A2FB3A89DDFC /* Debug */,\n\t\t\t\tA1D03FCBE868AD2F6595DF35297A2B5B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t8C1E4CEFB2390CBE75E70BAC20F44BBF /* Build configuration list for PBXNativeTarget \"Kingfisher\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t576C583E88A92DC2279EB3BFC2CA8A6C /* Debug */,\n\t\t\t\tE8652F35BF322A3957D0F62338910B79 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9F3F5058E79FDEB47CEC7DE1C92B5078 /* Build configuration list for PBXNativeTarget \"Pods-CoreTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t7224D0E21DC406BC22417CFED7E82F59 /* Debug */,\n\t\t\t\tEF640AF38A4BED81061535048813398C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB2DC16467E2171FFFCF97A3D189DBAB3 /* Build configuration list for PBXNativeTarget \"Pods-ArchitUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF787635D3CAB936E50BD734BBED2A6E7 /* Debug */,\n\t\t\t\tD12930DAAFDCBB229A6893AE9AA8CD1B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC4195B567D4F3F2206FEDC07DA2C6626 /* Build configuration list for PBXNativeTarget \"ObjcExceptionBridging\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1C66E7C3DFCAD8C6D4BCF2C7B2128A1C /* Debug */,\n\t\t\t\t1E3644454530B7DDB8A3C0FAEF024A04 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tCCCCA0DABCA1114155872D150AACE5A2 /* Build configuration list for PBXNativeTarget \"Reusable\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA6F2931FE8AB6972564D5076EC0FEB4F /* Debug */,\n\t\t\t\t7EF6D6F9969B2A0C2C5097B9A51FEB4A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tCD058521C7433D2BEC19AFDA890177C9 /* Build configuration list for PBXNativeTarget \"Cucumberish\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2E26123081A1ABEC0EC77DA94F9AD9A6 /* Debug */,\n\t\t\t\t1EAED51947C12C957B7F6111A53317A4 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE8581228C0892567BBAE53DDB6D925EC /* Build configuration list for PBXNativeTarget \"XCGLogger\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t0C56450175B0324F3DA3E6F8F4A11AC6 /* Debug */,\n\t\t\t\tD0764333EB800B829D444C6CD6EFC775 /* 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 = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n}\n"
  },
  {
    "path": "Pods/Reusable/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 AliSoftware\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Pods/Reusable/README.md",
    "content": "# Reusable\n\n<p align=\"center\">\n  <img alt=\"Reusable\" src=\"Example/ReusableDemo/Assets.xcassets/AppIcon.appiconset/AppIcon-167.png\" />\n</p>\n\nA Swift mixin to use `UITableViewCells`, `UICollectionViewCells` and `UIViewControllers` in a **type-safe way**, without the need to manipulate their `String`-typed `reuseIdentifiers`. This library also supports arbitrary `UIView` to be loaded via a XIB using a simple call to `loadFromNib()`\n\n[![Platform](http://cocoapod-badges.herokuapp.com/p/Reusable/badge.png)](http://cocoadocs.org/docsets/Reusable)\n[![Version](http://cocoapod-badges.herokuapp.com/v/Reusable/badge.png)](http://cocoadocs.org/docsets/Reusable)\n[![Language: Swift 3.0](https://img.shields.io/badge/Swift-3.0-orange.svg)](https://swift.org)\n\n# Requirements\n\n|  Swift Version |  Reusable Version  |\n|----------------|--------------------|\n|    2.2 & 2.3   |        2.5.1       |\n|       3.0      |        3.0.0 +     |\n\n# Introduction\n\nThis library aims to make it super-easy to create, dequeue and instantiate reusable views anywhere this pattern is used: from the obvious `UITableViewCell` and `UICollectionViewCell` to custom `UIViews`, even supporting `UIViewControllers` from Storyboards.  \nAll of that simply by **marking your classes as conforming to a protocol, without having to add any code**, and **creating a type-safe API with no more String-based API**.\n\n```swift\n// Example of what Reusable allows you to do\nfinal class MyCustomCell: UITableViewCell, Reusable { /* And that's it! */ }\ntableView.register(MyCustomCell)\nlet cell: MyCustomCell = tableView.dequeueReusableCell(indexPath: indexPath)\n```\n\nThis concept, called a [Mixin](http://alisoftware.github.io/swift/protocol/2015/11/08/mixins-over-inheritance/) (a protocol with default implementation for all its methods), is explained [here in my blog post](http://alisoftware.github.io/swift/generics/2016/01/06/generic-tableviewcells/) in details.\n\n**Table of Contents**\n\n* [Type-safe cells](#type-safe-uitableviewcell--uicollectionviewcell)\n* [Type-safe XIB-based reusable views](#type-safe-xib-based-reusable-views)\n* [Type-safe ViewControllers from Storyboards](#type-safe-viewcontrollers-from-storyboards)\n* [Additional tips](#additional-tips)\n* [Example project](#example-project)\n* [License](#license)\n\n\n---\n\n\n\n# Type-safe `UITableViewCell` / `UICollectionViewCell`\n\n> ✍️ Examples and explanations below use `UITableView` and `UITableViewCell`, but the exact same examples and explanations apply for `UICollectionView` and `UICollectionViewCell`.\n\n## 1. Declare your cells to conform to `Reusable` or `NibReusable`\n\n* Use the `Reusable` protocol if they don't depend on a NIB (this will use `registerClass(…)` to register the cell)\n* Use the `NibReusable` typealias (= `Reusable & NibLoadable`) if they use a `XIB` file for their content (this will use `registerNib(…)` to register the cell)\n\n```swift\nfinal class CustomCell: UITableViewCell, Reusable { /* And that's it! */ }\n```\n\n> ✍️ **Notes**\n> \n> * For cells embedded in a Storyboard's tableView, either one of those two protocols will work (as you won't register the cell them manually anyway)\n> * If you create a XIB-based cell, don't forget to set its _Reuse Identifier_ field in Interface Builder to the same string as the name of the cell class itself.\n> * 💡 `NibReusable` is a typealias, so you could still use two protocols conformance `Reusable, NibLoadable` instead of `NibReusable`.\n\n\n<details>\n<summary>📑 Example for a Code-based custom tableView cell</summary>\n\n```swift\nfinal class CodeBasedCustomCell: UITableViewCell, Reusable {\n  // By default this cell will have a reuseIdentifier of \"CodeBasedCustomCell\"\n  // unless you provide an alternative implementation of `var reuseIdentifier`\n  \n  // No need to add anything to conform to Reusable. You can just keep your normal cell code\n  @IBOutlet private weak var label: UILabel!\n  func fillWithText(text: String?) { label.text = text }\n}\n```\n</details>\n\n<details>\n<summary>📑 Example for a Nib-based custom tableView cell</summary>\n\n```swift\nfinal class NibBasedCustomCell: UITableViewCell, NibReusable {\n// or\n// final class NibBasedCustomCell: UITableViewCell, Reusable, NibLoadable {\n  \n  // Here we provide a nib for this cell class (which, if we don't override the protocol's\n  // default implementation of `nib`, will use a XIB of the same name as the class)\n  \n  // No need to add anything to conform to Reusable. You can just keep your normal cell code\n  @IBOutlet private weak var pictureView: UIImageView!\n  func fillWithImage(image: UIImage?) { pictureView.image = image }\n}\n```\n</details>\n\n<details>\n<summary>📑 Example for a Code-based custom collectionView cell</summary>\n\n```swift\n// A UICollectionViewCell which doesn't need a XIB to register\n// Either because it's all-code, or because it's registered via Storyboard\nfinal class CodeBasedCollectionViewCell: UICollectionViewCell, Reusable {\n  // The rest of the cell code goes here\n}\n```\n</details>\n\n<details>\n<summary>📑 Example for a Nib-based custom collectionView cell</summary>\n\n```swift\n// A UICollectionViewCell using a XIB to define it's UI\n// And that will need to register using that XIB\nfinal class NibBasedCollectionViewCell: UICollectionViewCell, NibReusable {\n// or\n// final class NibBasedCollectionViewCell: UICollectionViewCell, Reusable, NibLoadable {\n  \n  // The rest of the cell code goes here\n  \n}\n```\n</details>\n\n## 2. Register your cells\n\nUnless you've prototyped your cell in a Storyboard, you'll have to register the cell class or Nib by code.\n\nTo do this, instead of calling `registerClass(…)` or `registerNib(…)` using a String-based `reuseIdentifier`, just call:\n\n```swift\ntableView.register(theCellClass)\n```\n\n<details>\n<summary>📑 Example of `UITableView` registration</summary>\n\n```swift\nclass MyViewController: UIViewController {\n  @IBOutlet private weak var tableView: UITableView!\n  \n  override func viewDidLoad() {\n    super.viewDidLoad()\n    tableView.register(CodeBasedCustomCell) // This will register using the class without using a UINib\n    tableView.register(NibBasedCustomCell) // This will register using NibBasedCustomCell.xib\n  }\n}\n```\n</details>\n\n## 3. Dequeue your cells\n\nTo dequeue a cell (typically in your `cellForRowAtIndexPath` implementation), simply call `dequeueReusableCell(indexPath:)`:\n\n```swift\n// Either\nlet cell = tableView.dequeueReusableCell(indexPath: indexPath) as MyCustomCell\n// Or\nlet cell: MyCustomCell = tableView.dequeueReusableCell(indexPath: indexPath)\n```\n\nAs long as **Swift can use type-inference to understand that you'll want a cell of type `MyCustomCell`** (either using `as MyCystomCell` or explicitly typing the receiving variable `cell: MyCustomCell`), it will magically infer both the cell class to use and thus its `reuseIdentifier` needed to dequeue the cell, and which exact type to return to save you a type-cast.\n\n* No need for you to manipulate `reuseIdentifiers` Strings manually anymore!\n* No need to force-cast the returned `UITableViewCell` instance down to your `MyCustomCell` class either!\n\n<details>\n<summary>📑 Example implementation of `cellForRowAtIndexPath` using `Reusable`</summary>\n\n```swift\nextension MyViewController: UITableViewDataSource {\n  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {\n    if indexPath.section == 0 {\n      let cell = tableView.dequeueReusableCell(indexPath: indexPath) as CodeBasedCustomCell\n      // Customize the cell here. You can call any type-specific methods here without the need for type-casting\n      cell.fillWithText(\"Foo\")\n      return cell\n    } else {\n      let cell = tableView.dequeueReusableCell(indexPath: indexPath) as NibBasedCustomCell\n      // Customize the cell here. no need to downcasting here either!\n      cell.fillWithImage(UIImage(named:\"Bar\"))\n      return cell\n    }\n  }\n}\n```\n</details>\n\nNow all you have is **a beautiful code and type-safe cells**, with compile-type checking, and no more String-based API!\n\n> 💡 If the cell class is computed at runtime in a variable, you won't be able to use `as theVariable` or `let cell: theVariable` obviously… but instead you can use the optional parameter `cellType` (which otherwise gets infered by the return type and is thus not necessary to provide explicitly)\n> \n> <details>\n> <summary>📑 Example with a cell type determined at runtime</summary>\n> \n> ```swift\n> class ParentCell: UITableViewCell, Reusable {}\n> class Child1Cell: ParentCell {}\n> class Child2Cell: ParentCell {}\n> \n> func cellType(for indexPath: NSIndexPath) -> ParentCell.Type {\n>   return (indexPath.row % 2 == 0) ? Child1Cell.self : Child2Cell.self\n> }\n> \n> func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {\n>   let cellClass = self.cellType(for: indexPath)\n>   // As `self.cellType(for:)` always returns a `ParentCell` (sub-)class, the type\n>   // of the variable `cell` below is infered to be `ParentCell` too. So only methods\n>   // declared in the parent `ParentCell` class will be accessible on the `cell` variable.\n>   let cell = tableView.dequeueReusableCell(indexPath: indexPath, cellType: cellClass)\n>   return cell  \n> }\n> ```\n> </details>\n\n---\n\n\n\n# Type-safe XIB-based reusable views\n\n`Reusable` also allows you to create reusable custom views designed in Interface Builder to reuse them in other XIBs or by code, like creating custom UI widgets used in multiple places in your app.\n\n## 1. Declare your views to conform to `NibLoadable` or `NibOwnerLoadable`\n\nIn your swift source declaring your custom view class:\n\n* Use the `NibLoadable` protocol if the XIB you're using don't use its \"File's Owner\" and the reusable view you're designing is the root view of the XIB\n* Use the `NibOwnerLoadable` protocol if you used a \"File's Owner\" of the XIB being of the class of your reusable view, and the root view(s) of the XIB is to be set as a subview providing its content.\n\n```swift\n// a XIB-based custom UIView, used as root of the XIB\nfinal class NibBasedRootView: UIView, NibLoadable { /* and that's it! */ }\n\n// a XIB-based custom UIView, used as the XIB's \"File's Owner\"\nfinal class NibBasedFileOwnerView: UIView, NibOwnerLoadable { /* and that's it! */ }\n```\n\n> 💡 You should use the second approach if you plan to use your custom view in another XIB or Storyboard.  \n> This will allow you to just drop a UIView in a XIB/Storyboard and change its class to the class of your custom XIB-based view to use it. That custom view will then automagically load its own content from the associated XIB when instantiated by the storyboard containing it, without having to write additional code to load the content of the ustom view manually every time.\n\n## 2. Design your view in Interface Builder\n\nFor example if you named your class `MyCustomWidget` and made it `NibOwnerLoadable`:\n\n* Set the _File's Owner_'s class to `MyCustomWidget`\n* Design the content of the view via the root view of that XIB (which is a standard `UIView` with no custom class) and its subviews\n* Connect any `@IBOutlets` and `@IBActions` between the _File's Owner_ (the `MyCustomWidget`) and its content\n\n<details>\n<summary>🖼📑 A view configured to be `NibOwnerLoadable`</summary>\n\n![NibOwnerLoadable view in Interface Builder](NibOwnerLoadable.png)\n\n```swift\nfinal class MyCustomWidget: UIView, NibOwnerLoadable {\n  @IBOutlet private var rectView: UIView!\n  @IBOutlet private var textLabel: UILabel!\n\n  @IBInspectable var rectColor: UIColor? {\n    didSet {\n      self.rectView.backgroundColor = self.rectColor\n    }\n  }\n  @IBInspectable var text: String? {\n    didSet {\n      self.textLabel.text = self.text\n    }\n  }\n…\n}\n```\n</details>\n\nThen that widget can be integrated in a Storyboard Scene (or any other XIB) by simply dropping a `UIView` on the Storyboard, and changing its class to `MyCustomWidget`.\n\n<details>\n<summary>🖼 Example of a `NibOwnerLoadable` custom view once integrated in another Storyboard</summary>\n\n* In the capture below, all blue square views have a custom class of `MyCustomWidget` set in Interface Builder.\n* When selecting one of this custom class, you have direct access to all `@IBOutlet` that this `MyCustomWidget` exposes, which allows you to connect them to other views of the Storyboard if needed\n* When selecting one of this custom class, you also have access to all the `@IBInspectable` properties. For example, in the capture below, you can see the \"Rect color\" and \"Text\" inspectable properties on the right panel, that you can change right from the Storyboard integrating your custom widget.\n\n![NibOwnerLoadable integrated in a Storyboard](NibOwnerLoadable-InStoryboard.png)\n</details>\n\n## 3a. Auto-loading the content of a `NibOwnerLoadable` view\n\nIf you used `NibOwnerLoadable` and made your custom view the File's Owner of your XIB, you should then override `init?(coder:)` so that it load it's associated XIB as subviews and add constraints automatically:\n\n```swift\nfinal class MyCustomWidget: UIView, NibOwnerLoadable {\n  …\n  required init?(coder aDecoder: NSCoder) {\n    super.init(coder: aDecoder)\n    self.loadNibContent()\n  }\n}\n```\n\nOverriding `init?(coder:)` allows your `MyCustomWidget` custom view to load its content from the associated XIB `MyCustomWidget.xib` and add it as subviews of itself.\n\n_💡 Note: it is also possible to override `init(frame:)`, in order to be able to create an instance of that view programatically and call `loadNibContent()` to fill with views if needed.\n\n## 3b. Instantiating a `NibLoadable` view\n\nIf you used `NibLoadable` and made your custom view the root view of your XIB (not using the File's Owner at all), these are not designed to be used in other Storyboards or XIBs like `NibOwnerLoadable` is, as they won't be able to auto-load their content.\n\nInstead, you will instantiate those `NibLoadable` views by code, which is as simple as calling `loadFromNib()` on your custom class:\n\n```swift\nlet view1 = NibBasedRootView.loadFromNib() // Create one instance\nlet view2 = NibBasedRootView.loadFromNib() // Create another one\nlet view3 = NibBasedRootView.loadFromNib() // and another one\n…\n```\n\n---\n\n\n\n# Type-safe ViewControllers from Storyboards \n\n`Reusable` also allows you to mark your `UIViewController` classes as `StoryboardBased` or `StoryboardSceneBased` to easily instantiate them from their associated Storyboard in a type-safe way.\n\n## 1. Declare your `UIViewController` to conform to `StoryboardBased` or `StoryboardSceneBased`\n\nIn your swift source declaring your custom `UIViewController` class:\n\n* Use the `StoryboardBased` protocol if the `*.storyboard` file has the same name as the ViewController's class, and its scene is the \"initial scene\" of the storyboard.\n  * This is typically ideal if you use one Storyboard per ViewController, for example.\n* Use the `StoryboardSceneBased` protocol if scene in your storyboard has the same `sceneIdentifier` as the name of the ViewController's class, but the `*.storyboard` file name doesn't necessary match the ViewController's class name.\n  * This is typically ideal for secondary scenes in bigger storyboards\n  * You'll then be required to implement the `sceneStoryboard` type property to indicate the storyboard it belongs to.\n\n<details>\n<summary>📑 Example of a ViewController being the initial ViewController of its Storyboard</summary>\n\nIn this example, `CustomVC` is designed as the initial ViewController of a Storyboard named `CustomVC.storyboard`:\n\n```swift\nfinal class CustomVC: UIViewController: StoryboardBased { /* and that's it! */ }\n```\n</details>\n\n<details>\n<summary>📑 Example of a ViewController being an arbitrary scene in a differently-named Storyboard</summary>\n\nIn this example, `SecondaryVC` is designed in a Storyboard name `CustomVC.storyboard` (so with a different name than the class itself) and is _not_ the initial ViewController, but instead has its **\"Scene Identifier\"** set to the value `\"SecondaryVC\"` (same as the class name)\n\nConforming to `StoryboardSceneBased` will still require you to implement `static var sceneStoryboard: UIStoryboard { get }` to indicate the Storyboard where this scene is designed. You can typically implement that property using a `let` type constant:\n\n```swift\nfinal class SecondaryVC: UIViewController: StoryboardSceneBased {\n  static let sceneStoryboard = UIStoryboard(name: \"CustomVC\", bundle: nil)\n  /* and that's it! */\n}\n```\n</details>\n\n## 2. Instantiate your UIViewControllers\n\nSimply call `instantiate()` on your custom class. This will automatically know which storyboard to load it from, and which scene (initial or not) to use to instantiate it.\n\n```swift\nfunc presentSecondary() {\n  let vc = SecondaryVC.instantitate() // Init from the \"SecondaryVC\" scene of CustomVC.storyboard\n  self.presentViewController(vc, animated: true) {}\n}\n```\n\n\n\n---\n\n\n\n# Additional tips\n\n## Make your subclasses `final`\n\nI advise you to mark your custom `UITableViewCell`, `UICollectionViewCell`, `UIView` and `UIViewController` subclasses as being `final`. This is because:\n\n* In most cases, the custom cells and VCs you plan to instantiate are not intended to be subclassed themselves.\n* More importantly, it helps the compiler a lot and gives you big optimizations\n* It can be required in some cases when conforming to `protocols` that have `Self` requirements, like the ones used by this pod (`Reusable`, `StoryboardBased`, …). \n\nIn some cases you can avoid making your classes `final`, but in general it's a good practice, and in the case of this pod, usually your custom `UIViewController` or whatever won't be subclassed anyway:\n\n* Either they are intended to be used and instantiated directly and never be subclassed, so `final` makes sense here\n* In case your custom `UIViewController`, `UITableViewCell`, etc… is intended to be subclassed and be the parent class of many classes in your app, it makes more sense to **add the protocol conformance (`StoryboardBased`, `Reusable`, …) to the child classes (and mark _them_ `final`)** than adding the protocol on the parent, abstract class.\n\n## Customize reuseIdentifier, nib, etc for non-conventional uses\n\nThe protocols in this pod, like `Reusable`, `NibLoadable`, `NibOwnerLoadable`, `StoryboardBased`, `NibReusable`… are what is usually called [Mixins](http://alisoftware.github.io/swift/protocol/2015/11/08/mixins-over-inheritance/), which basically is a Swift protocol with a default implementation provided for all of its methods.\n\nThe main benefit is that **you don't need to add any code**: just conform to `Reusable`, `NibOwnerLoadable` or any of those protocol and you're ready to go with no additional code to write.\n\nBut of course, those provided implementations are just **default implementations**. That means that if you need **you can still provide your own implementations** in case for some reason some of your cells don't follow the classic configuration of using the same name for both the class, the `reuseIdentifier` and the XIB file.\n\n```swift\nfinal class VeryCustomNibBasedCell: UITableViewCell, NibReusable {\n  // This cell use a non-standard configuration: its reuseIdentifier and XIB file\n  // have a different name as the class itself. So we need to provide a custom implementation or `NibReusable`\n  static var reuseIdentifier: String { return \"VeryCustomReuseIdentifier\" }\n  static var nib: UINib { return UINib(nibName: \"VeryCustomUI\", bundle: nil) } // Use VeryCustomUI.xib\n  \n  // Then continue with the rest of your normal cell code \n}\n```\n\nThe same is true for all the protocols of this pod, which always provide default implementations which could still be replaced by your own if you need some custom cases.\n\n_But the beauty is in 90% of cases the default implementation will match typical conventions and the default implementations will be exactly what you want!_\n\n## Type-safety and `fatalError`\n\n`Reusable` allows you to manipulate type-safe APIs and make you avoid typos. But things could still go wrong in case of a misconfguration, for example if you forgot to set the `reuseIdentifier` of your cell in its `XIB`, or you declared a `FooViewController` to be `StoryboardBased` but forgot to set the initial ViewController flag on that `FooViewController` scene in that Storyboard, etc.\n\nIn such cases, because those are developer errors that should be caught as early as possible in the development process, `Reusable` will call `fatalError` **with an error message as descriptive as possible** (instead of crashing with an obscure message about some force-cast or force-unwrap or whatnot) to help you configure it right.\n\nFor example, if `Reusable` fails to dequeue a cell, it will bail with a message like:\n\n> « Failed to dequeue a cell with identifier \\\\(cellType.reuseIdentifier) matching type \\\\(cellType.self).\n> Check that the reuseIdentifier is set properly in your XIB/Storyboard and that you registered the cell beforehand. »\n\nHopefully, those explicit failure messages will allow you to understand what was misconfigured and help you fix it!\n\n\n\n---\n\n\n\n# Example Project\n\nThis repository comes with an example project in the `Example/` folder. Feel free to try it.\n\nIt demonstrates how `Reusable` works for:\n\n* `UITableViewCell` and `UICollectionViewCell` subclasses,\n* Cells whose UI template is either only provided by plain code, or provided by a XIB, or prototyped directly in a Storyboard.\n* `UICollectionView`'s `SupplementaryViews` (section Headers)\n* Custom `UIView` designed in a XIB (`NibOwnerLoadable`)\n\n\n# License\n\nThis code is distributed under the MIT license. See the `LICENSE` file for more info.\n"
  },
  {
    "path": "Pods/Reusable/Sources/Storyboard/StoryboardBased.swift",
    "content": "/*********************************************\n *\n * This code is under the MIT License (MIT)\n *\n * Copyright (c) 2016 AliSoftware\n *\n *********************************************/\n\nimport UIKit\n\n// MARK: Protocol Definition\n\n/// Make your UIViewController subclasses conform to this protocol when:\n///  * they *are* Storyboard-based, and\n///  * this ViewController is the initialViewController of your Storyboard\n///\n/// to be able to instantiate them from the Storyboard in a type-safe manner\npublic protocol StoryboardBased: class {\n  /// The UIStoryboard to use when we want to instantiate this ViewController\n  static var sceneStoryboard: UIStoryboard { get }\n}\n\n// MARK: Default Implementation\n\npublic extension StoryboardBased {\n  /// By default, use the storybaord with the same name as the class\n  static var sceneStoryboard: UIStoryboard {\n    return UIStoryboard(name: String(describing: self), bundle: Bundle(for: self))\n  }\n}\n\n// MARK: Support for instantiation from Storyboard\n\npublic extension StoryboardBased where Self: UIViewController {\n  /**\n   Create an instance of the ViewController from its associated Storyboard's initialViewController\n\n   - returns: instance of the conforming ViewController\n   */\n  static func instantiate() -> Self {\n    guard let vc = sceneStoryboard.instantiateInitialViewController() as? Self else {\n      fatalError(\"The initialViewController of '\\(sceneStoryboard)' is not of class '\\(self)'\")\n    }\n    return vc\n  }\n}\n"
  },
  {
    "path": "Pods/Reusable/Sources/Storyboard/StoryboardSceneBased.swift",
    "content": "/*********************************************\n *\n * This code is under the MIT License (MIT)\n *\n * Copyright (c) 2016 AliSoftware\n *\n *********************************************/\n\nimport UIKit\n\n// MARK: Protocol Definition\n\n/// Make your UIViewController subclasses conform to this protocol when:\n///  * they *are* Storyboard-based, and\n///  * this ViewController is not the initialViewController of your Storyboard, but a different scene\n///\n/// to be able to instantiate them from the Storyboard in a type-safe manner.\n///\n/// You need to implement `sceneStoryboard` yourself to indicate the UIStoryboard this scene is from.\npublic protocol StoryboardSceneBased: class {\n  /// The UIStoryboard to use when we want to instantiate this ViewController\n  static var sceneStoryboard: UIStoryboard { get }\n  /// The scene identifier to use when we want to instantiate this ViewController from its associated Storyboard\n  static var sceneIdentifier: String { get }\n}\n\n// MARK: Default Implementation\n\npublic extension StoryboardSceneBased {\n  /// By default, use the `sceneIdentifier` with the same name as the class\n  static var sceneIdentifier: String {\n    return String(describing: self)\n  }\n}\n\n// MARK: Support for instantiation from Storyboard\n\npublic extension StoryboardSceneBased where Self: UIViewController {\n  /**\n   Create an instance of the ViewController from its associated Storyboard and the\n   Scene with identifier `sceneIdentifier`\n\n   - returns: instance of the conforming ViewController\n   */\n  static func instantiate() -> Self {\n    let storyboard = Self.sceneStoryboard\n    guard let vc = storyboard.instantiateViewController(withIdentifier: self.sceneIdentifier) as? Self else {\n      fatalError(\"The viewController '\\(self.sceneIdentifier)' of '\\(storyboard)' is not of class '\\(self)'\")\n    }\n    return vc\n  }\n}\n"
  },
  {
    "path": "Pods/Reusable/Sources/View/NibLoadable.swift",
    "content": "/*********************************************\n *\n * This code is under the MIT License (MIT)\n *\n * Copyright (c) 2016 AliSoftware\n *\n *********************************************/\n\nimport UIKit\n\n// MARK: Protocol Definition\n\n/// Make your UIView subclasses conform to this protocol when:\n///  * they *are* NIB-based, and\n///  * this class is used as the XIB's root view\n///\n/// to be able to instantiate them from the NIB in a type-safe manner\npublic protocol NibLoadable: class {\n  /// The nib file to use to load a new instance of the View designed in a XIB\n  static var nib: UINib { get }\n}\n\n// MARK: Default implementation\n\npublic extension NibLoadable {\n  /// By default, use the nib which have the same name as the name of the class,\n  /// and located in the bundle of that class\n  static var nib: UINib {\n    return UINib(nibName: String(describing: self), bundle: Bundle(for: self))\n  }\n}\n\n// MARK: Support for instantiation from NIB\n\npublic extension NibLoadable where Self: UIView {\n  /**\n   Returns a `UIView` object instantiated from nib\n\n   - returns: A `NibLoadable`, `UIView` instance\n   */\n  static func loadFromNib() -> Self {\n    guard let view = nib.instantiate(withOwner: nil, options: nil).first as? Self else {\n      fatalError(\"The nib \\(nib) expected its root view to be of type \\(self)\")\n    }\n    return view\n  }\n}\n"
  },
  {
    "path": "Pods/Reusable/Sources/View/NibOwnerLoadable.swift",
    "content": "/*********************************************\n *\n * This code is under the MIT License (MIT)\n *\n * Copyright (c) 2016 AliSoftware\n *\n *********************************************/\n\nimport UIKit\n\n// MARK: Protocol Definition\n\n/// Make your UIView subclasses conform to this protocol when:\n///  * they *are* NIB-based, and\n///  * this class is used as the XIB's File's Owner\n///\n/// to be able to instantiate them from the NIB in a type-safe manner\npublic protocol NibOwnerLoadable: class {\n  /// The nib file to use to load a new instance of the View designed in a XIB\n  static var nib: UINib { get }\n}\n\n// MARK: Default implementation\n\npublic extension NibOwnerLoadable {\n  /// By default, use the nib which have the same name as the name of the class,\n  /// and located in the bundle of that class\n  static var nib: UINib {\n    return UINib(nibName: String(describing: self), bundle: Bundle(for: self))\n  }\n}\n\n// MARK: Support for instantiation from NIB\n\npublic extension NibOwnerLoadable where Self: UIView {\n  /**\n   Adds content loaded from the nib to the end of the receiver's list of subviews and adds constraints automatically.\n   */\n  func loadNibContent() {\n    let layoutAttributes: [NSLayoutAttribute] = [.top, .leading, .bottom, .trailing]\n    for view in Self.nib.instantiate(withOwner: self, options: nil) {\n      if let view = view as? UIView {\n        view.translatesAutoresizingMaskIntoConstraints = false\n        self.addSubview(view)\n        layoutAttributes.forEach { attribute in\n          self.addConstraint(NSLayoutConstraint(item: view,\n            attribute: attribute,\n            relatedBy: .equal,\n            toItem: self,\n            attribute: attribute,\n            multiplier: 1,\n            constant: 0.0))\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Pods/Reusable/Sources/View/Reusable.swift",
    "content": "/*********************************************\n *\n * This code is under the MIT License (MIT)\n *\n * Copyright (c) 2016 AliSoftware\n *\n *********************************************/\n\nimport UIKit\n\n// MARK: Protocol definition\n\n/// Make your `UITableViewCell` and `UICollectionViewCell` subclasses\n/// conform to this protocol when they are *not* NIB-based but only code-based\n/// to be able to dequeue them in a type-safe manner\npublic protocol Reusable: class {\n  /// The reuse identifier to use when registering and later dequeuing a reusable cell\n  static var reuseIdentifier: String { get }\n}\n\n/// Make your `UITableViewCell` and `UICollectionViewCell` subclasses\n/// conform to this typealias when they *are* NIB-based\n/// to be able to dequeue them in a type-safe manner\npublic typealias NibReusable = Reusable & NibLoadable\n\n// MARK: - Default implementation\n\npublic extension Reusable {\n  /// By default, use the name of the class as String for its reuseIdentifier\n  static var reuseIdentifier: String {\n    return String(describing: self)\n  }\n}\n"
  },
  {
    "path": "Pods/Reusable/Sources/View/UICollectionView+Reusable.swift",
    "content": "/*********************************************\n *\n * This code is under the MIT License (MIT)\n *\n * Copyright (c) 2016 AliSoftware\n *\n *********************************************/\n\nimport UIKit\n\n// MARK: Reusable support for UICollectionView\n\npublic extension UICollectionView {\n  /**\n   Register a NIB-Based `UICollectionViewCell` subclass (conforming to `Reusable` & `NibLoadable`)\n\n   - parameter cellType: the `UICollectionViewCell` (`Reusable` & `NibLoadable`-conforming) subclass to register\n\n   - seealso: `register(_:,forCellWithReuseIdentifier:)`\n   */\n  final func register<T: UICollectionViewCell>(cellType: T.Type)\n    where T: Reusable & NibLoadable {\n      self.register(cellType.nib, forCellWithReuseIdentifier: cellType.reuseIdentifier)\n  }\n\n  /**\n   Register a Class-Based `UICollectionViewCell` subclass (conforming to `Reusable`)\n\n   - parameter cellType: the `UICollectionViewCell` (`Reusable`-conforming) subclass to register\n\n   - seealso: `register(_:,forCellWithReuseIdentifier:)`\n   */\n  final func register<T: UICollectionViewCell>(cellType: T.Type)\n    where T: Reusable {\n      self.register(cellType.self, forCellWithReuseIdentifier: cellType.reuseIdentifier)\n  }\n\n  /**\n   Returns a reusable `UICollectionViewCell` object for the class inferred by the return-type\n\n   - parameter indexPath: The index path specifying the location of the cell.\n   - parameter cellType: The cell class to dequeue\n\n   - returns: A `Reusable`, `UICollectionViewCell` instance\n\n   - note: The `cellType` parameter can generally be omitted and infered by the return type,\n   except when your type is in a variable and cannot be determined at compile time.\n   - seealso: `dequeueReusableCell(withReuseIdentifier:,for:)`\n   */\n  final func dequeueReusableCell<T: UICollectionViewCell>(for indexPath: IndexPath, cellType: T.Type = T.self) -> T\n    where T: Reusable {\n      let bareCell = self.dequeueReusableCell(withReuseIdentifier: cellType.reuseIdentifier, for: indexPath)\n      guard let cell = bareCell as? T else {\n        fatalError(\n          \"Failed to dequeue a cell with identifier \\(cellType.reuseIdentifier) matching type \\(cellType.self). \"\n            + \"Check that the reuseIdentifier is set properly in your XIB/Storyboard \"\n            + \"and that you registered the cell beforehand\"\n        )\n      }\n      return cell\n  }\n\n  /**\n   Register a NIB-Based `UICollectionReusableView` subclass (conforming to `Reusable` & `NibLoadable`)\n   as a Supplementary View\n\n   - parameter supplementaryViewType: the `UIView` (`Reusable` & `NibLoadable`-conforming) subclass\n   to register as Supplementary View\n   - parameter elementKind: The kind of supplementary view to create.\n\n   - seealso: `register(_:,forSupplementaryViewOfKind:,withReuseIdentifier:)`\n   */\n  final func register<T: UICollectionReusableView>(supplementaryViewType: T.Type, ofKind elementKind: String)\n    where T: Reusable & NibLoadable {\n      self.register(\n        supplementaryViewType.nib,\n        forSupplementaryViewOfKind: elementKind,\n        withReuseIdentifier: supplementaryViewType.reuseIdentifier\n      )\n  }\n\n  /**\n   Register a Class-Based `UICollectionReusableView` subclass (conforming to `Reusable`) as a Supplementary View\n\n   - parameter supplementaryViewType: the `UIView` (`Reusable`-conforming) subclass to register as Supplementary View\n   - parameter elementKind: The kind of supplementary view to create.\n\n   - seealso: `register(_:,forSupplementaryViewOfKind:,withReuseIdentifier:)`\n   */\n  final func register<T: UICollectionReusableView>(supplementaryViewType: T.Type, ofKind elementKind: String)\n    where T: Reusable {\n      self.register(\n        supplementaryViewType.self,\n        forSupplementaryViewOfKind: elementKind,\n        withReuseIdentifier: supplementaryViewType.reuseIdentifier\n      )\n  }\n\n  /**\n   Returns a reusable `UICollectionReusableView` object for the class inferred by the return-type\n\n   - parameter elementKind: The kind of supplementary view to retrieve.\n   - parameter indexPath:   The index path specifying the location of the cell.\n   - parameter viewType: The view class to dequeue\n\n   - returns: A `Reusable`, `UICollectionReusableView` instance\n\n   - note: The `viewType` parameter can generally be omitted and infered by the return type,\n   except when your type is in a variable and cannot be determined at compile time.\n   - seealso: `dequeueReusableSupplementaryView(ofKind:,withReuseIdentifier:,for:)`\n   */\n  final func dequeueReusableSupplementaryView<T: UICollectionReusableView>\n    (ofKind elementKind: String, for indexPath: IndexPath, viewType: T.Type = T.self) -> T\n    where T: Reusable {\n      let view = self.dequeueReusableSupplementaryView(\n        ofKind: elementKind,\n        withReuseIdentifier: viewType.reuseIdentifier,\n        for: indexPath\n      )\n      guard let typedView = view as? T else {\n        fatalError(\n          \"Failed to dequeue a supplementary view with identifier \\(viewType.reuseIdentifier) \"\n            + \"matching type \\(viewType.self). \"\n            + \"Check that the reuseIdentifier is set properly in your XIB/Storyboard \"\n            + \"and that you registered the supplementary view beforehand\"\n        )\n      }\n      return typedView\n  }\n}\n"
  },
  {
    "path": "Pods/Reusable/Sources/View/UITableView+Reusable.swift",
    "content": "/*********************************************\n *\n * This code is under the MIT License (MIT)\n *\n * Copyright (c) 2016 AliSoftware\n *\n *********************************************/\n\nimport UIKit\n\n// MARK: Reusable support for UITableView\n\npublic extension UITableView {\n  /**\n   Register a NIB-Based `UITableViewCell` subclass (conforming to `Reusable` & `NibLoadable`)\n\n   - parameter cellType: the `UITableViewCell` (`Reusable` & `NibLoadable`-conforming) subclass to register\n\n   - seealso: `register(_:,forCellReuseIdentifier:)`\n   */\n  final func register<T: UITableViewCell>(cellType: T.Type)\n    where T: Reusable & NibLoadable {\n      self.register(cellType.nib, forCellReuseIdentifier: cellType.reuseIdentifier)\n  }\n\n  /**\n   Register a Class-Based `UITableViewCell` subclass (conforming to `Reusable`)\n\n   - parameter cellType: the `UITableViewCell` (`Reusable`-conforming) subclass to register\n\n   - seealso: `register(_:,forCellReuseIdentifier:)`\n   */\n  final func register<T: UITableViewCell>(cellType: T.Type)\n    where T: Reusable {\n      self.register(cellType.self, forCellReuseIdentifier: cellType.reuseIdentifier)\n  }\n\n  /**\n   Returns a reusable `UITableViewCell` object for the class inferred by the return-type\n\n   - parameter indexPath: The index path specifying the location of the cell.\n   - parameter cellType: The cell class to dequeue\n\n   - returns: A `Reusable`, `UITableViewCell` instance\n\n   - note: The `cellType` parameter can generally be omitted and infered by the return type,\n   except when your type is in a variable and cannot be determined at compile time.\n   - seealso: `dequeueReusableCell(withIdentifier:,for:)`\n   */\n  final func dequeueReusableCell<T: UITableViewCell>(for indexPath: IndexPath, cellType: T.Type = T.self) -> T\n    where T: Reusable {\n      guard let cell = self.dequeueReusableCell(withIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else {\n        fatalError(\n          \"Failed to dequeue a cell with identifier \\(cellType.reuseIdentifier) matching type \\(cellType.self). \"\n            + \"Check that the reuseIdentifier is set properly in your XIB/Storyboard \"\n            + \"and that you registered the cell beforehand\"\n        )\n      }\n      return cell\n  }\n\n  /**\n   Register a NIB-Based `UITableViewHeaderFooterView` subclass (conforming to `Reusable` & `NibLoadable`)\n\n   - parameter headerFooterViewType: the `UITableViewHeaderFooterView` (`Reusable` & `NibLoadable`-conforming)\n   subclass to register\n\n   - seealso: `register(_:,forHeaderFooterViewReuseIdentifier:)`\n   */\n  final func register<T: UITableViewHeaderFooterView>(headerFooterViewType: T.Type)\n    where T: Reusable & NibLoadable {\n      self.register(headerFooterViewType.nib, forHeaderFooterViewReuseIdentifier: headerFooterViewType.reuseIdentifier)\n  }\n\n  /**\n   Register a Class-Based `UITableViewHeaderFooterView` subclass (conforming to `Reusable`)\n\n   - parameter headerFooterViewType: the `UITableViewHeaderFooterView` (`Reusable`-confirming) subclass to register\n\n   - seealso: `register(_:,forHeaderFooterViewReuseIdentifier:)`\n   */\n  final func register<T: UITableViewHeaderFooterView>(headerFooterViewType: T.Type)\n    where T: Reusable {\n      self.register(headerFooterViewType.self, forHeaderFooterViewReuseIdentifier: headerFooterViewType.reuseIdentifier)\n  }\n\n  /**\n   Returns a reusable `UITableViewHeaderFooterView` object for the class inferred by the return-type\n\n   - parameter viewType: The view class to dequeue\n\n   - returns: A `Reusable`, `UITableViewHeaderFooterView` instance\n\n   - note: The `viewType` parameter can generally be omitted and infered by the return type,\n   except when your type is in a variable and cannot be determined at compile time.\n   - seealso: `dequeueReusableHeaderFooterView(withIdentifier:)`\n   */\n  final func dequeueReusableHeaderFooterView<T: UITableViewHeaderFooterView>(_ viewType: T.Type = T.self) -> T?\n    where T: Reusable {\n      guard let view = self.dequeueReusableHeaderFooterView(withIdentifier: viewType.reuseIdentifier) as? T? else {\n        fatalError(\n          \"Failed to dequeue a header/footer with identifier \\(viewType.reuseIdentifier) \"\n            + \"matching type \\(viewType.self). \"\n            + \"Check that the reuseIdentifier is set properly in your XIB/Storyboard \"\n            + \"and that you registered the header/footer beforehand\"\n        )\n      }\n      return view\n  }\n}\n"
  },
  {
    "path": "Pods/SwiftLint/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Commandant.framework/Versions/A/Resources/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>BuildMachineOSBuild</key>\n\t<string>16G29</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>Commandant</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>org.carthage.Commandant</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>Commandant</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>0.12.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleSupportedPlatforms</key>\n\t<array>\n\t\t<string>MacOSX</string>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>DTCompiler</key>\n\t<string>com.apple.compilers.llvm.clang.1_0</string>\n\t<key>DTPlatformBuild</key>\n\t<string>9B55</string>\n\t<key>DTPlatformVersion</key>\n\t<string>GM</string>\n\t<key>DTSDKBuild</key>\n\t<string>17B41</string>\n\t<key>DTSDKName</key>\n\t<string>macosx10.13</string>\n\t<key>DTXcode</key>\n\t<string>0910</string>\n\t<key>DTXcodeBuild</key>\n\t<string>9B55</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2014 Carthage. All rights reserved.</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Result.framework/Versions/A/Resources/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>BuildMachineOSBuild</key>\n\t<string>16G29</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>Result</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.antitypical.Result</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>Result</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>3.2.4</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleSupportedPlatforms</key>\n\t<array>\n\t\t<string>MacOSX</string>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>DTCompiler</key>\n\t<string>com.apple.compilers.llvm.clang.1_0</string>\n\t<key>DTPlatformBuild</key>\n\t<string>9B55</string>\n\t<key>DTPlatformVersion</key>\n\t<string>GM</string>\n\t<key>DTSDKBuild</key>\n\t<string>17B41</string>\n\t<key>DTSDKName</key>\n\t<string>macosx10.13</string>\n\t<key>DTXcode</key>\n\t<string>0910</string>\n\t<key>DTXcodeBuild</key>\n\t<string>9B55</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2015 Rob Rix. All rights reserved.</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/Versions/A/Resources/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>BuildMachineOSBuild</key>\n\t<string>16G29</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>SWXMLHash</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>drmohundro.SWXMLHash</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>SWXMLHash</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>2.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleSupportedPlatforms</key>\n\t<array>\n\t\t<string>MacOSX</string>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>DTCompiler</key>\n\t<string>com.apple.compilers.llvm.clang.1_0</string>\n\t<key>DTPlatformBuild</key>\n\t<string>9B55</string>\n\t<key>DTPlatformVersion</key>\n\t<string>GM</string>\n\t<key>DTSDKBuild</key>\n\t<string>17B41</string>\n\t<key>DTSDKName</key>\n\t<string>macosx10.13</string>\n\t<key>DTXcode</key>\n\t<string>0910</string>\n\t<key>DTXcodeBuild</key>\n\t<string>9B55</string>\n\t<key>UIDeviceFamily</key>\n\t<array>\n\t\t<integer>1</integer>\n\t\t<integer>2</integer>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SourceKittenFramework.framework/Versions/A/Resources/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>BuildMachineOSBuild</key>\n\t<string>16G29</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>SourceKittenFramework</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.sourcekitten.SourceKittenFramework</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>SourceKittenFramework</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>0.18.4</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleSupportedPlatforms</key>\n\t<array>\n\t\t<string>MacOSX</string>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>DTCompiler</key>\n\t<string>com.apple.compilers.llvm.clang.1_0</string>\n\t<key>DTPlatformBuild</key>\n\t<string>9B55</string>\n\t<key>DTPlatformVersion</key>\n\t<string>GM</string>\n\t<key>DTSDKBuild</key>\n\t<string>17B41</string>\n\t<key>DTSDKName</key>\n\t<string>macosx10.13</string>\n\t<key>DTXcode</key>\n\t<string>0910</string>\n\t<key>DTXcodeBuild</key>\n\t<string>9B55</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2015 SourceKitten. All rights reserved.</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SwiftyTextTable.framework/Versions/A/Resources/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>BuildMachineOSBuild</key>\n\t<string>16G29</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>SwiftyTextTable</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.scotthoyt.SwiftyTextTable</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>SwiftyTextTable</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>0.1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleSupportedPlatforms</key>\n\t<array>\n\t\t<string>MacOSX</string>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>DTCompiler</key>\n\t<string>com.apple.compilers.llvm.clang.1_0</string>\n\t<key>DTPlatformBuild</key>\n\t<string>9B55</string>\n\t<key>DTPlatformVersion</key>\n\t<string>GM</string>\n\t<key>DTSDKBuild</key>\n\t<string>17B41</string>\n\t<key>DTSDKName</key>\n\t<string>macosx10.13</string>\n\t<key>DTXcode</key>\n\t<string>0910</string>\n\t<key>DTXcodeBuild</key>\n\t<string>9B55</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2016 Scott Hoyt. All rights reserved.</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Yams.framework/Versions/A/Resources/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>BuildMachineOSBuild</key>\n\t<string>16G29</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>Yams</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>Yams</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>Yams</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>0.4.1</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleSupportedPlatforms</key>\n\t<array>\n\t\t<string>MacOSX</string>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>DTCompiler</key>\n\t<string>com.apple.compilers.llvm.clang.1_0</string>\n\t<key>DTPlatformBuild</key>\n\t<string>9B55</string>\n\t<key>DTPlatformVersion</key>\n\t<string>GM</string>\n\t<key>DTSDKBuild</key>\n\t<string>17B41</string>\n\t<key>DTSDKName</key>\n\t<string>macosx10.13</string>\n\t<key>DTXcode</key>\n\t<string>0910</string>\n\t<key>DTXcodeBuild</key>\n\t<string>9B55</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Resources/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>BuildMachineOSBuild</key>\n\t<string>16G29</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>SwiftLintFramework</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>io.realm.SwiftLintFramework</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>SwiftLintFramework</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>0.24.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleSupportedPlatforms</key>\n\t<array>\n\t\t<string>MacOSX</string>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>DTCompiler</key>\n\t<string>com.apple.compilers.llvm.clang.1_0</string>\n\t<key>DTPlatformBuild</key>\n\t<string>9B55</string>\n\t<key>DTPlatformVersion</key>\n\t<string>GM</string>\n\t<key>DTSDKBuild</key>\n\t<string>17B41</string>\n\t<key>DTSDKName</key>\n\t<string>macosx10.13</string>\n\t<key>DTXcode</key>\n\t<string>0910</string>\n\t<key>DTXcodeBuild</key>\n\t<string>9B55</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2015 Realm. All rights reserved.</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Cucumberish/Cucumberish-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Cucumberish : NSObject\n@end\n@implementation PodsDummy_Cucumberish\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Cucumberish/Cucumberish-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "Pods/Target Support Files/Cucumberish/Cucumberish-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"Cucumberish.h\"\n#import \"CCIBlockDefinitions.h\"\n#import \"CCIStepsManager.h\"\n#import \"CCIArgument.h\"\n#import \"CCIBackground.h\"\n#import \"CCIExample.h\"\n#import \"CCIFeature.h\"\n#import \"CCILocation.h\"\n#import \"CCIScenarioDefinition.h\"\n#import \"CCIStep.h\"\n\nFOUNDATION_EXPORT double CucumberishVersionNumber;\nFOUNDATION_EXPORT const unsigned char CucumberishVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/Cucumberish/Cucumberish.modulemap",
    "content": "framework module Cucumberish {\n  umbrella header \"Cucumberish-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/Cucumberish/Cucumberish.xcconfig",
    "content": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Cucumberish\nFRAMEWORK_SEARCH_PATHS = $(inherited)  \"$(PLATFORM_DIR)/Developer/Library/Frameworks\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 SRC_ROOT=@\\\"$(SRCROOT)\\\"\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = -framework \"XCTest\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/Cucumberish\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\n"
  },
  {
    "path": "Pods/Target Support Files/Cucumberish/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.3.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Cucumberish/ResourceBundle-GherkinLanguages-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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>BNDL</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.3.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>1</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Kingfisher/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>4.2.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Kingfisher/Kingfisher-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Kingfisher : NSObject\n@end\n@implementation PodsDummy_Kingfisher\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Kingfisher/Kingfisher-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "Pods/Target Support Files/Kingfisher/Kingfisher-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"Kingfisher.h\"\n\nFOUNDATION_EXPORT double KingfisherVersionNumber;\nFOUNDATION_EXPORT const unsigned char KingfisherVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/Kingfisher/Kingfisher.modulemap",
    "content": "framework module Kingfisher {\n  umbrella header \"Kingfisher-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/Kingfisher/Kingfisher.xcconfig",
    "content": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Kingfisher\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = -framework \"CFNetwork\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\" \"-suppress-warnings\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/Kingfisher\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nSWIFT_VERSION = 4.0\n"
  },
  {
    "path": "Pods/Target Support Files/Kommander/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>0.9.3</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Kommander/Kommander-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Kommander : NSObject\n@end\n@implementation PodsDummy_Kommander\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Kommander/Kommander-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "Pods/Target Support Files/Kommander/Kommander-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"Kommander.h\"\n\nFOUNDATION_EXPORT double KommanderVersionNumber;\nFOUNDATION_EXPORT const unsigned char KommanderVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/Kommander/Kommander.modulemap",
    "content": "framework module Kommander {\n  umbrella header \"Kommander-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/Kommander/Kommander.xcconfig",
    "content": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Kommander\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\" \"-suppress-warnings\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/Kommander\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\n"
  },
  {
    "path": "Pods/Target Support Files/NetClient/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>0.3.5</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/NetClient/NetClient-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_NetClient : NSObject\n@end\n@implementation PodsDummy_NetClient\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/NetClient/NetClient-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "Pods/Target Support Files/NetClient/NetClient-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"Net.h\"\n\nFOUNDATION_EXPORT double NetVersionNumber;\nFOUNDATION_EXPORT const unsigned char NetVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/NetClient/NetClient.modulemap",
    "content": "framework module Net {\n  umbrella header \"NetClient-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/NetClient/NetClient.xcconfig",
    "content": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/NetClient\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = -framework \"Foundation\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\" \"-suppress-warnings\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/NetClient\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\n"
  },
  {
    "path": "Pods/Target Support Files/ObjcExceptionBridging/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0.1</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_ObjcExceptionBridging : NSObject\n@end\n@implementation PodsDummy_ObjcExceptionBridging\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"ObjcExceptionBridging.h\"\n\nFOUNDATION_EXPORT double ObjcExceptionBridgingVersionNumber;\nFOUNDATION_EXPORT const unsigned char ObjcExceptionBridgingVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.modulemap",
    "content": "framework module ObjcExceptionBridging {\n  umbrella header \"ObjcExceptionBridging-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.xcconfig",
    "content": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/ObjcExceptionBridging\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Archit/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Archit/Pods-Archit-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## Kingfisher\n\nThe MIT License (MIT)\n\nCopyright (c) 2017 Wei Wang\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n\n## Kommander\n\nMIT License\n\nCopyright (c) 2017 Intelygenz <alejandro.ruperez@intelygenz.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## ObjcExceptionBridging\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## Reusable\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 AliSoftware\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## SwiftLint\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## XCGLogger\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## NetClient\n\nMIT License\n\nCopyright (c) 2017 Intelygenz <alejandro.ruperez@intelygenz.com>\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.\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Archit/Pods-Archit-acknowledgements.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>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2017 Wei Wang\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Kingfisher</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) 2017 Intelygenz &lt;alejandro.ruperez@intelygenz.com&gt;\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.</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Kommander</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>ObjcExceptionBridging</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2016 AliSoftware\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Reusable</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SwiftLint</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>XCGLogger</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) 2017 Intelygenz &lt;alejandro.ruperez@intelygenz.com&gt;\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.</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>NetClient</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - https://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Archit/Pods-Archit-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_Archit : NSObject\n@end\n@implementation PodsDummy_Pods_Archit\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Archit/Pods-Archit-frameworks.sh",
    "content": "#!/bin/sh\nset -e\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nSWIFT_STDLIB_PATH=\"${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\"\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ninstall_framework()\n{\n  if [ -r \"${BUILT_PRODUCTS_DIR}/$1\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$1\"\n  elif [ -r \"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\"\n  elif [ -r \"$1\" ]; then\n    local source=\"$1\"\n  fi\n\n  local destination=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\n  if [ -L \"${source}\" ]; then\n      echo \"Symlinked...\"\n      source=\"$(readlink \"${source}\")\"\n  fi\n\n  # Use filter instead of exclude so missing patterns don't throw errors.\n  echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${destination}\\\"\"\n  rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"\n\n  local basename\n  basename=\"$(basename -s .framework \"$1\")\"\n  binary=\"${destination}/${basename}.framework/${basename}\"\n  if ! [ -r \"$binary\" ]; then\n    binary=\"${destination}/${basename}\"\n  fi\n\n  # Strip invalid architectures so \"fat\" simulator / device frameworks work on device\n  if [[ \"$(file \"$binary\")\" == *\"dynamically linked shared library\"* ]]; then\n    strip_invalid_archs \"$binary\"\n  fi\n\n  # Resign the code if required by the build settings to avoid unstable apps\n  code_sign_if_enabled \"${destination}/$(basename \"$1\")\"\n\n  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.\n  if [ \"${XCODE_VERSION_MAJOR}\" -lt 7 ]; then\n    local swift_runtime_libs\n    swift_runtime_libs=$(xcrun otool -LX \"$binary\" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u  && exit ${PIPESTATUS[0]})\n    for lib in $swift_runtime_libs; do\n      echo \"rsync -auv \\\"${SWIFT_STDLIB_PATH}/${lib}\\\" \\\"${destination}\\\"\"\n      rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"\n      code_sign_if_enabled \"${destination}/${lib}\"\n    done\n  fi\n}\n\n# Copies the dSYM of a vendored framework\ninstall_dsym() {\n  local source=\"$1\"\n  if [ -r \"$source\" ]; then\n    echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${DWARF_DSYM_FOLDER_PATH}\\\"\"\n    rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"\n  fi\n}\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n  if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY}\" -a \"${CODE_SIGNING_REQUIRED}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n    # Use the current code_sign_identitiy\n    echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n    local code_sign_cmd=\"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'\"\n\n    if [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n      code_sign_cmd=\"$code_sign_cmd &\"\n    fi\n    echo \"$code_sign_cmd\"\n    eval \"$code_sign_cmd\"\n  fi\n}\n\n# Strip invalid architectures\nstrip_invalid_archs() {\n  binary=\"$1\"\n  # Get architectures for current file\n  archs=\"$(lipo -info \"$binary\" | rev | cut -d ':' -f1 | rev)\"\n  stripped=\"\"\n  for arch in $archs; do\n    if ! [[ \"${ARCHS}\" == *\"$arch\"* ]]; then\n      # Strip non-valid architectures in-place\n      lipo -remove \"$arch\" -output \"$binary\" \"$binary\" || exit 1\n      stripped=\"$stripped $arch\"\n    fi\n  done\n  if [[ \"$stripped\" ]]; then\n    echo \"Stripped $binary of architectures:$stripped\"\n  fi\n}\n\n\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/Kommander/Kommander.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/Reusable/Reusable.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/NetClient/Net.framework\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/Kommander/Kommander.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/Reusable/Reusable.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/NetClient/Net.framework\"\nfi\nif [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n  wait\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Archit/Pods-Archit-resources.sh",
    "content": "#!/bin/sh\nset -e\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt\n> \"$RESOURCES_TO_COPY\"\n\nXCASSET_FILES=()\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ncase \"${TARGETED_DEVICE_FAMILY}\" in\n  1,2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad --target-device iphone\"\n    ;;\n  1)\n    TARGET_DEVICE_ARGS=\"--target-device iphone\"\n    ;;\n  2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad\"\n    ;;\n  3)\n    TARGET_DEVICE_ARGS=\"--target-device tv\"\n    ;;\n  4)\n    TARGET_DEVICE_ARGS=\"--target-device watch\"\n    ;;\n  *)\n    TARGET_DEVICE_ARGS=\"--target-device mac\"\n    ;;\nesac\n\ninstall_resource()\n{\n  if [[ \"$1\" = /* ]] ; then\n    RESOURCE_PATH=\"$1\"\n  else\n    RESOURCE_PATH=\"${PODS_ROOT}/$1\"\n  fi\n  if [[ ! -e \"$RESOURCE_PATH\" ]] ; then\n    cat << EOM\nerror: Resource \"$RESOURCE_PATH\" not found. Run 'pod install' to update the copy resources script.\nEOM\n    exit 1\n  fi\n  case $RESOURCE_PATH in\n    *.storyboard)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.xib)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.framework)\n      echo \"mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\"`.mom\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\\\"\" || true\n      xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=\"$RESOURCE_PATH\"\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    *)\n      echo \"$RESOURCE_PATH\" || true\n      echo \"$RESOURCE_PATH\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nif [[ \"${ACTION}\" == \"install\" ]] && [[ \"${SKIP_INSTALL}\" == \"NO\" ]]; then\n  mkdir -p \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\nrm -f \"$RESOURCES_TO_COPY\"\n\nif [[ -n \"${WRAPPER_EXTENSION}\" ]] && [ \"`xcrun --find actool`\" ] && [ -n \"$XCASSET_FILES\" ]\nthen\n  # Find all other xcassets (this unfortunately includes those of path pods and other targets).\n  OTHER_XCASSETS=$(find \"$PWD\" -iname \"*.xcassets\" -type d)\n  while read line; do\n    if [[ $line != \"${PODS_ROOT}*\" ]]; then\n      XCASSET_FILES+=(\"$line\")\n    fi\n  done <<<\"$OTHER_XCASSETS\"\n\n  printf \"%s\\0\" \"${XCASSET_FILES[@]}\" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform \"${PLATFORM_NAME}\" --minimum-deployment-target \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Archit/Pods-Archit-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double Pods_ArchitVersionNumber;\nFOUNDATION_EXPORT const unsigned char Pods_ArchitVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Archit/Pods-Archit.debug.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/Kingfisher\" \"$PODS_CONFIGURATION_BUILD_DIR/Kommander\" \"$PODS_CONFIGURATION_BUILD_DIR/NetClient\" \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/Reusable\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/Kingfisher/Kingfisher.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/Kommander/Kommander.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/NetClient/Net.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/Reusable/Reusable.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"Kingfisher\" -framework \"Kommander\" -framework \"Net\" -framework \"ObjcExceptionBridging\" -framework \"Reusable\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Archit/Pods-Archit.modulemap",
    "content": "framework module Pods_Archit {\n  umbrella header \"Pods-Archit-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Archit/Pods-Archit.release.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/Kingfisher\" \"$PODS_CONFIGURATION_BUILD_DIR/Kommander\" \"$PODS_CONFIGURATION_BUILD_DIR/NetClient\" \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/Reusable\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/Kingfisher/Kingfisher.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/Kommander/Kommander.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/NetClient/Net.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/Reusable/Reusable.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"Kingfisher\" -framework \"Kommander\" -framework \"Net\" -framework \"ObjcExceptionBridging\" -framework \"Reusable\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitTests/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## ObjcExceptionBridging\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## SwiftLint\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## XCGLogger\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests-acknowledgements.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>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>ObjcExceptionBridging</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SwiftLint</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>XCGLogger</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - https://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_ArchitTests : NSObject\n@end\n@implementation PodsDummy_Pods_ArchitTests\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests-frameworks.sh",
    "content": "#!/bin/sh\nset -e\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nSWIFT_STDLIB_PATH=\"${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\"\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ninstall_framework()\n{\n  if [ -r \"${BUILT_PRODUCTS_DIR}/$1\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$1\"\n  elif [ -r \"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\"\n  elif [ -r \"$1\" ]; then\n    local source=\"$1\"\n  fi\n\n  local destination=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\n  if [ -L \"${source}\" ]; then\n      echo \"Symlinked...\"\n      source=\"$(readlink \"${source}\")\"\n  fi\n\n  # Use filter instead of exclude so missing patterns don't throw errors.\n  echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${destination}\\\"\"\n  rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"\n\n  local basename\n  basename=\"$(basename -s .framework \"$1\")\"\n  binary=\"${destination}/${basename}.framework/${basename}\"\n  if ! [ -r \"$binary\" ]; then\n    binary=\"${destination}/${basename}\"\n  fi\n\n  # Strip invalid architectures so \"fat\" simulator / device frameworks work on device\n  if [[ \"$(file \"$binary\")\" == *\"dynamically linked shared library\"* ]]; then\n    strip_invalid_archs \"$binary\"\n  fi\n\n  # Resign the code if required by the build settings to avoid unstable apps\n  code_sign_if_enabled \"${destination}/$(basename \"$1\")\"\n\n  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.\n  if [ \"${XCODE_VERSION_MAJOR}\" -lt 7 ]; then\n    local swift_runtime_libs\n    swift_runtime_libs=$(xcrun otool -LX \"$binary\" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u  && exit ${PIPESTATUS[0]})\n    for lib in $swift_runtime_libs; do\n      echo \"rsync -auv \\\"${SWIFT_STDLIB_PATH}/${lib}\\\" \\\"${destination}\\\"\"\n      rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"\n      code_sign_if_enabled \"${destination}/${lib}\"\n    done\n  fi\n}\n\n# Copies the dSYM of a vendored framework\ninstall_dsym() {\n  local source=\"$1\"\n  if [ -r \"$source\" ]; then\n    echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${DWARF_DSYM_FOLDER_PATH}\\\"\"\n    rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"\n  fi\n}\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n  if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY}\" -a \"${CODE_SIGNING_REQUIRED}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n    # Use the current code_sign_identitiy\n    echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n    local code_sign_cmd=\"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'\"\n\n    if [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n      code_sign_cmd=\"$code_sign_cmd &\"\n    fi\n    echo \"$code_sign_cmd\"\n    eval \"$code_sign_cmd\"\n  fi\n}\n\n# Strip invalid architectures\nstrip_invalid_archs() {\n  binary=\"$1\"\n  # Get architectures for current file\n  archs=\"$(lipo -info \"$binary\" | rev | cut -d ':' -f1 | rev)\"\n  stripped=\"\"\n  for arch in $archs; do\n    if ! [[ \"${ARCHS}\" == *\"$arch\"* ]]; then\n      # Strip non-valid architectures in-place\n      lipo -remove \"$arch\" -output \"$binary\" \"$binary\" || exit 1\n      stripped=\"$stripped $arch\"\n    fi\n  done\n  if [[ \"$stripped\" ]]; then\n    echo \"Stripped $binary of architectures:$stripped\"\n  fi\n}\n\n\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\"\nfi\nif [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n  wait\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests-resources.sh",
    "content": "#!/bin/sh\nset -e\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt\n> \"$RESOURCES_TO_COPY\"\n\nXCASSET_FILES=()\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ncase \"${TARGETED_DEVICE_FAMILY}\" in\n  1,2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad --target-device iphone\"\n    ;;\n  1)\n    TARGET_DEVICE_ARGS=\"--target-device iphone\"\n    ;;\n  2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad\"\n    ;;\n  3)\n    TARGET_DEVICE_ARGS=\"--target-device tv\"\n    ;;\n  4)\n    TARGET_DEVICE_ARGS=\"--target-device watch\"\n    ;;\n  *)\n    TARGET_DEVICE_ARGS=\"--target-device mac\"\n    ;;\nesac\n\ninstall_resource()\n{\n  if [[ \"$1\" = /* ]] ; then\n    RESOURCE_PATH=\"$1\"\n  else\n    RESOURCE_PATH=\"${PODS_ROOT}/$1\"\n  fi\n  if [[ ! -e \"$RESOURCE_PATH\" ]] ; then\n    cat << EOM\nerror: Resource \"$RESOURCE_PATH\" not found. Run 'pod install' to update the copy resources script.\nEOM\n    exit 1\n  fi\n  case $RESOURCE_PATH in\n    *.storyboard)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.xib)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.framework)\n      echo \"mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\"`.mom\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\\\"\" || true\n      xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=\"$RESOURCE_PATH\"\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    *)\n      echo \"$RESOURCE_PATH\" || true\n      echo \"$RESOURCE_PATH\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nif [[ \"${ACTION}\" == \"install\" ]] && [[ \"${SKIP_INSTALL}\" == \"NO\" ]]; then\n  mkdir -p \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\nrm -f \"$RESOURCES_TO_COPY\"\n\nif [[ -n \"${WRAPPER_EXTENSION}\" ]] && [ \"`xcrun --find actool`\" ] && [ -n \"$XCASSET_FILES\" ]\nthen\n  # Find all other xcassets (this unfortunately includes those of path pods and other targets).\n  OTHER_XCASSETS=$(find \"$PWD\" -iname \"*.xcassets\" -type d)\n  while read line; do\n    if [[ $line != \"${PODS_ROOT}*\" ]]; then\n      XCASSET_FILES+=(\"$line\")\n    fi\n  done <<<\"$OTHER_XCASSETS\"\n\n  printf \"%s\\0\" \"${XCASSET_FILES[@]}\" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform \"${PLATFORM_NAME}\" --minimum-deployment-target \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double Pods_ArchitTestsVersionNumber;\nFOUNDATION_EXPORT const unsigned char Pods_ArchitTestsVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests.debug.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests.modulemap",
    "content": "framework module Pods_ArchitTests {\n  umbrella header \"Pods-ArchitTests-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitTests/Pods-ArchitTests.release.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitUITests/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## ObjcExceptionBridging\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## SwiftLint\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## XCGLogger\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## Cucumberish\n\nCopyright (c) 2016 Ahmed Ali (https://github.com/Ahmed-Ali)\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.\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests-acknowledgements.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>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>ObjcExceptionBridging</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SwiftLint</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>XCGLogger</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2016 Ahmed Ali (https://github.com/Ahmed-Ali)\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.</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Cucumberish</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - https://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_ArchitUITests : NSObject\n@end\n@implementation PodsDummy_Pods_ArchitUITests\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests-frameworks.sh",
    "content": "#!/bin/sh\nset -e\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nSWIFT_STDLIB_PATH=\"${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\"\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ninstall_framework()\n{\n  if [ -r \"${BUILT_PRODUCTS_DIR}/$1\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$1\"\n  elif [ -r \"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\"\n  elif [ -r \"$1\" ]; then\n    local source=\"$1\"\n  fi\n\n  local destination=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\n  if [ -L \"${source}\" ]; then\n      echo \"Symlinked...\"\n      source=\"$(readlink \"${source}\")\"\n  fi\n\n  # Use filter instead of exclude so missing patterns don't throw errors.\n  echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${destination}\\\"\"\n  rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"\n\n  local basename\n  basename=\"$(basename -s .framework \"$1\")\"\n  binary=\"${destination}/${basename}.framework/${basename}\"\n  if ! [ -r \"$binary\" ]; then\n    binary=\"${destination}/${basename}\"\n  fi\n\n  # Strip invalid architectures so \"fat\" simulator / device frameworks work on device\n  if [[ \"$(file \"$binary\")\" == *\"dynamically linked shared library\"* ]]; then\n    strip_invalid_archs \"$binary\"\n  fi\n\n  # Resign the code if required by the build settings to avoid unstable apps\n  code_sign_if_enabled \"${destination}/$(basename \"$1\")\"\n\n  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.\n  if [ \"${XCODE_VERSION_MAJOR}\" -lt 7 ]; then\n    local swift_runtime_libs\n    swift_runtime_libs=$(xcrun otool -LX \"$binary\" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u  && exit ${PIPESTATUS[0]})\n    for lib in $swift_runtime_libs; do\n      echo \"rsync -auv \\\"${SWIFT_STDLIB_PATH}/${lib}\\\" \\\"${destination}\\\"\"\n      rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"\n      code_sign_if_enabled \"${destination}/${lib}\"\n    done\n  fi\n}\n\n# Copies the dSYM of a vendored framework\ninstall_dsym() {\n  local source=\"$1\"\n  if [ -r \"$source\" ]; then\n    echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${DWARF_DSYM_FOLDER_PATH}\\\"\"\n    rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"\n  fi\n}\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n  if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY}\" -a \"${CODE_SIGNING_REQUIRED}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n    # Use the current code_sign_identitiy\n    echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n    local code_sign_cmd=\"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'\"\n\n    if [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n      code_sign_cmd=\"$code_sign_cmd &\"\n    fi\n    echo \"$code_sign_cmd\"\n    eval \"$code_sign_cmd\"\n  fi\n}\n\n# Strip invalid architectures\nstrip_invalid_archs() {\n  binary=\"$1\"\n  # Get architectures for current file\n  archs=\"$(lipo -info \"$binary\" | rev | cut -d ':' -f1 | rev)\"\n  stripped=\"\"\n  for arch in $archs; do\n    if ! [[ \"${ARCHS}\" == *\"$arch\"* ]]; then\n      # Strip non-valid architectures in-place\n      lipo -remove \"$arch\" -output \"$binary\" \"$binary\" || exit 1\n      stripped=\"$stripped $arch\"\n    fi\n  done\n  if [[ \"$stripped\" ]]; then\n    echo \"Stripped $binary of architectures:$stripped\"\n  fi\n}\n\n\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/Cucumberish/Cucumberish.framework\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/Cucumberish/Cucumberish.framework\"\nfi\nif [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n  wait\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests-resources.sh",
    "content": "#!/bin/sh\nset -e\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt\n> \"$RESOURCES_TO_COPY\"\n\nXCASSET_FILES=()\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ncase \"${TARGETED_DEVICE_FAMILY}\" in\n  1,2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad --target-device iphone\"\n    ;;\n  1)\n    TARGET_DEVICE_ARGS=\"--target-device iphone\"\n    ;;\n  2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad\"\n    ;;\n  3)\n    TARGET_DEVICE_ARGS=\"--target-device tv\"\n    ;;\n  4)\n    TARGET_DEVICE_ARGS=\"--target-device watch\"\n    ;;\n  *)\n    TARGET_DEVICE_ARGS=\"--target-device mac\"\n    ;;\nesac\n\ninstall_resource()\n{\n  if [[ \"$1\" = /* ]] ; then\n    RESOURCE_PATH=\"$1\"\n  else\n    RESOURCE_PATH=\"${PODS_ROOT}/$1\"\n  fi\n  if [[ ! -e \"$RESOURCE_PATH\" ]] ; then\n    cat << EOM\nerror: Resource \"$RESOURCE_PATH\" not found. Run 'pod install' to update the copy resources script.\nEOM\n    exit 1\n  fi\n  case $RESOURCE_PATH in\n    *.storyboard)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.xib)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.framework)\n      echo \"mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\"`.mom\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\\\"\" || true\n      xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=\"$RESOURCE_PATH\"\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    *)\n      echo \"$RESOURCE_PATH\" || true\n      echo \"$RESOURCE_PATH\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nif [[ \"${ACTION}\" == \"install\" ]] && [[ \"${SKIP_INSTALL}\" == \"NO\" ]]; then\n  mkdir -p \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\nrm -f \"$RESOURCES_TO_COPY\"\n\nif [[ -n \"${WRAPPER_EXTENSION}\" ]] && [ \"`xcrun --find actool`\" ] && [ -n \"$XCASSET_FILES\" ]\nthen\n  # Find all other xcassets (this unfortunately includes those of path pods and other targets).\n  OTHER_XCASSETS=$(find \"$PWD\" -iname \"*.xcassets\" -type d)\n  while read line; do\n    if [[ $line != \"${PODS_ROOT}*\" ]]; then\n      XCASSET_FILES+=(\"$line\")\n    fi\n  done <<<\"$OTHER_XCASSETS\"\n\n  printf \"%s\\0\" \"${XCASSET_FILES[@]}\" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform \"${PLATFORM_NAME}\" --minimum-deployment-target \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double Pods_ArchitUITestsVersionNumber;\nFOUNDATION_EXPORT const unsigned char Pods_ArchitUITestsVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests.debug.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/Cucumberish\" \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 SRC_ROOT=@\\\"$(SRCROOT)\\\"\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/Cucumberish/Cucumberish.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"Cucumberish\" -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests.modulemap",
    "content": "framework module Pods_ArchitUITests {\n  umbrella header \"Pods-ArchitUITests-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-ArchitUITests/Pods-ArchitUITests.release.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/Cucumberish\" \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 SRC_ROOT=@\\\"$(SRCROOT)\\\"\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/Cucumberish/Cucumberish.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"Cucumberish\" -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Core/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Core/Pods-Core-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## ObjcExceptionBridging\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## SwiftLint\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## XCGLogger\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## NetClient\n\nMIT License\n\nCopyright (c) 2017 Intelygenz <alejandro.ruperez@intelygenz.com>\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.\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Core/Pods-Core-acknowledgements.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>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>ObjcExceptionBridging</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SwiftLint</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>XCGLogger</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) 2017 Intelygenz &lt;alejandro.ruperez@intelygenz.com&gt;\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.</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>NetClient</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - https://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Core/Pods-Core-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_Core : NSObject\n@end\n@implementation PodsDummy_Pods_Core\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Core/Pods-Core-resources.sh",
    "content": "#!/bin/sh\nset -e\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt\n> \"$RESOURCES_TO_COPY\"\n\nXCASSET_FILES=()\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ncase \"${TARGETED_DEVICE_FAMILY}\" in\n  1,2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad --target-device iphone\"\n    ;;\n  1)\n    TARGET_DEVICE_ARGS=\"--target-device iphone\"\n    ;;\n  2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad\"\n    ;;\n  3)\n    TARGET_DEVICE_ARGS=\"--target-device tv\"\n    ;;\n  4)\n    TARGET_DEVICE_ARGS=\"--target-device watch\"\n    ;;\n  *)\n    TARGET_DEVICE_ARGS=\"--target-device mac\"\n    ;;\nesac\n\ninstall_resource()\n{\n  if [[ \"$1\" = /* ]] ; then\n    RESOURCE_PATH=\"$1\"\n  else\n    RESOURCE_PATH=\"${PODS_ROOT}/$1\"\n  fi\n  if [[ ! -e \"$RESOURCE_PATH\" ]] ; then\n    cat << EOM\nerror: Resource \"$RESOURCE_PATH\" not found. Run 'pod install' to update the copy resources script.\nEOM\n    exit 1\n  fi\n  case $RESOURCE_PATH in\n    *.storyboard)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.xib)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.framework)\n      echo \"mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\"`.mom\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\\\"\" || true\n      xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=\"$RESOURCE_PATH\"\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    *)\n      echo \"$RESOURCE_PATH\" || true\n      echo \"$RESOURCE_PATH\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nif [[ \"${ACTION}\" == \"install\" ]] && [[ \"${SKIP_INSTALL}\" == \"NO\" ]]; then\n  mkdir -p \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\nrm -f \"$RESOURCES_TO_COPY\"\n\nif [[ -n \"${WRAPPER_EXTENSION}\" ]] && [ \"`xcrun --find actool`\" ] && [ -n \"$XCASSET_FILES\" ]\nthen\n  # Find all other xcassets (this unfortunately includes those of path pods and other targets).\n  OTHER_XCASSETS=$(find \"$PWD\" -iname \"*.xcassets\" -type d)\n  while read line; do\n    if [[ $line != \"${PODS_ROOT}*\" ]]; then\n      XCASSET_FILES+=(\"$line\")\n    fi\n  done <<<\"$OTHER_XCASSETS\"\n\n  printf \"%s\\0\" \"${XCASSET_FILES[@]}\" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform \"${PLATFORM_NAME}\" --minimum-deployment-target \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Core/Pods-Core-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double Pods_CoreVersionNumber;\nFOUNDATION_EXPORT const unsigned char Pods_CoreVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Core/Pods-Core.debug.xcconfig",
    "content": "FRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/NetClient\" \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/NetClient/Net.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"Net\" -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Core/Pods-Core.modulemap",
    "content": "framework module Pods_Core {\n  umbrella header \"Pods-Core-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Core/Pods-Core.release.xcconfig",
    "content": "FRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/NetClient\" \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/NetClient/Net.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"Net\" -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-CoreTests/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## ObjcExceptionBridging\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## SwiftLint\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## XCGLogger\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## NetClient\n\nMIT License\n\nCopyright (c) 2017 Intelygenz <alejandro.ruperez@intelygenz.com>\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.\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests-acknowledgements.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>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>ObjcExceptionBridging</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SwiftLint</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>XCGLogger</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) 2017 Intelygenz &lt;alejandro.ruperez@intelygenz.com&gt;\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.</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>NetClient</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - https://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_CoreTests : NSObject\n@end\n@implementation PodsDummy_Pods_CoreTests\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests-frameworks.sh",
    "content": "#!/bin/sh\nset -e\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nSWIFT_STDLIB_PATH=\"${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\"\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ninstall_framework()\n{\n  if [ -r \"${BUILT_PRODUCTS_DIR}/$1\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$1\"\n  elif [ -r \"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\"\n  elif [ -r \"$1\" ]; then\n    local source=\"$1\"\n  fi\n\n  local destination=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\n  if [ -L \"${source}\" ]; then\n      echo \"Symlinked...\"\n      source=\"$(readlink \"${source}\")\"\n  fi\n\n  # Use filter instead of exclude so missing patterns don't throw errors.\n  echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${destination}\\\"\"\n  rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"\n\n  local basename\n  basename=\"$(basename -s .framework \"$1\")\"\n  binary=\"${destination}/${basename}.framework/${basename}\"\n  if ! [ -r \"$binary\" ]; then\n    binary=\"${destination}/${basename}\"\n  fi\n\n  # Strip invalid architectures so \"fat\" simulator / device frameworks work on device\n  if [[ \"$(file \"$binary\")\" == *\"dynamically linked shared library\"* ]]; then\n    strip_invalid_archs \"$binary\"\n  fi\n\n  # Resign the code if required by the build settings to avoid unstable apps\n  code_sign_if_enabled \"${destination}/$(basename \"$1\")\"\n\n  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.\n  if [ \"${XCODE_VERSION_MAJOR}\" -lt 7 ]; then\n    local swift_runtime_libs\n    swift_runtime_libs=$(xcrun otool -LX \"$binary\" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u  && exit ${PIPESTATUS[0]})\n    for lib in $swift_runtime_libs; do\n      echo \"rsync -auv \\\"${SWIFT_STDLIB_PATH}/${lib}\\\" \\\"${destination}\\\"\"\n      rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"\n      code_sign_if_enabled \"${destination}/${lib}\"\n    done\n  fi\n}\n\n# Copies the dSYM of a vendored framework\ninstall_dsym() {\n  local source=\"$1\"\n  if [ -r \"$source\" ]; then\n    echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${DWARF_DSYM_FOLDER_PATH}\\\"\"\n    rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"\n  fi\n}\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n  if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY}\" -a \"${CODE_SIGNING_REQUIRED}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n    # Use the current code_sign_identitiy\n    echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n    local code_sign_cmd=\"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'\"\n\n    if [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n      code_sign_cmd=\"$code_sign_cmd &\"\n    fi\n    echo \"$code_sign_cmd\"\n    eval \"$code_sign_cmd\"\n  fi\n}\n\n# Strip invalid architectures\nstrip_invalid_archs() {\n  binary=\"$1\"\n  # Get architectures for current file\n  archs=\"$(lipo -info \"$binary\" | rev | cut -d ':' -f1 | rev)\"\n  stripped=\"\"\n  for arch in $archs; do\n    if ! [[ \"${ARCHS}\" == *\"$arch\"* ]]; then\n      # Strip non-valid architectures in-place\n      lipo -remove \"$arch\" -output \"$binary\" \"$binary\" || exit 1\n      stripped=\"$stripped $arch\"\n    fi\n  done\n  if [[ \"$stripped\" ]]; then\n    echo \"Stripped $binary of architectures:$stripped\"\n  fi\n}\n\n\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/NetClient/Net.framework\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/NetClient/Net.framework\"\nfi\nif [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n  wait\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests-resources.sh",
    "content": "#!/bin/sh\nset -e\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt\n> \"$RESOURCES_TO_COPY\"\n\nXCASSET_FILES=()\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ncase \"${TARGETED_DEVICE_FAMILY}\" in\n  1,2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad --target-device iphone\"\n    ;;\n  1)\n    TARGET_DEVICE_ARGS=\"--target-device iphone\"\n    ;;\n  2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad\"\n    ;;\n  3)\n    TARGET_DEVICE_ARGS=\"--target-device tv\"\n    ;;\n  4)\n    TARGET_DEVICE_ARGS=\"--target-device watch\"\n    ;;\n  *)\n    TARGET_DEVICE_ARGS=\"--target-device mac\"\n    ;;\nesac\n\ninstall_resource()\n{\n  if [[ \"$1\" = /* ]] ; then\n    RESOURCE_PATH=\"$1\"\n  else\n    RESOURCE_PATH=\"${PODS_ROOT}/$1\"\n  fi\n  if [[ ! -e \"$RESOURCE_PATH\" ]] ; then\n    cat << EOM\nerror: Resource \"$RESOURCE_PATH\" not found. Run 'pod install' to update the copy resources script.\nEOM\n    exit 1\n  fi\n  case $RESOURCE_PATH in\n    *.storyboard)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.xib)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.framework)\n      echo \"mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\"`.mom\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\\\"\" || true\n      xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=\"$RESOURCE_PATH\"\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    *)\n      echo \"$RESOURCE_PATH\" || true\n      echo \"$RESOURCE_PATH\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nif [[ \"${ACTION}\" == \"install\" ]] && [[ \"${SKIP_INSTALL}\" == \"NO\" ]]; then\n  mkdir -p \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\nrm -f \"$RESOURCES_TO_COPY\"\n\nif [[ -n \"${WRAPPER_EXTENSION}\" ]] && [ \"`xcrun --find actool`\" ] && [ -n \"$XCASSET_FILES\" ]\nthen\n  # Find all other xcassets (this unfortunately includes those of path pods and other targets).\n  OTHER_XCASSETS=$(find \"$PWD\" -iname \"*.xcassets\" -type d)\n  while read line; do\n    if [[ $line != \"${PODS_ROOT}*\" ]]; then\n      XCASSET_FILES+=(\"$line\")\n    fi\n  done <<<\"$OTHER_XCASSETS\"\n\n  printf \"%s\\0\" \"${XCASSET_FILES[@]}\" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform \"${PLATFORM_NAME}\" --minimum-deployment-target \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double Pods_CoreTestsVersionNumber;\nFOUNDATION_EXPORT const unsigned char Pods_CoreTestsVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests.debug.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/NetClient\" \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/NetClient/Net.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"Net\" -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests.modulemap",
    "content": "framework module Pods_CoreTests {\n  umbrella header \"Pods-CoreTests-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-CoreTests/Pods-CoreTests.release.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/NetClient\" \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/NetClient/Net.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"Net\" -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Domain/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Domain/Pods-Domain-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## ObjcExceptionBridging\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## SwiftLint\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## XCGLogger\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Domain/Pods-Domain-acknowledgements.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>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>ObjcExceptionBridging</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SwiftLint</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>XCGLogger</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - https://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Domain/Pods-Domain-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_Domain : NSObject\n@end\n@implementation PodsDummy_Pods_Domain\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Domain/Pods-Domain-resources.sh",
    "content": "#!/bin/sh\nset -e\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt\n> \"$RESOURCES_TO_COPY\"\n\nXCASSET_FILES=()\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ncase \"${TARGETED_DEVICE_FAMILY}\" in\n  1,2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad --target-device iphone\"\n    ;;\n  1)\n    TARGET_DEVICE_ARGS=\"--target-device iphone\"\n    ;;\n  2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad\"\n    ;;\n  3)\n    TARGET_DEVICE_ARGS=\"--target-device tv\"\n    ;;\n  4)\n    TARGET_DEVICE_ARGS=\"--target-device watch\"\n    ;;\n  *)\n    TARGET_DEVICE_ARGS=\"--target-device mac\"\n    ;;\nesac\n\ninstall_resource()\n{\n  if [[ \"$1\" = /* ]] ; then\n    RESOURCE_PATH=\"$1\"\n  else\n    RESOURCE_PATH=\"${PODS_ROOT}/$1\"\n  fi\n  if [[ ! -e \"$RESOURCE_PATH\" ]] ; then\n    cat << EOM\nerror: Resource \"$RESOURCE_PATH\" not found. Run 'pod install' to update the copy resources script.\nEOM\n    exit 1\n  fi\n  case $RESOURCE_PATH in\n    *.storyboard)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.xib)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.framework)\n      echo \"mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\"`.mom\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\\\"\" || true\n      xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=\"$RESOURCE_PATH\"\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    *)\n      echo \"$RESOURCE_PATH\" || true\n      echo \"$RESOURCE_PATH\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nif [[ \"${ACTION}\" == \"install\" ]] && [[ \"${SKIP_INSTALL}\" == \"NO\" ]]; then\n  mkdir -p \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\nrm -f \"$RESOURCES_TO_COPY\"\n\nif [[ -n \"${WRAPPER_EXTENSION}\" ]] && [ \"`xcrun --find actool`\" ] && [ -n \"$XCASSET_FILES\" ]\nthen\n  # Find all other xcassets (this unfortunately includes those of path pods and other targets).\n  OTHER_XCASSETS=$(find \"$PWD\" -iname \"*.xcassets\" -type d)\n  while read line; do\n    if [[ $line != \"${PODS_ROOT}*\" ]]; then\n      XCASSET_FILES+=(\"$line\")\n    fi\n  done <<<\"$OTHER_XCASSETS\"\n\n  printf \"%s\\0\" \"${XCASSET_FILES[@]}\" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform \"${PLATFORM_NAME}\" --minimum-deployment-target \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Domain/Pods-Domain-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double Pods_DomainVersionNumber;\nFOUNDATION_EXPORT const unsigned char Pods_DomainVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Domain/Pods-Domain.debug.xcconfig",
    "content": "FRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Domain/Pods-Domain.modulemap",
    "content": "framework module Pods_Domain {\n  umbrella header \"Pods-Domain-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Domain/Pods-Domain.release.xcconfig",
    "content": "FRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-DomainTests/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## ObjcExceptionBridging\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## SwiftLint\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## XCGLogger\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests-acknowledgements.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>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>ObjcExceptionBridging</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2015 Realm Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SwiftLint</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>XCGLogger</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - https://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_DomainTests : NSObject\n@end\n@implementation PodsDummy_Pods_DomainTests\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests-frameworks.sh",
    "content": "#!/bin/sh\nset -e\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nSWIFT_STDLIB_PATH=\"${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\"\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ninstall_framework()\n{\n  if [ -r \"${BUILT_PRODUCTS_DIR}/$1\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$1\"\n  elif [ -r \"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\"\n  elif [ -r \"$1\" ]; then\n    local source=\"$1\"\n  fi\n\n  local destination=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\n  if [ -L \"${source}\" ]; then\n      echo \"Symlinked...\"\n      source=\"$(readlink \"${source}\")\"\n  fi\n\n  # Use filter instead of exclude so missing patterns don't throw errors.\n  echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${destination}\\\"\"\n  rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"\n\n  local basename\n  basename=\"$(basename -s .framework \"$1\")\"\n  binary=\"${destination}/${basename}.framework/${basename}\"\n  if ! [ -r \"$binary\" ]; then\n    binary=\"${destination}/${basename}\"\n  fi\n\n  # Strip invalid architectures so \"fat\" simulator / device frameworks work on device\n  if [[ \"$(file \"$binary\")\" == *\"dynamically linked shared library\"* ]]; then\n    strip_invalid_archs \"$binary\"\n  fi\n\n  # Resign the code if required by the build settings to avoid unstable apps\n  code_sign_if_enabled \"${destination}/$(basename \"$1\")\"\n\n  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.\n  if [ \"${XCODE_VERSION_MAJOR}\" -lt 7 ]; then\n    local swift_runtime_libs\n    swift_runtime_libs=$(xcrun otool -LX \"$binary\" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u  && exit ${PIPESTATUS[0]})\n    for lib in $swift_runtime_libs; do\n      echo \"rsync -auv \\\"${SWIFT_STDLIB_PATH}/${lib}\\\" \\\"${destination}\\\"\"\n      rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"\n      code_sign_if_enabled \"${destination}/${lib}\"\n    done\n  fi\n}\n\n# Copies the dSYM of a vendored framework\ninstall_dsym() {\n  local source=\"$1\"\n  if [ -r \"$source\" ]; then\n    echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${DWARF_DSYM_FOLDER_PATH}\\\"\"\n    rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"\n  fi\n}\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n  if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY}\" -a \"${CODE_SIGNING_REQUIRED}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n    # Use the current code_sign_identitiy\n    echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n    local code_sign_cmd=\"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'\"\n\n    if [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n      code_sign_cmd=\"$code_sign_cmd &\"\n    fi\n    echo \"$code_sign_cmd\"\n    eval \"$code_sign_cmd\"\n  fi\n}\n\n# Strip invalid architectures\nstrip_invalid_archs() {\n  binary=\"$1\"\n  # Get architectures for current file\n  archs=\"$(lipo -info \"$binary\" | rev | cut -d ':' -f1 | rev)\"\n  stripped=\"\"\n  for arch in $archs; do\n    if ! [[ \"${ARCHS}\" == *\"$arch\"* ]]; then\n      # Strip non-valid architectures in-place\n      lipo -remove \"$arch\" -output \"$binary\" \"$binary\" || exit 1\n      stripped=\"$stripped $arch\"\n    fi\n  done\n  if [[ \"$stripped\" ]]; then\n    echo \"Stripped $binary of architectures:$stripped\"\n  fi\n}\n\n\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework\"\n  install_framework \"${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework\"\nfi\nif [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n  wait\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests-resources.sh",
    "content": "#!/bin/sh\nset -e\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt\n> \"$RESOURCES_TO_COPY\"\n\nXCASSET_FILES=()\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ncase \"${TARGETED_DEVICE_FAMILY}\" in\n  1,2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad --target-device iphone\"\n    ;;\n  1)\n    TARGET_DEVICE_ARGS=\"--target-device iphone\"\n    ;;\n  2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad\"\n    ;;\n  3)\n    TARGET_DEVICE_ARGS=\"--target-device tv\"\n    ;;\n  4)\n    TARGET_DEVICE_ARGS=\"--target-device watch\"\n    ;;\n  *)\n    TARGET_DEVICE_ARGS=\"--target-device mac\"\n    ;;\nesac\n\ninstall_resource()\n{\n  if [[ \"$1\" = /* ]] ; then\n    RESOURCE_PATH=\"$1\"\n  else\n    RESOURCE_PATH=\"${PODS_ROOT}/$1\"\n  fi\n  if [[ ! -e \"$RESOURCE_PATH\" ]] ; then\n    cat << EOM\nerror: Resource \"$RESOURCE_PATH\" not found. Run 'pod install' to update the copy resources script.\nEOM\n    exit 1\n  fi\n  case $RESOURCE_PATH in\n    *.storyboard)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.xib)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.framework)\n      echo \"mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\"`.mom\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\\\"\" || true\n      xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=\"$RESOURCE_PATH\"\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    *)\n      echo \"$RESOURCE_PATH\" || true\n      echo \"$RESOURCE_PATH\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nif [[ \"${ACTION}\" == \"install\" ]] && [[ \"${SKIP_INSTALL}\" == \"NO\" ]]; then\n  mkdir -p \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\nrm -f \"$RESOURCES_TO_COPY\"\n\nif [[ -n \"${WRAPPER_EXTENSION}\" ]] && [ \"`xcrun --find actool`\" ] && [ -n \"$XCASSET_FILES\" ]\nthen\n  # Find all other xcassets (this unfortunately includes those of path pods and other targets).\n  OTHER_XCASSETS=$(find \"$PWD\" -iname \"*.xcassets\" -type d)\n  while read line; do\n    if [[ $line != \"${PODS_ROOT}*\" ]]; then\n      XCASSET_FILES+=(\"$line\")\n    fi\n  done <<<\"$OTHER_XCASSETS\"\n\n  printf \"%s\\0\" \"${XCASSET_FILES[@]}\" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform \"${PLATFORM_NAME}\" --minimum-deployment-target \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double Pods_DomainTestsVersionNumber;\nFOUNDATION_EXPORT const unsigned char Pods_DomainTestsVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests.debug.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests.modulemap",
    "content": "framework module Pods_DomainTests {\n  umbrella header \"Pods-DomainTests-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-DomainTests/Pods-DomainTests.release.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\" \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nOTHER_CFLAGS = $(inherited) -iquote \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers\" -iquote \"$PODS_CONFIGURATION_BUILD_DIR/XCGLogger/XCGLogger.framework/Headers\" -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = $(inherited) -framework \"ObjcExceptionBridging\" -framework \"XCGLogger\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Reusable/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>4.0.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/Reusable/Reusable-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Reusable : NSObject\n@end\n@implementation PodsDummy_Reusable\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Reusable/Reusable-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "Pods/Target Support Files/Reusable/Reusable-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double ReusableVersionNumber;\nFOUNDATION_EXPORT const unsigned char ReusableVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/Reusable/Reusable.modulemap",
    "content": "framework module Reusable {\n  umbrella header \"Reusable-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/Reusable/Reusable.xcconfig",
    "content": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Reusable\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_LDFLAGS = -framework \"UIKit\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\" \"-suppress-warnings\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/Reusable\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\n"
  },
  {
    "path": "Pods/Target Support Files/XCGLogger/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  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>6.0.1</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/XCGLogger/XCGLogger-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_XCGLogger : NSObject\n@end\n@implementation PodsDummy_XCGLogger\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/XCGLogger/XCGLogger-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "Pods/Target Support Files/XCGLogger/XCGLogger-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double XCGLoggerVersionNumber;\nFOUNDATION_EXPORT const unsigned char XCGLoggerVersionString[];\n\n"
  },
  {
    "path": "Pods/Target Support Files/XCGLogger/XCGLogger.modulemap",
    "content": "framework module XCGLogger {\n  umbrella header \"XCGLogger-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Pods/Target Support Files/XCGLogger/XCGLogger.xcconfig",
    "content": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/XCGLogger\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/ObjcExceptionBridging\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SwiftLint\"\nOTHER_SWIFT_FLAGS = $(inherited) \"-D\" \"COCOAPODS\" \"-suppress-warnings\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/XCGLogger\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nSWIFT_VERSION = 4.0\n"
  },
  {
    "path": "Pods/XCGLogger/.swift-version",
    "content": "4.0\n"
  },
  {
    "path": "Pods/XCGLogger/LICENSE.txt",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Pods/XCGLogger/README.md",
    "content": "![XCGLogger][xcglogger-logo]\n\n[![badge-language]][swift.org]\n[![badge-platforms]][swift.org]\n[![badge-license]][license]\n\n[![badge-travis]][travis]\n[![badge-swiftpm]][swiftpm]\n[![badge-cocoapods]][cocoapods-xcglogger]\n[![badge-carthage]][carthage]\n\n[![badge-sponsors]][cerebral-gardens]\n[![badge-twitter]][twitter-davewoodx]\n\n## tl;dr\nXCGLogger is the original debug log module for use in Swift projects. \n\nSwift does not include a C preprocessor so developers are unable to use the debug log `#define` macros they would use in Objective-C. This means our traditional way of generating nice debug logs no longer works. Resorting to just plain old `print` calls means you lose a lot of helpful information, or requires you to type a lot more code.\n\nXCGLogger allows you to log details to the console (and optionally a file, or other custom destinations), just like you would have with `NSLog()` or `print()`, but with additional information, such as the date, function name, filename and line number.\n\nGo from this:\n\n```Simple message```\n\nto this:\n\n```2014-06-09 06:44:43.600 [Debug] [AppDelegate.swift:40] application(_:didFinishLaunchingWithOptions:): Simple message```\n\n#### Example\n<img src=\"https://raw.githubusercontent.com/DaveWoodCom/XCGLogger/master/ReadMeImages/SampleLog.png\" alt=\"Example\" style=\"width: 690px;\" />\n\n### Communication _(Hat Tip AlamoFire)_\n\n* If you need help, use [Stack Overflow][stackoverflow] (Tag '[xcglogger][stackoverflow]').\n* If you'd like to ask a general question, use [Stack Overflow][stackoverflow].\n* If you've found a bug, open an issue.\n* If you have a feature request, open an issue.\n* If you want to contribute, submit a pull request.\n* If you use XCGLogger, please Star the project on [GitHub][github-xcglogger]\n\n## Installation\n\n### Git Submodule\n\nExecute:\n\n```git submodule add https://github.com/DaveWoodCom/XCGLogger.git```\n\t\nin your repository folder.\n\n### [Carthage][carthage]\n\nAdd the following line to your `Cartfile`.\n\n```github \"DaveWoodCom/XCGLogger\" ~> 6.0.1```\n\nThen run `carthage update --no-use-binaries` or just `carthage update`. For details of the installation and usage of Carthage, visit [it's project page][carthage].\n\nDevelopers running 5.0 and above in Swift will need to add `$(SRCROOT)/Carthage/Build/iOS/ObjcExceptionBridging.framework` to their Input Files in the Copy Carthage Frameworks Build Phase. \n\n### [CocoaPods][cocoapods]\n\nAdd something similar to the following lines to your `Podfile`. You may need to adjust based on your platform, version/branch etc.\n\n```\nsource 'https://github.com/CocoaPods/Specs.git'\nplatform :ios, '8.0'\nuse_frameworks!\n\npod 'XCGLogger', '~> 6.0.1'\n```\n\nSpecifying the pod `XCGLogger` on its own will include the core framework. We're starting to add subspecs to allow you to include optional components as well:\n\n`pod 'XCGLogger/UserInfoHelpers', '~> 6.0.1'`: Include some experimental code to help deal with using UserInfo dictionaries to tag log messages.\n\nThen run `pod install`. For details of the installation and usage of CocoaPods, visit [it's official web site][cocoapods].\n\nNote: It's possible to use multiple pods with a mixture of Swift versions. You may need to ensure each pod is configured for the correct Swift version (check the targets in the pod project of your workspace). If you manually adjust the Swift version for a project, it'll reset the next time you run `pod install`. You can add a `post_install` hook into your podfile to automate setting the correct Swift versions. This is largely untested, and I'm not sure it's a good solution, but it seems to work:\n\n```\npost_install do |installer|\n    installer.pods_project.targets.each do |target|\n        if ['SomeTarget-iOS', 'SomeTarget-watchOS'].include? \"#{target}\"\n            print \"Setting #{target}'s SWIFT_VERSION to 4.0\\n\"\n            target.build_configurations.each do |config|\n                config.build_settings['SWIFT_VERSION'] = '4.0'\n            end\n        else\n            print \"Setting #{target}'s SWIFT_VERSION to Undefined (Xcode will automatically resolve)\\n\"\n            target.build_configurations.each do |config|\n                config.build_settings.delete('SWIFT_VERSION')\n            end\n        end\n    end\n\n    print \"Setting the default SWIFT_VERSION to 3.2\\n\"\n    installer.pods_project.build_configurations.each do |config|\n        config.build_settings['SWIFT_VERSION'] = '3.2'\n    end\nend\n```\n\nYou can adjust that to suit your needs of course.\n\n### [Swift Package Manager][swiftpm]\n\nAdd the following entry to your package's dependencies:\n\n```\n.Package(url: \"https://github.com/DaveWoodCom/XCGLogger.git\", majorVersion: 6)\n```\t\n\n### Backwards Compatibility\n\nUse:\n* XCGLogger version [6.0.1][xcglogger-6.0.1] for Swift 4.0\n* XCGLogger version [5.0.5][xcglogger-5.0.5] for Swift 3.0-3.2\n* XCGLogger version [3.6.0][xcglogger-3.6.0] for Swift 2.3\n* XCGLogger version [3.5.3][xcglogger-3.5.3] for Swift 2.2\n* XCGLogger version [3.2][xcglogger-3.2] for Swift 2.0-2.1\n* XCGLogger version [2.x][xcglogger-2.x] for Swift 1.2\n* XCGLogger version [1.x][xcglogger-1.x] for Swift 1.1 and below.\n\n## Basic Usage (Quick Start)\n\n_This quick start method is intended just to get you up and running with the logger. You should however use the [advanced usage below](#advanced-usage-recommended) to get the most out of this library._\n\nAdd the XCGLogger project as a subproject to your project, and add the appropriate library as a dependency of your target(s).\nUnder the `General` tab of your target, add `XCGLogger.framework` and `ObjcExceptionBridging.framework` to the `Embedded Binaries` section.\n\nThen, in each source file:\n\n```Swift\nimport XCGLogger\n```\n\nIn your AppDelegate (or other global file), declare a global constant to the default XCGLogger instance.\n\n```Swift\nlet log = XCGLogger.default\n```\n\nIn the\n```Swift\napplication(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) // iOS, tvOS\n```\n\nor\n\n```Swift\napplicationDidFinishLaunching(_ notification: Notification) // macOS\n```\n\nfunction, configure the options you need:\n\n```Swift\nlog.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: \"path/to/file\", fileLevel: .debug)\n```\n\nThe value for `writeToFile:` can be a `String` or `URL`. If the file already exists, it will be cleared before we use it. Omit the parameter or set it to `nil` to log to the console only. You can optionally set a different log level for the file output using the `fileLevel:` parameter. Set it to `nil` or omit it to use the same log level as the console.\n\nThen, whenever you'd like to log something, use one of the convenience methods:\n\n```Swift\nlog.verbose(\"A verbose message, usually useful when working on a specific problem\")\nlog.debug(\"A debug message\")\nlog.info(\"An info message, probably useful to power users looking in console.app\")\nlog.warning(\"A warning message, may indicate a possible error\")\nlog.error(\"An error occurred, but it's recoverable, just info about what happened\")\nlog.severe(\"A severe error occurred, we are likely about to crash now\")\n```\n\nThe different methods set the log level of the message. XCGLogger will only print messages with a log level that is greater to or equal to it's current log level setting. So a logger with a level of `.error` will only output log messages with a level of `.error`, or `.severe`.\n\n## Advanced Usage (Recommended)\n\nXCGLogger aims to be simple to use and get you up and running quickly with as few as 2 lines of code above. But it allows for much greater control and flexibility. \n\nA logger can be configured to deliver log messages to a variety of destinations. Using the basic setup above, the logger will output log messages to the standard Xcode debug console, and optionally a file if a path is provided. It's quite likely you'll want to send logs to more interesting places, such as the Apple System Console, a database, third party server, or another application such as [NSLogger][NSLogger]. This is accomplished by adding the destination to the logger.\n\nHere's an example of configuring the logger to output to the Apple System Log as well as a file.\n\n```Swift\n// Create a logger object with no destinations\nlet log = XCGLogger(identifier: \"advancedLogger\", includeDefaultDestinations: false)\n\n// Create a destination for the system console log (via NSLog)\nlet systemDestination = AppleSystemLogDestination(identifier: \"advancedLogger.systemDestination\")\n\n// Optionally set some configuration options\nsystemDestination.outputLevel = .debug\nsystemDestination.showLogIdentifier = false\nsystemDestination.showFunctionName = true\nsystemDestination.showThreadName = true\nsystemDestination.showLevel = true\nsystemDestination.showFileName = true\nsystemDestination.showLineNumber = true\nsystemDestination.showDate = true\n\n// Add the destination to the logger\nlog.add(destination: systemDestination)\n\n// Create a file log destination\nlet fileDestination = FileDestination(writeToFile: \"/path/to/file\", identifier: \"advancedLogger.fileDestination\")\n\n// Optionally set some configuration options\nfileDestination.outputLevel = .debug\nfileDestination.showLogIdentifier = false\nfileDestination.showFunctionName = true\nfileDestination.showThreadName = true\nfileDestination.showLevel = true\nfileDestination.showFileName = true\nfileDestination.showLineNumber = true\nfileDestination.showDate = true\n\n// Process this destination in the background\nfileDestination.logQueue = XCGLogger.logQueue\n\n// Add the destination to the logger\nlog.add(destination: fileDestination)\n\n// Add basic app info, version info etc, to the start of the logs\nlog.logAppDetails()\n```\n\nYou can configure each log destination with different options depending on your needs.\n\nAnother common usage pattern is to have multiple loggers, perhaps one for UI issues, one for networking, and another for data issues.\n\nEach log destination can have its own log level. As a convenience, you can set the log level on the log object itself and it will pass that level to each destination. Then set the destinations that need to be different.\n\n**Note**: A destination object can only be added to one logger object, adding it to a second will remove it from the first.\n\n### Initialization Using A Closure\n\nAlternatively you can use a closure to initialize your global variable, so that all initialization is done in one place\n```Swift\nlet log: XCGLogger = {\n    let log = XCGLogger(identifier: \"advancedLogger\", includeDefaultDestinations: false)\n\n\t// Customize as needed\n    \n    return log\n}()\n```\n\n**Note**: This creates the log object lazily, which means it's not created until it's actually needed. This delays the initial output of the app information details. Because of this, I recommend forcing the log object to be created at app launch by adding the line `let _ = log` at the top of your `didFinishLaunching` method if you don't already log something on app launch.\n\n### Log Anything\n\nYou can log strings:\n\n```Swift\nlog.debug(\"Hi there!\")\n```\n\nor pretty much anything you want:\n\n```Swift\nlog.debug(true)\nlog.debug(CGPoint(x: 1.1, y: 2.2))\nlog.debug(MyEnum.Option)\nlog.debug((4, 2))\nlog.debug([\"Device\": \"iPhone\", \"Version\": 7])\n```\n\n### Filtering Log Messages\n\nNew to XCGLogger 4, you can now create filters to apply to your logger (or to specific destinations). Create and configure your filters (examples below), and then add them to the logger or destination objects by setting the optional `filters` property to an array containing the filters. Filters are applied in the order they exist in the array. During processing, each filter is asked if the log message should be excluded from the log. If any filter excludes the log message, it's excluded. Filters have no way to reverse the exclusion of another filter.\n\nIf a destination's `filters` property is `nil`, the log's `filters` property is used instead. To have one destination log everything, while having all other destinations filter something, add the filters to the log object and set the one destination's `filters` property to an empty array `[]`. \n\n**Note**: Unlike destinations, you can add the same filter object to multiple loggers and/or multiple destinations.\n\n#### Filter by Filename\n\nTo exclude all log messages from a specific file, create an exclusion filter like so:\n\n```Swift\nlog.filters = [FileNameFilter(excludeFrom: [\"AppDelegate.swift\"], excludePathWhenMatching: true)]\n```\n\n`excludeFrom:` takes an `Array<String>` or `Set<String>` so you can specify multiple files at the same time.\n\n`excludePathWhenMatching:` defaults to `true` so you can omit it unless you want to match path's as well.\n\nTo include log messages only for a specific set to files, create the filter using the `includeFrom:` initializer. It's also possible to just toggle the `inverse` property to flip the exclusion filter to an inclusion filter.\n\t\n#### Filter by Tag\n\nIn order to filter log messages by tag, you must of course be able to set a tag on the log messages. Each log message can now have additional, user defined data attached to them, to be used by filters (and/or formatters etc). This is handled with a `userInfo: Dictionary<String, Any>` object. The dictionary key should be a namespaced string to avoid collisions with future additions. Official keys will begin with `com.cerebralgardens.xcglogger`. The tag key can be accessed by `XCGLogger.Constants.userInfoKeyTags`. You definitely don't want to be typing that, so feel free to create a global shortcut: `let tags = XCGLogger.Constants.userInfoKeyTags`. Now you can easily tag your logs:\n\n```Swift\nlet sensitiveTag = \"Sensitive\"\nlog.debug(\"A tagged log message\", userInfo: [tags: sensitiveTag])\n```\n\nThe value for tags can be an `Array<String>`, `Set<String>`, or just a `String`, depending on your needs. They'll all work the same way when filtered.\n\nDepending on your workflow and usage, you'll probably create faster methods to set up the `userInfo` dictionary. See [below](#mixing-and-matching) for other possible shortcuts.\n\nNow that you have your logs tagged, you can filter easily:\n\n```Swift\nlog.filters = [TagFilter(excludeFrom: [sensitiveTag])]\n```\n\nJust like the `FileNameFilter`, you can use `includeFrom:` or toggle `inverse` to include only log messages that have the specified tags.\n\n#### Filter by Developer\n\nFiltering by developer is exactly like filtering by tag, only using the `userInfo` key of `XCGLogger.Constants.userInfoKeyDevs`. In fact, both filters are subclasses of the `UserInfoFilter` class that you can use to create additional filters. See [Extending XCGLogger](#extending-xcglogger) below.\n\n#### Mixing and Matching\n\nIn large projects with multiple developers, you'll probably want to start tagging log messages, as well as indicate the developer that added the message.\n\nWhile extremely flexible, the `userInfo` dictionary can be a little cumbersome to use. There are a few possible methods you can use to simply things. I'm still testing these out myself so they're not officially part of the library yet (I'd love feedback or other suggestions).\n\nI have created some experimental code to help create the UserInfo dictionaries. (Include the optional `UserInfoHelpers` subspec if using CocoaPods). Check the iOS Demo app to see it in use.\n\nThere are two structs that conform to the `UserInfoTaggingProtocol` protocol. `Tag` and `Dev`.\n\nYou can create an extension on each of these that suit your project. For example:\n\n```Swift\nextension Tag {\n    static let sensitive = Tag(\"sensitive\")\n    static let ui = Tag(\"ui\")\n    static let data = Tag(\"data\")\n}\n\nextension Dev {\n    static let dave = Dev(\"dave\")\n    static let sabby = Dev(\"sabby\")\n}\n```\n\nAlong with these types, there's an overloaded operator `|` that can be used to merge them together into a dictionary compatible with the `UserInfo:` parameter of the logging calls.\n\nThen you can log messages like this:\n\n```Swift\nlog.debug(\"A tagged log message\", userInfo: Dev.dave | Tag.sensitive)\n```\n\nThere are some current issues I see with these `UserInfoHelpers`, which is why I've made it optional/experimental for now. I'd love to hear comments/suggestions for improvements.\n\n1. The overloaded operator `|` merges dictionaries so long as there are no `Set`s. If one of the dictionaries contains a `Set`, it'll use one of them, without merging them. Preferring the left hand side if both sides have a set for the same key.\n2. Since the `userInfo:` parameter needs a dictionary, you can't pass in a single Dev or Tag object. You need to use at least two with the `|` operator to have it automatically convert to a compatible dictionary. If you only want one Tag for example, you must access the `.dictionary` parameter manually: `userInfo: Tag(\"Blah\").dictionary`.\n\n### Selectively Executing Code\n\nAll log methods operate on closures. Using the same syntactic sugar as Swift's `assert()` function, this approach ensures we don't waste resources building log messages that won't be output anyway, while at the same time preserving a clean call site.\n\nFor example, the following log statement won't waste resources if the debug log level is suppressed:\n\n```Swift\nlog.debug(\"The description of \\(thisObject) is really expensive to create\")\n```\n\nSimilarly, let's say you have to iterate through a loop in order to do some calculation before logging the result. In Objective-C, you could put that code block between `#if` `#endif`, and prevent the code from running. But in Swift, previously you would need to still process that loop, wasting resources. With `XCGLogger` it's as simple as:\n\n```Swift\nlog.debug {\n    var total = 0.0\n    for receipt in receipts {\n        total += receipt.total\n    }\n\n    return \"Total of all receipts: \\(total)\"\n}\n```\n\nIn cases where you wish to selectively execute code without generating a log line, return `nil`, or use one of the methods: `verboseExec`, `debugExec`, `infoExec`, `warningExec`, `errorExec`, and `severeExec`.\n\n### Custom Date Formats\n\nYou can create your own `DateFormatter` object and assign it to the logger.\n\n```Swift\nlet dateFormatter = DateFormatter()\ndateFormatter.dateFormat = \"MM/dd/yyyy hh:mma\"\ndateFormatter.locale = Locale.current\nlog.dateFormatter = dateFormatter\n```\n\n### Enhancing Log Messages With Colour\n\nXCGLogger supports adding formatting codes to your log messages to enable colour in various places. The original option was to use the [XcodeColors plug-in][XcodeColors]. However, Xcode (as of version 8) no longer officially supports plug-ins. You can still view your logs in colour, just not in Xcode at the moment. You can use the ANSI colour support to add colour to your fileDestination objects and view your logs via a terminal window. This gives you some extra options such as adding Bold, Italics, or (please don't) Blinking!\n\nOnce enabled, each log level can have its own colour. These colours can be customized as desired. If using multiple loggers, you could alternatively set each logger to its own colour.\n\nAn example of setting up the ANSI formatter:\n\n```Swift\nif let fileDestination: FileDestination = log.destination(withIdentifier: XCGLogger.Constants.fileDestinationIdentifier) as? FileDestination {\n    let ansiColorLogFormatter: ANSIColorLogFormatter = ANSIColorLogFormatter()\n    ansiColorLogFormatter.colorize(level: .verbose, with: .colorIndex(number: 244), options: [.faint])\n    ansiColorLogFormatter.colorize(level: .debug, with: .black)\n    ansiColorLogFormatter.colorize(level: .info, with: .blue, options: [.underline])\n    ansiColorLogFormatter.colorize(level: .warning, with: .red, options: [.faint])\n    ansiColorLogFormatter.colorize(level: .error, with: .red, options: [.bold])\n    ansiColorLogFormatter.colorize(level: .severe, with: .white, on: .red)\n    fileDestination.formatters = [ansiColorLogFormatter]\n}\n```\n\nAs with filters, you can use the same formatter objects for multiple loggers and/or multiple destinations. If a destination's `formatters` property is `nil`, the logger's `formatters` property will be used instead.\n\nSee [Extending XCGLogger](#extending-xcglogger) below for info on creating your own custom formatters.\n\n### Alternate Configurations\n\nBy using Swift build flags, different log levels can be used in debugging versus staging/production.\nGo to Build Settings -> Swift Compiler - Custom Flags -> Other Swift Flags and add `-DDEBUG` to the Debug entry.\n\n```Swift\n#if DEBUG\n    log.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true)\n#else\n    log.setup(level: .severe, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true)\n#endif\n```\n\nYou can set any number of options up in a similar fashion. See the updated iOSDemo app for an example of using different log destinations based on options, search for `USE_NSLOG`.\n\n### Background Log Processing\n\nBy default, the supplied log destinations will process the logs on the thread they're called on. This is to ensure the log message is displayed immediately when debugging an application. You can add a breakpoint immediately after a log call and see the results when the breakpoint hits.\n\nHowever, if you're not actively debugging the application, processing the logs on the current thread can introduce a performance hit. You can now specify a destination process it's logs on a dispatch queue of your choice (or even use a default supplied one).\n\n```Swift\nfileDestination.logQueue = XCGLogger.logQueue\n```\t\n\nor even\n\n```Swift\nfileDestination.logQueue = DispatchQueue.global(qos: .background)\n```\n\nThis works extremely well when combined with the [Alternate Configurations](#alternate-configurations) method above.\n\n```Swift\n#if DEBUG\n    log.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true)\n#else\n    log.setup(level: .severe, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true)\n    if let consoleLog = log.logDestination(XCGLogger.Constants.baseConsoleDestinationIdentifier) as? ConsoleDestination {\n        consoleLog.logQueue = XCGLogger.logQueue\n    }\n#endif\n```\n\n### Append To Existing Log File\n\nWhen using the advanced configuration of the logger (see [Advanced Usage above](#advanced-usage-recommended)), you can now specify that the logger append to an existing log file, instead of automatically overwriting it.\n\nAdd the optional `shouldAppend:` parameter when initializing the `FileDestination` object. You can also add the `appendMarker:` parameter to add a marker to the log file indicating where a new instance of your app started appending. By default we'll add `-- ** ** ** --` if the parameter is omitted. Set it to `nil` to skip appending the marker.\n\n```let fileDestination = FileDestination(writeToFile: \"/path/to/file\", identifier: \"advancedLogger.fileDestination\", shouldAppend: true, appendMarker: \"-- Relauched App --\")```\n\n\n### Automatic Log File Rotation\n\nWhen logging to a file, you have the option to automatically rotate the log file to an archived destination, and have the logger automatically create a new log file in place of the old one.\n\nCreate a destination using the `AutoRotatingFileDestination` class and set the following properties:\n\n`targetMaxFileSize`: Auto rotate once the file is larger than this\n\n`targetMaxTimeInterval`: Auto rotate after this many seconds\n\n`targetMaxLogFiles`: Number of archived log files to keep, older ones are automatically deleted\n\nThose are all guidelines for the logger, not hard limits.\n\n### Extending XCGLogger\n\nYou can create alternate log destinations (besides the built in ones). Your custom log destination must implement the `DestinationProtocol` protocol. Instantiate your object, configure it, and then add it to the `XCGLogger` object with `add(destination:)`. There are two base destination classes (`BaseDestination` and `BaseQueuedDestination`) you can inherit from to handle most of the process for you, requiring you to only implement one additional method in your custom class. Take a look at `ConsoleDestination` and `FileDestination` for examples.\n\nYou can also create custom filters or formatters. Take a look at the provided versions as a starting point. Note that filters and formatters have the ability to alter the log messages as they're processed. This means you can create a filter that strips passwords, highlights specific words, encrypts messages, etc.\n\n## Contributing\n\nXCGLogger is the best logger available for Swift because of the contributions from the community like you. There are many ways you can help continue to make it great.\n\n1. Star the project on [GitHub][github-xcglogger].\n2. Report issues/bugs you find.\n3. Suggest features.\n4. Submit pull requests.\n5. Download and install one of my apps: [https://www.cerebralgardens.com/apps/][cerebral-gardens-apps] Try my newest app: [All the Rings][all-the-rings]\n\n**Note**: when submitting a pull request, please use lots of small commits verses one huge commit. It makes it much easier to merge in when there are several pull requests that need to be combined for a new version.\n\n<!-- Removed these since plug-ins seem to be gone for good now\n## Third Party Tools That Work With XCGLogger\n\n**Note**: These plug-ins no longer 'officially' work in Xcode. File a [bug report](http://openradar.appspot.com/27447585) if you'd like to see plug-ins return to Xcode.\n\n[**XcodeColors:**][XcodeColors] Enable colour in the Xcode console\n<br />\n[**KZLinkedConsole:**][KZLinkedConsole] Link from a log line directly to the code that produced it\n\n**Note**: These may not yet work with the Swift 4 version of XCGLogger.\n\n[**XCGLoggerNSLoggerConnector:**][XCGLoggerNSLoggerConnector] Send your logs to [NSLogger][NSLogger]\n-->\n\n## To Do\n\n- Add more examples of some advanced use cases\n- Add additional log destination types\n- Add Objective-C support\n- Add Linux support\n\n## More\n\nIf you find this library helpful, you'll definitely find these other tools helpful:\n\nWatchdog: http://watchdogforxcode.com/  \nSlender: http://martiancraft.com/products/slender  \nBriefs: http://giveabrief.com/  \n\nAlso, please check out some of my other projects:\n\nAll the Rings: [App Store](https://itunes.apple.com/app/all-the-rings/id1186956966?pt=17255&ct=github&mt=8&at=11lMGu)  \nRudoku: [App Store](https://itunes.apple.com/app/rudoku/id965105321?pt=17255&ct=github&mt=8&at=11lMGu)  \nTV Tune Up: https://www.cerebralgardens.com/tvtuneup  \n\n### Change Log\n\nThe change log is now in its own file: [CHANGELOG.md](CHANGELOG.md)\n\n[xcglogger-logo]: https://github.com/DaveWoodCom/XCGLogger/raw/master/ReadMeImages/XCGLoggerLogo_326x150.png\n[swift.org]: https://swift.org/\n[license]: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n[travis]: https://travis-ci.org/DaveWoodCom/XCGLogger\n[swiftpm]: https://swift.org/package-manager/\n[cocoapods]: https://cocoapods.org/\n[cocoapods-xcglogger]: https://cocoapods.org/pods/XCGLogger\n[carthage]: https://github.com/Carthage/Carthage\n[cerebral-gardens]: https://www.cerebralgardens.com/\n[cerebral-gardens-apps]: https://www.cerebralgardens.com/apps/\n[all-the-rings]: https://alltherings.fit/?s=GH3\n[twitter-davewoodx]: https://twitter.com/davewoodx\n[github-xcglogger]: https://github.com/DaveWoodCom/XCGLogger\n[stackoverflow]: http://stackoverflow.com/questions/tagged/xcglogger\n\n[badge-language]: https://img.shields.io/badge/Swift-1.x%20%7C%202.x%20%7C%203.x%20%7C%204.x-orange.svg?style=flat\n[badge-platforms]: https://img.shields.io/badge/Platforms-macOS%20%7C%20iOS%20%7C%20tvOS%20%7C%20watchOS-lightgray.svg?style=flat\n[badge-license]: https://img.shields.io/badge/License-MIT-lightgrey.svg?style=flat\n[badge-travis]: https://img.shields.io/travis/DaveWoodCom/XCGLogger/master.svg?style=flat\n[badge-swiftpm]: https://img.shields.io/badge/Swift_Package_Manager-v6.0.1-64a6dd.svg?style=flat\n[badge-cocoapods]: https://img.shields.io/cocoapods/v/XCGLogger.svg?style=flat\n[badge-carthage]: https://img.shields.io/badge/Carthage-v6.0.1-64a6dd.svg?style=flat\n\n[badge-sponsors]: https://img.shields.io/badge/Sponsors-Cerebral%20Gardens-orange.svg?style=flat\n[badge-twitter]: https://img.shields.io/twitter/follow/DaveWoodX.svg?style=social\n\n[XcodeColors]: https://github.com/robbiehanson/XcodeColors\n[KZLinkedConsole]: https://github.com/krzysztofzablocki/KZLinkedConsole\n[NSLogger]: https://github.com/fpillet/NSLogger\n[XCGLoggerNSLoggerConnector]: https://github.com/markuswinkler/XCGLoggerNSLoggerConnector\n[Firelog]: http://jogabo.github.io/firelog/\n[Firebase]: https://www.firebase.com/\n\n[xcglogger-6.0.1]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/6.0.1\n[xcglogger-5.0.5]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/5.0.5\n[xcglogger-3.6.0]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.6.0\n[xcglogger-3.5.3]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.5.3\n[xcglogger-3.2]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.2.0\n[xcglogger-2.x]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/2.4.0\n[xcglogger-1.x]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/1.8.1\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Destinations/AppleSystemLogDestination.swift",
    "content": "//\n//  AppleSystemLogDestination.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2014-06-06.\n//  Copyright © 2014 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\nimport Foundation\nimport Dispatch\n\n// MARK: - AppleSystemLogDestination\n/// A standard destination that outputs log details to the Apple System Log using NSLog instead of print\nopen class AppleSystemLogDestination: BaseQueuedDestination {\n    // MARK: - Properties\n    /// Option: whether or not to output the date the log was created (Always false for this destination)\n    open override var showDate: Bool {\n        get {\n            return false\n        }\n        set {\n            // ignored, NSLog adds the date, so we always want showDate to be false in this subclass\n        }\n    }\n\n    // MARK: - Overridden Methods\n    /// Print the log to the Apple System Log facility (using NSLog).\n    ///\n    /// - Parameters:\n    ///     - message:   Formatted/processed message ready for output.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open override func write(message: String) {\n        NSLog(\"%@\", message)\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Destinations/AutoRotatingFileDestination.swift",
    "content": "//\n//  AutoRotatingFileDestination.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2017-03-31.\n//  Copyright © 2017 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\nimport Foundation\n\n// MARK: - AutoRotatingFileDestination\n/// A destination that outputs log details to files in a log folder, with auto-rotate options (by size or by time)\nopen class AutoRotatingFileDestination: FileDestination {\n    // MARK: - Constants\n    public static let autoRotatingFileDefaultMaxFileSize: UInt64 = 1_048_576\n    public static let autoRotatingFileDefaultMaxTimeInterval: TimeInterval = 600\n\n    // MARK: - Properties\n    /// Option: desired maximum size of a log file, if 0, no maximum (log files may exceed this, it's a guideline only)\n    open var targetMaxFileSize: UInt64 = autoRotatingFileDefaultMaxFileSize {\n        didSet {\n            if targetMaxFileSize < 1 {\n                targetMaxFileSize = .max\n            }\n        }\n    }\n\n    /// Option: desired maximum time in seconds stored in a log file, if 0, no maximum (log files may exceed this, it's a guideline only)\n    open var targetMaxTimeInterval: TimeInterval = autoRotatingFileDefaultMaxTimeInterval {\n        didSet {\n            if targetMaxTimeInterval < 1 {\n                targetMaxTimeInterval = 0\n            }\n        }\n    }\n\n    /// Option: the desired number of archived log files to keep (number of log files may exceed this, it's a guideline only)\n    open var targetMaxLogFiles: UInt8 = 10 {\n        didSet {\n            cleanUpLogFiles()\n        }\n    }\n\n    /// Option: the URL of the folder to store archived log files (defaults to the same folder as the initial log file)\n    open var archiveFolderURL: URL? = nil {\n        didSet {\n            guard let archiveFolderURL = archiveFolderURL else { return }\n            try? FileManager.default.createDirectory(at: archiveFolderURL, withIntermediateDirectories: true)\n        }\n    }\n\n    /// Option: an optional closure to execute whenever the log is auto rotated\n    open var autoRotationCompletion: ((_ success: Bool) -> Void)? = nil\n\n    /// A custom date formatter object to use as the suffix of archived log files\n    internal var _customArchiveSuffixDateFormatter: DateFormatter? = nil\n    /// The date formatter object to use as the suffix of archived log files\n    open var archiveSuffixDateFormatter: DateFormatter! {\n        get {\n            guard _customArchiveSuffixDateFormatter == nil else { return _customArchiveSuffixDateFormatter }\n            struct Statics {\n                static var archiveSuffixDateFormatter: DateFormatter = {\n                    let defaultArchiveSuffixDateFormatter = DateFormatter()\n                    defaultArchiveSuffixDateFormatter.locale = NSLocale.current\n                    defaultArchiveSuffixDateFormatter.dateFormat = \"_yyyy-MM-dd_HHmmss\"\n                    return defaultArchiveSuffixDateFormatter\n                }()\n            }\n\n            return Statics.archiveSuffixDateFormatter\n        }\n        set {\n            _customArchiveSuffixDateFormatter = newValue\n        }\n    }\n\n    /// Size of the current log file\n    internal var currentLogFileSize: UInt64 = 0\n\n    /// Start time of the current log file\n    internal var currentLogStartTimeInterval: TimeInterval = 0\n\n    /// The base file name of the log file\n    internal var baseFileName: String = \"xcglogger\"\n\n    /// The extension of the log file name\n    internal var fileExtension: String = \"log\"\n\n    // MARK: - Class Properties\n    /// A default folder for storing archived logs if one isn't supplied\n    open class var defaultLogFolderURL: URL {\n        #if os(OSX)\n            let defaultLogFolderURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"log\")\n            try? FileManager.default.createDirectory(at: defaultLogFolderURL, withIntermediateDirectories: true)\n            return defaultLogFolderURL\n        #elseif os(iOS) || os(tvOS) || os(watchOS)\n            let urls = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)\n            let defaultLogFolderURL = urls[urls.endIndex - 1].appendingPathComponent(\"log\")\n            try? FileManager.default.createDirectory(at: defaultLogFolderURL, withIntermediateDirectories: true)\n            return defaultLogFolderURL\n        #endif\n    }\n\n    // MARK: - Life Cycle\n    public init(owner: XCGLogger? = nil, writeToFile: Any, identifier: String = \"\", shouldAppend: Bool = false, appendMarker: String? = \"-- ** ** ** --\", attributes: [FileAttributeKey: Any]? = nil, maxFileSize: UInt64 = autoRotatingFileDefaultMaxFileSize, maxTimeInterval: TimeInterval = autoRotatingFileDefaultMaxTimeInterval, archiveSuffixDateFormatter: DateFormatter? = nil) {\n        super.init(owner: owner, writeToFile: writeToFile, identifier: identifier, shouldAppend: true, appendMarker: shouldAppend ? appendMarker : nil, attributes: attributes)\n\n        currentLogStartTimeInterval = Date().timeIntervalSince1970\n        self.archiveSuffixDateFormatter = archiveSuffixDateFormatter\n        self.shouldAppend = shouldAppend\n        self.targetMaxFileSize = maxFileSize\n        self.targetMaxTimeInterval = maxTimeInterval\n\n        guard let writeToFileURL = writeToFileURL else { return }\n\n        // Calculate some details for naming archived logs based on the current log file path/name\n        fileExtension = writeToFileURL.pathExtension\n        baseFileName = writeToFileURL.lastPathComponent\n        if let fileExtensionRange: Range = baseFileName.range(of: \".\\(fileExtension)\", options: .backwards),\n          fileExtensionRange.upperBound >= baseFileName.endIndex {\n            baseFileName = String(baseFileName[baseFileName.startIndex ..< fileExtensionRange.lowerBound])\n        }\n\n        let filePath: String = writeToFileURL.path\n        let logFileName: String = \"\\(baseFileName).\\(fileExtension)\"\n        if let logFileNameRange: Range = filePath.range(of: logFileName, options: .backwards),\n          logFileNameRange.upperBound >= filePath.endIndex {\n            let archiveFolderPath: String = String(filePath[filePath.startIndex ..< logFileNameRange.lowerBound])\n            archiveFolderURL = URL(fileURLWithPath: \"\\(archiveFolderPath)\")\n        }\n        if archiveFolderURL == nil {\n            archiveFolderURL = type(of: self).defaultLogFolderURL\n        }\n        \n        do {\n            // Initialize starting values for file size and start time so shouldRotate calculations are valid\n            let fileAttributes: [FileAttributeKey: Any] = try FileManager.default.attributesOfItem(atPath: filePath)\n            currentLogFileSize = fileAttributes[.size] as? UInt64 ?? 0\n            currentLogStartTimeInterval = (fileAttributes[.creationDate] as? Date ?? Date()).timeIntervalSince1970\n        }\n        catch let error as NSError {\n            owner?._logln(\"Unable to determine current file attributes of log file: \\(error.localizedDescription)\", level: .warning)\n        }\n        \n        // Because we always start by appending, regardless of the shouldAppend setting, we now need to handle the cases where we don't want to append or that we have now reached the rotation threshold for our current log file\n        if !shouldAppend || shouldRotate() {\n            rotateFile()\n        }\n    }\n\n    /// Scan the log folder and delete log files that are no longer relevant.\n    ///\n    /// - Parameters:   None.\n    ///\n    /// - Returns:      Nothing.\n    ///\n    open func cleanUpLogFiles() {\n        var archivedFileURLs: [URL] = self.archivedFileURLs()\n        guard archivedFileURLs.count > Int(targetMaxLogFiles) else { return }\n\n        archivedFileURLs.removeFirst(Int(targetMaxLogFiles))\n\n        let fileManager: FileManager = FileManager.default\n        for archivedFileURL in archivedFileURLs {\n            do {\n                try fileManager.removeItem(at: archivedFileURL)\n            }\n            catch let error as NSError {\n                owner?._logln(\"Unable to delete old archived log file \\(archivedFileURL.path): \\(error.localizedDescription)\", level: .error)\n            }\n        }\n    }\n\n    /// Delete all archived log files.\n    ///\n    /// - Parameters:   None.\n    ///\n    /// - Returns:      Nothing.\n    ///\n    open func purgeArchivedLogFiles() {\n        let fileManager: FileManager = FileManager.default\n        for archivedFileURL in archivedFileURLs() {\n            do {\n                try fileManager.removeItem(at: archivedFileURL)\n            }\n            catch let error as NSError {\n                owner?._logln(\"Unable to delete old archived log file \\(archivedFileURL.path): \\(error.localizedDescription)\", level: .error)\n            }\n        }\n    }\n\n    /// Get the URLs of the archived log files.\n    ///\n    /// - Parameters:   None.\n    ///\n    /// - Returns:      An array of file URLs pointing to previously archived log files, sorted with the most recent logs first.\n    ///\n    open func archivedFileURLs() -> [URL] {\n        let archiveFolderURL: URL = (self.archiveFolderURL ?? type(of: self).defaultLogFolderURL)\n        guard let fileURLs = try? FileManager.default.contentsOfDirectory(at: archiveFolderURL, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]) else { return [] }\n        guard let identifierData: Data = identifier.data(using: .utf8) else { return [] }\n\n        var archivedDetails: [(url: URL, timestamp: String)] = []\n        for fileURL in fileURLs {\n            guard let archivedLogIdentifierOptionalData = try? fileURL.extendedAttribute(forName: XCGLogger.Constants.extendedAttributeArchivedLogIdentifierKey) else { continue }\n            guard let archivedLogIdentifierData = archivedLogIdentifierOptionalData else { continue }\n            guard archivedLogIdentifierData == identifierData else { continue }\n\n            guard let timestampOptionalData = try? fileURL.extendedAttribute(forName: XCGLogger.Constants.extendedAttributeArchivedLogTimestampKey) else { continue }\n            guard let timestampData = timestampOptionalData else { continue }\n            guard let timestamp = String(data: timestampData, encoding: .utf8) else { continue }\n\n            archivedDetails.append((fileURL, timestamp))\n        }\n\n        archivedDetails.sort(by: { (lhs, rhs) -> Bool in lhs.timestamp > rhs.timestamp })\n        var archivedFileURLs: [URL] = []\n        for archivedDetail in archivedDetails {\n            archivedFileURLs.append(archivedDetail.url)\n        }\n\n        return archivedFileURLs\n    }\n\n    /// Rotate the current log file.\n    ///\n    /// - Parameters:   None.\n    ///\n    /// - Returns:      Nothing.\n    ///\n    open func rotateFile() {\n        var archiveFolderURL: URL = (self.archiveFolderURL ?? type(of: self).defaultLogFolderURL)\n        archiveFolderURL = archiveFolderURL.appendingPathComponent(\"\\(baseFileName)\\(archiveSuffixDateFormatter.string(from: Date()))\")\n        archiveFolderURL = archiveFolderURL.appendingPathExtension(fileExtension)\n        rotateFile(to: archiveFolderURL, closure: autoRotationCompletion)\n\n        currentLogStartTimeInterval = Date().timeIntervalSince1970\n        currentLogFileSize = 0\n\n        cleanUpLogFiles()\n    }\n\n    /// Determine if the log file should be rotated.\n    ///\n    /// - Parameters:   None.\n    ///\n    /// - Returns:\n    ///     - true:     The log file should be rotated.\n    ///     - false:    The log file doesn't have to be rotated.\n    ///\n    open func shouldRotate() -> Bool {\n        // Do not rotate until critical setup has been completed so that we do not accidentally rotate once to the defaultLogFolderURL before determining the desired log location\n        guard archiveFolderURL != nil else { return false }\n        \n        // File Size\n        guard currentLogFileSize < targetMaxFileSize else { return true }\n\n        // Time Interval, zero = never rotate\n        guard targetMaxTimeInterval > 0 else { return false }\n\n        // Time Interval, else check time\n        guard Date().timeIntervalSince1970 - currentLogStartTimeInterval < targetMaxTimeInterval else { return true }\n\n        return false\n    }\n\n    // MARK: - Overridden Methods\n    /// Write the log to the log file.\n    ///\n    /// - Parameters:\n    ///     - message:   Formatted/processed message ready for output.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open override func write(message: String) {\n        currentLogFileSize += UInt64(message.characters.count)\n\n        super.write(message: message)\n\n        if shouldRotate() {\n            rotateFile()\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Destinations/BaseDestination.swift",
    "content": "//\n//  BaseDestination.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2014-06-06.\n//  Copyright © 2014 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\nimport Foundation\n\n// MARK: - BaseDestination\n/// A base class destination that doesn't actually output the log anywhere and is intended to be subclassed\nopen class BaseDestination: DestinationProtocol, CustomDebugStringConvertible {\n    // MARK: - Properties\n    /// Logger that owns the destination object\n    open var owner: XCGLogger?\n\n    /// Identifier for the destination (should be unique)\n    open var identifier: String\n\n    /// Log level for this destination\n    open var outputLevel: XCGLogger.Level = .debug\n\n    /// Flag whether or not we've logged the app details to this destination\n    open var haveLoggedAppDetails: Bool = false\n\n    /// Array of log formatters to apply to messages before they're output\n    open var formatters: [LogFormatterProtocol]? = nil\n\n    /// Array of log filters to apply to messages before they're output\n    open var filters: [FilterProtocol]? = nil\n\n    /// Option: whether or not to output the log identifier\n    open var showLogIdentifier: Bool = false\n\n    /// Option: whether or not to output the function name that generated the log\n    open var showFunctionName: Bool = true\n\n    /// Option: whether or not to output the thread's name the log was created on\n    open var showThreadName: Bool = false\n\n    /// Option: whether or not to output the fileName that generated the log\n    open var showFileName: Bool = true\n\n    /// Option: whether or not to output the line number where the log was generated\n    open var showLineNumber: Bool = true\n\n    /// Option: whether or not to output the log level of the log\n    open var showLevel: Bool = true\n\n    /// Option: whether or not to output the date the log was created\n    open var showDate: Bool = true\n\n    /// Option: override descriptions of log levels\n    open var levelDescriptions: [XCGLogger.Level: String] = [:]\n\n    // MARK: - CustomDebugStringConvertible\n    open var debugDescription: String {\n        get {\n            return \"\\(extractTypeName(self)): \\(identifier) - Level: \\(outputLevel) showLogIdentifier: \\(showLogIdentifier) showFunctionName: \\(showFunctionName) showThreadName: \\(showThreadName) showLevel: \\(showLevel) showFileName: \\(showFileName) showLineNumber: \\(showLineNumber) showDate: \\(showDate)\"\n        }\n    }\n\n    // MARK: - Life Cycle\n    public init(owner: XCGLogger? = nil, identifier: String = \"\") {\n        self.owner = owner\n        self.identifier = identifier\n    }\n\n    // MARK: - Methods to Process Log Details\n    /// Process the log details.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   Structure with all of the details for the log to process.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func process(logDetails: LogDetails) {\n        guard let owner = owner else { return }\n\n        var extendedDetails: String = \"\"\n\n        if showDate {\n            extendedDetails += \"\\((owner.dateFormatter != nil) ? owner.dateFormatter!.string(from: logDetails.date) : logDetails.date.description) \"\n        }\n\n        if showLevel {\n            extendedDetails += \"[\\(levelDescriptions[logDetails.level] ?? owner.levelDescriptions[logDetails.level] ?? logDetails.level.description)] \"\n        }\n\n        if showLogIdentifier {\n            extendedDetails += \"[\\(owner.identifier)] \"\n        }\n\n        if showThreadName {\n            if Thread.isMainThread {\n                extendedDetails += \"[main] \"\n            }\n            else {\n                if let threadName = Thread.current.name, !threadName.isEmpty {\n                    extendedDetails += \"[\\(threadName)] \"\n                }\n                else if let queueName = DispatchQueue.currentQueueLabel, !queueName.isEmpty {\n                    extendedDetails += \"[\\(queueName)] \"\n                }\n                else {\n                    extendedDetails += String(format: \"[%p] \", Thread.current)\n                }\n            }\n        }\n\n        if showFileName {\n            extendedDetails += \"[\\((logDetails.fileName as NSString).lastPathComponent)\\((showLineNumber ? \":\" + String(logDetails.lineNumber) : \"\"))] \"\n        }\n        else if showLineNumber {\n            extendedDetails += \"[\\(logDetails.lineNumber)] \"\n        }\n\n        if showFunctionName {\n            extendedDetails += \"\\(logDetails.functionName) \"\n        }\n\n        output(logDetails: logDetails, message: \"\\(extendedDetails)> \\(logDetails.message)\")\n    }\n\n    /// Process the log details (internal use, same as process(logDetails:) but omits function/file/line info).\n    ///\n    /// - Parameters:\n    ///     - logDetails:   Structure with all of the details for the log to process.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func processInternal(logDetails: LogDetails) {\n        guard let owner = owner else { return }\n\n        var extendedDetails: String = \"\"\n\n        if showDate {\n            extendedDetails += \"\\((owner.dateFormatter != nil) ? owner.dateFormatter!.string(from: logDetails.date) : logDetails.date.description) \"\n        }\n\n        if showLevel {\n            extendedDetails += \"[\\(logDetails.level)] \"\n        }\n\n        if showLogIdentifier {\n            extendedDetails += \"[\\(owner.identifier)] \"\n        }\n\n        output(logDetails: logDetails, message: \"\\(extendedDetails)> \\(logDetails.message)\")\n    }\n\n    // MARK: - Misc methods\n    /// Check if the destination's log level is equal to or lower than the specified level.\n    ///\n    /// - Parameters:\n    ///     - level: The log level to check.\n    ///\n    /// - Returns:\n    ///     - true:     Log destination is at the log level specified or lower.\n    ///     - false:    Log destination is at a higher log level.\n    ///\n    open func isEnabledFor(level: XCGLogger.Level) -> Bool {\n        return level >= self.outputLevel\n    }\n\n    // MARK: - Methods that must be overridden in subclasses\n    /// Output the log to the destination.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:   Formatted/processed message ready for output.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func output(logDetails: LogDetails, message: String) {\n        // Do something with the text in an overridden version of this method\n        precondition(false, \"Must override this\")\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Destinations/BaseQueuedDestination.swift",
    "content": "//\n//  BaseQueuedDestination.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2017-04-02.\n//  Copyright © 2017 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\nimport Foundation\nimport Dispatch\n\n// MARK: - BaseQueuedDestination\n/// A base class destination (with a possible DispatchQueue) that doesn't actually output the log anywhere and is intended to be subclassed\nopen class BaseQueuedDestination: BaseDestination {\n    // MARK: - Properties\n    /// The dispatch queue to process the log on\n    open var logQueue: DispatchQueue? = nil\n\n    // MARK: - Life Cycle\n\n    // MARK: - Overridden Methods\n    /// Apply filters and formatters to the message before queuing it to be written by the write method.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Message ready to be formatted for output.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open override func output(logDetails: LogDetails, message: String) {\n        let outputClosure = {\n            // Create mutable versions of our parameters\n            var logDetails = logDetails\n            var message = message\n\n            // Apply filters, if any indicate we should drop the message, we abort before doing the actual logging\n            guard !self.shouldExclude(logDetails: &logDetails, message: &message) else { return }\n\n            self.applyFormatters(logDetails: &logDetails, message: &message)\n            self.write(message: message)\n        }\n\n        if let logQueue = logQueue {\n            logQueue.async(execute: outputClosure)\n        }\n        else {\n            outputClosure()\n        }\n    }\n\n    // MARK: - Methods that must be overridden in subclasses\n    /// Write the log message to the destination.\n    ///\n    /// - Parameters:\n    ///     - message:   Formatted/processed message ready for output.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func write(message: String) {\n        // Do something with the message in an overridden version of this method\n        precondition(false, \"Must override this\")\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Destinations/ConsoleDestination.swift",
    "content": "//\n//  ConsoleDestination.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2014-06-06.\n//  Copyright © 2014 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\nimport Dispatch\n\n// MARK: - ConsoleDestination\n/// A standard destination that outputs log details to the console\nopen class ConsoleDestination: BaseQueuedDestination {\n    // MARK: - Overridden Methods\n    /// Print the log to the console.\n    ///\n    /// - Parameters:\n    ///     - message:   Formatted/processed message ready for output.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open override func write(message: String) {\n        print(message)\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Destinations/DestinationProtocol.swift",
    "content": "//\n//  DestinationProtocol.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2014-06-06.\n//  Copyright © 2014 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n// MARK: - DestinationProtocol\n/// Protocol for destination classes to conform to\npublic protocol DestinationProtocol: CustomDebugStringConvertible {\n    // MARK: - Properties\n    /// Logger that owns the destination object\n    var owner: XCGLogger? {get set}\n\n    /// Identifier for the destination (should be unique)\n    var identifier: String {get set}\n\n    /// Log level for this destination\n    var outputLevel: XCGLogger.Level {get set}\n\n    /// Flag whether or not we've logged the app details to this destination\n    var haveLoggedAppDetails: Bool { get set }\n\n    /// Array of log formatters to apply to messages before they're output\n    var formatters: [LogFormatterProtocol]? { get set }\n\n    /// Array of log filters to apply to messages before they're output\n    var filters: [FilterProtocol]? { get set }\n\n    // MARK: - Methods\n    /// Process the log details.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   Structure with all of the details for the log to process.\n    ///\n    /// - Returns:  Nothing\n    ///\n    func process(logDetails: LogDetails)\n\n    /// Process the log details (internal use, same as processLogDetails but omits function/file/line info).\n    ///\n    /// - Parameters:\n    ///     - logDetails:   Structure with all of the details for the log to process.\n    ///\n    /// - Returns:  Nothing\n    ///\n    func processInternal(logDetails: LogDetails)\n\n    /// Check if the destination's log level is equal to or lower than the specified level.\n    ///\n    /// - Parameters:\n    ///     - level: The log level to check.\n    ///\n    /// - Returns:\n    ///     - true:     Log destination is at the log level specified or lower.\n    ///     - false:    Log destination is at a higher log level.\n    ///\n    func isEnabledFor(level: XCGLogger.Level) -> Bool\n\n    /// Apply filters to determine if the log message should be logged.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Formatted/processed message ready for output.\n    ///\n    /// - Returns:\n    ///     - true:     Drop this log message.\n    ///     - false:    Keep this log message and continue processing.\n    ///\n    func shouldExclude(logDetails: inout LogDetails, message: inout String) -> Bool\n\n    /// Apply formatters.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Formatted/processed message ready for output.\n    ///\n    /// - Returns:  Nothing\n    ///\n    func applyFormatters(logDetails: inout LogDetails, message: inout String)\n}\n\nextension DestinationProtocol {\n\n    /// Iterate over all of the log filters in this destination, or the logger if none set for the destination.\n    ///\n    /// - Parameters:\n    ///     - logDetails: The log details.\n    ///     - message: Formatted/processed message ready for output.\n    ///\n    /// - Returns:\n    ///     - true:     Drop this log message.\n    ///     - false:    Keep this log message and continue processing.\n    ///\n    public func shouldExclude(logDetails: inout LogDetails, message: inout String) -> Bool {\n        guard let filters = self.filters ?? self.owner?.filters, filters.count > 0 else { return false }\n\n        for filter in filters {\n            if filter.shouldExclude(logDetails: &logDetails, message: &message) {\n                return true\n            }\n        }\n\n        return false\n    }\n\n    /// Iterate over all of the log formatters in this destination, or the logger if none set for the destination.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Formatted/processed message ready for output.\n    ///\n    /// - Returns:  Nothing\n    ///\n    public func applyFormatters(logDetails: inout LogDetails, message: inout String) {\n        guard let formatters = self.formatters ?? self.owner?.formatters, formatters.count > 0 else { return }\n\n        for formatter in formatters {\n            formatter.format(logDetails: &logDetails, message: &message)\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Destinations/FileDestination.swift",
    "content": "//\n//  FileDestination.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2014-06-06.\n//  Copyright © 2014 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\nimport Foundation\nimport Dispatch\n\n// MARK: - FileDestination\n/// A standard destination that outputs log details to a file\nopen class FileDestination: BaseQueuedDestination {\n    // MARK: - Properties\n    /// Logger that owns the destination object\n    open override var owner: XCGLogger? {\n        didSet {\n            if owner != nil {\n                openFile()\n            }\n            else {\n                closeFile()\n            }\n        }\n    }\n\n    /// FileURL of the file to log to\n    open var writeToFileURL: URL? = nil {\n        didSet {\n            openFile()\n        }\n    }\n\n    /// File handle for the log file\n    internal var logFileHandle: FileHandle? = nil\n\n    /// Option: whether or not to append to the log file if it already exists\n    internal var shouldAppend: Bool\n\n    /// Option: if appending to the log file, the string to output at the start to mark where the append took place\n    internal var appendMarker: String?\n\n    /// Option: Attributes to use when creating a new file\n    internal var fileAttributes: [FileAttributeKey: Any]? = nil\n\n    // MARK: - Life Cycle\n    public init(owner: XCGLogger? = nil, writeToFile: Any, identifier: String = \"\", shouldAppend: Bool = false, appendMarker: String? = \"-- ** ** ** --\", attributes: [FileAttributeKey: Any]? = nil) {\n        self.shouldAppend = shouldAppend\n        self.appendMarker = appendMarker\n        self.fileAttributes = attributes\n\n        if writeToFile is NSString {\n            writeToFileURL = URL(fileURLWithPath: writeToFile as! String)\n        }\n        else if let writeToFile = writeToFile as? URL, writeToFile.isFileURL {\n            writeToFileURL = writeToFile\n        }\n        else {\n            writeToFileURL = nil\n        }\n\n        super.init(owner: owner, identifier: identifier)\n\n        if owner != nil {\n            openFile()\n        }\n    }\n\n    deinit {\n        // close file stream if open\n        closeFile()\n    }\n\n    // MARK: - File Handling Methods\n    /// Open the log file for writing.\n    ///\n    /// - Parameters:   None\n    ///\n    /// - Returns:  Nothing\n    ///\n    private func openFile() {\n        guard let owner = owner else { return }\n\n        if logFileHandle != nil {\n            closeFile()\n        }\n\n        guard let writeToFileURL = writeToFileURL else { return }\n\n        let fileManager: FileManager = FileManager.default\n        let fileExists: Bool = fileManager.fileExists(atPath: writeToFileURL.path)\n        if !shouldAppend || !fileExists {\n            fileManager.createFile(atPath: writeToFileURL.path, contents: nil, attributes: fileAttributes)\n        }\n\n        do {\n            logFileHandle = try FileHandle(forWritingTo: writeToFileURL)\n            if fileExists && shouldAppend {\n                logFileHandle?.seekToEndOfFile()\n\n                if let appendMarker = appendMarker,\n                    let encodedData = \"\\(appendMarker)\\n\".data(using: String.Encoding.utf8) {\n\n                    _try({\n                        self.logFileHandle?.write(encodedData)\n                    },\n                    catch: { (exception: NSException) in\n                        print(\"Objective-C Exception occurred: \\(exception)\")\n                    })\n                }\n            }\n        }\n        catch let error as NSError {\n            owner._logln(\"Attempt to open log file for \\(fileExists && shouldAppend ? \"appending\" : \"writing\") failed: \\(error.localizedDescription)\", level: .error, source: self)\n            logFileHandle = nil\n            return\n        }\n\n        owner.logAppDetails(selectedDestination: self)\n\n        let logDetails = LogDetails(level: .info, date: Date(), message: \"XCGLogger \" + (fileExists && shouldAppend ? \"appending\" : \"writing\") + \" log to: \" + writeToFileURL.absoluteString, functionName: \"\", fileName: \"\", lineNumber: 0, userInfo: XCGLogger.Constants.internalUserInfo)\n        owner._logln(logDetails.message, level: logDetails.level, source: self)\n        if owner.destination(withIdentifier: identifier) == nil {\n            processInternal(logDetails: logDetails)\n        }\n    }\n\n    /// Close the log file.\n    ///\n    /// - Parameters:   None\n    ///\n    /// - Returns:  Nothing\n    ///\n    private func closeFile() {\n        logFileHandle?.synchronizeFile()\n        logFileHandle?.closeFile()\n        logFileHandle = nil\n    }\n\n    /// Force any buffered data to be written to the file.\n    ///\n    /// - Parameters:\n    ///     - closure:  An optional closure to execute after the file has been rotated.\n    ///\n    /// - Returns:      Nothing.\n    ///\n    open func flush(closure: (() -> Void)? = nil) {\n        if let logQueue = logQueue {\n            logQueue.async {\n                self.logFileHandle?.synchronizeFile()\n                closure?()\n            }\n        }\n        else {\n            logFileHandle?.synchronizeFile()\n            closure?()\n        }\n    }\n\n    /// Rotate the log file, storing the existing log file in the specified location.\n    ///\n    /// - Parameters:\n    ///     - archiveToFile:    FileURL or path (as String) to where the existing log file should be rotated to.\n    ///     - closure:          An optional closure to execute after the file has been rotated.\n    ///\n    /// - Returns:\n    ///     - true:     Log file rotated successfully.\n    ///     - false:    Error rotating the log file.\n    ///\n    @discardableResult open func rotateFile(to archiveToFile: Any, closure: ((_ success: Bool) -> Void)? = nil) -> Bool {\n        var archiveToFileURL: URL? = nil\n\n        if archiveToFile is NSString {\n            archiveToFileURL = URL(fileURLWithPath: archiveToFile as! String)\n        }\n        else if let archiveToFile = archiveToFile as? URL, archiveToFile.isFileURL {\n            archiveToFileURL = archiveToFile\n        }\n        else {\n            closure?(false)\n            return false\n        }\n\n        if let archiveToFileURL = archiveToFileURL,\n          let writeToFileURL = writeToFileURL {\n\n            let fileManager: FileManager = FileManager.default\n            guard !fileManager.fileExists(atPath: archiveToFileURL.path) else { closure?(false); return false }\n\n            closeFile()\n            haveLoggedAppDetails = false\n\n            do {\n                try fileManager.moveItem(atPath: writeToFileURL.path, toPath: archiveToFileURL.path)\n            }\n            catch let error as NSError {\n                openFile()\n                owner?._logln(\"Unable to rotate file \\(writeToFileURL.path) to \\(archiveToFileURL.path): \\(error.localizedDescription)\", level: .error, source: self)\n                closure?(false)\n                return false\n            }\n\n            do {\n                if let identifierData: Data = identifier.data(using: .utf8) {\n                    try archiveToFileURL.setExtendedAttribute(data: identifierData, forName: XCGLogger.Constants.extendedAttributeArchivedLogIdentifierKey)\n                }\n                if let timestampData: Data = \"\\(Date().timeIntervalSince1970)\".data(using: .utf8) {\n                    try archiveToFileURL.setExtendedAttribute(data: timestampData, forName: XCGLogger.Constants.extendedAttributeArchivedLogTimestampKey)\n                }\n            }\n            catch let error as NSError {\n                owner?._logln(\"Unable to set extended file attributes on file \\(archiveToFileURL.path): \\(error.localizedDescription)\", level: .error, source: self)\n            }\n\n            owner?._logln(\"Rotated file \\(writeToFileURL.path) to \\(archiveToFileURL.path)\", level: .info, source: self)\n            openFile()\n            closure?(true)\n            return true\n        }\n\n        closure?(false)\n        return false\n    }\n\n    // MARK: - Overridden Methods\n    /// Write the log to the log file.\n    ///\n    /// - Parameters:\n    ///     - message:   Formatted/processed message ready for output.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open override func write(message: String) {\n        if let encodedData = \"\\(message)\\n\".data(using: String.Encoding.utf8) {\n            _try({\n                self.logFileHandle?.write(encodedData)\n            },\n            catch: { (exception: NSException) in\n                print(\"Objective-C Exception occurred: \\(exception)\")\n            })\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Destinations/TestDestination.swift",
    "content": "//\n//  TestDestination.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-08-26.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\nimport Dispatch\n\n// MARK: - TestDestination\n/// A destination for testing, preload it with the expected logs, send your logs, then check for success\nopen class TestDestination: BaseQueuedDestination {\n    // MARK: - Properties\n    /// Array of all expected log messages\n    open var expectedLogMessages: [String] = []\n\n    /// Array of received, unexpected log messages\n    open var unexpectedLogMessages: [String] = []\n\n    /// Number of log messages still expected\n    open var remainingNumberOfExpectedLogMessages: Int {\n        get {\n            return expectedLogMessages.count\n        }\n    }\n\n    /// Number of unexpected log messages\n    open var numberOfUnexpectedLogMessages: Int {\n        get {\n            return unexpectedLogMessages.count\n        }\n    }\n\n    /// Add the messages you expect to be logged\n    ///\n    /// - Parameters:\n    ///     - expectedLogMessage:   The log message, formated as you expect it to be received.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func add(expectedLogMessage message: String) {\n        sync {\n            expectedLogMessages.append(message)\n        }\n    }\n\n    /// Execute a closure on the logQueue if it exists, otherwise just execute on the current thread\n    ///\n    /// - Parameters:\n    ///     - closure:  The closure to execute.\n    ///\n    /// - Returns:  Nothing\n    ///\n    fileprivate func sync(closure: () -> ()) {\n        if let logQueue = logQueue {\n            logQueue.sync {\n                closure()\n            }\n        }\n        else {\n            closure()\n        }\n    }\n\n    /// Reset our expectations etc for additional tests\n    ///\n    /// - Parameters:   Nothing\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func reset() {\n        haveLoggedAppDetails = false\n        expectedLogMessages = []\n        unexpectedLogMessages = []\n    }\n\n    // MARK: - Overridden Methods\n    /// Removes line from expected log messages if there's a match, otherwise adds to unexpected log messages.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:   Formatted/processed message ready for output.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open override func output(logDetails: LogDetails, message: String) {\n        sync {\n            var logDetails = logDetails\n            var message = message\n\n            // Apply filters, if any indicate we should drop the message, we abort before doing the actual logging\n            if self.shouldExclude(logDetails: &logDetails, message: &message) {\n                return\n            }\n            \n            applyFormatters(logDetails: &logDetails, message: &message)\n\n            let index = expectedLogMessages.index(of: message)\n            if let index = index {\n                expectedLogMessages.remove(at: index)\n            }\n            else {\n                unexpectedLogMessages.append(message)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Extensions/DispatchQueue+XCGAdditions.swift",
    "content": "//\n//  DispatchQueue+XCGAdditions.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-08-26.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\nimport Dispatch\n\n/// Extensions to the DispatchQueue class\nextension DispatchQueue {\n\n    /// Extract the current dispatch queue's label name (Temp workaround until this is added to Swift 3.0 properly)\n    public static var currentQueueLabel: String? {\n        return String(validatingUTF8: __dispatch_queue_get_label(nil))\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Extensions/URL+XCGAdditions.swift",
    "content": "//\n//  URL+ExtendedAttributes.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2017-04-04.\n//  Copyright © 2017 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n//  Based on code by Martin-R here: https://stackoverflow.com/a/38343753/144857\n\nimport Foundation\n\nextension URL {\n\n    /// Get extended attribute.\n    func extendedAttribute(forName name: String) throws -> Data? {\n        let data: Data? = try self.withUnsafeFileSystemRepresentation { (fileSystemPath: (UnsafePointer<Int8>?)) -> Data? in\n            // Determine attribute size\n            let length = getxattr(fileSystemPath, name, nil, 0, 0, 0)\n            guard length >= 0 else { return nil }\n\n            // Create buffer with required size\n            var data = Data(count: length)\n\n            // Retrieve attribute\n            let result = data.withUnsafeMutableBytes {\n                getxattr(fileSystemPath, name, $0, data.count, 0, 0)\n            }\n            guard result >= 0 else { throw URL.posixError(errno) }\n            return data\n        }\n\n        return data\n    }\n\n    /// Set extended attribute.\n    func setExtendedAttribute(data: Data, forName name: String) throws {\n        try self.withUnsafeFileSystemRepresentation { fileSystemPath in\n            let result = data.withUnsafeBytes {\n                setxattr(fileSystemPath, name, $0, data.count, 0, 0)\n            }\n            guard result >= 0 else { throw URL.posixError(errno) }\n        }\n    }\n\n    /// Remove extended attribute.\n    func removeExtendedAttribute(forName name: String) throws {\n        try self.withUnsafeFileSystemRepresentation { fileSystemPath in\n            let result = removexattr(fileSystemPath, name, 0)\n            guard result >= 0 else { throw URL.posixError(errno) }\n        }\n    }\n\n    /// Get list of all extended attributes.\n    func listExtendedAttributes() throws -> [String] {\n        let list = try self.withUnsafeFileSystemRepresentation { (fileSystemPath: (UnsafePointer<Int8>?)) -> [String] in\n            let length = listxattr(fileSystemPath, nil, 0, 0)\n            guard length >= 0 else { throw URL.posixError(errno) }\n\n            // Create buffer with required size\n            var data = Data(count: length)\n\n            // Retrieve attribute list\n            let result = data.withUnsafeMutableBytes {\n                listxattr(fileSystemPath, $0, data.count, 0)\n            }\n            guard result >= 0 else { throw URL.posixError(errno) }\n\n            // Extract attribute names\n            let list = data.split(separator: 0).flatMap {\n                String(data: Data($0), encoding: .utf8)\n            }\n            return list\n        }\n        return list\n    }\n\n    /// Helper function to create an NSError from a Unix errno.\n    private static func posixError(_ err: Int32) -> NSError {\n        return NSError(domain: NSPOSIXErrorDomain, code: Int(err), userInfo: [NSLocalizedDescriptionKey: String(cString: strerror(err))])\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Filters/DevFilter.swift",
    "content": "//\n//  DevFilter.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-09-01.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n// MARK: - DevFilter\n/// Filter log messages by devs\nopen class DevFilter: UserInfoFilter {\n\n    /// Initializer to create an inclusion list of devs to match against\n    ///\n    /// Note: Only log messages with a specific dev will be logged, all others will be excluded\n    ///\n    /// - Parameters:\n    ///     - devs: Set or Array of devs to match against.\n    ///\n    public override init<S: Sequence>(includeFrom devs: S) where S.Iterator.Element == String {\n        super.init(includeFrom: devs)\n        userInfoKey = XCGLogger.Constants.userInfoKeyDevs\n    }\n\n    /// Initializer to create an exclusion list of devs to match against\n    ///\n    /// Note: Log messages with a specific dev will be excluded from logging\n    ///\n    /// - Parameters:\n    ///     - devs: Set or Array of devs to match against.\n    ///\n    public override init<S: Sequence>(excludeFrom devs: S) where S.Iterator.Element == String {\n        super.init(excludeFrom: devs)\n        userInfoKey = XCGLogger.Constants.userInfoKeyDevs\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Filters/FileNameFilter.swift",
    "content": "//\n//  FileNameFilter.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-08-31.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\nimport Foundation\n\n// MARK: - FileNameFilter\n/// Filter log messages by fileName\nopen class FileNameFilter: FilterProtocol {\n\n    /// Option to toggle the match results\n    open var inverse: Bool = false\n\n    /// Option to match full path or just the fileName\n    private var excludePath: Bool = true\n\n    /// Internal list of fileNames to match against\n    private var fileNamesToMatch: Set<String> = []\n\n    /// Initializer to create an inclusion list of fileNames to match against\n    ///\n    /// Note: Only log messages from the specified files will be logged, all others will be excluded\n    ///\n    /// - Parameters:\n    ///     - fileNames:                Set or Array of fileNames to match against.\n    ///     - excludePathWhenMatching:  Whether or not to ignore the path for matches. **Default: true **\n    ///\n    public init<S: Sequence>(includeFrom fileNames: S, excludePathWhenMatching: Bool = true) where S.Iterator.Element == String {\n        inverse = true\n        excludePath = excludePathWhenMatching\n        add(fileNames: fileNames)\n    }\n\n    /// Initializer to create an exclusion list of fileNames to match against\n    ///\n    /// Note: Log messages from the specified files will be excluded from logging\n    ///\n    /// - Parameters:\n    ///     - fileNames:                Set or Array of fileNames to match against.\n    ///     - excludePathWhenMatching:  Whether or not to ignore the path for matches. **Default: true **\n    ///\n    public init<S: Sequence>(excludeFrom fileNames: S, excludePathWhenMatching: Bool = true) where S.Iterator.Element == String {\n        inverse = false\n        excludePath = excludePathWhenMatching\n        add(fileNames: fileNames)\n    }\n\n    /// Add another fileName to the list of names to match against.\n    ///\n    /// - Parameters:\n    ///     - fileName: Name of the file to match against.\n    ///\n    /// - Returns:\n    ///     - true:     FileName added.\n    ///     - false:    FileName already added.\n    ///\n    @discardableResult open func add(fileName: String) -> Bool {\n        return fileNamesToMatch.insert(excludePath ? (fileName as NSString).lastPathComponent : fileName).inserted\n    }\n\n    /// Add a list of fileNames to the list of names to match against.\n    ///\n    /// - Parameters:\n    ///     - fileNames:    Set or Array of fileNames to match against.\n    ///\n    /// - Returns:          Nothing\n    ///\n    open func add<S: Sequence>(fileNames: S) where S.Iterator.Element == String {\n        for fileName in fileNames {\n            add(fileName: fileName)\n        }\n    }\n\n    /// Clear the list of fileNames to match against.\n    ///\n    /// - Note: Doesn't change whether or not the filter is inclusive of exclusive\n    ///\n    /// - Parameters:   None\n    ///\n    /// - Returns:      Nothing\n    ///\n    open func clear() {\n        fileNamesToMatch = []\n    }\n\n    /// Check if the log message should be excluded from logging.\n    /// \n    /// - Note: If the fileName matches\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Formatted/processed message ready for output.\n    ///\n    /// - Returns:\n    ///     - true:     Drop this log message.\n    ///     - false:    Keep this log message and continue processing.\n    ///\n    open func shouldExclude(logDetails: inout LogDetails, message: inout String) -> Bool {\n        var matched: Bool = fileNamesToMatch.contains(excludePath ? (logDetails.fileName as NSString).lastPathComponent : logDetails.fileName)\n        if inverse {\n            matched = !matched\n        }\n\n        return matched\n    }\n\n    // MARK: - CustomDebugStringConvertible\n    open var debugDescription: String {\n        get {\n            var description: String = \"\\(extractTypeName(self)): \" + (inverse ? \"Including only matches for: \" : \"Excluding matches for: \")\n            if fileNamesToMatch.count > 5 {\n                description += \"\\n\\t- \" + fileNamesToMatch.sorted().joined(separator: \"\\n\\t- \")\n            }\n            else {\n                description += fileNamesToMatch.sorted().joined(separator: \", \")\n            }\n\n            return description\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Filters/FilterProtocol.swift",
    "content": "//\n//  FilterProtocol.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-08-31.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n// MARK: - FilterProtocol\n/// Protocol for log filter classes to conform to\npublic protocol FilterProtocol: CustomDebugStringConvertible {\n\n    /// Check if the log message should be excluded from logging.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Formatted/processed message ready for output.\n    ///\n    /// - Returns:\n    ///     - true:     Drop this log message.\n    ///     - false:    Keep this log message and continue processing.\n    ///\n    func shouldExclude(logDetails: inout LogDetails, message: inout String) -> Bool\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Filters/TagFilter.swift",
    "content": "//\n//  TagFilter.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-09-01.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n// MARK: - TagFilter\n/// Filter log messages by tags\nopen class TagFilter: UserInfoFilter {\n\n    /// Initializer to create an inclusion list of tags to match against\n    ///\n    /// Note: Only log messages with a specific tag will be logged, all others will be excluded\n    ///\n    /// - Parameters:\n    ///     - tags: Set or Array of tags to match against.\n    ///\n    public override init<S: Sequence>(includeFrom tags: S) where S.Iterator.Element == String {\n        super.init(includeFrom: tags)\n        userInfoKey = XCGLogger.Constants.userInfoKeyTags\n    }\n\n    /// Initializer to create an exclusion list of tags to match against\n    ///\n    /// Note: Log messages with a specific tag will be excluded from logging\n    ///\n    /// - Parameters:\n    ///     - tags: Set or Array of tags to match against.\n    ///\n    public override init<S: Sequence>(excludeFrom tags: S) where S.Iterator.Element == String {\n        super.init(excludeFrom: tags)\n        userInfoKey = XCGLogger.Constants.userInfoKeyTags\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Filters/UserInfoFilter.swift",
    "content": "//\n//  UserInfoFilter.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-09-01.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n// MARK: - UserInfoFilter\n/// Filter log messages by the contents of a key in the UserInfo dictionary\n/// Note: - This is intended to be subclassed, unlikely you'll use it directly\nopen class UserInfoFilter: FilterProtocol {\n\n    /// The key to check in the LogDetails.userInfo dictionary\n    open var userInfoKey: String = \"\"\n\n    /// Option to also apply the filter to internal messages (ie, app details, error's opening files etc)\n    open var applyFilterToInternalMessages: Bool = false\n\n    /// Option to toggle the match results\n    open var inverse: Bool = false\n\n    /// Internal list of items to match against\n    private var itemsToMatch: Set<String> = []\n\n    /// Initializer to create an inclusion list of items to match against\n    ///\n    /// Note: Only log messages with a specific item will be logged, all others will be excluded\n    ///\n    /// - Parameters:\n    ///     - items:    Set or Array of items to match against.\n    ///\n    public init<S: Sequence>(includeFrom items: S) where S.Iterator.Element == String {\n        inverse = true\n        add(items: items)\n    }\n\n    /// Initializer to create an exclusion list of items to match against\n    ///\n    /// Note: Log messages with a specific item will be excluded from logging\n    ///\n    /// - Parameters:\n    ///     - items:    Set or Array of items to match against.\n    ///\n    public init<S: Sequence>(excludeFrom items: S) where S.Iterator.Element == String {\n        inverse = false\n        add(items: items)\n    }\n\n    /// Add another fileName to the list of names to match against.\n    ///\n    /// - Parameters:\n    ///     - item: Item to match against.\n    ///\n    /// - Returns:\n    ///     - true:     FileName added.\n    ///     - false:    FileName already added.\n    ///\n    @discardableResult open func add(item: String) -> Bool {\n        return itemsToMatch.insert(item).inserted\n    }\n\n    /// Add a list of fileNames to the list of names to match against.\n    ///\n    /// - Parameters:\n    ///     - items:     Set or Array of fileNames to match against.\n    ///\n    /// - Returns:      Nothing\n    ///\n    open func add<S: Sequence>(items: S) where S.Iterator.Element == String {\n        for item in items {\n            add(item: item)\n        }\n    }\n\n    /// Clear the list of fileNames to match against.\n    ///\n    /// - Note: Doesn't change whether or not the filter is inclusive of exclusive\n    ///\n    /// - Parameters:   None\n    ///\n    /// - Returns:      Nothing\n    ///\n    open func clear() {\n        itemsToMatch = []\n    }\n\n    /// Check if the log message should be excluded from logging.\n    ///\n    /// - Note: If the fileName matches\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Formatted/processed message ready for output.\n    ///\n    /// - Returns:\n    ///     - true:     Drop this log message.\n    ///     - false:    Keep this log message and continue processing.\n    ///\n    open func shouldExclude(logDetails: inout LogDetails, message: inout String) -> Bool {\n        var matched: Bool = false\n\n        if !applyFilterToInternalMessages,\n          let isInternal = logDetails.userInfo[XCGLogger.Constants.userInfoKeyInternal] as? Bool,\n          isInternal {\n            return inverse\n        }\n\n        if let messageItemsObject = logDetails.userInfo[userInfoKey] {\n            if let messageItemsSet: Set<String> = messageItemsObject as? Set<String> {\n                matched = itemsToMatch.intersection(messageItemsSet).count > 0\n            }\n            else if let messageItemsArray: Array<String> = messageItemsObject as? Array<String> {\n                matched = itemsToMatch.intersection(messageItemsArray).count > 0\n            }\n            else if let messageItem = messageItemsObject as? String {\n                matched = itemsToMatch.contains(messageItem)\n            }\n        }\n\n        if inverse {\n            matched = !matched\n        }\n\n        return matched\n    }\n\n    // MARK: - CustomDebugStringConvertible\n    open var debugDescription: String {\n        get {\n            var description: String = \"\\(extractTypeName(self)): \\(applyFilterToInternalMessages ? \"(Filtering Internal) \" : \"\")\" + (inverse ? \"Including only matches for: \" : \"Excluding matches for: \")\n            if itemsToMatch.count > 5 {\n                description += \"\\n\\t- \" + itemsToMatch.sorted().joined(separator: \"\\n\\t- \")\n            }\n            else {\n                description += itemsToMatch.sorted().joined(separator: \", \")\n            }\n            \n            return description\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/LogFormatters/ANSIColorLogFormatter.swift",
    "content": "//\n//  ANSIColorLogFormatter.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-08-30.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n// MARK: - ANSIColorLogFormatter\n/// A log formatter that will add ANSI colour codes to the message\nopen class ANSIColorLogFormatter: LogFormatterProtocol, CustomDebugStringConvertible {\n\n    /// ANSI Escape code\n    public static let escape: String = \"\\u{001b}[\"\n\n    /// ANSI Reset colours code\n    public static let reset: String = \"\\(escape)m\"\n\n    /// Enum to specify ANSI colours\n    public enum ANSIColor: CustomStringConvertible {\n        case black\n        case red\n        case green\n        case yellow\n        case blue\n        case magenta\n        case cyan\n        case lightGrey, lightGray\n        case darkGrey, darkGray\n        case lightRed\n        case lightGreen\n        case lightYellow\n        case lightBlue\n        case lightMagenta\n        case lightCyan\n        case white\n        case `default`\n        case rgb(red: Int, green: Int, blue: Int)\n        case colorIndex(number: Int)\n\n        public var foregroundCode: String {\n            switch self {\n            case .black:\n                return \"30\"\n            case .red:\n                return \"31\"\n            case .green:\n                return \"32\"\n            case .yellow:\n                return \"33\"\n            case .blue:\n                return \"34\"\n            case .magenta:\n                return \"35\"\n            case .cyan:\n                return \"36\"\n            case .lightGrey, .lightGray:\n                return \"37\"\n            case .darkGrey, .darkGray:\n                return \"90\"\n            case .lightRed:\n                return \"91\"\n            case .lightGreen:\n                return \"92\"\n            case .lightYellow:\n                return \"93\"\n            case .lightBlue:\n                return \"94\"\n            case .lightMagenta:\n                return \"95\"\n            case .lightCyan:\n                return \"96\"\n            case .white:\n                return \"97\"\n            case .default: // Note: Different from the default: at the end of a switch, this is the `default` colour\n                return \"39\"\n            case .rgb(let red, let green, let blue):\n                return \"38;2;\\(min(max(0, red), 255));\\(min(max(0, green), 255));\\(min(max(0, blue), 255))\"\n            case .colorIndex(let number):\n                return \"38;5;\\(min(max(0, number), 255))\"\n            }\n        }\n\n        public var backgroundCode: String {\n            switch self {\n            case .black:\n                return \"40\"\n            case .red:\n                return \"41\"\n            case .green:\n                return \"42\"\n            case .yellow:\n                return \"43\"\n            case .blue:\n                return \"44\"\n            case .magenta:\n                return \"45\"\n            case .cyan:\n                return \"46\"\n            case .lightGrey, .lightGray:\n                return \"47\"\n            case .darkGrey, .darkGray:\n                return \"100\"\n            case .lightRed:\n                return \"101\"\n            case .lightGreen:\n                return \"102\"\n            case .lightYellow:\n                return \"103\"\n            case .lightBlue:\n                return \"104\"\n            case .lightMagenta:\n                return \"105\"\n            case .lightCyan:\n                return \"106\"\n            case .white:\n                return \"107\"\n            case .default: // Note: Different from the default: at the end of a switch, this is the `default` colour\n                return \"49\"\n            case .rgb(let red, let green, let blue):\n                return \"48;2;\\(min(max(0, red), 255));\\(min(max(0, green), 255));\\(min(max(0, blue), 255))\"\n            case .colorIndex(let number):\n                return \"48;5;\\(min(max(0, number), 255))\"\n            }\n        }\n\n        /// Human readable description of this colour (CustomStringConvertible)\n        public var description: String {\n            switch self {\n            case .black:\n                return \"Black\"\n            case .red:\n                return \"Red\"\n            case .green:\n                return \"Green\"\n            case .yellow:\n                return \"Yellow\"\n            case .blue:\n                return \"Blue\"\n            case .magenta:\n                return \"Magenta\"\n            case .cyan:\n                return \"Cyan\"\n            case .lightGrey, .lightGray:\n                return \"Light Grey\"\n            case .darkGrey, .darkGray:\n                return \"Dark Grey\"\n            case .lightRed:\n                return \"Light Red\"\n            case .lightGreen:\n                return \"Light Green\"\n            case .lightYellow:\n                return \"Light Yellow\"\n            case .lightBlue:\n                return \"Light Blue\"\n            case .lightMagenta:\n                return \"Light Magenta\"\n            case .lightCyan:\n                return \"Light Cyan\"\n            case .white:\n                return \"White\"\n            case .default: // Note: Different from the default: at the end of a switch, this is the `default` colour\n                return \"Default\"\n            case .rgb(let red, let green, let blue):\n                return String(format: \"(r: %d, g: %d, b: %d) #%02X%02X%02X\", red, green, blue, red, green, blue)\n            case .colorIndex(let number):\n                return \"ANSI color index: \\(number)\"\n            }\n        }\n    }\n\n    /// Enum to specific ANSI options\n    public enum ANSIOption: CustomStringConvertible {\n        case bold\n        case faint\n        case italic\n        case underline\n        case blink\n        case blinkFast\n        case strikethrough\n\n        public var code: String {\n            switch self {\n            case .bold:\n                return \"1\"\n            case .faint:\n                return \"2\"\n            case .italic:\n                return \"3\"\n            case .underline:\n                return \"4\"\n            case .blink:\n                return \"5\"\n            case .blinkFast:\n                return \"6\"\n            case .strikethrough:\n                return \"9\"\n            }\n        }\n\n        public var description: String {\n            switch self {\n            case .bold:\n                return \"Bold\"\n            case .faint:\n                return \"Faint\"\n            case .italic:\n                return \"Italic\"\n            case .underline:\n                return \"Underline\"\n            case .blink:\n                return \"Blink\"\n            case .blinkFast:\n                return \"Blink Fast\"\n            case .strikethrough:\n                return \"Strikethrough\"\n            }\n        }\n    }\n\n    /// Internal cache of the ANSI codes for each log level\n    internal var formatStrings: [XCGLogger.Level: String] = [:]\n\n    /// Internal cache of the description for each log level\n    internal var descriptionStrings: [XCGLogger.Level: String] = [:]\n\n    public init() {\n        resetFormatting()\n    }\n\n    /// Set the colours and/or options for a specific log level.\n    ///\n    /// - Parameters:\n    ///     - level:            The log level.\n    ///     - foregroundColor:  The text colour of the message. **Default:** Restore default text colour\n    ///     - backgroundColor:  The background colour of the message. **Default:** Restore default background colour\n    ///     - options:          Array of ANSIOptions to apply to the message. **Default:** No options\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func colorize(level: XCGLogger.Level, with foregroundColor: ANSIColor = .default, on backgroundColor: ANSIColor = .default, options: [ANSIOption] = []) {\n        var codes: [String] = [foregroundColor.foregroundCode, backgroundColor.backgroundCode]\n        var description: String = \"\\(foregroundColor) on \\(backgroundColor)\"\n\n        for option in options {\n            codes.append(option.code)\n            description += \"/\\(option)\"\n        }\n\n        formatStrings[level] = ANSIColorLogFormatter.escape + codes.joined(separator: \";\") + \"m\"\n        descriptionStrings[level] = description\n    }\n\n    /// Set the colours and/or options for a specific log level.\n    ///\n    /// - Parameters:\n    ///     - level:    The log level.\n    ///     - custom:   A specific ANSI code to use.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func colorize(level: XCGLogger.Level, custom: String) {\n        if custom.hasPrefix(ANSIColorLogFormatter.escape) {\n            formatStrings[level] = \"\\(custom)\"\n            descriptionStrings[level] = \"Custom: \\(custom[custom.index(custom.startIndex, offsetBy: ANSIColorLogFormatter.escape.lengthOfBytes(using: .utf8)) ..< custom.endIndex])\"\n        }\n        else {\n            formatStrings[level] = ANSIColorLogFormatter.escape + \"\\(custom)\"\n            descriptionStrings[level] = \"Custom: \\(custom)\"\n        }\n    }\n\n    /// Get the cached ANSI codes for the specified log level.\n    ///\n    /// - Parameters:\n    ///     - level:            The log level.\n    ///\n    /// - Returns:  The ANSI codes for the specified log level.\n    ///\n    internal func formatString(for level: XCGLogger.Level) -> String {\n        return formatStrings[level] ?? ANSIColorLogFormatter.reset\n    }\n\n    /// Apply a default set of colours.\n    ///\n    /// - Parameters:   None\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func resetFormatting() {\n        colorize(level: .verbose, with: .white, options: [.bold])\n        colorize(level: .debug, with: .black)\n        colorize(level: .info, with: .blue)\n        colorize(level: .warning, with: .yellow)\n        colorize(level: .error, with: .red, options: [.bold])\n        colorize(level: .severe, with: .white, on: .red)\n        colorize(level: .none)\n    }\n\n    /// Clear all previously set colours. (Sets each log level back to default)\n    ///\n    /// - Parameters:   None\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func clearFormatting() {\n        colorize(level: .verbose)\n        colorize(level: .debug)\n        colorize(level: .info)\n        colorize(level: .warning)\n        colorize(level: .error)\n        colorize(level: .severe)\n        colorize(level: .none)\n    }\n\n    // MARK: - LogFormatterProtocol\n    /// Apply some additional formatting to the message if appropriate.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Formatted/processed message ready for output.\n    ///\n    /// - Returns:  message with the additional formatting\n    ///\n    @discardableResult open func format(logDetails: inout LogDetails, message: inout String) -> String {\n        message = \"\\(formatString(for: logDetails.level))\\(message)\\(ANSIColorLogFormatter.reset)\"\n        return message\n    }\n\n    // MARK: - CustomDebugStringConvertible\n    open var debugDescription: String {\n        get {\n            var description: String = \"\\(extractTypeName(self)): \"\n            for level in XCGLogger.Level.all {\n                description += \"\\n\\t- \\(level) > \\(descriptionStrings[level] ?? \"None\")\"\n            }\n\n            return description\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/LogFormatters/Base64LogFormatter.swift",
    "content": "//\n//  Base64LogFormatter.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-08-30.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n// MARK: - Base64LogFormatter\n/// An example log formatter to show how encryption could be used to secure log messages, in this case, we just Base64 encode them\nopen class Base64LogFormatter: LogFormatterProtocol, CustomDebugStringConvertible {\n\n    // MARK: - LogFormatterProtocol\n    /// Apply some additional formatting to the message if appropriate.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Formatted/processed message ready for output.\n    ///\n    /// - Returns:  message with the additional formatting\n    ///\n    @discardableResult open func format(logDetails: inout LogDetails, message: inout String) -> String {\n        guard let utf8Message = message.data(using: .utf8) else { return message }\n\n        message = utf8Message.base64EncodedString()\n        return message\n    }\n\n    /// Initializer, doesn't do anything other than make the class publicly available\n    public init() {\n    }\n\n    // MARK: - CustomDebugStringConvertible\n    open var debugDescription: String {\n        get {\n            return \"\\(extractTypeName(self))\"\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/LogFormatters/LogFormatterProtocol.swift",
    "content": "//\n//  LogFormatterProtocol.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-08-30.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n// MARK: - LogFormatterProtocol\n/// Protocol for log formatter classes to conform to\npublic protocol LogFormatterProtocol: CustomDebugStringConvertible {\n\n    /// Apply some additional formatting to the message if appropriate.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Formatted/processed message ready for output.\n    ///\n    /// - Returns:  Nothing\n    ///\n    @discardableResult func format(logDetails: inout LogDetails, message: inout String) -> String\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/LogFormatters/PrePostFixLogFormatter.swift",
    "content": "//\n//  PrePostFixLogFormatter.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-09-20.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n#if os(macOS)\n    import AppKit\n#elseif os(iOS) || os(tvOS) || os(watchOS)\n    import UIKit\n#endif\n\n// MARK: - PrePostFixLogFormatter\n/// A log formatter that will optionally add a prefix, and/or postfix string to a message\nopen class PrePostFixLogFormatter: LogFormatterProtocol, CustomDebugStringConvertible {\n\n    /// Internal cache of the prefix strings for each log level\n    internal var prefixStrings: [XCGLogger.Level: String] = [:]\n\n    /// Internal cache of the postfix strings codes for each log level\n    internal var postfixStrings: [XCGLogger.Level: String] = [:]\n\n    public init() {\n    }\n\n    /// Set the prefix/postfix strings for a specific log level.\n    ///\n    /// - Parameters:\n    ///     - prefix:   A string to prepend to log messages.\n    ///     - postfix:  A string to postpend to log messages.\n    ///     - level:    The log level.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func apply(prefix: String? = nil, postfix: String? = nil, to level: XCGLogger.Level? = nil) {\n        guard let level = level else {\n            guard prefix != nil || postfix != nil else { clearFormatting(); return }\n\n            // No level specified, so, apply to all levels\n            for level in XCGLogger.Level.all {\n                self.apply(prefix: prefix, postfix: postfix, to: level)\n            }\n            return\n        }\n\n        if let prefix = prefix {\n            prefixStrings[level] = prefix\n        }\n        else {\n            prefixStrings.removeValue(forKey: level)\n        }\n\n        if let postfix = postfix {\n            postfixStrings[level] = postfix\n        }\n        else {\n            postfixStrings.removeValue(forKey: level)\n        }\n    }\n\n    /// Clear all previously set colours. (Sets each log level back to default)\n    ///\n    /// - Parameters:   None\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func clearFormatting() {\n        prefixStrings = [:]\n        postfixStrings = [:]\n    }\n\n    // MARK: - LogFormatterProtocol\n    /// Apply some additional formatting to the message if appropriate.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Formatted/processed message ready for output.\n    ///\n    /// - Returns:  message with the additional formatting\n    ///\n    @discardableResult open func format(logDetails: inout LogDetails, message: inout String) -> String {\n        message = \"\\(prefixStrings[logDetails.level] ?? \"\")\\(message)\\(postfixStrings[logDetails.level] ?? \"\")\"\n        return message\n    }\n\n    // MARK: - CustomDebugStringConvertible\n    open var debugDescription: String {\n        get {\n            var description: String = \"\\(extractTypeName(self)): \"\n            for level in XCGLogger.Level.all {\n                description += \"\\n\\t- \\(level) > \\(prefixStrings[level] ?? \"None\") | \\(postfixStrings[level] ?? \"None\")\"\n            }\n\n            return description\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/LogFormatters/XcodeColorsLogFormatter.swift",
    "content": "//\n//  XcodeColorsLogFormatter.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2016-08-30.\n//  Copyright © 2016 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n#if os(macOS)\n    import AppKit\n#elseif os(iOS) || os(tvOS) || os(watchOS)\n    import UIKit\n#endif\n\n// MARK: - XcodeColorsLogFormatter\n/// A log formatter that will add colour codes for the [XcodeColor plug-in](https://github.com/robbiehanson/XcodeColors) to the message\nopen class XcodeColorsLogFormatter: LogFormatterProtocol, CustomDebugStringConvertible {\n\n    /// XcodeColors escape code\n    public static let escape: String = \"\\u{001b}[\"\n\n    /// XcodeColors code to reset the foreground colour\n    public static let resetForeground = \"\\(escape)fg;\"\n\n    /// XcodeColors code to reset the background colour\n    public static let resetBackground = \"\\(escape)bg;\"\n\n    /// XcodeColors code to reset both the foreground and background colours\n    public static let reset: String = \"\\(escape);\"\n\n    /// Struct to store RGB values\n    public struct XcodeColor: CustomStringConvertible {\n        /// Red component\n        public var red: Int = 0 {\n            didSet {\n                guard red < 0 || red > 255 else { return }\n                red = 0\n            }\n        }\n\n        /// Green component\n        public var green: Int = 0 {\n            didSet {\n                guard green < 0 || green > 255 else { return }\n                green = 0\n            }\n        }\n\n        /// Blue component\n        public var blue: Int = 0 {\n            didSet {\n                guard blue < 0 || blue > 255 else { return }\n                blue = 0\n            }\n        }\n\n        /// Foreground code\n        public var foregroundCode: String {\n            return \"fg\\(red),\\(green),\\(blue)\"\n        }\n\n        /// Background code\n        public var backgroundCode: String {\n            return \"bg\\(red),\\(green),\\(blue)\"\n        }\n\n        public init(red: Int, green: Int, blue: Int) {\n            self.red = red\n            self.green = green\n            self.blue = blue\n        }\n\n        public init(_ red: Int, _ green: Int, _ blue: Int) {\n            self.red = red\n            self.green = green\n            self.blue = blue\n        }\n\n#if os(macOS)\n        public init(color: NSColor) {\n            if let colorSpaceCorrected = color.usingColorSpaceName(NSColorSpaceName.calibratedRGB) {\n                self.red = Int(colorSpaceCorrected.redComponent * 255)\n                self.green = Int(colorSpaceCorrected.greenComponent * 255)\n                self.blue = Int(colorSpaceCorrected.blueComponent * 255)\n            }\n        }\n#elseif os(iOS) || os(tvOS) || os(watchOS)\n        public init(color: UIColor) {\n            var redComponent: CGFloat = 0\n            var greenComponent: CGFloat = 0\n            var blueComponent: CGFloat = 0\n            var alphaComponent: CGFloat = 0\n\n            color.getRed(&redComponent, green: &greenComponent, blue: &blueComponent, alpha:&alphaComponent)\n\n            self.red = Int(redComponent * 255)\n            self.green = Int(greenComponent * 255)\n            self.blue = Int(blueComponent * 255)\n        }\n#endif\n\n        /// Human readable description of this colour (CustomStringConvertible)\n        public var description: String {\n            return String(format: \"(r: %d, g: %d, b: %d) #%02X%02X%02X\", red, green, blue, red, green, blue)\n        }\n\n        /// Preset colour: Red\n        public static let red: XcodeColor = { return XcodeColor(red: 255, green: 0, blue: 0) }()\n\n        /// Preset colour: Green\n        public static let green: XcodeColor = { return XcodeColor(red: 0, green: 255, blue: 0) }()\n\n        /// Preset colour: Blue\n        public static let blue: XcodeColor = { return XcodeColor(red: 0, green: 0, blue: 255) }()\n\n        /// Preset colour: Black\n        public static let black: XcodeColor = { return XcodeColor(red: 0, green: 0, blue: 0) }()\n\n        /// Preset colour: White\n        public static let white: XcodeColor = { return XcodeColor(red: 255, green: 255, blue: 255) }()\n\n        /// Preset colour: Light Grey\n        public static let lightGrey: XcodeColor = { return XcodeColor(red: 211, green: 211, blue: 211) }()\n\n        /// Preset colour: Dark Grey\n        public static let darkGrey: XcodeColor = { return XcodeColor(red: 169, green: 169, blue: 169) }()\n\n        /// Preset colour: Orange\n        public static let orange: XcodeColor = { return XcodeColor(red: 255, green: 165, blue: 0) }()\n\n        /// Preset colour: Purple\n        public static let purple: XcodeColor = { return XcodeColor(red: 170, green: 0, blue: 170) }()\n\n        /// Preset colour: Dark Green\n        public static let darkGreen: XcodeColor = { return XcodeColor(red: 0, green: 128, blue: 0) }()\n\n        /// Preset colour: Cyan\n        public static let cyan: XcodeColor = { return XcodeColor(red: 0, green: 170, blue: 170) }()\n    }\n\n    /// Internal cache of the XcodeColors codes for each log level\n    internal var formatStrings: [XCGLogger.Level: String] = [:]\n\n    /// Internal cache of the description for each log level\n    internal var descriptionStrings: [XCGLogger.Level: String] = [:]\n\n    public init() {\n        resetFormatting()\n    }\n\n    /// Set the colours and/or options for a specific log level.\n    ///\n    /// - Parameters:\n    ///     - level:            The log level.\n    ///     - foregroundColor:  The text colour of the message. **Default:** Restore default text colour\n    ///     - backgroundColor:  The background colour of the message. **Default:** Restore default background colour\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func colorize(level: XCGLogger.Level, with foregroundColor: XcodeColor? = nil, on backgroundColor: XcodeColor? = nil) {\n        guard foregroundColor != nil || backgroundColor != nil else {\n            // neither set, use reset code\n            formatStrings[level] = XcodeColorsLogFormatter.reset\n            descriptionStrings[level] = \"None\"\n            return\n        }\n\n        var formatString: String = \"\"\n\n        if let foregroundColor = foregroundColor {\n            formatString += \"\\(XcodeColorsLogFormatter.escape)fg\\(foregroundColor.red),\\(foregroundColor.green),\\(foregroundColor.blue);\"\n        }\n        else {\n            formatString += XcodeColorsLogFormatter.resetForeground\n        }\n\n        if let backgroundColor = backgroundColor {\n            formatString += \"\\(XcodeColorsLogFormatter.escape)bg\\(backgroundColor.red),\\(backgroundColor.green),\\(backgroundColor.blue);\"\n        }\n        else {\n            formatString += XcodeColorsLogFormatter.resetBackground\n        }\n\n        formatStrings[level] = formatString\n        descriptionStrings[level] = \"\\(foregroundColor?.description ?? \"Default\") on \\(backgroundColor?.description ?? \"Default\")\"\n    }\n\n    /// Get the cached XcodeColors codes for the specified log level.\n    ///\n    /// - Parameters:\n    ///     - level:            The log level.\n    ///\n    /// - Returns:  The XcodeColors codes for the specified log level.\n    ///\n    internal func formatString(for level: XCGLogger.Level) -> String {\n        return formatStrings[level] ?? XcodeColorsLogFormatter.reset\n    }\n\n    /// Apply a default set of colours.\n    ///\n    /// - Parameters:   None\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func resetFormatting() {\n        colorize(level: .verbose, with: .lightGrey)\n        colorize(level: .debug, with: .darkGrey)\n        colorize(level: .info, with: .blue)\n        colorize(level: .warning, with: .orange)\n        colorize(level: .error, with: .red)\n        colorize(level: .severe, with: .white, on: .red)\n        colorize(level: .none)\n    }\n\n    /// Clear all previously set colours. (Sets each log level back to default)\n    ///\n    /// - Parameters:   None\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func clearFormatting() {\n        colorize(level: .verbose)\n        colorize(level: .debug)\n        colorize(level: .info)\n        colorize(level: .warning)\n        colorize(level: .error)\n        colorize(level: .severe)\n        colorize(level: .none)\n    }\n\n    // MARK: - LogFormatterProtocol\n    /// Apply some additional formatting to the message if appropriate.\n    ///\n    /// - Parameters:\n    ///     - logDetails:   The log details.\n    ///     - message:      Formatted/processed message ready for output.\n    ///\n    /// - Returns:  message with the additional formatting\n    ///\n    @discardableResult open func format(logDetails: inout LogDetails, message: inout String) -> String {\n        message = \"\\(formatString(for: logDetails.level))\\(message)\\(XcodeColorsLogFormatter.reset)\"\n        return message\n    }\n\n    // MARK: - CustomDebugStringConvertible\n    open var debugDescription: String {\n        get {\n            var description: String = \"\\(extractTypeName(self)): \"\n            for level in XCGLogger.Level.all {\n                description += \"\\n\\t- \\(level) > \\(descriptionStrings[level] ?? \"None\")\"\n            }\n\n            return description\n        }\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Misc/HelperFunctions.swift",
    "content": "//\n//  HelperFunctions.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2014-06-06.\n//  Copyright © 2014 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\nimport Foundation\nimport ObjcExceptionBridging\n\n/// Extract the type name from the given object\n///\n/// - parameter someObject: the object for which you need the type name\n///\n/// - returns: the type name of the object\nfunc extractTypeName(_ someObject: Any) -> String {\n    return (someObject is Any.Type) ? \"\\(someObject)\" : \"\\(type(of: someObject))\"\n}\n\n// MARK: - Swiftier interface to the Objective-C exception handling functions\n/// Throw an Objective-C exception with the specified name/message/info\n///\n/// - parameter name:     The name of the exception to throw\n/// - parameter message:  The message to include in the exception (why it occurred)\n/// - parameter userInfo: A dictionary with arbitrary info to be passed along with the exception\nfunc _try(_ tryClosure: @escaping () -> (), catch catchClosure: @escaping (_ exception: NSException) -> (), finally finallyClosure: (() -> ())? = nil) {\n    _try_objc(tryClosure, catchClosure, finallyClosure ?? {})\n}\n\n/// Throw an Objective-C exception with the specified name/message/info\n///\n/// - parameter name:     The name of the exception to throw\n/// - parameter message:  The message to include in the exception (why it occurred)\n/// - parameter userInfo: A dictionary with arbitrary info to be passed along with the exception\nfunc _throw(name: String, message: String? = nil, userInfo: [AnyHashable: Any]? = nil) {\n    _throw_objc(NSException(name: NSExceptionName(rawValue: name), reason: message ?? name, userInfo: userInfo))\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/Misc/LogDetails.swift",
    "content": "//\n//  LogDetails.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2014-06-06.\n//  Copyright © 2014 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\nimport Foundation\n\n// MARK: - LogDetails\n/// Data structure to hold all info about a log message, passed to destination classes\npublic struct LogDetails {\n\n    /// Log level required to display this log\n    public var level: XCGLogger.Level\n\n    /// Date this log was sent\n    public var date: Date\n\n    /// The log message to display\n    public var message: String\n\n    /// Name of the function that generated this log\n    public var functionName: String\n\n    /// Name of the file the function exists in\n    public var fileName: String\n\n    /// The line number that generated this log\n    public var lineNumber: Int\n\n    /// Dictionary to store miscellaneous data about the log, can be used by formatters and filters etc. Please prefix any keys to help avoid collissions.\n    public var userInfo: [String: Any]\n\n    public init(level: XCGLogger.Level, date: Date, message: String, functionName: String, fileName: String, lineNumber: Int, userInfo: [String: Any] = [:]) {\n        self.level = level\n        self.date = date\n        self.message = message\n        self.functionName = functionName\n        self.fileName = fileName\n        self.lineNumber = lineNumber\n        self.userInfo = userInfo\n    }\n}\n"
  },
  {
    "path": "Pods/XCGLogger/Sources/XCGLogger/XCGLogger.swift",
    "content": "//\n//  XCGLogger.swift\n//  XCGLogger: https://github.com/DaveWoodCom/XCGLogger\n//\n//  Created by Dave Wood on 2014-06-06.\n//  Copyright © 2014 Dave Wood, Cerebral Gardens.\n//  Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt\n//\n\n#if os(macOS)\n    import AppKit\n#elseif os(iOS) || os(tvOS) || os(watchOS)\n    import UIKit\n#endif\n\n// MARK: - XCGLogger\n/// The main logging class\nopen class XCGLogger: CustomDebugStringConvertible {\n    // MARK: - Constants\n    public struct Constants {\n        /// Prefix identifier to use for all other identifiers\n        public static let baseIdentifier = \"com.cerebralgardens.xcglogger\"\n\n        /// Identifier for the default instance of XCGLogger\n        public static let defaultInstanceIdentifier = \"\\(baseIdentifier).defaultInstance\"\n\n        /// Identifer for the Xcode console destination\n        public static let baseConsoleDestinationIdentifier = \"\\(baseIdentifier).logdestination.console\"\n\n        /// Identifier for the Apple System Log destination\n        public static let systemLogDestinationIdentifier = \"\\(baseIdentifier).logdestination.console.nslog\"\n\n        /// Identifier for the file logging destination\n        public static let fileDestinationIdentifier = \"\\(baseIdentifier).logdestination.file\"\n\n        /// Identifier for the default dispatch queue\n        public static let logQueueIdentifier = \"\\(baseIdentifier).queue\"\n\n        /// UserInfo Key - tags\n        public static let userInfoKeyTags = \"\\(baseIdentifier).tags\"\n\n        /// UserInfo Key - devs\n        public static let userInfoKeyDevs = \"\\(baseIdentifier).devs\"\n\n        /// UserInfo Key - internal\n        public static let userInfoKeyInternal = \"\\(baseIdentifier).internal\"\n\n        /// Library version number\n        public static let versionString = \"6.0.1\"\n\n        /// Internal userInfo\n        internal static let internalUserInfo: [String: Any] = [XCGLogger.Constants.userInfoKeyInternal: true]\n\n        /// Extended file attributed key to use when storing the logger's identifier on an archived log file\n        public static let extendedAttributeArchivedLogIdentifierKey = \"\\(baseIdentifier).archived.by\"\n\n        /// Extended file attributed key to use when storing the time a log file was archived\n        public static let extendedAttributeArchivedLogTimestampKey = \"\\(baseIdentifier).archived.at\"\n    }\n\n    // MARK: - Enums\n    /// Enum defining our log levels\n    public enum Level: Int, Comparable, CustomStringConvertible {\n        case verbose\n        case debug\n        case info\n        case warning\n        case error\n        case severe\n        case none\n\n        public var description: String {\n            switch self {\n            case .verbose:\n                return \"Verbose\"\n            case .debug:\n                return \"Debug\"\n            case .info:\n                return \"Info\"\n            case .warning:\n                return \"Warning\"\n            case .error:\n                return \"Error\"\n            case .severe:\n                return \"Severe\"\n            case .none:\n                return \"None\"\n            }\n        }\n\n        public static let all: [Level] = [.verbose, .debug, .info, .warning, .error, .severe]\n    }\n\n    // MARK: - Default instance\n    /// The default XCGLogger object\n    open static var `default`: XCGLogger = {\n        struct Statics {\n            static let instance: XCGLogger = XCGLogger(identifier: XCGLogger.Constants.defaultInstanceIdentifier)\n        }\n\n        return Statics.instance\n    }()\n\n    // MARK: - Properties\n    /// Identifier for this logger object (should be unique)\n    open var identifier: String = \"\"\n\n    /// The log level of this logger, any logs received at this level or higher will be output to the destinations\n    open var outputLevel: Level = .debug {\n        didSet {\n            for index in 0 ..< destinations.count {\n                destinations[index].outputLevel = outputLevel\n            }\n        }\n    }\n\n    /// Option: a closure to execute whenever a logging method is called without a log message\n    open var noMessageClosure: () -> Any? = { return \"\" }\n\n    /// Option: override descriptions of log levels\n    open var levelDescriptions: [XCGLogger.Level: String] = [:]\n\n    /// Array of log formatters to apply to messages before they're output\n    open var formatters: [LogFormatterProtocol]? = nil\n\n    /// Array of log filters to apply to messages before they're output\n    open var filters: [FilterProtocol]? = nil\n\n    /// The default dispatch queue used for logging\n    open class var logQueue: DispatchQueue {\n        struct Statics {\n            static var logQueue = DispatchQueue(label: XCGLogger.Constants.logQueueIdentifier, attributes: [])\n        }\n\n        return Statics.logQueue\n    }\n\n    /// A custom date formatter object to use when displaying the dates of log messages (internal storage)\n    internal var _customDateFormatter: DateFormatter? = nil\n    /// The date formatter object to use when displaying the dates of log messages\n    open var dateFormatter: DateFormatter? {\n        get {\n            guard _customDateFormatter == nil else { return _customDateFormatter }\n            struct Statics {\n                static var dateFormatter: DateFormatter = {\n                    let defaultDateFormatter = DateFormatter()\n                    defaultDateFormatter.locale = NSLocale.current\n                    defaultDateFormatter.dateFormat = \"yyyy-MM-dd HH:mm:ss.SSS\"\n                    return defaultDateFormatter\n                }()\n            }\n\n            return Statics.dateFormatter\n        }\n        set {\n            _customDateFormatter = newValue\n        }\n    }\n\n    /// Array containing all of the destinations for this logger\n    open var destinations: [DestinationProtocol] = []\n\n    // MARK: - Life Cycle\n    public init(identifier: String = \"\", includeDefaultDestinations: Bool = true) {\n        self.identifier = identifier\n\n        if includeDefaultDestinations {\n            // Setup a standard console destination\n            add(destination: ConsoleDestination(identifier: XCGLogger.Constants.baseConsoleDestinationIdentifier))\n        }\n    }\n\n    // MARK: - Setup methods\n    /// A shortcut method to configure the default logger instance.\n    ///\n    /// - Note: The function exists to get you up and running quickly, but it's recommended that you use the advanced usage configuration for most projects. See https://github.com/DaveWoodCom/XCGLogger/blob/master/README.md#advanced-usage-recommended\n    ///\n    /// - Parameters:\n    ///     - level: The log level of this logger, any logs received at this level or higher will be output to the destinations. **Default:** Debug\n    ///     - showLogIdentifier: Whether or not to output the log identifier. **Default:** false\n    ///     - showFunctionName: Whether or not to output the function name that generated the log. **Default:** true\n    ///     - showThreadName: Whether or not to output the thread's name the log was created on. **Default:** false\n    ///     - showLevel: Whether or not to output the log level of the log. **Default:** true\n    ///     - showFileNames: Whether or not to output the fileName that generated the log. **Default:** true\n    ///     - showLineNumbers: Whether or not to output the line number where the log was generated. **Default:** true\n    ///     - showDate: Whether or not to output the date the log was created. **Default:** true\n    ///     - writeToFile: FileURL or path (as String) to a file to log all messages to (this file is overwritten each time the logger is created). **Default:** nil => no log file\n    ///     - fileLevel: An alternate log level for the file destination. **Default:** nil => use the same log level as the console destination\n    ///\n    /// - Returns:  Nothing\n    ///\n    open class func setup(level: Level = .debug, showLogIdentifier: Bool = false, showFunctionName: Bool = true, showThreadName: Bool = false, showLevel: Bool = true, showFileNames: Bool = true, showLineNumbers: Bool = true, showDate: Bool = true, writeToFile: Any? = nil, fileLevel: Level? = nil) {\n        self.default.setup(level: level, showLogIdentifier: showLogIdentifier, showFunctionName: showFunctionName, showThreadName: showThreadName, showLevel: showLevel, showFileNames: showFileNames, showLineNumbers: showLineNumbers, showDate: showDate, writeToFile: writeToFile)\n    }\n\n    /// A shortcut method to configure the logger.\n    ///\n    /// - Note: The function exists to get you up and running quickly, but it's recommended that you use the advanced usage configuration for most projects. See https://github.com/DaveWoodCom/XCGLogger/blob/master/README.md#advanced-usage-recommended\n    ///\n    /// - Parameters:\n    ///     - level: The log level of this logger, any logs received at this level or higher will be output to the destinations. **Default:** Debug\n    ///     - showLogIdentifier: Whether or not to output the log identifier. **Default:** false\n    ///     - showFunctionName: Whether or not to output the function name that generated the log. **Default:** true\n    ///     - showThreadName: Whether or not to output the thread's name the log was created on. **Default:** false\n    ///     - showLevel: Whether or not to output the log level of the log. **Default:** true\n    ///     - showFileNames: Whether or not to output the fileName that generated the log. **Default:** true\n    ///     - showLineNumbers: Whether or not to output the line number where the log was generated. **Default:** true\n    ///     - showDate: Whether or not to output the date the log was created. **Default:** true\n    ///     - writeToFile: FileURL or path (as String) to a file to log all messages to (this file is overwritten each time the logger is created). **Default:** nil => no log file\n    ///     - fileLevel: An alternate log level for the file destination. **Default:** nil => use the same log level as the console destination\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func setup(level: Level = .debug, showLogIdentifier: Bool = false, showFunctionName: Bool = true, showThreadName: Bool = false, showLevel: Bool = true, showFileNames: Bool = true, showLineNumbers: Bool = true, showDate: Bool = true, writeToFile: Any? = nil, fileLevel: Level? = nil) {\n        outputLevel = level\n\n        if let standardConsoleDestination = destination(withIdentifier: XCGLogger.Constants.baseConsoleDestinationIdentifier) as? ConsoleDestination {\n            standardConsoleDestination.showLogIdentifier = showLogIdentifier\n            standardConsoleDestination.showFunctionName = showFunctionName\n            standardConsoleDestination.showThreadName = showThreadName\n            standardConsoleDestination.showLevel = showLevel\n            standardConsoleDestination.showFileName = showFileNames\n            standardConsoleDestination.showLineNumber = showLineNumbers\n            standardConsoleDestination.showDate = showDate\n            standardConsoleDestination.outputLevel = level\n        }\n\n        if let writeToFile: Any = writeToFile {\n            // We've been passed a file to use for logging, set up a file logger\n            let standardFileDestination: FileDestination = FileDestination(writeToFile: writeToFile, identifier: XCGLogger.Constants.fileDestinationIdentifier)\n\n            standardFileDestination.showLogIdentifier = showLogIdentifier\n            standardFileDestination.showFunctionName = showFunctionName\n            standardFileDestination.showThreadName = showThreadName\n            standardFileDestination.showLevel = showLevel\n            standardFileDestination.showFileName = showFileNames\n            standardFileDestination.showLineNumber = showLineNumbers\n            standardFileDestination.showDate = showDate\n            standardFileDestination.outputLevel = fileLevel ?? level\n\n            add(destination: standardFileDestination)\n        }\n\n        logAppDetails()\n    }\n\n    // MARK: - Logging methods\n    /// Log a message if the logger's log level is equal to or lower than the specified level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - level:        Specified log level **Default:** *Debug*.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing\n    ///\n    open class func logln(_ closure: @autoclosure () -> Any?, level: Level = .debug, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(level, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log a message if the logger's log level is equal to or lower than the specified level.\n    ///\n    /// - Parameters:\n    ///     - level:        Specified log level **Default:** *Debug*.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open class func logln(_ level: Level = .debug, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.default.logln(level, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log a message if the logger's log level is equal to or lower than the specified level.\n    ///\n    /// - Parameters:\n    ///     - level:        Specified log level **Default:** *Debug*.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open class func logln(_ level: Level = .debug, functionName: String = #function, fileName: String = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.default.logln(level, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log a message if the logger's log level is equal to or lower than the specified level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - level:        Specified log level **Default:** *Debug*.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func logln(_ closure: @autoclosure () -> Any?, level: Level = .debug, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(level, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log a message if the logger's log level is equal to or lower than the specified level.\n    ///\n    /// - Parameters:\n    ///     - level:        Specified log level **Default:** *Debug*.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func logln(_ level: Level = .debug, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        logln(level, functionName: String(describing: functionName), fileName: String(describing: fileName), lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log a message if the logger's log level is equal to or lower than the specified level.\n    ///\n    /// - Parameters:\n    ///     - level:        Specified log level **Default:** *Debug*.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing\n    ///\n    open func logln(_ level: Level = .debug, functionName: String = #function, fileName: String = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        let enabledDestinations = destinations.filter({$0.isEnabledFor(level: level)})\n        guard enabledDestinations.count > 0 else { return }\n        guard let closureResult = closure() else { return }\n\n        let logDetails: LogDetails = LogDetails(level: level, date: Date(), message: String(describing: closureResult), functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo)\n        for destination in enabledDestinations {\n            destination.process(logDetails: logDetails)\n        }\n    }\n\n    /// Execute some code only when at the specified log level.\n    ///\n    /// - Parameters:\n    ///     - level:    Specified log level **Default:** *Debug*.\n    ///     - closure:  The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func exec(_ level: Level = .debug, closure: () -> () = {}) {\n        self.default.exec(level, closure: closure)\n    }\n\n    /// Execute some code only when at the specified log level.\n    ///\n    /// - Parameters:\n    ///     - level:     Specified log level **Default:** *Debug*.\n    ///     - closure:   The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func exec(_ level: Level = .debug, closure: () -> () = {}) {\n        guard isEnabledFor(level:level) else { return }\n\n        closure()\n    }\n\n    /// Generate logs to display your app's vitals (app name, version, etc) as well as XCGLogger's version and log level.\n    ///\n    /// - Parameters:\n    ///     - selectedDestination:     A specific destination to log the vitals on, if omitted, will log to all destinations\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func logAppDetails(selectedDestination: DestinationProtocol? = nil) {\n        let date = Date()\n\n        var buildString = \"\"\n        if let infoDictionary = Bundle.main.infoDictionary {\n            if let CFBundleShortVersionString = infoDictionary[\"CFBundleShortVersionString\"] as? String {\n                buildString = \"Version: \\(CFBundleShortVersionString) \"\n            }\n            if let CFBundleVersion = infoDictionary[\"CFBundleVersion\"] as? String {\n                buildString += \"Build: \\(CFBundleVersion) \"\n            }\n        }\n\n        let processInfo: ProcessInfo = ProcessInfo.processInfo\n        let XCGLoggerVersionNumber = XCGLogger.Constants.versionString\n\n        var logDetails: [LogDetails] = []\n        logDetails.append(LogDetails(level: .info, date: date, message: \"\\(processInfo.processName) \\(buildString)PID: \\(processInfo.processIdentifier)\", functionName: \"\", fileName: \"\", lineNumber: 0, userInfo: XCGLogger.Constants.internalUserInfo))\n        logDetails.append(LogDetails(level: .info, date: date, message: \"XCGLogger Version: \\(XCGLoggerVersionNumber) - Level: \\(outputLevel)\", functionName: \"\", fileName: \"\", lineNumber: 0, userInfo: XCGLogger.Constants.internalUserInfo))\n\n        for var destination in (selectedDestination != nil ? [selectedDestination!] : destinations) where !destination.haveLoggedAppDetails {\n            for logDetail in logDetails {\n                guard destination.isEnabledFor(level:.info) else { continue }\n\n                destination.haveLoggedAppDetails = true\n                destination.processInternal(logDetails: logDetail)\n            }\n        }\n    }\n\n    // MARK: - Convenience logging methods\n    // MARK: * Verbose\n    /// Log something at the Verbose log level. This format of verbose() isn't provided the object to log, instead the property `noMessageClosure` is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func verbose(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure)\n    }\n\n    /// Log something at the Verbose log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func verbose(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Verbose log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func verbose(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.default.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Verbose log level. This format of verbose() isn't provided the object to log, instead the property *`noMessageClosure`* is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func verbose(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure)\n    }\n\n    /// Log something at the Verbose log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func verbose(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Verbose log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func verbose(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    // MARK: * Debug\n    /// Log something at the Debug log level. This format of debug() isn't provided the object to log, instead the property `noMessageClosure` is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func debug(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure)\n    }\n\n    /// Log something at the Debug log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func debug(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Debug log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func debug(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.default.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Debug log level. This format of debug() isn't provided the object to log, instead the property `noMessageClosure` is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func debug(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure)\n    }\n\n    /// Log something at the Debug log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func debug(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Debug log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func debug(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    // MARK: * Info\n    /// Log something at the Info log level. This format of info() isn't provided the object to log, instead the property `noMessageClosure` is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func info(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure)\n    }\n\n    /// Log something at the Info log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func info(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Info log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func info(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.default.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Info log level. This format of info() isn't provided the object to log, instead the property `noMessageClosure` is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func info(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure)\n    }\n\n    /// Log something at the Info log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func info(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Info log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func info(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    // MARK: * Warning\n    /// Log something at the Warning log level. This format of warning() isn't provided the object to log, instead the property `noMessageClosure` is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func warning(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure)\n    }\n\n    /// Log something at the Warning log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func warning(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Warning log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func warning(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.default.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Warning log level. This format of warning() isn't provided the object to log, instead the property `noMessageClosure` is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func warning(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure)\n    }\n\n    /// Log something at the Warning log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func warning(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Warning log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func warning(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    // MARK: * Error\n    /// Log something at the Error log level. This format of error() isn't provided the object to log, instead the property `noMessageClosure` is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func error(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure)\n    }\n\n    /// Log something at the Error log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func error(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Error log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func error(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.default.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Error log level. This format of error() isn't provided the object to log, instead the property `noMessageClosure` is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func error(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure)\n    }\n\n    /// Log something at the Error log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func error(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Error log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func error(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    // MARK: * Severe\n    /// Log something at the Severe log level. This format of severe() isn't provided the object to log, instead the property `noMessageClosure` is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func severe(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure)\n    }\n\n    /// Log something at the Severe log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func severe(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.default.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Severe log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func severe(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.default.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Severe log level. This format of severe() isn't provided the object to log, instead the property `noMessageClosure` is executed instead.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func severe(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure)\n    }\n\n    /// Log something at the Severe log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      A closure that returns the object to be logged.\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func severe(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) {\n        self.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    /// Log something at the Severe log level.\n    ///\n    /// - Parameters:\n    ///     - functionName: Normally omitted **Default:** *#function*.\n    ///     - fileName:     Normally omitted **Default:** *#file*.\n    ///     - lineNumber:   Normally omitted **Default:** *#line*.\n    ///     - userInfo:     Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc\n    ///     - closure:      A closure that returns the object to be logged.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func severe(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) {\n        self.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure)\n    }\n\n    // MARK: - Exec Methods\n    // MARK: * Verbose\n    /// Execute some code only when at the Verbose log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func verboseExec(_ closure: () -> () = {}) {\n        self.default.exec(XCGLogger.Level.verbose, closure: closure)\n    }\n\n    /// Execute some code only when at the Verbose log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func verboseExec(_ closure: () -> () = {}) {\n        self.exec(XCGLogger.Level.verbose, closure: closure)\n    }\n\n    // MARK: * Debug\n    /// Execute some code only when at the Debug or lower log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func debugExec(_ closure: () -> () = {}) {\n        self.default.exec(XCGLogger.Level.debug, closure: closure)\n    }\n\n    /// Execute some code only when at the Debug or lower log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func debugExec(_ closure: () -> () = {}) {\n        self.exec(XCGLogger.Level.debug, closure: closure)\n    }\n\n    // MARK: * Info\n    /// Execute some code only when at the Info or lower log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func infoExec(_ closure: () -> () = {}) {\n        self.default.exec(XCGLogger.Level.info, closure: closure)\n    }\n\n    /// Execute some code only when at the Info or lower log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func infoExec(_ closure: () -> () = {}) {\n        self.exec(XCGLogger.Level.info, closure: closure)\n    }\n\n    // MARK: * Warning\n    /// Execute some code only when at the Warning or lower log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func warningExec(_ closure: () -> () = {}) {\n        self.default.exec(XCGLogger.Level.warning, closure: closure)\n    }\n\n    /// Execute some code only when at the Warning or lower log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func warningExec(_ closure: () -> () = {}) {\n        self.exec(XCGLogger.Level.warning, closure: closure)\n    }\n\n    // MARK: * Error\n    /// Execute some code only when at the Error or lower log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func errorExec(_ closure: () -> () = {}) {\n        self.default.exec(XCGLogger.Level.error, closure: closure)\n    }\n\n    /// Execute some code only when at the Error or lower log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func errorExec(_ closure: () -> () = {}) {\n        self.exec(XCGLogger.Level.error, closure: closure)\n    }\n\n    // MARK: * Severe\n    /// Execute some code only when at the Severe log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open class func severeExec(_ closure: () -> () = {}) {\n        self.default.exec(XCGLogger.Level.severe, closure: closure)\n    }\n\n    /// Execute some code only when at the Severe log level.\n    ///\n    /// - Parameters:\n    ///     - closure:      The code closure to be executed.\n    ///\n    /// - Returns:  Nothing.\n    ///\n    open func severeExec(_ closure: () -> () = {}) {\n        self.exec(XCGLogger.Level.severe, closure: closure)\n    }\n\n    // MARK: - Log destination methods\n    /// Get the destination with the specified identifier.\n    ///\n    /// - Parameters:\n    ///     - identifier:   Identifier of the destination to return.\n    ///\n    /// - Returns:  The destination with the specified identifier, if one exists, nil otherwise.\n    /// \n    open func destination(withIdentifier identifier: String) -> DestinationProtocol? {\n        for destination in destinations {\n            if destination.identifier == identifier {\n                return destination\n            }\n        }\n\n        return nil\n    }\n\n    /// Add a new destination to the logger.\n    ///\n    /// - Parameters:\n    ///     - destination:   The destination to add.\n    ///\n    /// - Returns:\n    ///     - true:     Log destination was added successfully.\n    ///     - false:    Failed to add the destination.\n    ///\n    @discardableResult open func add(destination: DestinationProtocol) -> Bool {\n        var destination = destination\n\n        let existingDestination: DestinationProtocol? = self.destination(withIdentifier: destination.identifier)\n        if existingDestination != nil {\n            return false\n        }\n\n        if let previousOwner = destination.owner {\n            previousOwner.remove(destination: destination)\n        }\n\n        destination.owner = self\n        destinations.append(destination)\n        return true\n    }\n\n    /// Remove the destination from the logger.\n    ///\n    /// - Parameters:\n    ///     - destination:   The destination to remove.\n    ///\n    /// - Returns:\n    ///     - true:     Log destination was removed successfully.\n    ///     - false:    Failed to remove the destination.\n    ///\n    @discardableResult open func remove(destination: DestinationProtocol) -> Bool {\n        guard destination.owner === self else { return false }\n\n        let existingDestination: DestinationProtocol? = self.destination(withIdentifier: destination.identifier)\n        guard existingDestination != nil else { return false }\n\n        // Make our parameter mutable\n        var destination = destination\n        destination.owner = nil\n\n        destinations = destinations.filter({$0.owner != nil})\n        return true\n    }\n\n    /// Remove the destination with the specified identifier from the logger.\n    ///\n    /// - Parameters:\n    ///     - identifier:   The identifier of the destination to remove.\n    ///\n    /// - Returns:\n    ///     - true:     Log destination was removed successfully.\n    ///     - false:    Failed to remove the destination.\n    ///\n    @discardableResult open func remove(destinationWithIdentifier identifier: String) -> Bool {\n        guard let destination = destination(withIdentifier: identifier) else { return false }\n        return remove(destination: destination)\n    }\n\n    // MARK: - Misc methods\n    /// Check if the logger's log level is equal to or lower than the specified level.\n    ///\n    /// - Parameters:\n    ///     - level: The log level to check.\n    ///\n    /// - Returns:\n    ///     - true:     Logger is at the log level specified or lower.\n    ///     - false:    Logger is at a higher log levelss.\n    ///\n    open func isEnabledFor(level: XCGLogger.Level) -> Bool {\n        return level >= self.outputLevel\n    }\n\n    // MARK: - Private methods\n    /// Log a message if the logger's log level is equal to or lower than the specified level.\n    ///\n    /// - Parameters:\n    ///     - message:   Message to log.\n    ///     - level:     Specified log level.\n    ///     - source:    The destination calling this method\n    ///\n    /// - Returns:  Nothing\n    ///\n    internal func _logln(_ message: String, level: Level = .debug, source sourceDestination: DestinationProtocol? = nil) {\n        let logDetails: LogDetails = LogDetails(level: level, date: Date(), message: message, functionName: \"\", fileName: \"\", lineNumber: 0, userInfo: XCGLogger.Constants.internalUserInfo)\n        for destination in self.destinations {\n            if level >= .error && sourceDestination?.identifier == destination.identifier { continue }\n            if (destination.isEnabledFor(level: level)) {\n                destination.processInternal(logDetails: logDetails)\n            }\n        }\n    }\n\n    // MARK: - DebugPrintable\n    open var debugDescription: String {\n        get {\n            var description: String = \"\\(extractTypeName(self)): \\(identifier) - destinations: \\r\"\n            for destination in destinations {\n                description += \"\\t \\(destination.debugDescription)\\r\"\n            }\n\n            return description\n        }\n    }\n}\n\n// Implement Comparable for XCGLogger.Level\npublic func < (lhs: XCGLogger.Level, rhs: XCGLogger.Level) -> Bool {\n    return lhs.rawValue < rhs.rawValue\n}\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n  <img width=\"40%\" height=\"40%\" src=\"https://github.com/intelygenz/Archit-iOS/raw/develop/Logo.png\">\n</p>\n\n# Intelygenz iOS Architecture\n\n[![Twitter](https://img.shields.io/badge/contact-@intelygenz-0FABFF.svg?style=flat)](http://twitter.com/intelygenz)\n[![Build Status](https://travis-ci.org/intelygenz/Archit-iOS.svg?branch=master)](https://travis-ci.org/intelygenz/Archit-iOS)\n[![License](https://img.shields.io/github/license/intelygenz/Archit-iOS.svg?style=flat)](https://github.com/intelygenz/Archit-iOS/blob/master/LICENSE)\n[![codebeat badge](https://codebeat.co/badges/fbe5c86d-c2b3-4d7d-9ba0-93b72508e310)](https://codebeat.co/projects/github-com-intelygenz-archit-ios-master)\n\nThis repository contains an iOS architecture documentation with a sample application that uses [OMDb API](http://www.omdbapi.com) and implements the Archit architecture.\n\n## 🔨 Xcode Configuration\n\n* You should enable **Xcode Text Editing** options:\n\t1. Line numbers. (Specify a line to a mate or search for a crash)\n\t2. Code folding ribbon. (Optional)\n\t3. Page guide at column: 140 (No line should exceed it, so we will all read the same code)\n\t4. Including whitespace-only lines. (Lighter files)\n\n\t![Xcode Text Editing](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/xcode_text_editing.png)\n \n## 🔧 Project Configuration\n\n* Create your application **core framework**:\n\n\tOpen Xcode and select File -> New -> Target...\n\n\t![New Target](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/new_target.png)\n\n\tSelect Cocoa Touch Framework:\n\n\t![Cocoa Touch Framework](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/cocoa_touch_framework.png)\n\n\tConfigure your application core:\n\n\t![New Core](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/new_core.png)\n\n\tThis core framework will include API clients, persistence... everything you need to reuse in the future, for example, in an application extension.\n\n\tRemember provide protocols for every service or storage that you create, everything must work syncronous.\n\n\tDon't import to the core framework anything related with UIKit or any other forbidden framework or dependency (pod) in an application extension.\n\tIf you need it in the future, you can make an extension in the application target.\n \n* Create your application **domain framework**:\n\n\tThis domain framework will include domain models.\n\t\n\tDon't import to the domain framework anything related with UIKit or any other forbidden framework or dependency (pod) in an application extension.\n\tIf you need it in the future, you can make an extension in the application target.\n\n* Configure the **schemes**:\n\n\tEdit all schemes:\n\n\t![Edit Scheme](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/edit_scheme.png)\n\n\tFor each scheme, enable \"Gather Coverage Data\" option and \"Share\" the scheme:\n\n\t![Gather Coverage Data](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/gather_coverage_data.png)\n\n\tIn the Breakpoint navigator, create an \"Exception Breakpoint...\":\n\n\t![Exception Breakpoint](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/exception_breakpoint.png)\n\n\tAnd \"Share Breakpoint\":\n\n\t![Share Breakpoint](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/share_breakpoint.png)\n\n\tAlso create a \"Symbolic Breakpoint...\" with \"UIViewAlertForUnsatisfiableConstraints\" as \"Symbol\" and \"Share Breakpoint\":\n\n\t![Unsatisfiable Constraints Breakpoint](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/unsatisfiable_constraints_breakpoint.png)\n\n## 🤓 Usage\n\n### AppManager\n\nWe delegate all responsibilities of the AppDelegate to an AppManager under our control, testable and that will be in charge of initializing all third-party frameworks that need initialization in the didFinishLaunching for example.\n\nIn addition, if we need location services, notifications, etc. We will create independent managers for each of them, and only their implementation will have access to the specific frameworks.\n\n![AppManager](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/app_manager.png)\n\n### VCI (ViewController Controller Interactor)\n\nWe will create base view controllers for each of the native view controllers we need, all the application view controllers will inherit from these base view controllers.\n\nEach view controller will be injected with the corresponding controller depending on whether we are developing, testing or in production, so we can mock what we want.\n\nEach controller will have an interactor who will be in charge of calling the asynchronous core framework tasks, generating a [Kommand](https://github.com/intelygenz/Kommander-iOS/blob/master/Source/Kommand.swift) and passing it to the controller for execution and response handling.\n\n![VCI (ViewController Controller Interactor)](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/vci.png)\n\n### Core Framework\n\nOnly the StorageManager knows the existence of the persistence framework that is used.\n\nThere will be intermediate StorageModels to map/parse the application model and store/update/fetch them in the database.\n\nOnly the HTTPClient knows the existence of the networking framework that is used.\n\nThere will be intermediate NetworkModels to map/parse the application model and get/post/put them to the network.\n\nThe service has tasks for each network API call related with the same context (application model, use case, web service).\n\n![Core Framework](https://raw.githubusercontent.com/intelygenz/Archit-iOS/master/Resources/core_framework.png)\n\n### CocoaPods\n\nEvery networking layer must be implemented around **[Net](https://github.com/intelygenz/NetClient-iOS/blob/master/Core/Net.swift)** protocol.\n\nBy default, we'll use **[NetClient](https://github.com/intelygenz/NetClient-iOS)** for networking.\n\nWe can use **[Kommander](https://github.com/intelygenz/Kommander-iOS)** to manage asynchronous processes, but always outside the **[Core Framework](#core-framework)**.\n\nTo instantiate or reuse Storyboards, ViewControllers, Views, UITableViewCells or UICollectionViewCells, you must use **[Reusable](https://github.com/AliSoftware/Reusable)**.\n\nTo handle Dates and Timezones, we could use **[SwiftDate](https://github.com/malcommac/SwiftDate)**.\n\nWe MUST use **[ATTD](https://en.wikipedia.org/wiki/Acceptance_test–driven_development)** with **[HonestCode](http://honestcode.io)**, therefore we'll need **[Cucumberish](https://github.com/Ahmed-Ali/Cucumberish)**.\n\nIn order to use user location, we will use **[IGZLocation](https://github.com/intelygenz/IGZLocation)**.\n\nWhen we need to modify Auto Layout programmatically, we could use **[SnapKit](https://github.com/SnapKit/SnapKit)**.\n\nFor async image loading we could use **[Kingfisher](https://github.com/onevcat/Kingfisher)**.\n\nTo use NotificationCenter, **[SwiftNotificationCenter](https://github.com/100mango/SwiftNotificationCenter)** is recommended.\n\nTo display the progress of an ongoing task, you could use **[SVProgressHUD](https://github.com/SVProgressHUD/SVProgressHUD)** or **[SkeletonView](https://github.com/Juanpe/SkeletonView)**.\n\nTo securely store data, we use **[Valet](https://github.com/square/Valet)**.\n\nAs logging library, we love **[XCGLogger](https://github.com/DaveWoodCom/XCGLogger)**.\n\n## ❤️ Etc.\n\n* Contributions are very welcome.\n* Attribution is appreciated (let's spread the word!), but not mandatory.\n\n## 👨🏻‍💻 Authors\n\n**[alexruperez](https://github.com/alexruperez)**, alejandro.ruperez@intelygenz.com\n\n## 👮🏻 License\n\nArchit is available under the MIT license. See the LICENSE file for more info.\n"
  },
  {
    "path": "Rakefile",
    "content": "# encoding: UTF-8\n"
  },
  {
    "path": "Scripts/bootstrap.sh",
    "content": "#!/bin/sh\nset -eu\n\nread -p \"Do you want to install misplaced views and focused tests pre-commit hook? \" -n 1 -r\necho\nif [[ $REPLY =~ ^[YySs]$ ]]\nthen\n\tsh Scripts/install_pre_commit.sh\nfi\n\necho \"Verifying Xcode Command Line Tools...\"\nif ! xcode-select -p ; then\n\techo \"You need Xcode Command Line Tools for this project, installing...\"\n\txcode-select --install\nfi\n\necho \"Verifying bundler gem...\"\nif ! gem which bundler ; then\n\techo \"You need bundler gem for this project, installing...\"\n\tsudo gem install bundler\n\techo \"Bundler gem installed!\"\nfi\n\necho \"Installing Ruby dependencies...\"\nbundle install\necho \"Installing CocoaPods dependencies...\"\npod install\necho \"All dependencies installed!\"\n\nread -p \"Do you want to use fastlane tools? \" -n 1 -r\necho\nif [[ $REPLY =~ ^[YySs]$ ]]\nthen\n\techo \"Configuring fastlane...\"\n\tbundle exec fastlane init\n\techo \"Configuring snapshot...\"\n\tbundle exec fastlane snapshot init\n\techo \"Ready for fastlane tools!\"\n\t\n\tread -p \"Do you want to use danger? \" -n 1 -r\n\techo\n\tif [[ $REPLY =~ ^[YySs]$ ]]\n\tthen\n\t\techo \"Configuring danger...\"\n\t\tbundle exec danger init\n\t\techo \"Ready for danger!\"\n\tfi\nfi\n\necho \"Committing...\"\ngit add .\ngit commit -qam \"First Commit\"\necho \"Committed!\"\n\necho \"Creating qa branch...\"\ngit checkout -b qa\necho \"Creating develop branch...\"\ngit checkout -b develop\n\necho\necho \"Everything ready, enjoy your new Intelygenz project! 🍻\"\n"
  },
  {
    "path": "Scripts/highlight_TODOs.sh",
    "content": "#!/bin/sh\n\nTAGS=\"\\/\\/( )*TODO:|\\/\\/( )*FIXME:|\\/\\/( )*\\?\\?\\?:\"\nERRORTAG=\"\\/\\/( )*ERROR:|\\/\\/( )*\\!\\!\\!:\"\nFILE_EXTENSIONS=\"h|m|mm|c|cpp|swift\"\nfind -E \"${SRCROOT}/${TARGET_NAME}\" \\( -regex \".*\\.($FILE_EXTENSIONS)$\" \\) -print0 | xargs -0 egrep --with-filename --line-number --only-matching \"($TAGS).*\\$|($ERRORTAG).*\\$\" | perl -p -e \"s/($TAGS)/ warning: \\$1/\" | perl -p -e \"s/($ERRORTAG)/ error: \\$1/\"\n"
  },
  {
    "path": "Scripts/install_pre_commit.sh",
    "content": "#!/bin/sh\nset -eu\n\necho \"Installing pre-commit...\"\nln -s ../../Scripts/pre_commit.sh .git/hooks/pre-commit\necho \"Pre-commit installed!\"\n"
  },
  {
    "path": "Scripts/pre_commit.sh",
    "content": "#!/usr/bin/env bash\nset -eu\n\ndiff-index() {\n  git diff-index -p -M --cached HEAD -- \"$@\"\n}\n\nfailed=0\n\ntest_pattern='\\b(fdescribe|fit|fcontext|xdescribe|xit|xcontext)\\b'\ntest_glob='*Tests.swift *Specs.swift'\nif diff-index $test_glob | grep '^+' | egrep \"$test_pattern\" >/dev/null 2>&1\nthen\n  echo \"COMMIT REJECTED for fdescribe/fit/fcontext/xdescribe/xit/xcontext.\" >&2\n  echo \"Remove focused and disabled tests before committing.\" >&2\n  git grep -E \"$test_pattern\" $test_glob || true >&2\n  echo '----' >&2\n  failed=1\nfi\n\nmisplaced_pattern='misplaced=\"YES\"'\nmisplaced_glob='*.xib *.storyboard'\nif diff-index $misplaced_glob | grep '^+' | egrep \"$misplaced_pattern\" >/dev/null 2>&1\nthen\n  echo \"COMMIT REJECTED for misplaced views. Correct them before committing.\" >&2\n  git grep -E \"$misplaced_pattern\" $misplaced_glob || true >&2\n  echo '----' >&2\n  failed=1\nfi\n\nexit $failed\n"
  },
  {
    "path": "Scripts/symbolicate_crash.sh",
    "content": "#!/bin/sh\nset -eu\n\nCRASH_FOLDER=$1\nSYMBOLICATE_CRASH=\"/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash\"\n\ncd \"$CRASH_FOLDER\"\ntar -xf *.ipa\ntar -xf dSYMs.tar.gz\nexport DEVELOPER_DIR=\"/Applications/Xcode.app/Contents/Developer\"\n\nfor crash in *.crash\ndo\n\techo \"Symbolicating $crash\"\n\t$SYMBOLICATE_CRASH \"$crash\" >\"${crash}_symbolicated.crash\"\n\topen \"${crash}_symbolicated.crash\"\ndone\n"
  },
  {
    "path": "_config.yml",
    "content": "theme: jekyll-theme-architect"
  },
  {
    "path": "fastlane/Appfile",
    "content": "app_identifier \"com.intelygenz.Archit\" # The bundle identifier of your app\napple_id \"\" # Your Apple email address\n\nteam_id \"[[DEV_PORTAL_TEAM_ID]]\" # Developer Portal Team ID\n\n# you can even provide different app identifiers, Apple IDs and team names per lane:\n# More information: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Appfile.md\n"
  },
  {
    "path": "fastlane/Fastfile",
    "content": "# Customize this file, documentation can be found here:\n# https://docs.fastlane.tools/actions/\n# All available actions: https://docs.fastlane.tools/actions\n# can also be listed using the `fastlane actions` command\n\n# Change the syntax highlighting to Ruby\n# All lines starting with a # are ignored when running `fastlane`\n\n# If you want to automatically update fastlane if a new version is available:\n# update_fastlane\n\n# This is the minimum version number required.\n# Update this, if you use features of a newer version\nfastlane_version \"2.66.0\"\n\ndefault_platform :ios\n\nxcversion(version: \"9.1\")\n\nplatform :ios do\n  before_all do\n    # ENV[\"SLACK_URL\"] = \"https://hooks.slack.com/services/...\"\n    cocoapods\n    # carthage\n  end\n\n  desc \"Runs all the tests\"\n  lane :test do\n    scan\n  end\n\n  desc \"Submit a new Beta Build to Apple TestFlight\"\n  desc \"This will also make sure the profile is up to date\"\n  lane :beta do\n    # match(type: \"appstore\") # more information: https://codesigning.guide\n    gym(scheme: \"Archit\") # Build your app - more options available\n    pilot\n\n    # sh \"your_script.sh\"\n    # You can also use other beta testing services here (run `fastlane actions`)\n  end\n\n  desc \"Deploy a new version to the App Store\"\n  lane :release do\n    # match(type: \"appstore\")\n    # snapshot\n    gym(scheme: \"Archit\", export_method: \"app-store\") # Build your app - more options available\n    deliver(force: true)\n    # frameit\n  end\n\n  # You can define as many lanes as you want\n\n  after_all do |lane|\n    # This block is called, only if the executed lane was successful\n\n    # slack(\n    #   message: \"Successfully deployed new App Update.\"\n    # )\n  end\n\n  error do |lane, exception|\n    # slack(\n    #   message: exception.message,\n    #   success: false\n    # )\n  end\nend\n\n\n# More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md\n# All available actions: https://docs.fastlane.tools/actions\n\n# fastlane reports which actions are used. No personal data is recorded.\n# Learn more at https://docs.fastlane.tools/#metrics\n"
  },
  {
    "path": "fastlane/Pluginfile",
    "content": "# Autogenerated by fastlane\n#\n# Ensure this file is checked in to source control!\n\ngem 'fastlane-plugin-localization'\n"
  },
  {
    "path": "fastlane/README.md",
    "content": "fastlane documentation\n================\n# Installation\n\nMake sure you have the latest version of the Xcode command line tools installed:\n\n```\nxcode-select --install\n```\n\n## Choose your installation method:\n\n<table width=\"100%\" >\n<tr>\n<th width=\"33%\"><a href=\"http://brew.sh\">Homebrew</a></th>\n<th width=\"33%\">Installer Script</th>\n<th width=\"33%\">RubyGems</th>\n</tr>\n<tr>\n<td width=\"33%\" align=\"center\">macOS</td>\n<td width=\"33%\" align=\"center\">macOS</td>\n<td width=\"33%\" align=\"center\">macOS or Linux with Ruby 2.0.0 or above</td>\n</tr>\n<tr>\n<td width=\"33%\"><code>brew cask install fastlane</code></td>\n<td width=\"33%\"><a href=\"https://download.fastlane.tools\">Download the zip file</a>. Then double click on the <code>install</code> script (or run it in a terminal window).</td>\n<td width=\"33%\"><code>sudo gem install fastlane -NV</code></td>\n</tr>\n</table>\n\n# Available Actions\n## iOS\n### ios test\n```\nfastlane ios test\n```\nRuns all the tests\n### ios beta\n```\nfastlane ios beta\n```\nSubmit a new Beta Build to Apple TestFlight\n\nThis will also make sure the profile is up to date\n### ios release\n```\nfastlane ios release\n```\nDeploy a new version to the App Store\n\n----\n\nThis README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run.\nMore information about fastlane can be found on [fastlane.tools](https://fastlane.tools).\nThe documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).\n"
  },
  {
    "path": "fastlane/Snapfile",
    "content": "# Uncomment the lines below you want to change by removing the # in the beginning\n\n# A list of devices you want to take the screenshots from\n# devices([\n#   \"iPhone 6\",\n#   \"iPhone 6 Plus\",\n#   \"iPhone 5\",\n#   \"iPad Pro (12.9-inch)\",\n#   \"iPad Pro (9.7-inch)\",\n#   \"Apple TV 1080p\"\n# ])\n\nlanguages([\n  \"en-US\",\n  \"de-DE\",\n  \"it-IT\",\n  [\"pt\", \"pt_BR\"] # Portuguese with Brazilian locale\n])\n\n# The name of the scheme which contains the UI Tests\n# scheme \"SchemeName\"\n\n# Where should the resulting screenshots be stored?\n# output_directory \"./screenshots\"\n\n# clear_previous_screenshots true # remove the '#' to clear all previously generated screenshots before creating new ones\n\n# Choose which project/workspace to use\n# project \"./Project.xcodeproj\"\n# workspace \"./Project.xcworkspace\"\n\n# Arguments to pass to the app on launch. See https://docs.fastlane.tools/actions/snapshot/#launch-arguments\n# launch_arguments([\"-favColor red\"])\n\n# For more information about all available options run\n# fastlane snapshot --help\n"
  },
  {
    "path": "fastlane/SnapshotHelper.swift",
    "content": "//\n//  SnapshotHelper.swift\n//  Example\n//\n//  Created by Felix Krause on 10/8/15.\n//  Copyright © 2015 Felix Krause. All rights reserved.\n//\n\n// -----------------------------------------------------\n// IMPORTANT: When modifying this file, make sure to\n//            increment the version number at the very\n//            bottom of the file to notify users about\n//            the new SnapshotHelper.swift\n// -----------------------------------------------------\n\nimport Foundation\nimport XCTest\n\nvar deviceLanguage = \"\"\nvar locale = \"\"\n\nfunc setupSnapshot(_ app: XCUIApplication) {\n    Snapshot.setupSnapshot(app)\n}\n\nfunc snapshot(_ name: String, waitForLoadingIndicator: Bool) {\n    if waitForLoadingIndicator {\n        Snapshot.snapshot(name)\n    } else {\n        Snapshot.snapshot(name, timeWaitingForIdle: 0)\n    }\n}\n\n/// - Parameters:\n///   - name: The name of the snapshot\n///   - timeout: Amount of seconds to wait until the network loading indicator disappears. Pass `0` if you don't want to wait.\nfunc snapshot(_ name: String, timeWaitingForIdle timeout: TimeInterval = 20) {\n    Snapshot.snapshot(name, timeWaitingForIdle: timeout)\n}\n\nenum SnapshotError: Error, CustomDebugStringConvertible {\n    case cannotDetectUser\n    case cannotFindHomeDirectory\n    case cannotFindSimulatorHomeDirectory\n    case cannotAccessSimulatorHomeDirectory(String)\n\n    var debugDescription: String {\n        switch self {\n        case .cannotDetectUser:\n            return \"Couldn't find Snapshot configuration files - can't detect current user \"\n        case .cannotFindHomeDirectory:\n            return \"Couldn't find Snapshot configuration files - can't detect `Users` dir\"\n        case .cannotFindSimulatorHomeDirectory:\n            return \"Couldn't find simulator home location. Please, check SIMULATOR_HOST_HOME env variable.\"\n        case .cannotAccessSimulatorHomeDirectory(let simulatorHostHome):\n            return \"Can't prepare environment. Simulator home location is inaccessible. Does \\(simulatorHostHome) exist?\"\n        }\n    }\n}\n\nopen class Snapshot: NSObject {\n    static var app: XCUIApplication!\n    static var cacheDirectory: URL!\n    static var screenshotsDirectory: URL? {\n        return cacheDirectory.appendingPathComponent(\"screenshots\", isDirectory: true)\n    }\n\n    open class func setupSnapshot(_ app: XCUIApplication) {\n        do {\n            let cacheDir = try pathPrefix()\n            Snapshot.cacheDirectory = cacheDir\n            Snapshot.app = app\n            setLanguage(app)\n            setLocale(app)\n            setLaunchArguments(app)\n        } catch let error {\n            print(error)\n        }\n    }\n\n    class func setLanguage(_ app: XCUIApplication) {\n        let path = cacheDirectory.appendingPathComponent(\"language.txt\")\n\n        do {\n            let trimCharacterSet = CharacterSet.whitespacesAndNewlines\n            deviceLanguage = try String(contentsOf: path, encoding: .utf8).trimmingCharacters(in: trimCharacterSet)\n            app.launchArguments += [\"-AppleLanguages\", \"(\\(deviceLanguage))\"]\n        } catch {\n            print(\"Couldn't detect/set language...\")\n        }\n    }\n\n    class func setLocale(_ app: XCUIApplication) {\n        let path = cacheDirectory.appendingPathComponent(\"locale.txt\")\n\n        do {\n            let trimCharacterSet = CharacterSet.whitespacesAndNewlines\n            locale = try String(contentsOf: path, encoding: .utf8).trimmingCharacters(in: trimCharacterSet)\n        } catch {\n            print(\"Couldn't detect/set locale...\")\n        }\n        if locale.isEmpty {\n            locale = Locale(identifier: deviceLanguage).identifier\n        }\n        app.launchArguments += [\"-AppleLocale\", \"\\\"\\(locale)\\\"\"]\n    }\n\n    class func setLaunchArguments(_ app: XCUIApplication) {\n        let path = cacheDirectory.appendingPathComponent(\"snapshot-launch_arguments.txt\")\n        app.launchArguments += [\"-FASTLANE_SNAPSHOT\", \"YES\", \"-ui_testing\"]\n\n        do {\n            let launchArguments = try String(contentsOf: path, encoding: String.Encoding.utf8)\n            let regex = try NSRegularExpression(pattern: \"(\\\\\\\".+?\\\\\\\"|\\\\S+)\", options: [])\n            let matches = regex.matches(in: launchArguments, options: [], range: NSRange(location:0, length:launchArguments.characters.count))\n            let results = matches.map { result -> String in\n                (launchArguments as NSString).substring(with: result.range)\n            }\n            app.launchArguments += results\n        } catch {\n            print(\"Couldn't detect/set launch_arguments...\")\n        }\n    }\n\n    open class func snapshot(_ name: String, timeWaitingForIdle timeout: TimeInterval = 20) {\n        if timeout > 0 {\n            waitForLoadingIndicatorToDisappear(within: timeout)\n        }\n\n        print(\"snapshot: \\(name)\") // more information about this, check out https://github.com/fastlane/fastlane/tree/master/snapshot#how-does-it-work\n\n        sleep(1) // Waiting for the animation to be finished (kind of)\n\n        #if os(OSX)\n            XCUIApplication().typeKey(XCUIKeyboardKeySecondaryFn, modifierFlags: [])\n        #else\n            let screenshot = app.windows.firstMatch.screenshot()\n            guard let simulator = ProcessInfo().environment[\"SIMULATOR_DEVICE_NAME\"], let screenshotsDir = screenshotsDirectory else { return }\n            let path = screenshotsDir.appendingPathComponent(\"\\(simulator)-\\(name).png\")\n            do {\n                try screenshot.pngRepresentation.write(to: path)\n            } catch let error {\n                print(\"Problem writing screenshot: \\(name) to \\(path)\")\n                print(error)\n            }\n        #endif\n    }\n\n    class func waitForLoadingIndicatorToDisappear(within timeout: TimeInterval) {\n        #if os(tvOS)\n            return\n        #endif\n\n        let networkLoadingIndicator = XCUIApplication().otherElements.deviceStatusBars.networkLoadingIndicators.element\n        let networkLoadingIndicatorDisappeared = XCTNSPredicateExpectation(predicate: NSPredicate(format: \"exists == false\"), object: networkLoadingIndicator)\n        let _ = XCTWaiter.wait(for: [networkLoadingIndicatorDisappeared], timeout: timeout)\n    }\n\n    class func pathPrefix() throws -> URL? {\n        let homeDir: URL\n        // on OSX config is stored in /Users/<username>/Library\n        // and on iOS/tvOS/WatchOS it's in simulator's home dir\n        #if os(OSX)\n            guard let user = ProcessInfo().environment[\"USER\"] else {\n                throw SnapshotError.cannotDetectUser\n            }\n\n            guard let usersDir =  FileManager.default.urls(for: .userDirectory, in: .localDomainMask).first else {\n                throw SnapshotError.cannotFindHomeDirectory\n            }\n\n            homeDir = usersDir.appendingPathComponent(user)\n        #else\n            guard let simulatorHostHome = ProcessInfo().environment[\"SIMULATOR_HOST_HOME\"] else {\n                throw SnapshotError.cannotFindSimulatorHomeDirectory\n            }\n            guard let homeDirUrl = URL(string: simulatorHostHome) else {\n                throw SnapshotError.cannotAccessSimulatorHomeDirectory(simulatorHostHome)\n            }\n            homeDir = URL(fileURLWithPath: homeDirUrl.path)\n        #endif\n        return homeDir.appendingPathComponent(\"Library/Caches/tools.fastlane\")\n    }\n}\n\nprivate extension XCUIElementAttributes {\n    var isNetworkLoadingIndicator: Bool {\n        if hasWhiteListedIdentifier { return false }\n\n        let hasOldLoadingIndicatorSize = frame.size == CGSize(width: 10, height: 20)\n        let hasNewLoadingIndicatorSize = frame.size.width.isBetween(46, and: 47) && frame.size.height.isBetween(2, and: 3)\n\n        return hasOldLoadingIndicatorSize || hasNewLoadingIndicatorSize\n    }\n\n    var hasWhiteListedIdentifier: Bool {\n        let whiteListedIdentifiers = [\"GeofenceLocationTrackingOn\", \"StandardLocationTrackingOn\"]\n\n        return whiteListedIdentifiers.contains(identifier)\n    }\n\n    func isStatusBar(_ deviceWidth: CGFloat) -> Bool {\n        if elementType == .statusBar { return true }\n        guard frame.origin == .zero else { return false }\n\n        let oldStatusBarSize = CGSize(width: deviceWidth, height: 20)\n        let newStatusBarSize = CGSize(width: deviceWidth, height: 44)\n\n        return [oldStatusBarSize, newStatusBarSize].contains(frame.size)\n    }\n}\n\nprivate extension XCUIElementQuery {\n    var networkLoadingIndicators: XCUIElementQuery {\n        let isNetworkLoadingIndicator = NSPredicate { (evaluatedObject, _) in\n            guard let element = evaluatedObject as? XCUIElementAttributes else { return false }\n\n            return element.isNetworkLoadingIndicator\n        }\n\n        return self.containing(isNetworkLoadingIndicator)\n    }\n\n    var deviceStatusBars: XCUIElementQuery {\n        let deviceWidth = XCUIApplication().frame.width\n\n        let isStatusBar = NSPredicate { (evaluatedObject, _) in\n            guard let element = evaluatedObject as? XCUIElementAttributes else { return false }\n\n            return element.isStatusBar(deviceWidth)\n        }\n\n        return self.containing(isStatusBar)\n    }\n}\n\nprivate extension CGFloat {\n    func isBetween(_ numberA: CGFloat, and numberB: CGFloat) -> Bool {\n        return numberA...numberB ~= self\n    }\n}\n\n// Please don't remove the lines below\n// They are used to detect outdated configuration files\n// SnapshotHelperVersion [1.6]\n"
  }
]