[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nindent_style = tab\nindent_size = 4\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = false\ninsert_final_newline = true\n\n[*.{yml,yaml}]\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "name: Run Makefile\n\non:\n  workflow_dispatch:\n\njobs:\n  build:\n    runs-on: macos-14\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v3\n\n      - name: Install dependencies (packages)\n        run: |\n          curl -LO https://github.com/ProcursusTeam/ldid/releases/download/v2.1.5-procursus7/ldid_macosx_x86_64\n          sudo install -m755 ldid_macosx_x86_64 /usr/local/bin/ldid\n          brew install 7zip gnu-sed\n          \n      - name: Use Xcode 15.4\n        run: |\n          sudo xcode-select -s /Applications/Xcode_15.4.app/Contents/Developer\n          agvtool new-version -all $(git rev-parse HEAD)\n\n      - name: Compile palera1nLoader\n        run: |\n          make package PLATFORM=iphoneos PACKAGE_NAME=palera1nLoader\n          make package PLATFORM=appletvos PACKAGE_NAME=palera1nLoaderTV\n\n      - name: Compress Headers\n        run: zip -r packages/patched_headers.zip apple-include-iphoneos apple-include-appletvos \n\n      - name: Upload artifact\n        uses: wangyucode/sftp-upload-action@v1.4.8\n        with:\n          host: ${{ secrets.NICKCHAN_FTP_HOST }}\n          port: ${{ secrets.NICKCHAN_FTP_PORT }}\n          username: palera1n\n          password: ${{ secrets.NICKCHAN_FTP_PASS }}\n          forceUpload: true\n          dryRun: false\n          localDir: 'packages/'\n          remoteDir: '/www/static.palera.in/artifacts/loader/universal_lite'\n\n"
  },
  {
    "path": ".gitignore",
    "content": "*.DS_Store\nPayload\npackages\napple-include-*\n*UserInterfaceState.xcuserstate\nxcuserdata/\n"
  },
  {
    "path": "Configuration/Loader.xcconfig",
    "content": "//\n//  Loader.xcconfig\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nDOTFILE_PATH                    = \"/.installed_palera1n\"\nCONFIG_URL                      = \"palera.in/loaderv2.json\"\nGCC_PREPROCESSOR_DEFINITIONS    = $(inherited) CONFIG_URL='$(CONFIG_URL)' DOTFILE_PATH='$(DOTFILE_PATH)'\n\nSYSTEM_HEADER_SEARCH_PATHS = $(PROJECT_DIR)/apple-include$(EFFECTIVE_PLATFORM_NAME)\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright 2025 palera1n team\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Loader/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit\n\n@main\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n\tfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n\t\tUIApplication.shared.isIdleTimerDisabled = true\n\t\tself._createTmpDir()\n\t\treturn true\n\t}\n\n\t// MARK: UISceneSession Lifecycle\n\n\tfunc application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {\n\t\tUISceneConfiguration(name: \"Default Configuration\", sessionRole: connectingSceneSession.role)\n\t}\n\t\n\tfunc applicationWillTerminate(_ application: UIApplication) {\n\t\tself._cleanTmpDir()\n\t}\n\t\n\tprivate func _createTmpDir() {\n\t\tdo {\n\t\t\ttry FileManager.default.createDirectory(\n\t\t\t\tatPath: .tmp(),\n\t\t\t\twithIntermediateDirectories: true,\n\t\t\t\tattributes: nil\n\t\t\t)\n\t\t} catch {\n\t\t\tprint(\"Failed to create directory: \\(error.localizedDescription)\")\n\t\t}\n\t}\n\t\n\tprivate func _cleanTmpDir() -> Void {\n\t\tlet fileManager = FileManager.default\n\t\t\t\t\n\t\tdo {\n\t\t\tif fileManager.fileExists(atPath: .tmp()) {\n\t\t\t\ttry fileManager.removeItem(atPath: .tmp())\n\t\t\t}\n\t\t} catch {\n\t\t\tprint(\"Failed to remove directory: \\(error.localizedDescription)\")\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "Loader/Extensions/String+prefix.swift",
    "content": "//\n//  String+prefix.swift\n//  Loader\n//\n//  Created by samara on 15.03.2025.\n//\n\nextension String {\n\t/// Returns a string with a jailbreak path prefix\n\t/// - Parameter path: Path\n\t/// - Returns: Path with prefix\n\tstatic func jb_prefix(_ path: String) -> String {\n\t\tLREnvironment.shared.jb_prefix(path)\n\t}\n\t/// Returns a string with a binpack path prefix\n\t/// - Parameter path: Path\n\t/// - Returns: Path with prefix\n\tstatic func binpack(_ path: String) -> String {\n\t\tLREnvironment.binpack(path)\n\t}\n\t/// Returns a string with a tmp path prefix\n\t/// - Parameter path: Path\n\t/// - Returns: Path with prefix\n\tstatic func tmp(_ path: String = \"\") -> String {\n\t\tLREnvironment.tmp(path)\n\t}\n}\n"
  },
  {
    "path": "Loader/Extensions/UIAlertController+Alerts.swift",
    "content": "//\n//  UIAlertController+Alerts.swift\n//  Loader\n//\n//  Created by samara on 15.03.2025.\n//\n\nimport UIKit.UIAlertController\n#if os(iOS)\nimport LocalAuthentication\n#endif\nimport NimbleExtensions\n\nextension UIAlertController {\n\t/// Presents an alert\n\t/// - Parameters:\n\t///   - presenter: View where its presenting\n\t///   - title: Alert title\n\t///   - message: Alert message\n\t///   - actions: Alert actions\n\tstatic func showAlertWithCancel(\n\t\t_ presenter: UIViewController,\n\t\t_ popoverFromView: UIView? = nil,\n\t\ttitle: String? = \"\",\n\t\tmessage: String?,\n\t\tstyle: UIAlertController.Style = .alert,\n\t\tactions: [UIAlertAction]\n\t) {\n\t\tvar actions = actions\n\t\tactions.append(\n\t\t\tUIAlertAction(title: .localized(\"Cancel\"), style: .cancel, handler: nil)\n\t\t)\n\t\t\n\t\tshowAlert(\n\t\t\tpresenter,\n\t\t\tpopoverFromView,\n\t\t\ttitle: title,\n\t\t\tmessage: message,\n\t\t\tstyle: style,\n\t\t\tactions: actions\n\t\t)\n\t}\n\t/// Presents an alert\n\t/// - Parameters:\n\t///   - presenter: View where its presenting\n\t///   - title: Alert title\n\t///   - message: Alert message\n\t///   - actions: Alert actions\n\tstatic func showAlert(\n\t\t_ presenter: UIViewController,\n\t\t_ popoverFromView: UIView? = nil,\n\t\ttitle: String?,\n\t\tmessage: String?,\n\t\tstyle: UIAlertController.Style = .alert,\n\t\tactions: [UIAlertAction]\n\t) {\n\t\tlet alert = UIAlertController(title: title, message: message, preferredStyle: style)\n\t\tactions.forEach { alert.addAction($0) }\n\t\t\n\t\tif style == .actionSheet, \n\t\t\tlet popover = alert.popoverPresentationController,\n\t\t\tlet view = popoverFromView {\n\t\t\tpopover.sourceView = view\n\t\t\tpopover.sourceRect = view.bounds \n\t\t\tpopover.permittedArrowDirections = .any\n\t\t}\n\t\t\n\t\tpresenter.present(alert, animated: true)\n\t}\n\t/// Presents an alert to change sudo password\n\t/// - Parameters:\n\t///   - presenter: View where its presenting\n\t///   - title: Title for sudo password alert\n\t///   - message: Description for sudo password alert\n\t///   - completion: Completes with a password\n\tstatic func showAlertForPassword(\n\t\t_ presenter: UIViewController,\n\t\ttitle: String,\n\t\tmessage: String,\n\t\tcompletion: @escaping (String) -> Void\n\t) {\n\t\tlet alert = UIAlertController(title: title, message: message, preferredStyle: .alert)\n\t\t\n\t\talert.addTextField() { (password) in\n\t\t\tpassword.placeholder = .localized(\"Password\")\n\t\t\tpassword.isSecureTextEntry = true\n\t\t\tpassword.keyboardType = UIKeyboardType.asciiCapable\n\t\t}\n\t\t\n\t\talert.addTextField() { (password) in\n\t\t\tpassword.placeholder = .localized(\"Repeat Password\")\n\t\t\tpassword.isSecureTextEntry = true\n\t\t\tpassword.keyboardType = UIKeyboardType.asciiCapable\n\t\t}\n\t\t\n\t\tlet confirm = UIAlertAction(title: .localized(\"Set Password\"), style: .default) { _ in\n\t\t\tlet password = alert.textFields?[0].text\n\t\t\tcompletion(password!)\n\t\t}; confirm.isEnabled = false\n\t\talert.addAction(confirm)\n\t\t\n\t\tNotificationCenter.default.addObserver(\n\t\t\tforName: UITextField.textDidChangeNotification,\n\t\t\tobject: nil,\n\t\t\tqueue: .main\n\t\t) { _ in\n\t\t\tlet pass = alert.textFields?[0].text\n\t\t\tlet passRepeated = alert.textFields?[1].text\n\t\t\t\n\t\t\tif !(pass!.count > 253 || passRepeated!.count > 253) {\n\t\t\t\tconfirm.setValue(String.localized(\"Set Password\"), forKeyPath: \"title\")\n\t\t\t\tconfirm.isEnabled = !pass!.isEmpty && !passRepeated!.isEmpty && pass == passRepeated\n\t\t\t}\n\t\t}\n\t\tThread.mainBlock {\n\t\t\tpresenter.present(alert, animated: true)\n\t\t}\n\t}\n\t/// Presents an alert to change sudo password with authentication\n\t/// - Parameters:\n\t///   - presenter: View where its presenting\n\t///   - authMessage: The authentication method on why it needs it\n\t///   - alertTitle: Title for sudo password alert\n\t///   - alertMessage: Description for sudo password alert\n\t///   - completion: Completes with a password\n\tstatic func showAlertForPasswordWithAuthentication(\n\t\t_ presenter: UIViewController,\n\t\t_ authMessage: String,\n\t\talertTitle: String,\n\t\talertMessage: String,\n\t\tcompletion: @escaping (String) -> Void\n\t) {\n\t\t#if os(iOS)\n\t\tlet context = LAContext()\n\t\tvar error: NSError?\n\t\t#endif\n\t\t\n\t\tfunc change() {\n\t\t\tThread.mainBlock {\n\t\t\t\tUIAlertController.showAlertForPassword(\n\t\t\t\t\tpresenter,\n\t\t\t\t\ttitle: alertTitle,\n\t\t\t\t\tmessage: alertMessage\n\t\t\t\t) { password in\n\t\t\t\t\tcompletion(password)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t#if os(iOS)\n\t\t// if anyones changing the password ITS ME AND NO ONE ELSE (sorry nick)\n\t\tif context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) {\n\t\t\tcontext.evaluatePolicy(\n\t\t\t\t.deviceOwnerAuthentication,\n\t\t\t\tlocalizedReason: authMessage\n\t\t\t) { success, _ in\n\t\t\t\tif success {\n\t\t\t\t\tchange()\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// If you have absolutely nothing (NO SECURITY, NO PASSCODE, NOTHING)\n\t\t\t// fuck it I'll let you change it anyway\n\t\t\tchange()\n\t\t}\n\t\t#else\n\t\tchange()\n\t\t#endif\n\t}\n\t/// Presents an alert to change a string\n\t/// - Parameters:\n\t///   - presenter: View where its presenting\n\t///   - title: Alert title\n\t///   - currentValue: Current value you want to change\n\t///   - keyboardType: Keyboard type\n\t///   - completion: Completes with a string\n\tstatic func showAlertForStringChange(\n\t\t_ presenter: UIViewController,\n\t\ttitle: String,\n\t\tcurrentValue: String,\n\t\tkeyboardType: UIKeyboardType = .default,\n\t\tcompletion: @escaping (String) -> Void\n\t) {\n\t\tlet alert = UIAlertController(title: title, message: nil, preferredStyle: .alert)\n\n\t\talert.addTextField { textField in\n\t\t\ttextField.text = currentValue\n\t\t\ttextField.keyboardType = keyboardType\n\t\t\ttextField.autocapitalizationType = .none\n\t\t\ttextField.autocorrectionType = .no\n\t\t}\n\t\t\n\t\tlet saveAction = UIAlertAction(title: .localized(\"Set\"), style: .default) { [weak alert] _ in\n\t\t\tguard\n\t\t\t\tlet textField = alert?.textFields?.first,\n\t\t\t\tlet newValue = textField.text, !newValue.isEmpty\n\t\t\telse {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t\n\t\t\tcompletion(newValue)\n\t\t}\n\t\t\n\t\talert.addAction(UIAlertAction(title: .localized(\"Cancel\"), style: .cancel, handler: nil))\n\t\talert.addAction(saveAction)\n\t\t\n\t\tThread.mainBlock {\n\t\t\tpresenter.present(alert, animated: true)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Loader/Extensions/UIApplication/UIApplication+open.swift",
    "content": "//\n//  UIApplication+open.swift\n//  Loader\n//\n//  Created by samara on 15.03.2025.\n//\n\nimport UIKit.UIApplication\n\nextension UIApplication {\n\t/// Opens an application using `LSApplicationWorkspace` with a relative path\n\tfunc openApplication(using relativePath: String) {\n\t\topenApplication(at: URL(fileURLWithPath: relativePath))\n\t}\n\t/// Opens an application using `LSApplicationWorkspace` with a url file path\n\tfunc openApplication(at path: URL) {\n\t\tlet bundle = Bundle(url: path)\n\t\tLSApplicationWorkspace.default().openApplication(withBundleID: bundle?.bundleIdentifier)\n\t}\n}\n"
  },
  {
    "path": "Loader/Extensions/UIDevice/UIDevice+Info.swift",
    "content": "//\n//  UIDevice+Info.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport MachO\nimport UIKit.UIDevice\n\nextension UIDevice {\n\tstruct CFVersionInfo {\n\t\tprivate let _cfVersionNumber = kCFCoreFoundationVersionNumber\n\t\t\n\t\tvar standard: String {\n\t\t\t\"\\(Int(floor(_cfVersionNumber)))\"\n\t\t}\n\t\t\n\t\tvar rounded: String {\n\t\t\t\"\\(Int(floor(_cfVersionNumber / 100) * 100))\"\n\t\t}\n\t}\n\t\n\tvar cfVersion: CFVersionInfo {\n\t\tCFVersionInfo()\n\t}\n\t\n\t/// The devices architecture (e.g. arm64).\n\tvar architecture: String {\n\t\tString(cString: NXGetLocalArchInfo().pointee.name)\n\t}\n\t\n\t/// The devices marketing model (e.g. iPhone 7)\n\tvar marketingModel: String {\n\t\tMGCopyAnswer(kMGPhysicalHardwareNameString)?.takeUnretainedValue() as? String ?? \"Unknown\"\n\t}\n\t\n\tvar kernelVersion: String {\n\t\tvar utsnameInfo = utsname()\n\t\tuname(&utsnameInfo)\n\t\t\n\t\tlet releaseCopy = withUnsafeBytes(of: &utsnameInfo.release) { bytes in\n\t\t\tArray(bytes)\n\t\t}\n\t\t\n\t\tlet version = String(cString: releaseCopy)\n\t\treturn version\n\t}\n\t\n\tvar bootArgs: String {\n\t\tvar size: size_t = 0\n\t\tsysctlbyname(\"kern.bootargs\", nil, &size, nil, 0)\n\t\tvar machine = [CChar](repeating: 0, count: size)\n\t\tsysctlbyname(\"kern.bootargs\", &machine, &size, nil, 0)\n\t\tlet bootArgs = String(cString: machine)\n\t\treturn bootArgs\n\t}\n\t\n\tvar bootmanifestHash: String? {\n\t\t#if !targetEnvironment(simulator)\n\t\tlet registryEntry = IORegistryEntryFromPath(kIOMasterPortDefault, \"IODeviceTree:/chosen\")\n\t\t\n\t\tguard let bootManifestHashUnmanaged = IORegistryEntryCreateCFProperty(registryEntry, \"boot-manifest-hash\" as CFString, kCFAllocatorDefault, 0),\n\t\t\t  let bootManifestHash = bootManifestHashUnmanaged.takeRetainedValue() as? Data else {\n\t\t\treturn nil\n\t\t}\n\t\t\n\t\treturn bootManifestHash.map { String(format: \"%02X\", $0) }.joined()\n\t\t#else\n\t\treturn nil\n\t\t#endif\n\t}\n}\n"
  },
  {
    "path": "Loader/Extensions/UIDevice/UIDevice+Jailbreak.swift",
    "content": "//\n//  UIDevice+Jailbreak.swift\n//  Packages\n//\n//  Created by samara on 23.02.2025.\n//\n\nimport UIKit.UIDevice\n\nextension UIDevice {\n\tstruct Flags {\n\t\t/// User specified `rootful`\n\t\tvar palerain_option_rootful: Bool\n\t\t/// User specified `rootless`\n\t\tvar palerain_option_rootless: Bool\n\t\t/// System has signed system volum\n\t\tvar palerain_option_ssv: Bool\n\t\t/// User specified `remove jailbreak`\n\t\tvar palerain_option_force_revert: Bool\n\t\t/// User specified `safemode`\n\t\tvar palerain_option_safemode: Bool\n\t\t/// If user has happened to have an rsod\n\t\tvar palerain_option_failure: Bool\n\t\t\n\t\t/// See flags in string format\n\t\tvar flags: String {\n\t\t\tString(format: \"0x%llx\", LREnvironment.jbd.getFlags())\n\t\t}\n\t\t/// See flags in a string-list format\n\t\tvar flagsList: String {\n\t\t\tlet mirror = Mirror(reflecting: self)\n\t\t\tlet properties = mirror.children.filter { $0.value is Bool }\n\t\t\t\n\t\t\treturn \"Flags: \\(flags)\\n\\n\" + properties.map { label, value in\n\t\t\t\t\"\\(label ?? \"unknown\"): \\(value as? Bool ?? false)\"\n\t\t\t}.joined(separator: \"\\n\")\n\t\t}\n\t\t/// In some scenerios where the user would want to revert the jailbreak in-app\n\t\t/// there are cases where we cannot remove the entire jailbreak through this.\n\t\t/// Mainly, `rootful + ssv ((partial) fakefs)`, so we offer to\n\t\t/// revert the snapshot (and some files in the user partition) only on these installs.\n\t\tvar shouldCleanFakefs: Bool {\n\t\t\tpalerain_option_ssv && palerain_option_rootful\n\t\t}\n\t\t\n\t\tinit() {\n\t\t\tlet flags = LREnvironment.jbd.getFlags();\n\t\t\tself.palerain_option_rootful = (flags & (1 << 0)) != 0\n\t\t\tself.palerain_option_rootless = (flags & (1 << 1)) != 0\n\t\t\tself.palerain_option_ssv = (flags & (1 << 7)) != 0\n\t\t\tself.palerain_option_force_revert = (flags & (1 << 24)) != 0\n\t\t\tself.palerain_option_safemode = (flags & (1 << 25)) != 0\n\t\t\tself.palerain_option_failure = (flags & (1 << 60)) != 0\n\t\t}\n\t}\n\t\n\tvar palera1n: Flags {\n\t\tFlags()\n\t}\n}\n"
  },
  {
    "path": "Loader/Extensions/UITableView+image.swift",
    "content": "//\n//  UITableView+image.swift\n//  Loader\n//\n//  Created by samara on 10.04.2025.\n//\n\nimport UIKit.UITableViewCell\n\nextension UITableViewCell {\n\t/// Applies a properly sized and styled image to the cell's imageView\n\t/// - Parameter originalImage: The original image to resize and apply\n\tfunc setSectionImage(with originalImage: UIImage) {\n\t\tlet imageSize = CGSize(width: 30, height: 30)\n\t\t\n\t\tlet resizedImage = UIGraphicsImageRenderer(size: imageSize).image { context in\n\t\t\toriginalImage.draw(in: CGRect(origin: .zero, size: imageSize))\n\t\t}\n\t\t\n\t\tself.imageView?.image = resizedImage\n\t\tself.imageView?.layer.cornerRadius = 7\n\t\tself.imageView?.clipsToBounds = true\n\t\tself.imageView?.layer.borderWidth = 0.7\n\t\tself.imageView?.layer.cornerCurve = .continuous\n\t\tself.imageView?.layer.borderColor = UIColor.lightGray.withAlphaComponent(0.3).cgColor\n\t}\n}\n\nextension UIListContentConfiguration {\n\t/// Returns a modified configuration with a styled and resized section image.\n\t/// - Parameters:\n\t///   - originalImage: The image to resize and apply.\n\t///   - imageSize: The size to resize the image to. Defaults to 30×30.\n\tfunc applyingSectionImage(_ originalImage: UIImage, imageSize: CGSize = CGSize(width: 30, height: 30)) -> UIListContentConfiguration {\n\t\tlet resizedImage = UIGraphicsImageRenderer(size: imageSize).image { _ in\n\t\t\toriginalImage.draw(in: CGRect(origin: .zero, size: imageSize))\n\t\t}.withRenderingMode(.alwaysOriginal)\n\t\t\n\t\tvar config = self\n\t\tconfig.image = resizedImage\n\t\tconfig.imageToTextPadding = 12\n\t\tconfig.imageProperties.cornerRadius = 7\n\t\tconfig.imageProperties.reservedLayoutSize = imageSize\n\t\tconfig.imageProperties.maximumSize = imageSize\n\t\tconfig.imageProperties.tintColor = nil\n\t\t\n\t\treturn config\n\t}\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  },\n  \"layers\" : [\n    {\n      \"filename\" : \"Front.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Middle.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Back.imagestacklayer\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"1-min.png\",\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  },\n  \"layers\" : [\n    {\n      \"filename\" : \"Front.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Middle.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Back.imagestacklayer\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"title.png\",\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/Contents.json",
    "content": "{\n  \"assets\" : [\n    {\n      \"filename\" : \"App Icon - App Store.imagestack\",\n      \"idiom\" : \"tv\",\n      \"role\" : \"primary-app-icon\",\n      \"size\" : \"1280x768\"\n    },\n    {\n      \"filename\" : \"App Icon.imagestack\",\n      \"idiom\" : \"tv\",\n      \"role\" : \"primary-app-icon\",\n      \"size\" : \"400x240\"\n    },\n    {\n      \"filename\" : \"Top Shelf Image Wide.imageset\",\n      \"idiom\" : \"tv\",\n      \"role\" : \"top-shelf-image-wide\",\n      \"size\" : \"2320x720\"\n    },\n    {\n      \"filename\" : \"Top Shelf Image.imageset\",\n      \"idiom\" : \"tv\",\n      \"role\" : \"top-shelf-image\",\n      \"size\" : \"1920x720\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/Top Shelf Image Wide.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/Top Shelf Image.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"palera1nnightly.png\",\n      \"idiom\" : \"universal\",\n      \"platform\" : \"ios\",\n      \"size\" : \"176x176\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/Loading.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Oval.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  },\n  \"properties\" : {\n    \"template-rendering-intent\" : \"template\"\n  }\n}\n"
  },
  {
    "path": "Loader/Resources/Assets.xcassets/unknown.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"unknown2.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Loader/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>UIApplicationSceneManifest</key>\n\t<dict>\n\t\t<key>UIApplicationSupportsMultipleScenes</key>\n\t\t<false/>\n\t\t<key>UISceneConfigurations</key>\n\t\t<dict>\n\t\t\t<key>UIWindowSceneSessionRoleApplication</key>\n\t\t\t<array>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>UISceneConfigurationName</key>\n\t\t\t\t\t<string>Default Configuration</string>\n\t\t\t\t\t<key>UISceneDelegateClassName</key>\n\t\t\t\t\t<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>\n\t\t\t\t</dict>\n\t\t\t</array>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Loader/Resources/Localizable.xcstrings",
    "content": "{\n  \"sourceLanguage\" : \"en\",\n  \"strings\" : {\n    \"%@ is already installed.\" : {\n      \"comment\" : \"Prompt will have a message for you to reinstall the tapped package manager. (i.e \\\"Cydia is already installed\\\")\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"%@ is already installed.\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"%@ è già installato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"%@はすでにインストールされています。\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"%@ eshte e instaluar.\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"%@已安裝。\"\n          }\n        }\n      }\n    },\n    \"Authentication is required to change your sudo password.\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Authentication is required to change your sudo password.\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"L’autenticazione è richiesta per cambiare la tua password di sudo\"\n          }\n        }\n      }\n    },\n    \"Bootstrap\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bootstrap\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bootstrap\"\n          }\n        }\n      }\n    },\n    \"Bootstrap, managers, and configuration is not available for current jailbreak type\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bootstrap, managers, and configuration is not available for current jailbreak type \\\"%@\\\"\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bootstrap, manager e configurazione non sono disponibili per il tipo di jailbreak “%@”\"\n          }\n        }\n      }\n    },\n    \"Cancel\" : {\n      \"comment\" : \"The cancel action for alerts\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cancel\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Annulla\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"キャンセル\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Anullo\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取消\"\n          }\n        }\n      }\n    },\n    \"Change Download URL\" : {\n      \"comment\" : \"A tableview button and title that prompts you to change where the loader downloads from\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Change Download URL\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambia URL Download\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ダウンロードURLを変更\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ndrysho URL-ne e shkarkimit\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更改下載網址\"\n          }\n        }\n      }\n    },\n    \"Change Download URL Explanation\" : {\n      \"comment\" : \"The section footer explanation for changing download URL\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"This will allow you to change where the loader application will download from with a custom URL to a json file, this can change the package manager, bootstrap, and repos included.\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Questo ti permetterà di cambiare dove l’app del loader scaricherà da un URL personalizzato ad un file json, questo può cambiare il gestore dei pacchetti, il bootstrap e le repo incluse.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"カスタムURLを使用することでloaderアプリケーションが jsonファイルをダウンロードするアドレスを変更できるようになります。これにより、パッケージマネージャー、bootstrap、およびリポジトリが変更される可能性があります。\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kjo do te lejoje ty qe te ndryshosh ku aplikacioni loader do shkarkoje me nje url ndryshe ne nje json, kjo do te ndryshoje manaxhuesin e paketave, bootstrap-in, dhe repot te vendosura.\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"這允許你改變JSON 配置文件的網址，這能夠改變包含的包管理器，基本越獄檔案和軟體庫。\"\n          }\n        }\n      }\n    },\n    \"Change Sudo Password\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Change Sudo Password\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambia Password Sudo\"\n          }\n        }\n      }\n    },\n    \"Clean FakeFS\" : {\n      \"comment\" : \"On rootful with fakefs, remove jailbreak files without removing fakefs\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clean FakeFS\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pulisci FakeFS\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FakeFSを削除\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清理偽檔案系統\"\n          }\n        }\n      }\n    },\n    \"Clean FakeFS Explanation\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uninstall jailbreak files, but does not remove FakeFS. This will allow setting up a new jailbreak environment without creating FakeFS again. This will reboot your %@.\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Disinstalla i file del jailbreak, ma non rimuove il FakeFS. Questo ti permetterà di impostare un nuovo ambiente di jailbreak senza creare il FakeFS ancora. Questo riavvierà il tuo %@\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Jailbreak環境を削除(※FakeFSは削除されません) FakeFSを再度作成することなく新しいJailbreak環境を作成できます。\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除越獄文件，但不移除偽檔案系統。 這允許在不重新創建偽檔案系統的情況下設置新的越獄環境。你的%@將會重新啟動。\"\n          }\n        }\n      }\n    },\n    \"Credits\" : {\n      \"comment\" : \"Tableview cell and section title for the credits page in the loader\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Credits\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crediti\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"クレジット\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kredite\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"鳴謝\"\n          }\n        }\n      }\n    },\n    \"Detected partial rootless installation. Please re-jailbreak and try again.\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Detected partial rootless installation. Please re-jailbreak and try again.\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rilevata installazione rootless parziale. Rifai il jailbreak e riprova\"\n          }\n        }\n      }\n    },\n    \"Device Info\" : {\n      \"comment\" : \"Tableview cell and section title for the about page in the loader\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Device Info\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Info Dispositivo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"情報\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Rreth\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"關於\"\n          }\n        }\n      }\n    },\n    \"Done\" : {\n      \"comment\" : \"If the action is completed\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Done\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fatto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"完了\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mbaroi\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"完成\"\n          }\n        }\n      }\n    },\n    \"Download\" : {\n      \"comment\" : \"Section title for changing download URL\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Download\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Download\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ダウンロード\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Shkarko\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"下載\"\n          }\n        }\n      }\n    },\n    \"Download Item\" : {\n      \"comment\" : \"This is text that is displayed when in the download process of installing the bootstrap. (i.e \\\"Downloading Cydia\\\")\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Downloading %@\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Scarico %@\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"%@をダウンロード\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Po shkarkon %@\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"正在下載%@\"\n          }\n        }\n      }\n    },\n    \"Downloading Base System\" : {\n      \"comment\" : \"This is text that is displayed when downloading the bootstrap file\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Downloading Base System\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Scarico Sistema Base\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Base Systemをダウンロード\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Po shkarkon sistemin baze\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"正在下載基本越獄檔案\"\n          }\n        }\n      }\n    },\n    \"Downloading Package Managers\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Downloading Package Managers\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Scarico Gestori Pacchetti\"\n          }\n        }\n      }\n    },\n    \"Downloading Required Packages\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Downloading Required Packages\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Scarico i pacchetti richiesti\"\n          }\n        }\n      }\n    },\n    \"Exit\" : {\n      \"comment\" : \"The exit action for alerts, which would close the application and put you to the home screen\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Exit\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Esci\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"終了\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dil\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"退出\"\n          }\n        }\n      }\n    },\n    \"Exit Safemode\" : {\n      \"comment\" : \"Alert action that exits safemode for the user incase a failure happened\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Exit Safemode\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Esci dalla Safemode\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \" Safemodeを終了\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dil nga mënyra e sigurt\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"退出安全模式\"\n          }\n        }\n      }\n    },\n    \"General\" : {\n      \"comment\" : \"Tableview section title for general options\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"General\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Generali\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"一般\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gjeneral\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"一般\"\n          }\n        }\n      }\n    },\n    \"Install\" : {\n      \"comment\" : \"Title for first section in the main screen\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Install\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Installa\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"インストール\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Instalo\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"安裝\"\n          }\n        }\n      }\n    },\n    \"Install %@\" : {\n      \"comment\" : \"Prompt action will have a message for you to install the tapped package manager. (i.e \\\"Install Cydia\\\")\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Install %@\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Installa %@\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"%@をインストール\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Instalo %@\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"安裝 %@\"\n          }\n        }\n      }\n    },\n    \"Installing Base Bootstrap\" : {\n      \"comment\" : \"Notice in download view when bootstrap is being extracted by palera1n daemon\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Installo Bootstrap di Base\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"正在解包越獄檔案\"\n          }\n        }\n      }\n    },\n    \"Installing Explanation\" : {\n      \"comment\" : \"Text to the the user not to exit the app while bootstrapping\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Do not exit the app during this process, it may lead to unforeseen issues.\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Non uscire dall’app durante questo processo, potrebbe causare problemi.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"アプリを閉じないでください。予期せぬ問題が発生することがあります。\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請不要退出應用程式，否則可能會發生問題。\"\n          }\n        }\n      }\n    },\n    \"Installing Item\" : {\n      \"comment\" : \"This is text that is displayed when in the install process of installing the bootstrap. (i.e \\\"Installing Cydia\\\")\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Installing %@\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Installo %@\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"%@をインストール\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duke instaluar %@\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"正在安裝%@\"\n          }\n        }\n      }\n    },\n    \"Installing Packages\" : {\n      \"comment\" : \"Notice in download view when installing packages\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Installing Packages\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Installo Pacchetti\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"正在安裝套件\"\n          }\n        }\n      }\n    },\n    \"Is Force Reverted\" : {\n      \"comment\" : \"Prompt message that tells you to reboot the device\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"You have used the force-revert option when using palera1n, please finish the process by fully rebooting the %@.\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hai usato l’opzione force-revert quando usi Palera1n, finisci il processo riavviando completamente il %@\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"palera1nを使用する際に強制復元オプションを使用した場合、デバイスを再起動してください。\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Ti ke perdorur opsionin \\\"force-revert\\\", ju lutemi qe te restartoni pajisjen.\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"你使用了palera1n中的--force-revert（強制還原）選項，請重新啟動裝置以完成這個程序。\"\n          }\n        }\n      }\n    },\n    \"Jailbreak environment not supported by current configuration\" : {\n      \"comment\" : \"Alert body when the custom configuration file does not support the current jailbreak environment\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"The current jailbreak environment is not supported by the current loader configuration file.\\n\\nSwitch to a supported jailbreak environment, or change configuration in options -> Change Download URL.\\n\\nPlatform: %@\\nJailbreak type: %@\\nCF: %d\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"L’ambiente di jailbreak attuale non è supportato dal file di configurazione del loader attuale.     Migra ad un ambiente di jailbreak supportato, o cambia la configurazione nelle opzioni -> Cambia URL Download.                      Piattaforma: %@                                               Tipo di Jailbreak: %@                                     CF: %d \"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"當前的越獄環境不被當前的配置文件支援。\\n\\n請切換到一個支援的越獄環境或在選項 -> 更改下載網址中更改配置。\\n\\n平台：%@\\n越獄類型：%@\\nCF： %d\"\n          }\n        }\n      }\n    },\n    \"Loading\" : {\n      \"comment\" : \"A tableview cell would appear with this label when its trying to retrieve the configuration through palera1ns website\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Loading\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Carico\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"読み込み中\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duke u hapur\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"載入中\"\n          }\n        }\n      }\n    },\n    \"Open %@\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Open %@\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apri %@\"\n          }\n        }\n      }\n    },\n    \"Other\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Other\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Altro\"\n          }\n        }\n      }\n    },\n    \"Password\" : {\n      \"comment\" : \"Placeholder text for the first text field in the password prompt\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Password\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Password\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワード\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fjalëkalimi\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密碼\"\n          }\n        }\n      }\n    },\n    \"Password Explanation\" : {\n      \"comment\" : \"The description in the password prompt telling you what the password is exactly for\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In order to use command line tools like \\\"sudo\\\" after jailbreaking, you will need to set a terminal passcode. (This cannot be empty)\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In ordine per usare strumenti di linea di comando come “sudo” dopo il jailbreak, dovrai impostare un codice per il terminale (Non puoi lasciarlo vuoto)\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Jailbreak後に \\\"sudo \\\"のようなコマンドラインツールを使うには、terminalのパスコードを設定する必要があります。(空にすることはできません)\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Per te perdorur mjetet ne terminal si \\\"sudo\\\" pasi te kini bere jailbreak, ju duhet te vendosni nje password terminali. (Ky password nuk mund te jete bosh.)\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"要使用例如「sudo」 等命令行工具，你需要設定一個命令行密碼。（這不能為空）\"\n          }\n        }\n      }\n    },\n    \"Preparing Environment\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preparing Environment\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preparo Ambiente\"\n          }\n        }\n      }\n    },\n    \"Preparing Repositories\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preparing Repositories\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preparo Repository\"\n          }\n        }\n      }\n    },\n    \"Reboot\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reboot\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Riavvia\"\n          }\n        }\n      }\n    },\n    \"Refresh\" : {\n      \"comment\" : \"Refresh button in top bar on iOS\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Refresj\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aggiorna\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"更新\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"重新載入\"\n          }\n        }\n      }\n    },\n    \"Reinstall %@\" : {\n      \"comment\" : \"Prompt action will have a message for you to reinstall the tapped package manager. (i.e \\\"ReInstall Cydia\\\")\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reinstall %@\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reinstalla %@\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"%@を再インストール\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ri-Instalo %@\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重新安裝%@\"\n          }\n        }\n      }\n    },\n    \"Repeat Password\" : {\n      \"comment\" : \"Placeholder text for the second text field in the password prompt\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repeat Password\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ripeti Password\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワードを再度入力\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rivendos fjalëkalimin\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"再次輸入密碼\"\n          }\n        }\n      }\n    },\n    \"Reset\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reimposta\"\n          }\n        }\n      }\n    },\n    \"Reset Configuration\" : {\n      \"comment\" : \"Tableview cell which gives the user an option to go back to the original URL to where the loader downloads from\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset Configuration\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reimposta Configurazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URLの変更をリセット\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rikthe ne gjendje fillestare konfigurimin\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重設配置文件\"\n          }\n        }\n      }\n    },\n    \"Restore System\" : {\n      \"comment\" : \"A tableview cell which would prompt you to uninstall your jailbreak\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Restore System\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ripristina Sistema\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"システムを復元\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kthe ne gjendje fillestare sistemin e jailbreak\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"還原系統\"\n          }\n        }\n      }\n    },\n    \"Restore System Explanation\" : {\n      \"comment\" : \"Prompt will have a message for you to uninstall the jailbreak, \\\"This will reboot your %@\\\", here will either show if you have an iPhone or iPad, i.e \\\"This will reboot your iPad\\\"\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uninstall jailbreak files and other changes made to the operating system, without erasing your data. This will reboot your %@.\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Disinstalla i file di jailbreak ed altri cambiamenti fatti al sistema operativo, senza cancellare i tuoi dati. Questo riavvierà il tuo %@.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"データを消去せずに、jailbreakファイルとOSに加えられたその他の変更をアンインストールします。その後、%@は再起動します。\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Çinstalo dosjet e jailbreak dhe ndryshime te tjera te bere ne sistem, kjo do heqe gjerat e jailbreakut, pa prekur sistemin e operimit tend. Kjo do te restartoje %@\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除越獄文件和其他操作系統修改，但不移除你的數據。你的%@將會重新啟動。\"\n          }\n        }\n      }\n    },\n    \"Retry\" : {\n      \"comment\" : \"A tableview cell would appear with this button label if it ever fails to retrieve the loader configuration through palera1ns website\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Retry\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Riprova\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"再試行\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Riprovo\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重試\"\n          }\n        }\n      }\n    },\n    \"Set\" : {\n      \"comment\" : \"The set action for alerts, this is mainly used for when changing the URL where the loader downloads from\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Set\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imposta\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vendos\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定\"\n          }\n        }\n      }\n    },\n    \"Set Password\" : {\n      \"comment\" : \"Title of the password prompt\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Set Password\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imposta Password\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワードを設定\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vendos Fjalëkalimin\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定密碼\"\n          }\n        }\n      }\n    },\n    \"Settings\" : {\n      \"comment\" : \"A tabor item to bring up the settings page\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Settings\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Impostazioni\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"オプション\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Opsionet\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"選項\"\n          }\n        }\n      }\n    },\n    \"Show Password Prompt\" : {\n      \"comment\" : \"A tableview cell which toggles if the password alert should prompt you\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Show Password Prompt\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra Prompt Password\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワードプロンプトを表示\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trego menune e vendosjes se fjalëkalimit\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"要求設定密碼\"\n          }\n        }\n      }\n    },\n    \"This Loader version is too old. It is recommended that you update to latest.\" : {\n      \"comment\" : \"You're using a very old version of the loader application\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"This Loader version is too old. It is recommended that you update to latest.\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Questa versione del loader è troppo vecchia. Ti consigliamo di aggiornare all’ultima versione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"このloaderのバージョンは古すぎるため、予期せぬ問題が発生する可能性があります。最新版のpalera1nにアップデートすることをお勧めします。\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Versioni i Aplikacionit Loader eshte shume i vjeter dhe mund te kete probleme te papara. Ju rekomandojme qe ju te shkarkoni versionin me te ri te palera1n.\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"此安裝程式版本太舊，可能發生問題。建議更新到最新版的palera1n。\"\n          }\n        }\n      }\n    },\n    \"Too Long\" : {\n      \"comment\" : \"If your set password is over the 254 char limit in the password prompt\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Too Long\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Troppo Lungo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワードが長すぎます\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Shume vone\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"太長\"\n          }\n        }\n      }\n    },\n    \"Troubleshoot\" : {\n      \"comment\" : \"Title for second section in the main screen\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Troubleshoot\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Problemi\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"トラブルシューティング\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zgjidh Problemet\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"除錯\"\n          }\n        }\n      }\n    },\n    \"Type\" : {\n      \"comment\" : \"Tableview cell label which shows if you're currently rootless or rootful with palera1n\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Type\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tipo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"種類\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tipi\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"類型\"\n          }\n        }\n      }\n    },\n    \"Update Required\" : {\n      \"comment\" : \"Alert title when current loader version is lower than the minimum loader version in JSON.\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aggiornamento Richiesto\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"需要更新\"\n          }\n        }\n      }\n    },\n    \"Version\" : {\n      \"comment\" : \"Tableview cell label which shows your iOS version\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Version\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"バージョン\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versioni\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"版本\"\n          }\n        }\n      }\n    },\n    \"You've entered safemode by either manually or palera1n saved you from it.\" : {\n      \"comment\" : \"Alert action that cancels if the user chooses to cancel in the exit safemode alert\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"You've entered safemode by either manually or palera1n saved you from it.\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sei entrato nella safemode entrando manualmente o palera1n ti ha salvato da quello.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"セーフモードを終了するには、\\\"Safemodeを終了\\\"を選択してください\"\n          }\n        },\n        \"sq-AL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Per te dalë nga menyra e sigurt, kliko, \\\"Dil nga menyra e sigurt\\\"\"\n          }\n        },\n        \"zh-HK\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"你手動進入了安全模式或palera1n偵測到異常而進入安全模式。如要退出安全模式，請按「退出安全模式」 。\"\n          }\n        }\n      }\n    },\n    \"You've removed the jailbreak!\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"You've removed the jailbreak!\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hai rimosso il jailbreak!\"\n          }\n        }\n      }\n    }\n  },\n  \"version\" : \"1.0\"\n}"
  },
  {
    "path": "Loader/SceneDelegate.swift",
    "content": "//\n//  SceneDelegate.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit\n\nclass SceneDelegate: UIResponder, UIWindowSceneDelegate {\n\tvar window: UIWindow?\n\n\tfunc scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {\n\t\tguard let windowScene = scene as? UIWindowScene else { return }\n\t\t\n\t\tlet window = UIWindow(windowScene: windowScene)\n\t\tlet controller = LRTabbarController()\n\t\t\n\t\t#if os(iOS)\n\t\tif #available(iOS 15.0, *) {\n\t\t\twindow.tintColor = .label\n\t\t}\n\t\t#endif\n\t\twindow.rootViewController = controller\n\t\twindow.makeKeyAndVisible()\n\t\tself.window = window\n\t}\n}\n\n"
  },
  {
    "path": "Loader/Supporting Files/Headers/LSApplicationWorkspace.h",
    "content": "//\n//  LSApplicationWorkspace.h\n//  Loader\n//\n//  Created by samara on 13.03.2025.\n//\n\n#include <CoreFoundation/CoreFoundation.h>\n#include <IOKit/IOKitLib.h>\n#include <stdint.h>\n\n@interface LSBundleProxy : NSObject\n@property(nonatomic, assign, readonly) NSURL *bundleURL;\n@property(nonatomic, assign, readonly) NSString *canonicalExecutablePath;\n@end\n\n@interface LSApplicationWorkspace\n+ (instancetype)defaultWorkspace;\n- (BOOL)openSensitiveURL:(NSURL *)url withOptions:(NSDictionary *)options;\n- (BOOL)openURL:(NSURL *)url withOptions:(NSDictionary *)options;\n- (BOOL)openApplicationWithBundleID:(NSString *)arg1;\n@end\n"
  },
  {
    "path": "Loader/Supporting Files/Headers/Macros.h",
    "content": "//\n//  Macros.h\n//  Loader\n//\n//  Created by samara on 25.03.2025.\n//\n\n#ifndef Macros_h\n#define Macros_h\n\n#import <Foundation/Foundation.h>\n\nNS_INLINE NSString* _Nonnull loaderConfigURL(void) CF_SWIFT_NAME(loaderConfigURL()) {\n\treturn @CONFIG_URL;\n}\n\nNS_INLINE NSString* _Nonnull dotfilePath(void) CF_SWIFT_NAME(dotfilePath()) {\n\treturn @DOTFILE_PATH;\n}\n\n#endif /* Macros_h */\n"
  },
  {
    "path": "Loader/Supporting Files/Headers/MobileGestalt.h",
    "content": "/*\n * libMobileGestalt header.\n * Mobile gestalt functions as a QA system. You ask it a question, and it gives you the answer! :)\n *\n * Copyright (c) 2013-2014 Cykey (David Murray)\n * Improved by @PoomSmart (2020)\n * All rights reserved.\n */\n\n#ifndef LIBMOBILEGESTALT_H_\n#define LIBMOBILEGESTALT_H_\n\n#include <CoreFoundation/CoreFoundation.h>\n\n#if __cplusplus\nextern \"C\" {\n#endif\n\n#pragma mark - API\n\nCFPropertyListRef MGCopyAnswer(CFStringRef property);\n\n#pragma mark - Device Information\n\nstatic const CFStringRef kMGPhysicalHardwareNameString = CFSTR(\"PhysicalHardwareNameString\");\n\n#if __cplusplus\n}\n#endif\n\n#endif /* LIBMOBILEGESTALT_H_ */\n"
  },
  {
    "path": "Loader/Supporting Files/Headers/posixspawn.h",
    "content": "//\n//  posixspawn.h\n//  loader-rewrite\n//\n//  Created by samara on 1/30/24.\n//\n\n#include <spawn.h>\n\n#define POSIX_SPAWN_PERSONA_FLAGS_OVERRIDE 1\nint posix_spawnattr_set_persona_np(const posix_spawnattr_t* __restrict, uid_t, uint32_t);\nint posix_spawnattr_set_persona_uid_np(const posix_spawnattr_t* __restrict, uid_t);\nint posix_spawnattr_set_persona_gid_np(const posix_spawnattr_t* __restrict, uid_t);\n"
  },
  {
    "path": "Loader/Supporting Files/IOKit.tbd",
    "content": "--- !tapi-tbd\ntbd-version:     4\ntargets:         [ arm64-tvos, arm64e-tvos, arm64-ios, arm64e-ios, arm64-macos, arm64e-macos, x86_64-macos, arm64-ios-simulator, arm64-tvos-simulator, x86_64-ios-simulator, x86_64-tvos-simulator ]\nuuids:\n  - target:          arm64-tvos\n    value:           B076C6CA-A277-3870-94E5-5C5C984C445E\n  - target:          arm64e-tvos\n    value:           B076C7CA-A277-3870-94E5-5C5C984C4451\n  - target:          arm64e-ios\n    value:           B076C7CA-A277-3870-94E5-5C5C984C4452\n  - target:          arm64e-ios\n    value:           B076C7CA-A277-3870-94E5-5C5C984C4453\n  - target:          arm64e-macos\n    value:           B076C7CA-A277-3870-94E5-5C5C984C4454\n  - target:          arm64-macos\n    value:           B076C7CA-A277-3870-94E5-5C5C984C4455\n  - target:          x86_64-macos\n    value:           B076C7CA-A277-3870-94E5-5C5C984C4456\ninstall-name:    '/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit'\ncurrent-version: 275\nexports:\n  - targets:         [ arm64-tvos, arm64e-tvos, arm64-ios, arm64e-ios, arm64-macos, arm64e-macos, x86_64-macos ]\n    symbols:         [ _IOAVAudioFormatString, _IOAVAudioGetChannelAllocation, _IOAVAudioGetChannelAllocationDefault, \n                       _IOAVAudioGetChannelLayoutData, _IOAVAudioGetSpeakerAllocationMask, \n                       _IOAVAudioInterfaceCopyChannelLayoutElements, _IOAVAudioInterfaceCopyDiagnosticsString, \n                       _IOAVAudioInterfaceCopyElements, _IOAVAudioInterfaceCopyProperties, \n                       _IOAVAudioInterfaceCopyProperty, _IOAVAudioInterfaceCreate, \n                       _IOAVAudioInterfaceCreateWithService, _IOAVAudioInterfaceGetLinkData, \n                       _IOAVAudioInterfaceGetLinkDataWithSource, _IOAVAudioInterfaceGetLocation, \n                       _IOAVAudioInterfaceGetService, _IOAVAudioInterfaceGetTypeID, \n                       _IOAVAudioInterfaceSetLogLevel, _IOAVAudioInterfaceSetLogLevelMask, \n                       _IOAVAudioInterfaceSetProperty, _IOAVAudioInterfaceStartLink, \n                       _IOAVAudioInterfaceStartLinkWithSource, _IOAVAudioInterfaceStopLink, \n                       _IOAVAudioInterfaceStopLinkWithSource, _IOAVAudioLinkGetBitRate, \n                       _IOAVAudioLinkGetHDMIAudioPacketType, _IOAVAudioLinkGetMaxStreamChannelCount, \n                       _IOAVAudioLinkGetMaxStreamSampleRate, _IOAVAudioLinkIsIEC61937, \n                       _IOAVAudioLinkSampleRateForFormat, _IOAVAudioSampleRateEnum, \n                       _IOAVAudioSampleRateScalar, _IOAVAudioSampleSizeEnum, _IOAVAudioSampleSizeScalar, \n                       _IOAVAudioSpeakerString, _IOAVCommandString, _IOAVConnectCallCopyMethod, \n                       _IOAVConnectCallSetMethod, _IOAVContentProtectionProtocolString, \n                       _IOAVContentProtectionTypeString, _IOAVControlInterfaceCopyDiagnosticsString, \n                       _IOAVControlInterfaceCopyProperties, _IOAVControlInterfaceCopyProperty, \n                       _IOAVControlInterfaceCreate, _IOAVControlInterfaceCreateWithService, \n                       _IOAVControlInterfaceGetLocation, _IOAVControlInterfaceGetService, \n                       _IOAVControlInterfaceGetTypeID, _IOAVControlInterfaceSetLogLevel, \n                       _IOAVControlInterfaceSetLogLevelMask, _IOAVControlInterfaceSetProperty, \n                       _IOAVControllerClearEventLog, _IOAVControllerCopyDiagnosticsString, \n                       _IOAVControllerCopyProperties, _IOAVControllerCopyProperty, \n                       _IOAVControllerCreate, _IOAVControllerCreateWithLocation, \n                       _IOAVControllerCreateWithService, _IOAVControllerForceHotPlugDetect, \n                       _IOAVControllerGetLocation, _IOAVControllerGetPower, _IOAVControllerGetTypeID, \n                       _IOAVControllerSetEventLogCommandMask, _IOAVControllerSetEventLogEventMask, \n                       _IOAVControllerSetEventLogSize, _IOAVControllerSetLogLevel, \n                       _IOAVControllerSetLogLevelMask, _IOAVControllerSetPower, _IOAVControllerSetProperty, \n                       _IOAVControllerSetProtectionType, _IOAVControllerSetVirtualDeviceMode, \n                       _IOAVControllerSleepDisplay, _IOAVControllerWakeDisplay, _IOAVCreateDiagnosticsReference, \n                       _IOAVCreateDiagnosticsReferenceWithLocation, _IOAVCreateDiagnosticsString, \n                       _IOAVCreateDiagnosticsStringWithLocation, _IOAVCreateStringWithAudioChannelLayoutData, \n                       _IOAVCreateStringWithAudioLinkData, _IOAVCreateStringWithData, \n                       _IOAVCreateStringWithElement, _IOAVCreateStringWithElements, \n                       _IOAVCreateStringWithVideoColorData, _IOAVCreateStringWithVideoLinkData, \n                       _IOAVCreateStringWithVideoTimingData, _IOAVDSCCapabilitiesGetMaxSlicesPerLine, \n                       _IOAVDSCCapabilitiesGetPeakPixelRateForMode, _IOAVDSCModeForPixelEncoding, \n                       _IOAVDSCSlicesPerLineScalar, _IOAVDeviceClearEventLog, _IOAVDeviceCopyDiagnosticsString, \n                       _IOAVDeviceCopyProperties, _IOAVDeviceCopyProperty, _IOAVDeviceCreate, \n                       _IOAVDeviceCreateWithLocation, _IOAVDeviceCreateWithService, \n                       _IOAVDeviceGetController, _IOAVDeviceGetLinkData, _IOAVDeviceGetLocation, \n                       _IOAVDeviceGetProtectionStatus, _IOAVDeviceGetTypeID, _IOAVDeviceReadI2C, \n                       _IOAVDeviceSetEventLogCommandMask, _IOAVDeviceSetEventLogEventMask, \n                       _IOAVDeviceSetEventLogSize, _IOAVDeviceSetLogLevel, _IOAVDeviceSetLogLevelMask, \n                       _IOAVDeviceSetProperty, _IOAVDeviceWriteI2C, _IOAVDisplayMemoryCreateWithName, \n                       _IOAVDisplayMemoryCreateWithService, _IOAVDisplayMemoryGetTypeID, \n                       _IOAVDisplayMemoryRead, _IOAVDisplayMemoryWrite, _IOAVEDIDIsStandard, \n                       _IOAVElementTypeString, _IOAVEncryptionStatusString, _IOAVEventLogEventTypeString, \n                       _IOAVGetCEAVideoShortID, _IOAVGetCEAVideoShortIDWithData, \n                       _IOAVGetCEAVideoShortIDWithDataActive, _IOAVGetCEAVideoTimingData, \n                       _IOAVGetCEAVideoTimingDataWithShortID, _IOAVGetCVTVideoTimingData, \n                       _IOAVGetDMTVideoTimingData, _IOAVGetGTFVideoTimingData, _IOAVGetSPDInfoFrame, \n                       _IOAVGetVideoTimingData, _IOAVGetVideoTimingDataByID, _IOAVGetVideoTimingTable, \n                       _IOAVHDMIAudioClockRegenerationDataForLink, _IOAVHDMICharacterRate, \n                       _IOAVHDMIClockRate, _IOAVHDMIFRLBandwidth, _IOAVHDMIFRLBitRateScalar, \n                       _IOAVHDMIFRLCharacterRate, _IOAVHDMIFRLRateString, _IOAVInfoFrameGetChecksum, \n                       _IOAVInfoFrameTypeString, _IOAVLinkSourceString, _IOAVLinkTypeString, \n                       _IOAVLocationString, _IOAVObjectConformsTo, _IOAVPropertyListCreateWithCFProperties, \n                       _IOAVProtectionStatusString, _IOAVRecoverableError, _IOAVServiceClearEventLog, \n                       _IOAVServiceCopyDiagnosticsString, _IOAVServiceCopyEDID, _IOAVServiceCopyPhysicalAddress, \n                       _IOAVServiceCopyProperties, _IOAVServiceCopyProperty, _IOAVServiceCreate, \n                       _IOAVServiceCreateWithLocation, _IOAVServiceCreateWithService, \n                       _IOAVServiceGetChosenContentProtection, _IOAVServiceGetContentProtectionCapabilities, \n                       _IOAVServiceGetDevice, _IOAVServiceGetEncryptionStatus, _IOAVServiceGetHDCPAuthenticatedContentType, \n                       _IOAVServiceGetLinkData, _IOAVServiceGetLinkDataWithSource, \n                       _IOAVServiceGetLocation, _IOAVServiceGetPower, _IOAVServiceGetProtectionStatus, \n                       _IOAVServiceGetTypeID, _IOAVServiceReadI2C, _IOAVServiceSetContentProtectionCapabilities, \n                       _IOAVServiceSetContentProtectionPolicyOptions, _IOAVServiceSetContentProtectionSupportEnabled, \n                       _IOAVServiceSetEventLogCommandMask, _IOAVServiceSetEventLogEventMask, \n                       _IOAVServiceSetEventLogSize, _IOAVServiceSetHDRStaticMetadata, \n                       _IOAVServiceSetLogLevel, _IOAVServiceSetLogLevelMask, _IOAVServiceSetProperty, \n                       _IOAVServiceSetVirtualEDIDMode, _IOAVServiceStartInfoFrame, \n                       _IOAVServiceStartInfoFrameWithSource, _IOAVServiceStartLink, \n                       _IOAVServiceStartLinkWithSource, _IOAVServiceStopInfoFrame, \n                       _IOAVServiceStopInfoFrameWithSource, _IOAVServiceStopLink, \n                       _IOAVServiceStopLinkWithSource, _IOAVServiceWriteI2C, _IOAVStandardTypeString, \n                       _IOAVTransportString, _IOAVTransportSupportsCEA, _IOAVTransportSupportsRGBOnly, \n                       _IOAVVideoActiveFormatAspectRatio, _IOAVVideoAspectRatioString, \n                       _IOAVVideoAxisString, _IOAVVideoColorBitDepth, _IOAVVideoColorBitDepthIsSupported, \n                       _IOAVVideoColorBitDepthMinimumForEOTF, _IOAVVideoColorBitDepthScalar, \n                       _IOAVVideoColorBitsPerPixel, _IOAVVideoColorCoefficientString, \n                       _IOAVVideoColorDynamicRangeString, _IOAVVideoColorEOTFString, \n                       _IOAVVideoColorMinimumBitsPerPixelDSC, _IOAVVideoColorSpaceString, \n                       _IOAVVideoColorimetryIsValid, _IOAVVideoColorimetryString, \n                       _IOAVVideoGetPixelClockTolerance, _IOAVVideoInterfaceCopyColorElements, \n                       _IOAVVideoInterfaceCopyDiagnosticsString, _IOAVVideoInterfaceCopyDisplayAttributes, \n                       _IOAVVideoInterfaceCopyProperties, _IOAVVideoInterfaceCopyProperty, \n                       _IOAVVideoInterfaceCopyTimingElements, _IOAVVideoInterfaceCreate, \n                       _IOAVVideoInterfaceCreateWithLocation, _IOAVVideoInterfaceCreateWithService, \n                       _IOAVVideoInterfaceGetLinkData, _IOAVVideoInterfaceGetLinkDataWithSource, \n                       _IOAVVideoInterfaceGetLocation, _IOAVVideoInterfaceGetService, \n                       _IOAVVideoInterfaceGetTypeID, _IOAVVideoInterfaceSetBounds, \n                       _IOAVVideoInterfaceSetColorDitherRemoval, _IOAVVideoInterfaceSetLogLevel, \n                       _IOAVVideoInterfaceSetLogLevelMask, _IOAVVideoInterfaceSetProperty, \n                       _IOAVVideoInterfaceSetRotation, _IOAVVideoInterfaceSetScreenVirtualTemperature, \n                       _IOAVVideoInterfaceStartLink, _IOAVVideoInterfaceStartLinkWithModes, \n                       _IOAVVideoInterfaceStartLinkWithSource, _IOAVVideoInterfaceStopLink, \n                       _IOAVVideoInterfaceStopLinkWithSource, _IOAVVideoInterfaceUpdateLinkWithSource, \n                       _IOAVVideoLinkBandwidth, _IOAVVideoLinkIsDolbyVision, _IOAVVideoLinkModeString, \n                       _IOAVVideoLinkRequiresHDMIScrambling, _IOAVVideoPixelEncodingIsDolbyVision, \n                       _IOAVVideoPixelEncodingIsLLDolbyVision, _IOAVVideoPixelEncodingString, \n                       _IOAVVideoScanInformationString, _IOAVVideoTimingGetActivePixelClock, \n                       _IOAVVideoTimingGetBlankingStyle, _IOAVVideoTimingGetITSource, \n                       _IOAVVideoTimingGetPixelClock, _IOAVVideoTimingGetSyncRateRounded, \n                       _IOAVVideoTimingIsVideoOptimized, _IOAVVideoTimingStandardString, \n                       _IOAVVideoTimingTypeString, _IOAVVideoTimingVideoOptimizedDelta, \n                       _IOAllowPowerChange, _IOBSDNameMatching, _IOCFSerialize, _IOCFURLWriteDataAndPropertiesToResource, \n                       _IOCFUnserialize, _IOCFUnserializeBinary, _IOCFUnserializeWithSize, \n                       _IOCFUnserializeparse, _IOCancelPowerChange, _IOCatalogueGetData, \n                       _IOCatalogueModuleLoaded, _IOCatalogueReset, _IOCatalogueSendData, \n                       _IOCatalogueTerminate, _IOCatlogueGetGenCount, _IOCloseConnection, \n                       _IOCompatibiltyNumber, _IOConnectAddClient, _IOConnectAddRef, \n                       _IOConnectCallAsyncMethod, _IOConnectCallAsyncScalarMethod, \n                       _IOConnectCallAsyncStructMethod, _IOConnectCallMethod, _IOConnectCallScalarMethod, \n                       _IOConnectCallStructMethod, _IOConnectGetService, _IOConnectMapMemory, \n                       _IOConnectMapMemory64, _IOConnectRelease, _IOConnectSetCFProperties, \n                       _IOConnectSetCFProperty, _IOConnectSetNotificationPort, _IOConnectTrap0, \n                       _IOConnectTrap1, _IOConnectTrap2, _IOConnectTrap3, _IOConnectTrap4, \n                       _IOConnectTrap5, _IOConnectTrap6, _IOConnectUnmapMemory, _IOConnectUnmapMemory64, \n                       _IOCopySystemLoadAdvisoryDetailed, _IOCreatePlugInInterfaceForService, \n                       _IOCreateReceivePort, _IODPAudioCodingType, _IODPCalculateM, \n                       _IODPCommandString, _IODPCompareLinkTrainingData, _IODPConstrainDriveSettings, \n                       _IODPConstrainedDriveSettings, _IODPControllerCreate, _IODPControllerCreateWithLocation, \n                       _IODPControllerCreateWithService, _IODPControllerGetAVController, \n                       _IODPControllerGetMaxLaneCount, _IODPControllerGetMaxLinkRate, \n                       _IODPControllerGetMinLaneCount, _IODPControllerGetMinLinkRate, \n                       _IODPControllerGetTypeID, _IODPControllerSetDriveSettings, \n                       _IODPControllerSetLaneCount, _IODPControllerSetLinkRate, _IODPControllerSetMaxLaneCount, \n                       _IODPControllerSetMaxLinkRate, _IODPControllerSetMinLaneCount, \n                       _IODPControllerSetMinLinkRate, _IODPControllerSetQualityPattern, \n                       _IODPControllerSetScramblingInhibited, _IODPControllerSetSupportsDownspread, \n                       _IODPControllerSetSupportsEnhancedMode, _IODPCreateStringWithLinkTrainingData, \n                       _IODPDeviceCreate, _IODPDeviceCreateWithLocation, _IODPDeviceCreateWithService, \n                       _IODPDeviceGetAVDevice, _IODPDeviceGetController, _IODPDeviceGetLinkTrainingData, \n                       _IODPDeviceGetMaxLaneCount, _IODPDeviceGetMaxLinkRate, _IODPDeviceGetRevisionMajor, \n                       _IODPDeviceGetRevisionMinor, _IODPDeviceGetSupportsDownspread, \n                       _IODPDeviceGetSupportsEnhancedMode, _IODPDeviceGetSymbolErrorCount, \n                       _IODPDeviceGetTypeID, _IODPDeviceReadDPCD, _IODPDeviceSetUpdateMode, \n                       _IODPDeviceSetUpdated, _IODPDeviceTypeString, _IODPDeviceWriteDPCD, \n                       _IODPDriveSettingsAreValid, _IODPDriveSettingsEqual, _IODPEventLogEventTypeString, \n                       _IODPInfoFrameSDP, _IODPLinkBandwidth, _IODPLinkBitRateForLinkSymbolClock, \n                       _IODPLinkRateEnum, _IODPLinkRateIsStandard, _IODPLinkRateRequiredForVideoBandwidth, \n                       _IODPLinkRateScalar, _IODPLinkSymbolClockForLinkBitRate, _IODPLinkSymbolRate, \n                       _IODPQualityPatternName, _IODPServiceCreate, _IODPServiceCreateWithLocation, \n                       _IODPServiceCreateWithService, _IODPServiceGetAVService, _IODPServiceGetDevice, \n                       _IODPServiceGetSinkCount, _IODPServiceGetSymbolErrorCount, \n                       _IODPServiceGetTypeID, _IODPServiceRetrainLink, _IODPStreamClockHz, \n                       _IODPTrainingPatternLength, _IODPTrainingPatternName, _IODPUnifiedDriveSettings, \n                       _IODPVideoBandwidth, _IODPVideoLinkMainStreamAttributeData, \n                       _IODPVideoLinkVideoStreamConfigurationSDP, _IODataQueueAllocateNotificationPort, \n                       _IODataQueueDataAvailable, _IODataQueueDequeue, _IODataQueueEnqueue, \n                       _IODataQueuePeek, _IODataQueueSetNotificationPort, _IODataQueueWaitForAvailableData, \n                       _IODeregisterApp, _IODeregisterForRemoteSystemPower, _IODeregisterForSystemPower, \n                       _IODestroyPlugInInterface, _IODispatchCalloutFromCFMessage, \n                       _IODispatchCalloutFromMessage, _IOEthernetControllerCreate, \n                       _IOEthernetControllerGetBSDSocket, _IOEthernetControllerGetIONetworkInterfaceObject, \n                       _IOEthernetControllerGetTypeID, _IOEthernetControllerReadPacket, \n                       _IOEthernetControllerRegisterBSDAttachCallback, _IOEthernetControllerRegisterDisableCallback, \n                       _IOEthernetControllerRegisterEnableCallback, _IOEthernetControllerRegisterPacketAvailableCallback, \n                       _IOEthernetControllerScheduleWithRunLoop, _IOEthernetControllerSetDispatchQueue, \n                       _IOEthernetControllerSetLinkStatus, _IOEthernetControllerSetPowerSavings, \n                       _IOEthernetControllerUnscheduleFromRunLoop, _IOEthernetControllerWritePacket, \n                       _IOGetSystemLoadAdvisory, _IOHIDAnalyticsEventActivate, _IOHIDAnalyticsEventAddField, \n                       _IOHIDAnalyticsEventAddHistogramField, _IOHIDAnalyticsEventCancel, \n                       _IOHIDAnalyticsEventCreate, _IOHIDAnalyticsEventSetIntegerValueForField, \n                       _IOHIDAnalyticsEventSetStringValueForField, _IOHIDAnalyticsHistogramEventCreate, \n                       _IOHIDAnalyticsHistogramEventSetIntegerValue, _IOHIDCheckAccess, \n                       _IOHIDConnectionFilterActivate, _IOHIDConnectionFilterCancel, \n                       _IOHIDConnectionFilterCopyProperty, _IOHIDConnectionFilterCreate, \n                       _IOHIDConnectionFilterFilterEvent, _IOHIDConnectionFilterGetTypeID, \n                       _IOHIDConnectionFilterSetCancelHandler, _IOHIDConnectionFilterSetDispatchQueue, \n                       _IOHIDConnectionFilterSetProperty, _IOHIDCopyCFTypeParameter, \n                       _IOHIDCopyHIDParameterFromEventSystem, _IOHIDCreateSharedMemory, \n                       _IOHIDDeviceActivate, _IOHIDDeviceCancel, _IOHIDDeviceClose, \n                       _IOHIDDeviceConformsTo, _IOHIDDeviceCopyDescription, _IOHIDDeviceCopyMatchingElements, \n                       _IOHIDDeviceCopyValueMultiple, _IOHIDDeviceCopyValueMultipleWithCallback, \n                       _IOHIDDeviceCreate, _IOHIDDeviceGetProperty, _IOHIDDeviceGetRegistryEntryID, \n                       _IOHIDDeviceGetReport, _IOHIDDeviceGetReportWithCallback, \n                       _IOHIDDeviceGetService, _IOHIDDeviceGetTypeID, _IOHIDDeviceGetValue, \n                       _IOHIDDeviceGetValueWithCallback, _IOHIDDeviceGetValueWithOptions, \n                       _IOHIDDeviceOpen, _IOHIDDeviceRegisterInputReportCallback, \n                       _IOHIDDeviceRegisterInputReportWithTimeStampCallback, _IOHIDDeviceRegisterInputValueCallback, \n                       _IOHIDDeviceRegisterRemovalCallback, _IOHIDDeviceScheduleWithRunLoop, \n                       _IOHIDDeviceSetCancelHandler, _IOHIDDeviceSetDispatchQueue, \n                       _IOHIDDeviceSetInputValueMatching, _IOHIDDeviceSetInputValueMatchingMultiple, \n                       _IOHIDDeviceSetProperty, _IOHIDDeviceSetReport, _IOHIDDeviceSetReportWithCallback, \n                       _IOHIDDeviceSetValue, _IOHIDDeviceSetValueMultiple, _IOHIDDeviceSetValueMultipleWithCallback, \n                       _IOHIDDeviceSetValueWithCallback, _IOHIDDeviceUnscheduleFromRunLoop, \n                       _IOHIDElementAttach, _IOHIDElementCopyAttached, _IOHIDElementCreateWithDictionary, \n                       _IOHIDElementDetach, _IOHIDElementGetChildren, _IOHIDElementGetCollectionType, \n                       _IOHIDElementGetCookie, _IOHIDElementGetDevice, _IOHIDElementGetDuplicateIndex, \n                       _IOHIDElementGetLogicalMax, _IOHIDElementGetLogicalMin, _IOHIDElementGetName, \n                       _IOHIDElementGetParent, _IOHIDElementGetPhysicalMax, _IOHIDElementGetPhysicalMin, \n                       _IOHIDElementGetProperty, _IOHIDElementGetReportCount, _IOHIDElementGetReportID, \n                       _IOHIDElementGetReportSize, _IOHIDElementGetType, _IOHIDElementGetTypeID, \n                       _IOHIDElementGetUnit, _IOHIDElementGetUnitExponent, _IOHIDElementGetUsage, \n                       _IOHIDElementGetUsagePage, _IOHIDElementHasNullState, _IOHIDElementHasPreferredState, \n                       _IOHIDElementIsArray, _IOHIDElementIsNonLinear, _IOHIDElementIsRelative, \n                       _IOHIDElementIsVirtual, _IOHIDElementIsWrapping, _IOHIDElementSetProperty, \n                       _IOHIDEventAppendEvent, _IOHIDEventConformsTo, _IOHIDEventConformsToWithOptions, \n                       _IOHIDEventCopyDescription, _IOHIDEventCreate, _IOHIDEventCreateAccelerometerEvent, \n                       _IOHIDEventCreateAccelerometerEventWithType, _IOHIDEventCreateAmbientLightSensorEvent, \n                       _IOHIDEventCreateAtmosphericPressureEvent, _IOHIDEventCreateBiometricEvent, \n                       _IOHIDEventCreateBoundaryScrollEvent, _IOHIDEventCreateBrightnessEvent, \n                       _IOHIDEventCreateButtonEvent, _IOHIDEventCreateButtonEventWithPressure, \n                       _IOHIDEventCreateCollectionEvent, _IOHIDEventCreateCompassEvent, \n                       _IOHIDEventCreateCompassEventWithType, _IOHIDEventCreateCopy, \n                       _IOHIDEventCreateData, _IOHIDEventCreateDeviceOrientationEventWithUsage, \n                       _IOHIDEventCreateDigitizerEvent, _IOHIDEventCreateDigitizerFingerEvent, \n                       _IOHIDEventCreateDigitizerFingerEventWithQuality, _IOHIDEventCreateDigitizerStylusEvent, \n                       _IOHIDEventCreateDigitizerStylusEventWithPolarOrientation, \n                       _IOHIDEventCreateDockSwipeEvent, _IOHIDEventCreateFluidTouchGestureEvent, \n                       _IOHIDEventCreateForceEvent, _IOHIDEventCreateGameControllerEvent, \n                       _IOHIDEventCreateGenericGestureEvent, _IOHIDEventCreateGyroEvent, \n                       _IOHIDEventCreateGyroEventWithType, _IOHIDEventCreateKeyboardEvent, \n                       _IOHIDEventCreateLEDEvent, _IOHIDEventCreateMotionActivtyEvent, \n                       _IOHIDEventCreateMotionGestureEvent, _IOHIDEventCreateMouseEvent, \n                       _IOHIDEventCreateNavigationSwipeEvent, _IOHIDEventCreateOrientationEvent, \n                       _IOHIDEventCreatePolarOrientationEvent, _IOHIDEventCreateProgressEvent, \n                       _IOHIDEventCreateProximtyEvent, _IOHIDEventCreateProximtyLevelEvent, \n                       _IOHIDEventCreateProximtyProbabilityEvent, _IOHIDEventCreateQuaternionOrientationEvent, \n                       _IOHIDEventCreateRelativePointerEvent, _IOHIDEventCreateRotationEvent, \n                       _IOHIDEventCreateScaleEvent, _IOHIDEventCreateScrollEvent, \n                       _IOHIDEventCreateSwipeEvent, _IOHIDEventCreateSymbolicHotKeyEvent, \n                       _IOHIDEventCreateTranslationEvent, _IOHIDEventCreateUnicodeEvent, \n                       _IOHIDEventCreateUnicodeEventWithQuality, _IOHIDEventCreateVelocityEvent, \n                       _IOHIDEventCreateVendorDefinedEvent, _IOHIDEventCreateWithBytes, \n                       _IOHIDEventCreateWithData, _IOHIDEventCreateZoomToggleEvent, \n                       _IOHIDEventGetAttributeData, _IOHIDEventGetAttributeDataLength, \n                       _IOHIDEventGetAttributeDataPtr, _IOHIDEventGetChildren, _IOHIDEventGetDataLength, \n                       _IOHIDEventGetDataValue, _IOHIDEventGetDataValueWithOptions, \n                       _IOHIDEventGetDoubleValue, _IOHIDEventGetDoubleValueWithOptions, \n                       _IOHIDEventGetEvent, _IOHIDEventGetEventFlags, _IOHIDEventGetEventWithOptions, \n                       _IOHIDEventGetFloatMultiple, _IOHIDEventGetFloatMultipleWithOptions, \n                       _IOHIDEventGetFloatValue, _IOHIDEventGetFloatValueWithOptions, \n                       _IOHIDEventGetIntegerMultiple, _IOHIDEventGetIntegerMultipleWithOptions, \n                       _IOHIDEventGetIntegerValue, _IOHIDEventGetIntegerValueWithOptions, \n                       _IOHIDEventGetLatency, _IOHIDEventGetParent, _IOHIDEventGetPhase, \n                       _IOHIDEventGetPolicy, _IOHIDEventGetPosition, _IOHIDEventGetPositionWithOptions, \n                       _IOHIDEventGetScrollMomentum, _IOHIDEventGetSenderID, _IOHIDEventGetTimeStamp, \n                       _IOHIDEventGetTimeStampOfType, _IOHIDEventGetTimeStampType, \n                       _IOHIDEventGetType, _IOHIDEventGetTypeID, _IOHIDEventGetTypeString, \n                       _IOHIDEventGetUInt64Multiple, _IOHIDEventGetUInt64MultipleWithOptions, \n                       _IOHIDEventGetUInt64Value, _IOHIDEventGetUInt64ValueWithOptions, \n                       _IOHIDEventGetVendorDefinedData, _IOHIDEventIsAbsolute, _IOHIDEventIsRepeat, \n                       _IOHIDEventQueueCreate, _IOHIDEventQueueCreateWithVM, _IOHIDEventQueueDequeueCopy, \n                       _IOHIDEventQueueEnqueue, _IOHIDEventQueueGetMemoryHandle, \n                       _IOHIDEventQueueGetNotificationPort, _IOHIDEventQueueGetTypeID, \n                       _IOHIDEventQueueIsActive, _IOHIDEventQueueNotify, _IOHIDEventQueueResume, \n                       _IOHIDEventQueueSetNotificationPort, _IOHIDEventQueueStart, \n                       _IOHIDEventQueueStop, _IOHIDEventQueueSuspend, _IOHIDEventReadBytes, \n                       _IOHIDEventRemoveEvent, _IOHIDEventServerCreate, _IOHIDEventServerGetTypeID, \n                       _IOHIDEventServerScheduleWithDispatchQueue, _IOHIDEventServerUnscheduleFromDispatchQueue, \n                       _IOHIDEventSetAttributeData, _IOHIDEventSetDoubleMultiple, \n                       _IOHIDEventSetDoubleMultipleWithOptions, _IOHIDEventSetDoubleValue, \n                       _IOHIDEventSetDoubleValueWithOptions, _IOHIDEventSetEventFlags, \n                       _IOHIDEventSetFloatMultiple, _IOHIDEventSetFloatMultipleWithOptions, \n                       _IOHIDEventSetFloatValue, _IOHIDEventSetFloatValueWithOptions, \n                       _IOHIDEventSetInt64Value, _IOHIDEventSetIntegerMultiple, _IOHIDEventSetIntegerMultipleWithOptions, \n                       _IOHIDEventSetIntegerValue, _IOHIDEventSetIntegerValueWithOptions, \n                       _IOHIDEventSetPhase, _IOHIDEventSetPosition, _IOHIDEventSetPositionWithOptions, \n                       _IOHIDEventSetRepeat, _IOHIDEventSetScrollMomentum, _IOHIDEventSetSenderID, \n                       _IOHIDEventSetTimeStamp, _IOHIDEventSetTimeStampOfType, _IOHIDEventSetUInt64Multiple, \n                       _IOHIDEventSetUInt64MultipleWithOptions, _IOHIDEventSetUInt64ValueWithOptions, \n                       _IOHIDEventSystemClient, _IOHIDEventSystemClientActivate, \n                       _IOHIDEventSystemClientCancel, _IOHIDEventSystemClientCopyProperty, \n                       _IOHIDEventSystemClientCopyServiceForRegistryID, _IOHIDEventSystemClientCopyServices, \n                       _IOHIDEventSystemClientCreate, _IOHIDEventSystemClientCreateSimpleClient, \n                       _IOHIDEventSystemClientCreateWithType, _IOHIDEventSystemClientDispatchEvent, \n                       _IOHIDEventSystemClientGetTypeID, _IOHIDEventSystemClientGetTypeString, \n                       _IOHIDEventSystemClientRegisterDeviceMatchingBlock, _IOHIDEventSystemClientRegisterDeviceMatchingCallback, \n                       _IOHIDEventSystemClientRegisterEventBlock, _IOHIDEventSystemClientRegisterEventCallback, \n                       _IOHIDEventSystemClientRegisterEventFilterBlock, _IOHIDEventSystemClientRegisterEventFilterBlockWithPriority, \n                       _IOHIDEventSystemClientRegisterEventFilterCallback, _IOHIDEventSystemClientRegisterEventFilterCallbackWithPriority, \n                       _IOHIDEventSystemClientRegisterPropertyChangedCallback, _IOHIDEventSystemClientRegisterResetCallback, \n                       _IOHIDEventSystemClientRegistryIDConformsTo, _IOHIDEventSystemClientScheduleWithDispatchQueue, \n                       _IOHIDEventSystemClientScheduleWithRunLoop, _IOHIDEventSystemClientSetCancelHandler, \n                       _IOHIDEventSystemClientSetDispatchQueue, _IOHIDEventSystemClientSetMatching, \n                       _IOHIDEventSystemClientSetMatchingMultiple, _IOHIDEventSystemClientSetProperty, \n                       _IOHIDEventSystemClientUnregisterDeviceMatchingBlock, _IOHIDEventSystemClientUnregisterDeviceMatchingCallback, \n                       _IOHIDEventSystemClientUnregisterEventBlock, _IOHIDEventSystemClientUnregisterEventCallback, \n                       _IOHIDEventSystemClientUnregisterEventFilterBlock, _IOHIDEventSystemClientUnregisterEventFilterCallback, \n                       _IOHIDEventSystemClientUnregisterPropertyChangedCallback, \n                       _IOHIDEventSystemClientUnregisterResetCallback, _IOHIDEventSystemClientUnscheduleFromDispatchQueue, \n                       _IOHIDEventSystemClientUnscheduleWithRunLoop, _IOHIDEventSystemClose, \n                       _IOHIDEventSystemConnectionCopyDescription, _IOHIDEventSystemConnectionDispatchEvent, \n                       _IOHIDEventSystemConnectionGetAttribute, _IOHIDEventSystemConnectionGetAuditToken, \n                       _IOHIDEventSystemConnectionGetEntitlements, _IOHIDEventSystemConnectionGetProcName, \n                       _IOHIDEventSystemConnectionGetTaskNamePort, _IOHIDEventSystemConnectionGetType, \n                       _IOHIDEventSystemConnectionGetTypeID, _IOHIDEventSystemConnectionGetTypeString, \n                       _IOHIDEventSystemConnectionGetUUID, _IOHIDEventSystemConnectionHasEntitlement, \n                       _IOHIDEventSystemCopyConnections, _IOHIDEventSystemCopyEvent, \n                       _IOHIDEventSystemCopyMatchingServices, _IOHIDEventSystemCopyService, \n                       _IOHIDEventSystemCopyServices, _IOHIDEventSystemCreate, _IOHIDEventSystemGetProperty, \n                       _IOHIDEventSystemGetTypeID, _IOHIDEventSystemOpen, _IOHIDEventSystemRegisterConnectionAdditionCallback, \n                       _IOHIDEventSystemRegisterConnectionRemovalCallback, _IOHIDEventSystemRegisterPropertyChangedNotification, \n                       _IOHIDEventSystemRegisterServicesCallback, _IOHIDEventSystemSetCallback, \n                       _IOHIDEventSystemSetProperty, _IOHIDEventSystemUnregisterConnectionAdditionCallback, \n                       _IOHIDEventSystemUnregisterConnectionRemovalCallback, _IOHIDEventSystemUnregisterPropertyChangedNotification, \n                       _IOHIDEventSystemUnregisterServicesCallback, _IOHIDEventTypeGetName, \n                       _IOHIDGetAccelerationWithKey, _IOHIDGetActivityState, _IOHIDGetButtonEventNum, \n                       _IOHIDGetModifierLockState, _IOHIDGetMouseAcceleration, _IOHIDGetMouseButtonMode, \n                       _IOHIDGetParameter, _IOHIDGetScrollAcceleration, _IOHIDGetStateForSelector, \n                       _IOHIDManagerActivate, _IOHIDManagerCancel, _IOHIDManagerClose, \n                       _IOHIDManagerCopyDevices, _IOHIDManagerCreate, _IOHIDManagerGetProperty, \n                       _IOHIDManagerGetTypeID, _IOHIDManagerOpen, _IOHIDManagerRegisterDeviceMatchingCallback, \n                       _IOHIDManagerRegisterDeviceRemovalCallback, _IOHIDManagerRegisterInputReportCallback, \n                       _IOHIDManagerRegisterInputReportWithTimeStampCallback, _IOHIDManagerRegisterInputValueCallback, \n                       _IOHIDManagerSaveToPropertyDomain, _IOHIDManagerScheduleWithRunLoop, \n                       _IOHIDManagerSetCancelHandler, _IOHIDManagerSetDeviceMatching, \n                       _IOHIDManagerSetDeviceMatchingMultiple, _IOHIDManagerSetDispatchQueue, \n                       _IOHIDManagerSetInputValueMatching, _IOHIDManagerSetInputValueMatchingMultiple, \n                       _IOHIDManagerSetProperty, _IOHIDManagerUnscheduleFromRunLoop, \n                       _IOHIDNotificationCreate, _IOHIDNotificationGetClientCallback, \n                       _IOHIDNotificationGetClientRefcon, _IOHIDNotificationGetClientTarget, \n                       _IOHIDNotificationGetOwnerCallback, _IOHIDNotificationGetOwnerRefcon, \n                       _IOHIDNotificationGetOwnerTarget, _IOHIDNotificationGetTypeID, \n                       _IOHIDNotificationInvalidate, _IOHIDNotificationSignalWithBlock, \n                       _IOHIDPostEvent, _IOHIDPreferencesCopy, _IOHIDPreferencesCopyDomain, \n                       _IOHIDPreferencesCopyDomainForInstance, _IOHIDPreferencesCopyForInstance, \n                       _IOHIDPreferencesCopyMultiple, _IOHIDPreferencesCopyMultipleForInstance, \n                       _IOHIDPreferencesCreateInstance, _IOHIDPreferencesSet, _IOHIDPreferencesSetDomain, \n                       _IOHIDPreferencesSetDomainForInstance, _IOHIDPreferencesSetForInstance, \n                       _IOHIDPreferencesSetMultiple, _IOHIDPreferencesSetMultipleForInstance, \n                       _IOHIDPreferencesSynchronize, _IOHIDPreferencesSynchronizeForInstance, \n                       _IOHIDQueueActivate, _IOHIDQueueAddElement, _IOHIDQueueCancel, \n                       _IOHIDQueueContainsElement, _IOHIDQueueCopyNextValue, _IOHIDQueueCopyNextValueWithTimeout, \n                       _IOHIDQueueCreate, _IOHIDQueueGetDepth, _IOHIDQueueGetDevice, \n                       _IOHIDQueueGetTypeID, _IOHIDQueueRegisterValueAvailableCallback, \n                       _IOHIDQueueRemoveElement, _IOHIDQueueScheduleWithRunLoop, \n                       _IOHIDQueueSetCancelHandler, _IOHIDQueueSetDepth, _IOHIDQueueSetDispatchQueue, \n                       _IOHIDQueueStart, _IOHIDQueueStop, _IOHIDQueueUnscheduleFromRunLoop, \n                       _IOHIDRegisterVirtualDisplay, _IOHIDRequestAccess, _IOHIDServiceCheckEntitlements, \n                       _IOHIDServiceClientConformsTo, _IOHIDServiceClientCopyDescription, \n                       _IOHIDServiceClientCopyEvent, _IOHIDServiceClientCopyMatchingEvent, \n                       _IOHIDServiceClientCopyProperties, _IOHIDServiceClientCopyProperty, \n                       _IOHIDServiceClientFastPathCopyEvent, _IOHIDServiceClientFastPathCopyEventWithStatus, \n                       _IOHIDServiceClientFastPathCopyProperty, _IOHIDServiceClientFastPathInit, \n                       _IOHIDServiceClientFastPathInvalidate, _IOHIDServiceClientFastPathSetProperty, \n                       _IOHIDServiceClientGetRegistryID, _IOHIDServiceClientGetTypeID, \n                       _IOHIDServiceClientRegisterRemovalBlock, _IOHIDServiceClientRegisterRemovalCallback, \n                       _IOHIDServiceClientSetElementValue, _IOHIDServiceClientSetProperty, \n                       _IOHIDServiceConformsTo, _IOHIDServiceConnectionCacheContainsKey, \n                       _IOHIDServiceConnectionCacheCopyDebugInfo, _IOHIDServiceConnectionCacheCopyValueForKey, \n                       _IOHIDServiceConnectionCacheCreate, _IOHIDServiceConnectionCacheGetReportDeadline, \n                       _IOHIDServiceConnectionCacheGetTypeID, _IOHIDServiceConnectionCacheSetReportDeadline, \n                       _IOHIDServiceConnectionCacheSetValueForKey, _IOHIDServiceCopyDescription, \n                       _IOHIDServiceCopyEvent, _IOHIDServiceCopyEventForClient, _IOHIDServiceCopyMatchingEvent, \n                       _IOHIDServiceCopyProperty, _IOHIDServiceCreatePropertyChangedNotification, \n                       _IOHIDServiceCreateRemovalNotification, _IOHIDServiceFilterClientNotification, \n                       _IOHIDServiceFilterClose, _IOHIDServiceFilterCompare, _IOHIDServiceFilterCopyPropertyForClient, \n                       _IOHIDServiceFilterCreate, _IOHIDServiceFilterCreateWithClass, \n                       _IOHIDServiceFilterFilterCopyEvent, _IOHIDServiceFilterFilterCopyMatchingEvent, \n                       _IOHIDServiceFilterFilterEvent, _IOHIDServiceFilterGetMatchScore, \n                       _IOHIDServiceFilterGetStateMask, _IOHIDServiceFilterGetType, \n                       _IOHIDServiceFilterGetTypeID, _IOHIDServiceFilterMatch, _IOHIDServiceFilterOpen, \n                       _IOHIDServiceFilterSchedule, _IOHIDServiceFilterSetCancelHandler, \n                       _IOHIDServiceFilterSetEventCallback, _IOHIDServiceFilterSetOutputEvent, \n                       _IOHIDServiceFilterSetPropertyForClient, _IOHIDServiceFilterUnschedule, \n                       _IOHIDServiceGetProperty, _IOHIDServiceGetRegistryID, _IOHIDServiceGetService, \n                       _IOHIDServiceGetTypeID, _IOHIDServiceMatchPropertyTable, _IOHIDServiceSetElementValue, \n                       _IOHIDServiceSetOutputEvent, _IOHIDServiceSetProperty, _IOHIDSessionAddService, \n                       _IOHIDSessionClose, _IOHIDSessionCopyEvent, _IOHIDSessionCreate, \n                       _IOHIDSessionFilterClose, _IOHIDSessionFilterCopyEvent, _IOHIDSessionFilterCreate, \n                       _IOHIDSessionFilterCreateWithClass, _IOHIDSessionFilterFilterCopyEvent, \n                       _IOHIDSessionFilterFilterEvent, _IOHIDSessionFilterFilterEventToConnection, \n                       _IOHIDSessionFilterGetPropertyForClient, _IOHIDSessionFilterGetType, \n                       _IOHIDSessionFilterGetTypeID, _IOHIDSessionFilterOpen, _IOHIDSessionFilterRegisterService, \n                       _IOHIDSessionFilterScheduleWithDispatchQueue, _IOHIDSessionFilterSetPropertyForClient, \n                       _IOHIDSessionFilterUnregisterService, _IOHIDSessionFilterUnscheduleFromDispatchQueue, \n                       _IOHIDSessionGetFilters, _IOHIDSessionGetProperty, _IOHIDSessionGetTypeID, \n                       _IOHIDSessionOpen, _IOHIDSessionRemoveService, _IOHIDSessionSetProperty, \n                       _IOHIDSetAccelerationWithKey, _IOHIDSetCFTypeParameter, _IOHIDSetCursorBounds, \n                       _IOHIDSetCursorEnable, _IOHIDSetEventsEnable, _IOHIDSetFixedMouseLocation, \n                       _IOHIDSetFixedMouseLocationWithTimeStamp, _IOHIDSetHIDParameterToEventSystem, \n                       _IOHIDSetModifierLockState, _IOHIDSetMouseAcceleration, _IOHIDSetMouseButtonMode, \n                       _IOHIDSetMouseLocation, _IOHIDSetOnScreenCursorBounds, _IOHIDSetParameter, \n                       _IOHIDSetScrollAcceleration, _IOHIDSetStateForSelector, _IOHIDSetVirtualDisplayBounds, \n                       _IOHIDTransactionAddElement, _IOHIDTransactionClear, _IOHIDTransactionCommit, \n                       _IOHIDTransactionCommitWithCallback, _IOHIDTransactionContainsElement, \n                       _IOHIDTransactionCreate, _IOHIDTransactionGetDevice, _IOHIDTransactionGetDirection, \n                       _IOHIDTransactionGetTypeID, _IOHIDTransactionGetValue, _IOHIDTransactionRemoveElement, \n                       _IOHIDTransactionScheduleWithRunLoop, _IOHIDTransactionSetDirection, \n                       _IOHIDTransactionSetValue, _IOHIDTransactionUnscheduleFromRunLoop, \n                       _IOHIDUnregisterVirtualDisplay, _IOHIDUserDeviceActivate, \n                       _IOHIDUserDeviceCancel, _IOHIDUserDeviceCopyProperty, _IOHIDUserDeviceCopyService, \n                       _IOHIDUserDeviceCreate, _IOHIDUserDeviceCreateWithOptions, \n                       _IOHIDUserDeviceCreateWithProperties, _IOHIDUserDeviceGetTypeID, \n                       _IOHIDUserDeviceHandleReport, _IOHIDUserDeviceHandleReportAsync, \n                       _IOHIDUserDeviceHandleReportAsyncWithTimeStamp, _IOHIDUserDeviceHandleReportWithTimeStamp, \n                       _IOHIDUserDeviceRegisterGetReportBlock, _IOHIDUserDeviceRegisterGetReportCallback, \n                       _IOHIDUserDeviceRegisterGetReportWithReturnLengthCallback, \n                       _IOHIDUserDeviceRegisterSetReportBlock, _IOHIDUserDeviceRegisterSetReportCallback, \n                       _IOHIDUserDeviceScheduleWithDispatchQueue, _IOHIDUserDeviceScheduleWithRunLoop, \n                       _IOHIDUserDeviceSetCancelHandler, _IOHIDUserDeviceSetDispatchQueue, \n                       _IOHIDUserDeviceSetProperty, _IOHIDUserDeviceUnscheduleFromDispatchQueue, \n                       _IOHIDUserDeviceUnscheduleFromRunLoop, _IOHIDValueCreateWithBytes, \n                       _IOHIDValueCreateWithBytesNoCopy, _IOHIDValueCreateWithIntegerValue, \n                       _IOHIDValueGetBytePtr, _IOHIDValueGetElement, _IOHIDValueGetIntegerValue, \n                       _IOHIDValueGetLength, _IOHIDValueGetScaledValue, _IOHIDValueGetTimeStamp, \n                       _IOHIDValueGetTypeID, _IOHIDVirtualServiceClientCreate, _IOHIDVirtualServiceClientCreateWithCallbacks, \n                       _IOHIDVirtualServiceClientDispatchEvent, _IOHIDVirtualServiceClientRemove, \n                       _IOInitContainerClasses, _IOIteratorIsValid, _IOIteratorNext, \n                       _IOIteratorReset, _IOKitGetBusyState, _IOKitWaitQuiet, _IOKitWaitQuietWithOptions, \n                       _IOMIGMachPortCacheAdd, _IOMIGMachPortCacheCopy, _IOMIGMachPortCacheRemove, \n                       _IOMIGMachPortCreate, _IOMIGMachPortGetPort, _IOMIGMachPortGetTypeID, \n                       _IOMIGMachPortRegisterDemuxCallback, _IOMIGMachPortRegisterTerminationCallback, \n                       _IOMIGMachPortScheduleWithDispatchQueue, _IOMIGMachPortScheduleWithRunLoop, \n                       _IOMIGMachPortUnscheduleFromDispatchQueue, _IOMIGMachPortUnscheduleFromRunLoop, \n                       _IOMainPort, _IOMasterPort, _IONetworkClose, _IONetworkGetDataCapacity, \n                       _IONetworkGetDataHandle, _IONetworkGetPacketFiltersMask, _IONetworkOpen, \n                       _IONetworkReadData, _IONetworkResetData, _IONetworkSetPacketFiltersMask, \n                       _IONetworkWriteData, _IONotificationPortCreate, _IONotificationPortDestroy, \n                       _IONotificationPortGetMachPort, _IONotificationPortGetRunLoopSource, \n                       _IONotificationPortSetDispatchQueue, _IONotificationPortSetImportanceReceiver, \n                       _IOObjectConformsTo, _IOObjectCopyBundleIdentifierForClass, \n                       _IOObjectCopyClass, _IOObjectCopySuperclassForClass, _IOObjectGetClass, \n                       _IOObjectGetKernelRetainCount, _IOObjectGetRetainCount, _IOObjectGetUserRetainCount, \n                       _IOObjectIsEqualTo, _IOObjectRelease, _IOObjectRetain, _IOOpenConnection, \n                       _IOOpenFirmwarePathMatching, _IOPMActivateSystemPowerSettings, \n                       _IOPMAllowRemotePowerChange, _IOPMAllowsBackgroundTask, _IOPMAllowsPushServiceTask, \n                       _IOPMAssertionCopyProperties, _IOPMAssertionCreate, _IOPMAssertionCreateWithAutoTimeout, \n                       _IOPMAssertionCreateWithDescription, _IOPMAssertionCreateWithName, \n                       _IOPMAssertionCreateWithProperties, _IOPMAssertionCreateWithResourceList, \n                       _IOPMAssertionDeclareNotificationEvent, _IOPMAssertionDeclareSystemActivity, \n                       _IOPMAssertionDeclareSystemActivityWithProperties, _IOPMAssertionDeclareUserActivity, \n                       _IOPMAssertionNotify, _IOPMAssertionRelease, _IOPMAssertionRetain, \n                       _IOPMAssertionSetBTCollection, _IOPMAssertionSetProcessState, \n                       _IOPMAssertionSetProperty, _IOPMAssertionSetTimeout, _IOPMCancelAllRepeatingPowerEvents, \n                       _IOPMCancelAllScheduledPowerEvents, _IOPMCancelScheduledPowerEvent, \n                       _IOPMChangeSystemActivityAssertionBehavior, _IOPMClaimSystemWakeEvent, \n                       _IOPMConnectionAcknowledgeEvent, _IOPMConnectionAcknowledgeEventWithOptions, \n                       _IOPMConnectionCreate, _IOPMConnectionGetSystemCapabilities, \n                       _IOPMConnectionRelease, _IOPMConnectionScheduleWithRunLoop, \n                       _IOPMConnectionSetDispatchQueue, _IOPMConnectionSetNotification, \n                       _IOPMConnectionUnscheduleFromRunLoop, _IOPMCopyActiveAsyncAssertionsByProcess, \n                       _IOPMCopyActivePMPreferences, _IOPMCopyAssertionActivityAggregate, \n                       _IOPMCopyAssertionActivityAggregateWithAllocator, _IOPMCopyAssertionActivityLog, \n                       _IOPMCopyAssertionActivityLogWithAllocator, _IOPMCopyAssertionActivityUpdate, \n                       _IOPMCopyAssertionActivityUpdateWithAllocator, _IOPMCopyAssertionActivityUpdateWithCallback, \n                       _IOPMCopyAssertionsByProcess, _IOPMCopyAssertionsByProcessWithAllocator, \n                       _IOPMCopyAssertionsByType, _IOPMCopyAssertionsStatus, _IOPMCopyBatteryHeatMap, \n                       _IOPMCopyBatteryInfo, _IOPMCopyCPUPowerStatus, _IOPMCopyConnectionStatus, \n                       _IOPMCopyCurrentScheduledWake, _IOPMCopyCycleCountData, _IOPMCopyDefaultPreferences, \n                       _IOPMCopyDeviceRestartPreventers, _IOPMCopyFromPrefs, _IOPMCopyHIDPostEventHistory, \n                       _IOPMCopyInactiveAssertionsByProcess, _IOPMCopyKioskModeData, \n                       _IOPMCopyPMPreferences, _IOPMCopyPowerHistory, _IOPMCopyPowerHistoryDetailed, \n                       _IOPMCopyPowerStateInfo, _IOPMCopyPreferencesOnFile, _IOPMCopyRepeatingPowerEvents, \n                       _IOPMCopyScheduledPowerEvents, _IOPMCopySleepPreventersList, \n                       _IOPMCopySleepPreventersListWithID, _IOPMCopySleepWakeFailure, \n                       _IOPMCopySystemPowerSettings, _IOPMCopyUPSShutdownLevels, \n                       _IOPMCopyUserActivityLevelDescription, _IOPMCtlAssertionType, \n                       _IOPMDeclareNetworkClientActivity, _IOPMDisableAsyncAssertions, \n                       _IOPMEnableAsyncAssertions, _IOPMFeatureIsAvailable, _IOPMFeatureIsAvailableWithSupportedTable, \n                       _IOPMFindPowerManagement, _IOPMGetActivePushConnectionState, \n                       _IOPMGetAggressiveness, _IOPMGetCapabilitiesDescription, _IOPMGetCurrentAsycnRemoteAssertion, \n                       _IOPMGetCurrentAsyncActiveAssertions, _IOPMGetCurrentAsyncInactiveAssertions, \n                       _IOPMGetCurrentAsyncReleasedAssertions, _IOPMGetCurrentAsyncTimedAssertions, \n                       _IOPMGetDarkWakeThermalEmergencyCount, _IOPMGetLastWakeTime, \n                       _IOPMGetPerformanceWarningLevel, _IOPMGetSleepServicesActive, \n                       _IOPMGetThermalWarningLevel, _IOPMGetUUID, _IOPMGetUserActivityLevel, \n                       _IOPMGetValueInt, _IOPMIsADarkWake, _IOPMIsASilentWake, _IOPMIsASleep, \n                       _IOPMIsAUserWake, _IOPMLogWakeProgress, _IOPMPerformBlockWithAssertion, \n                       _IOPMRegisterForRemoteSystemPower, _IOPMRegisterPrefsChangeNotification, \n                       _IOPMRemoveIrrelevantProperties, _IOPMRequestSysWake, _IOPMRevertPMPreferences, \n                       _IOPMScheduleAssertionExceptionNotification, _IOPMSchedulePowerEvent, \n                       _IOPMScheduleRepeatingPowerEvent, _IOPMScheduleUserActiveChangedNotification, \n                       _IOPMScheduleUserActivityLevelNotification, _IOPMScheduleUserActivityLevelNotificationWithTimeout, \n                       _IOPMSetActivePushConnectionState, _IOPMSetAggressiveness, \n                       _IOPMSetAssertionActivityAggregate, _IOPMSetAssertionActivityLog, \n                       _IOPMSetAssertionExceptionLimits, _IOPMSetBTWakeInterval, \n                       _IOPMSetDWLingerInterval, _IOPMSetDebugFlags, _IOPMSetDesktopMode, \n                       _IOPMSetDesktopModeWithOptions, _IOPMSetPMPreference, _IOPMSetPMPreferences, \n                       _IOPMSetReservePowerMode, _IOPMSetSleepServicesWakeTimeCap, \n                       _IOPMSetSystemAssertionTimeout, _IOPMSetSystemPowerSetting, \n                       _IOPMSetUPSShutdownLevels, _IOPMSetUserActivityIdleTimeout, \n                       _IOPMSetValueInt, _IOPMSkylightCheckIn, _IOPMSkylightCheckInWithCapability, \n                       _IOPMSleepEnabled, _IOPMSleepSystem, _IOPMSleepSystemWithOptions, \n                       _IOPMSleepWakeCopyUUID, _IOPMSleepWakeSetUUID, _IOPMUnregisterExceptionNotification, \n                       _IOPMUnregisterNotification, _IOPMUnregisterPrefsChangeNotification, \n                       _IOPMUpdateDominoState, _IOPMUserIsActive, _IOPMUsingDefaultPreferences, \n                       _IOPMWriteToPrefs, _IOPSAccCreateAttachNotification, _IOPSAccCreateLimitedPowerNotification, \n                       _IOPSAccNotificationCreateRunLoopSource, _IOPSCopyBatteryLevelLimits, \n                       _IOPSCopyExternalPowerAdapterDetails, _IOPSCopyInternalBatteriesArray, \n                       _IOPSCopyPowerSourcesByType, _IOPSCopyPowerSourcesByTypePrecise, \n                       _IOPSCopyPowerSourcesInfo, _IOPSCopyPowerSourcesInfoPrecise, \n                       _IOPSCopyPowerSourcesList, _IOPSCopyUPSArray, _IOPSCreateLimitedPowerNotification, \n                       _IOPSCreatePowerSource, _IOPSDrawingUnlimitedPower, _IOPSGetActiveBattery, \n                       _IOPSGetActiveUPS, _IOPSGetBatteryHealthState, _IOPSGetBatteryWarningLevel, \n                       _IOPSGetPercentRemaining, _IOPSGetPowerSourceDescription, \n                       _IOPSGetProvidingPowerSourceType, _IOPSGetSupportedPowerSources, \n                       _IOPSGetTimeRemainingEstimate, _IOPSLimitBatteryLevel, _IOPSLimitBatteryLevelCancel, \n                       _IOPSLimitBatteryLevelRegister, _IOPSNotificationCreateRunLoopSource, \n                       _IOPSPowerSourceSupported, _IOPSReleasePowerSource, _IOPSRequestBatteryUpdate, \n                       _IOPSSetBatteryDateOfFirstUse, _IOPSSetPowerSourceDetails, \n                       _IORegisterApp, _IORegisterClient, _IORegisterForSystemPower, \n                       _IORegistryCreateEnumerator, _IORegistryCreateIterator, _IORegistryDisposeEnumerator, \n                       _IORegistryEntryCopyFromPath, _IORegistryEntryCopyPath, _IORegistryEntryCreateCFProperties, \n                       _IORegistryEntryCreateCFProperty, _IORegistryEntryCreateIterator, \n                       _IORegistryEntryFromPath, _IORegistryEntryGetChildEntry, _IORegistryEntryGetChildIterator, \n                       _IORegistryEntryGetLocationInPlane, _IORegistryEntryGetName, \n                       _IORegistryEntryGetNameInPlane, _IORegistryEntryGetParentEntry, \n                       _IORegistryEntryGetParentIterator, _IORegistryEntryGetPath, \n                       _IORegistryEntryGetProperty, _IORegistryEntryGetRegistryEntryID, \n                       _IORegistryEntryIDMatching, _IORegistryEntryInPlane, _IORegistryEntrySearchCFProperty, \n                       _IORegistryEntrySetCFProperties, _IORegistryEntrySetCFProperty, \n                       _IORegistryEnumeratorNextConforming, _IORegistryEnumeratorReset, \n                       _IORegistryGetRootEntry, _IORegistryIteratorEnterEntry, _IORegistryIteratorExitEntry, \n                       _IOServiceAddInterestNotification, _IOServiceAddMatchingNotification, \n                       _IOServiceAddNotification, _IOServiceAuthorize, _IOServiceClose, \n                       _IOServiceCopySystemStateNotificationService, _IOServiceGetBusyState, \n                       _IOServiceGetBusyStateAndTime, _IOServiceGetMatchingService, \n                       _IOServiceGetMatchingServices, _IOServiceGetState, _IOServiceMatchPropertyTable, \n                       _IOServiceMatching, _IOServiceNameMatching, _IOServiceOFPathToBSDName, \n                       _IOServiceOpen, _IOServiceOpenAsFileDescriptor, _IOServiceRequestProbe, \n                       _IOServiceStateNotificationItemCopy, _IOServiceStateNotificationItemCreate, \n                       _IOServiceStateNotificationItemSet, _IOServiceWaitQuiet, _IOSetNotificationPort, \n                       _IOURLCreateDataAndPropertiesFromResource, _IOURLCreatePropertyFromResource, \n                       _IOUSBDevicDeviceDescriptionGetTypeID, _IOUSBDeviceControllerCreate, \n                       _IOUSBDeviceControllerCreateDefaultDescription, _IOUSBDeviceControllerCreateWithService, \n                       _IOUSBDeviceControllerForceOffBus, _IOUSBDeviceControllerGetService, \n                       _IOUSBDeviceControllerGetTypeID, _IOUSBDeviceControllerGoOffAndOnBus, \n                       _IOUSBDeviceControllerRegisterArrivalCallback, _IOUSBDeviceControllerRemoveArrivalCallback, \n                       _IOUSBDeviceControllerSendCommand, _IOUSBDeviceControllerSetDescription, \n                       _IOUSBDeviceControllerSetPreferredConfiguration, _IOUSBDeviceDataCreate, \n                       _IOUSBDeviceDataGetBytePtr, _IOUSBDeviceDataGetCapacity, _IOUSBDeviceDataGetMapToken, \n                       _IOUSBDeviceDataGetTypeID, _IOUSBDeviceDescriptionAppendConfiguration, \n                       _IOUSBDeviceDescriptionAppendConfigurationWithInterface, _IOUSBDeviceDescriptionAppendConfigurationWithInterfaces, \n                       _IOUSBDeviceDescriptionAppendConfigurationWithoutAttributes, \n                       _IOUSBDeviceDescriptionAppendInterfaceToConfiguration, _IOUSBDeviceDescriptionAppendInterfacesToConfiguration, \n                       _IOUSBDeviceDescriptionCopyInterfaces, _IOUSBDeviceDescriptionCreate, \n                       _IOUSBDeviceDescriptionCreateFromController, _IOUSBDeviceDescriptionCreateFromControllerWithType, \n                       _IOUSBDeviceDescriptionCreateFromDefaults, _IOUSBDeviceDescriptionCreateFromDefaultsAndController, \n                       _IOUSBDeviceDescriptionCreateWithConfigurationInterfaces, \n                       _IOUSBDeviceDescriptionCreateWithType, _IOUSBDeviceDescriptionGetAllowOverride, \n                       _IOUSBDeviceDescriptionGetClass, _IOUSBDeviceDescriptionGetManufacturerString, \n                       _IOUSBDeviceDescriptionGetMatchingConfiguration, _IOUSBDeviceDescriptionGetProductID, \n                       _IOUSBDeviceDescriptionGetProductString, _IOUSBDeviceDescriptionGetProtocol, \n                       _IOUSBDeviceDescriptionGetSerialString, _IOUSBDeviceDescriptionGetSubClass, \n                       _IOUSBDeviceDescriptionGetVendorID, _IOUSBDeviceDescriptionGetVersion, \n                       _IOUSBDeviceDescriptionRemoveAllConfigurations, _IOUSBDeviceDescriptionSetAllowOverride, \n                       _IOUSBDeviceDescriptionSetClass, _IOUSBDeviceDescriptionSetProductID, \n                       _IOUSBDeviceDescriptionSetProtocol, _IOUSBDeviceDescriptionSetSerialString, \n                       _IOUSBDeviceDescriptionSetSubClass, _IOUSBDeviceDescriptionSetUDIDString, \n                       _IOUSBDeviceDescriptionSetVendorID, _IsNotificationEvent, \n                       _NXClickTime, _NXCloseEventStatus, _NXEventSystemInfo, _NXGetClickSpace, \n                       _NXGetKeyMapping, _NXKeyMappingLength, _NXKeyRepeatInterval, \n                       _NXKeyRepeatThreshold, _NXOpenEventStatus, _NXResetKeyboard, \n                       _NXResetMouse, _NXSetClickSpace, _NXSetClickTime, _NXSetKeyMapping, \n                       _NXSetKeyRepeatInterval, _NXSetKeyRepeatThreshold, _OSGetNotificationFromMessage, \n                       _OSKEXT_BUILD_DATE, _OSKextAuthenticate, _OSKextAuthenticateDependencies, \n                       _OSKextCopyAllDependencies, _OSKextCopyAllRequestedIdentifiers, \n                       _OSKextCopyArchitectures, _OSKextCopyContainerForPluginKext, \n                       _OSKextCopyDeclaredDependencies, _OSKextCopyDependents, _OSKextCopyDiagnostics, \n                       _OSKextCopyExecutableForArchitecture, _OSKextCopyExecutableName, \n                       _OSKextCopyIndirectDependencies, _OSKextCopyInfoDictionary, \n                       _OSKextCopyKextsWithIdentifier, _OSKextCopyKextsWithIdentifiers, \n                       _OSKextCopyLinkDependencies, _OSKextCopyLoadList, _OSKextCopyLoadListForKexts, \n                       _OSKextCopyLoadedKextInfo, _OSKextCopyLoadedKextInfoByUUID, \n                       _OSKextCopyPersonalitiesArray, _OSKextCopyPersonalitiesOfKexts, \n                       _OSKextCopyPlugins, _OSKextCopyResource, _OSKextCopySymbolReferences, \n                       _OSKextCopyUUIDForAddress, _OSKextCopyUUIDForArchitecture, \n                       _OSKextCreate, _OSKextCreateKextsFromMkextData, _OSKextCreateKextsFromMkextFile, \n                       _OSKextCreateKextsFromURL, _OSKextCreateKextsFromURLs, _OSKextCreateLoadedKextInfo, \n                       _OSKextCreateMkext, _OSKextCreateWithIdentifier, _OSKextDeclaresExecutable, \n                       _OSKextDeclaresUserExecutable, _OSKextDependenciesAreLoadableInSafeBoot, \n                       _OSKextDependsOnKext, _OSKextExecutableVariant, _OSKextFilterRequiredKexts, \n                       _OSKextFindLinkDependencies, _OSKextFlushDependencies, _OSKextFlushDiagnostics, \n                       _OSKextFlushInfoDictionary, _OSKextFlushLoadInfo, _OSKextGetActualSafeBoot, \n                       _OSKextGetAllKexts, _OSKextGetArchitecture, _OSKextGetCompatibleKextWithIdentifier, \n                       _OSKextGetCompatibleVersion, _OSKextGetExecutableURL, _OSKextGetIdentifier, \n                       _OSKextGetKernelExecutableURL, _OSKextGetKextWithIdentifier, \n                       _OSKextGetKextWithIdentifierAndVersion, _OSKextGetKextWithURL, \n                       _OSKextGetLoadAddress, _OSKextGetLoadTag, _OSKextGetLoadedKextWithIdentifier, \n                       _OSKextGetLogFilter, _OSKextGetRecordsDiagnostics, _OSKextGetRunningKernelArchitecture, \n                       _OSKextGetSimulatedSafeBoot, _OSKextGetSystemExtensionsFolderURLs, \n                       _OSKextGetTargetString, _OSKextGetTypeID, _OSKextGetURL, _OSKextGetUserExecutableURL, \n                       _OSKextGetUsesCaches, _OSKextGetValueForInfoDictionaryKey, \n                       _OSKextGetVersion, _OSKextHasLogOrDebugFlags, _OSKextIsAuthentic, \n                       _OSKextIsCompatibleWithVersion, _OSKextIsFromMkext, _OSKextIsInterface, \n                       _OSKextIsKernelComponent, _OSKextIsLibrary, _OSKextIsLoadable, \n                       _OSKextIsLoadableInSafeBoot, _OSKextIsLoaded, _OSKextIsLoggingEnabled, \n                       _OSKextIsPlugin, _OSKextIsStarted, _OSKextIsValid, _OSKextLoad, \n                       _OSKextLoadWithOptions, _OSKextLog, _OSKextLogCFString, _OSKextLogDependencyGraph, \n                       _OSKextLogDiagnostics, _OSKextMatchesRequiredFlags, _OSKextOtherVersionIsLoaded, \n                       _OSKextParseVersionCFString, _OSKextParseVersionString, _OSKextReadLoadedKextInfo, \n                       _OSKextRemoveKextPersonalitiesFromKernel, _OSKextRemovePersonalitiesForIdentifierFromKernel, \n                       _OSKextResolveDependencies, _OSKextSendKextPersonalitiesToKernel, \n                       _OSKextSendPersonalitiesOfKextsToKernel, _OSKextSendPersonalitiesToKernel, \n                       _OSKextSetArchitecture, _OSKextSetExecutableSuffix, _OSKextSetLoadAddress, \n                       _OSKextSetLogFilter, _OSKextSetLogOutputFunction, _OSKextSetLoggingEnabled, \n                       _OSKextSetRecordsDiagnostics, _OSKextSetSimulatedSafeBoot, \n                       _OSKextSetTargetString, _OSKextSetUsesCaches, _OSKextStart, \n                       _OSKextStop, _OSKextSupportsArchitecture, _OSKextUnload, _OSKextUnloadKextWithIdentifier, \n                       _OSKextVLog, _OSKextVLogCFString, _OSKextValidate, _OSKextValidateDependencies, \n                       _OSKextVersionGetString, __CFURLCopyAbsolutePath, __IOAVCreateStringOfColorIDs, \n                       __IOAVElementListGetElementIDAtIndex, __IOAVStringAppendIndendationAndFormat, \n                       __IODataQueueDequeue, __IODataQueueEnqueueWithReadCallback, \n                       __IODataQueueEnqueueWithReadCallbackOptions, __IODataQueuePeek, \n                       __IODataQueueSendDataAvailableNotification, __IODispatchCalloutWithDispatch, \n                       __IOHIDArrayAppendSInt64, __IOHIDCFArrayApplyBlock, __IOHIDCFDictionaryApplyBlock, \n                       __IOHIDCFSetApplyBlock, __IOHIDCallbackApplier, __IOHIDCopyServiceClientInfo, \n                       __IOHIDCreateBinaryData, __IOHIDCreateTimeString, __IOHIDDebugEventAddPerfData, \n                       __IOHIDDebugTrace, __IOHIDDeviceCreatePrivate, __IOHIDDeviceGetIOCFPlugInInterface, \n                       __IOHIDDeviceReleasePrivate, __IOHIDDictionaryAddCStr, __IOHIDDictionaryAddSInt32, \n                       __IOHIDDictionaryAddSInt64, __IOHIDElementCreatePrivate, __IOHIDElementCreateWithElement, \n                       __IOHIDElementCreateWithParentAndData, __IOHIDElementGetCalibrationInfo, \n                       __IOHIDElementGetFlags, __IOHIDElementGetLength, __IOHIDElementGetValue, \n                       __IOHIDElementReleasePrivate, __IOHIDElementSetDevice, __IOHIDElementSetDeviceInterface, \n                       __IOHIDElementSetValue, __IOHIDEventCopyAttachment, __IOHIDEventCreate, \n                       __IOHIDEventEqual, __IOHIDEventGetContext, __IOHIDEventQueueSerializeState, \n                       __IOHIDEventRemoveAttachment, __IOHIDEventSetAttachment, __IOHIDEventSetContext, \n                       __IOHIDEventSystemAddConnection, __IOHIDEventSystemAddService, \n                       __IOHIDEventSystemAddServiceForConnection, __IOHIDEventSystemClientCopyEventForService, \n                       __IOHIDEventSystemClientCopyMatchingEventForService, __IOHIDEventSystemClientCopyPropertiesForService, \n                       __IOHIDEventSystemClientCopyPropertyForService, __IOHIDEventSystemClientDispatchEventFilter, \n                       __IOHIDEventSystemClientDispatchPropertiesChanged, __IOHIDEventSystemClientRegisterClientRecordsChangedBlock, \n                       __IOHIDEventSystemClientRegisterClientRecordsChangedCallback, \n                       __IOHIDEventSystemClientRegisterServiceRecordsChangedBlock, \n                       __IOHIDEventSystemClientRegisterServiceRecordsChangedCallback, \n                       __IOHIDEventSystemClientServiceConformsTo, __IOHIDEventSystemClientSetElementValueForService, \n                       __IOHIDEventSystemClientSetPropertyForService, __IOHIDEventSystemClientUnregisterClientRecordsChangedBlock, \n                       __IOHIDEventSystemClientUnregisterClientRecordsChangedCallback, \n                       __IOHIDEventSystemClientUnregisterServiceRecordsChangedBlock, \n                       __IOHIDEventSystemClientUnregisterServiceRecordsChangedCallback, \n                       __IOHIDEventSystemConnectionAddNotification, __IOHIDEventSystemConnectionAddServices, \n                       __IOHIDEventSystemConnectionContainsService, __IOHIDEventSystemConnectionCopyEventCounts, \n                       __IOHIDEventSystemConnectionCopyEventLog, __IOHIDEventSystemConnectionCopyNotification, \n                       __IOHIDEventSystemConnectionCopyProperty, __IOHIDEventSystemConnectionCopyQueue, \n                       __IOHIDEventSystemConnectionCopyRecord, __IOHIDEventSystemConnectionCopyServices, \n                       __IOHIDEventSystemConnectionCreate, __IOHIDEventSystemConnectionCreatePrivate, \n                       __IOHIDEventSystemConnectionCreateVirtualService, __IOHIDEventSystemConnectionDispatchEvent, \n                       __IOHIDEventSystemConnectionDispatchEventForVirtualService, \n                       __IOHIDEventSystemConnectionEventFilterCompare, __IOHIDEventSystemConnectionFilterEvent, \n                       __IOHIDEventSystemConnectionGetDispatchQueue, __IOHIDEventSystemConnectionGetEventFilterPriority, \n                       __IOHIDEventSystemConnectionGetPID, __IOHIDEventSystemConnectionGetPort, \n                       __IOHIDEventSystemConnectionGetReplyPort, __IOHIDEventSystemConnectionGetSystem, \n                       __IOHIDEventSystemConnectionInvalidate, __IOHIDEventSystemConnectionIsResponsive, \n                       __IOHIDEventSystemConnectionIsValid, __IOHIDEventSystemConnectionLogEvent, \n                       __IOHIDEventSystemConnectionPropertyChanged, __IOHIDEventSystemConnectionQueueStart, \n                       __IOHIDEventSystemConnectionQueueStop, __IOHIDEventSystemConnectionRecordClientChanged, \n                       __IOHIDEventSystemConnectionRecordServiceChanged, __IOHIDEventSystemConnectionRegisterDemuxCallback, \n                       __IOHIDEventSystemConnectionRegisterEventFilter, __IOHIDEventSystemConnectionRegisterPropertyChangedNotification, \n                       __IOHIDEventSystemConnectionRegisterRecordClientChanged, __IOHIDEventSystemConnectionRegisterRecordServiceChanged, \n                       __IOHIDEventSystemConnectionRegisterTerminationCallback, __IOHIDEventSystemConnectionReleasePrivate, \n                       __IOHIDEventSystemConnectionRemoveAllServices, __IOHIDEventSystemConnectionRemoveNotification, \n                       __IOHIDEventSystemConnectionRemoveService, __IOHIDEventSystemConnectionRemoveVirtualService, \n                       __IOHIDEventSystemConnectionScheduleAsync, __IOHIDEventSystemConnectionSetProperty, \n                       __IOHIDEventSystemConnectionSetQueue, __IOHIDEventSystemConnectionUnregisterEventFilter, \n                       __IOHIDEventSystemConnectionUnregisterPropertyChangedNotification, \n                       __IOHIDEventSystemConnectionUnregisterRecordClientChanged, \n                       __IOHIDEventSystemConnectionUnregisterRecordServiceChanged, \n                       __IOHIDEventSystemConnectionUnscheduleAsync, __IOHIDEventSystemConnectionVirtualServiceNotify, \n                       __IOHIDEventSystemCopyPropertyForConnection, __IOHIDEventSystemCopyRecord, \n                       __IOHIDEventSystemDispatchEvent, __IOHIDEventSystemGetEnumerationQueue, \n                       __IOHIDEventSystemGetSession, __IOHIDEventSystemPropertyChanged, \n                       __IOHIDEventSystemRegisterEventFilter, __IOHIDEventSystemRegisterRecordClientChanged, \n                       __IOHIDEventSystemRegisterRecordServiceChanged, __IOHIDEventSystemRemoveConnection, \n                       __IOHIDEventSystemRemoveNotificationForConnection, __IOHIDEventSystemRemoveService, \n                       __IOHIDEventSystemRemoveServicesForConnection, __IOHIDEventSystemSetPropertyForConnection, \n                       __IOHIDEventSystemUnregisterEventFilter, __IOHIDEventSystemUnregisterRecordClientChanged, \n                       __IOHIDEventSystemUnregisterRecordServiceChanged, __IOHIDGetMonotonicTime, \n                       __IOHIDGetTimestampDelta, __IOHIDIsSerializable, __IOHIDLoadBundles, \n                       __IOHIDLoadConnectionPluginBundles, __IOHIDLoadServiceFilterBundles, \n                       __IOHIDLoadServicePluginBundles, __IOHIDLoadSessionFilterBundles, \n                       __IOHIDLog, __IOHIDLogCategory, __IOHIDObjectCreateInstance, \n                       __IOHIDObjectExtRetainCount, __IOHIDObjectIntRetainCount, \n                       __IOHIDObjectInternalRelease, __IOHIDObjectInternalReleaseCallback, \n                       __IOHIDObjectInternalRetain, __IOHIDObjectInternalRetainCallback, \n                       __IOHIDObjectRetainCount, __IOHIDPlugInInstanceCacheAdd, __IOHIDPlugInInstanceCacheClear, \n                       __IOHIDPlugInInstanceCacheIsEmpty, __IOHIDQueueCopyElements, \n                       __IOHIDSerialize, __IOHIDServiceAddConnection, __IOHIDServiceClientCacheProperties, \n                       __IOHIDServiceClientCopyUsageProp, __IOHIDServiceClientCreate, \n                       __IOHIDServiceClientCreatePrivate, __IOHIDServiceClientCreateVirtual, \n                       __IOHIDServiceClientDispatchServiceRemoval, __IOHIDServiceClientRefresh, \n                       __IOHIDServiceClientReleasePrivate, __IOHIDServiceClose, __IOHIDServiceContainsReportInterval, \n                       __IOHIDServiceContainsReportIntervalForClient, __IOHIDServiceCopyConnectionCache, \n                       __IOHIDServiceCopyConnectionIntervals, __IOHIDServiceCopyConnections, \n                       __IOHIDServiceCopyDispatchQueue, __IOHIDServiceCopyEventCounts, \n                       __IOHIDServiceCopyEventLog, __IOHIDServiceCopyFilterDebugInfoForClient, \n                       __IOHIDServiceCopyPropertiesForClient, __IOHIDServiceCopyPropertyForClient, \n                       __IOHIDServiceCopyProperyFromPlugin, __IOHIDServiceCopyServiceInfoForClient, \n                       __IOHIDServiceCopyServiceRecordForClient, __IOHIDServiceCreate, \n                       __IOHIDServiceCreatePrivate, __IOHIDServiceCreateVirtual, \n                       __IOHIDServiceCreateVirtualForConnection, __IOHIDServiceCurrentBatchInterval, \n                       __IOHIDServiceDispatchEvent, __IOHIDServiceGetEventDeadlineForClient, \n                       __IOHIDServiceGetOwner, __IOHIDServiceGetReportInterval, __IOHIDServiceGetReportIntervalForClient, \n                       __IOHIDServiceGetSenderID, __IOHIDServiceHidden, __IOHIDServiceInitVirtual, \n                       __IOHIDServiceIsInactive, __IOHIDServiceIsProtected, __IOHIDServiceOpen, \n                       __IOHIDServiceReleasePrivate, __IOHIDServiceRemoveConnection, \n                       __IOHIDServiceRemovePropertiesForClient, __IOHIDServiceScheduleAsync, \n                       __IOHIDServiceSetBatchIntervalForClient, __IOHIDServiceSetEventCallback, \n                       __IOHIDServiceSetEventDeadlineForClient, __IOHIDServiceSetMiscDebugDebugInfo, \n                       __IOHIDServiceSetPropertyForClient, __IOHIDServiceSetReportIntervalForClient, \n                       __IOHIDServiceSupportReportLatency, __IOHIDServiceTerminate, \n                       __IOHIDServiceUnscheduleAsync, __IOHIDSessionCopyPropertyForClient, \n                       __IOHIDSessionCreateActivityNotification, __IOHIDSessionCreatePrivate, \n                       __IOHIDSessionDispatchEvent, __IOHIDSessionReleasePrivate, \n                       __IOHIDSessionSetPropertyForClient, __IOHIDSetFixedMouseLocation, \n                       __IOHIDSimpleQueueApplyBlock, __IOHIDSimpleQueueCreate, __IOHIDSimpleQueueDequeue, \n                       __IOHIDSimpleQueueEnqueue, __IOHIDSimpleQueuePeek, __IOHIDStringAppendIndendationAndFormat, \n                       __IOHIDUnserializeAndVMDealloc, __IOHIDUnserializeAndVMDeallocWithTypeID, \n                       __IOHIDValueCopyToElementValueHeader, __IOHIDValueCopyToElementValuePtr, \n                       __IOHIDValueCreateWithElementValuePtr, __IOHIDValueCreateWithStruct, \n                       __IOHIDValueCreateWithValue, __IOHIDValueGetFlags, __IOHIDVirtuaServiceClientGetEventSystemClient, \n                       __IOHIDVirtualServiceClientCopyEvent, __IOHIDVirtualServiceClientCopyMatchingEvent, \n                       __IOHIDVirtualServiceClientCopyProperty, __IOHIDVirtualServiceClientNotification, \n                       __IOHIDVirtualServiceClientSetOputputEvent, __IOHIDVirtualServiceClientSetProperty, \n                       __IOObjectCFRelease, __IOObjectCFRetain, __IOObjectConformsTo, \n                       __IOObjectCopyClass, __IOObjectGetClass, __IOReadBytesFromFile, \n                       __IOServiceGetAuthorizationID, __IOServiceSetAuthorizationID, \n                       __IOUSBDeviceDescriptionGetInfo, __IOWriteBytesToFile, __OSKextBasicFilesystemAuthentication, \n                       __OSKextCopyKernelRequests, __OSKextCreateFolderForCacheURL, \n                       __OSKextIdentifierHasApplePrefix, __OSKextReadCache, __OSKextReadFromIdentifierCacheForFolder, \n                       __OSKextSendResource, __OSKextSetAuthenticationFunction, __OSKextSetLoadAuditFunction, \n                       __OSKextSetPersonalityPatcherFunction, __OSKextSetStrictAuthentication, \n                       __OSKextSetStrictRecordingByLastOpened, __OSKextWriteCache, \n                       __OSKextWriteIdentifierCacheForKextsInDirectory, __ZN9DisplayID8checksumEPKvm, \n                       ___ConnectionFunctionPickBatchInterval, ___CopyRecordForCientFunction, \n                       ___FunctionApplierForParameters, ___GDBIOHIDEventSystemDump, \n                       ___IOAVClassMatching, ___IOAVCopyFirstMatchingIOAVObjectOfType, \n                       ___IOAVLogHandleDefault, ___IOAVLogHandleEvent, ___IODataQueueDequeue, \n                       ___IODataQueuePeek, ___IOHIDApplyPropertiesToDeviceFromDictionary, \n                       ___IOHIDApplyPropertyToDeviceSet, ___IOHIDDeviceGetRootKey, \n                       ___IOHIDDeviceGetUUIDKey, ___IOHIDDeviceGetUUIDString, ___IOHIDDeviceLoadProperties, \n                       ___IOHIDDeviceSaveProperties, ___IOHIDElementGetRootKey, ___IOHIDElementLoadProperties, \n                       ___IOHIDElementSaveProperties, ___IOHIDEventRegister, ___IOHIDEventSystemClientFinalizeStateHandler, \n                       ___IOHIDEventSystemClientInitReplyPort, ___IOHIDEventSystemClientRefreshServiceCallback, \n                       ___IOHIDEventSystemClientServiceRefreshRemovedServiceCallback, \n                       ___IOHIDEventSystemClientServiceReplaceCallback, ___IOHIDEventSystemConnectionActivityNotification, \n                       ___IOHIDEventSystemConnectionCheckServerStatus, ___IOHIDEventSystemConnectionUpdateActivityState, \n                       ___IOHIDEventSystem_debug, ___IOHIDLoadElementSet, ___IOHIDManagerGetRootKey, \n                       ___IOHIDManagerLoadProperties, ___IOHIDManagerRegister, ___IOHIDManagerSaveProperties, \n                       ___IOHIDNotificationIntFinalize, ___IOHIDNotificationInvalidateCompletion, \n                       ___IOHIDNotificationRegister, ___IOHIDPlugInInstanceCacheApplier, \n                       ___IOHIDPropertyLoadDictionaryFromKey, ___IOHIDPropertyLoadFromKeyWithSpecialKeys, \n                       ___IOHIDPropertySaveToKeyWithSpecialKeys, ___IOHIDPropertySaveWithContext, \n                       ___IOHIDQueueRegister, ___IOHIDSaveDeviceSet, ___IOHIDSaveElementSet, \n                       ___IOHIDServiceClientCopyDebugDescription, ___IOHIDServiceCompleteInProgressEvents, \n                       ___IOHIDServiceCreateAndCopyConnectionCache, ___IOHIDServiceCreateVirtualNoInit, \n                       ___IOHIDServiceHandleCancelTimerTimeout, ___IOHIDServiceOpenedByEventSystem, \n                       ___IOHIDServicePassiveMatchToFilterPlugin, ___IOHIDServicePickBatchInterval, \n                       ___IOHIDSessionActivityNotificationRelease, ___IOHIDSystemEnumerationQueueDidExecute, \n                       ___IOHIDSystemEnumerationQueueWillExecute, ___IOHIDTransactionRegister, \n                       ___IOHIDUserDeviceFinalizeStateHandler, ___IOHIDUserDeviceSerializeState, \n                       ___IOHIDUserDeviceStateHandler, ___IOHIDValueRegister, ___IOUSBDeviceDescriptionRegister, \n                       ___NotificationApplier, ___OSKextBundleIDCompare, ___OSKextCacheNeedsUpdate, \n                       ___OSKextCheckURL, ___OSKextClearHasAllDependenciesOnKext, \n                       ___OSKextCompareIdentifiers, ___OSKextCopyExecutableRelativePath, \n                       ___OSKextCreateCacheFileURL, ___OSKextCreateCompositeKey, \n                       ___OSKextCreateFromIdentifierCacheDict, ___OSKextCreateIdentifierCacheDict, \n                       ___OSKextCreateKextRequest, ___OSKextDeallocateMmapBuffer, \n                       ___OSKextGetBleedthroughFlag, ___OSKextLogDependencyGraphApplierFunction, \n                       ___OSKextLogKernelMessages, ___OSKextMapExecutable, ___OSKextProcessKextRequestResults, \n                       ___OSKextReadRegistryNumberProperty, ___OSKextRealize, ___OSKextRealizeKextsWithIdentifier, \n                       ___OSKextRemoveIdentifierCacheForKext, ___OSKextRemovePersonalities, \n                       ___OSKextSendKextRequest, ___OSKextSetLoadAddress, ___OSKextStatURL, \n                       ___OSKextStatURLsOrURL, ___OSKextURLIsSystemFolder, ___OSKextUUIDCallback, \n                       ___OSKextUnload, ___RegisterServiceWithSessionFunction, ___SetNumPropertyForService, \n                       ___VirtualServiceNotifier, ___VirtualServicesApplier, ___absPathOnVolume, \n                       ___hid_dispatch_queue_context_destructor, ___kOSKextDiagnosticsFlagAllImplemented, \n                       ___sOSKextDefaultLogFunction, ___sOSKextLogOutputFunction, \n                       ___uuid_callback, __copySleepPreventersList, __getPSDispatchQueue, \n                       __io_hideventsystem_clear_service_cache, __io_hideventsystem_copy_event_for_service, \n                       __io_hideventsystem_copy_matching_event_for_service, __io_hideventsystem_copy_matching_services, \n                       __io_hideventsystem_copy_properties_for_service, __io_hideventsystem_copy_property, \n                       __io_hideventsystem_copy_property_for_service, __io_hideventsystem_create_virtual_service, \n                       __io_hideventsystem_dispatch_event, __io_hideventsystem_dispatch_event_for_virtual_service, \n                       __io_hideventsystem_do_client_refresh, __io_hideventsystem_open, \n                       __io_hideventsystem_queue_create, __io_hideventsystem_queue_start, \n                       __io_hideventsystem_queue_stop, __io_hideventsystem_register_event_filter, \n                       __io_hideventsystem_register_property_changed_notification, \n                       __io_hideventsystem_register_record_client_changed_notification, \n                       __io_hideventsystem_register_record_service_changed_notification, \n                       __io_hideventsystem_release_notification, __io_hideventsystem_remove_virtual_service, \n                       __io_hideventsystem_service_conforms_to, __io_hideventsystem_set_element_value_for_service, \n                       __io_hideventsystem_set_properties, __io_hideventsystem_set_properties_for_service, \n                       __io_hideventsystem_unregister_event_filter, __io_hideventsystem_unregister_property_changed_notification, \n                       __io_hideventsystem_unregister_record_client_changed_notification, \n                       __io_hideventsystem_unregister_record_service_changed_notification, \n                       __io_kSCCompAnyRegex, __io_kSCDynamicStoreDomainState, __iohideventsystem_client_dispatch_client_records_changed, \n                       __iohideventsystem_client_dispatch_event_filter, __iohideventsystem_client_dispatch_notification_results, \n                       __iohideventsystem_client_dispatch_properties_changed, __iohideventsystem_client_dispatch_service_records_changed, \n                       __iohideventsystem_client_dispatch_service_removal, __iohideventsystem_client_dispatch_virtual_service_copy_property, \n                       __iohideventsystem_client_dispatch_virtual_service_notification, \n                       __iohideventsystem_client_dispatch_virtual_service_set_property, \n                       __iohideventsystem_client_refresh, __iohideventsystem_client_subsystem, \n                       __iohideventsystem_copy_event_from_virtual_service, __iohideventsystem_copy_matching_event_from_virtual_service, \n                       __iohideventsystem_output_event_to_virtual_service, __iohideventsystem_subsystem, \n                       __isArray, __isDictionary, __isString, __pm_connect, __pm_disconnect, \n                       __releaseAsycnAssertion, __servicePropertyCacheKeys, __servicePropertyCacheKeysCount, \n                       __systemPowerCallback, _activateAsyncAssertion, _activeAssertions, \n                       _assertion_timer_suspended, _checkFeatureEnabled, _clearAssertionLogBuffer, \n                       _comparePrefsToDefaults, _copyPreferencesForSrc, _createAsyncAssertion, \n                       _createCFStringForData, _createCFStringForPlist_new, _createUTF8CStringForCFString, \n                       _decodeIOPMUserIsActive, _defaultPropertyKeyValue, _defaultSettings, \n                       _ev_try_lock, _ev_unlock, _fat_iterator_close, _fat_iterator_file_end, \n                       _fat_iterator_file_start, _fat_iterator_find_arch, _fat_iterator_find_fat_arch, \n                       _fat_iterator_find_host_arch, _fat_iterator_for_data, _fat_iterator_is_iterable, \n                       _fat_iterator_next_arch, _fat_iterator_num_arches, _fat_iterator_open, \n                       _fat_iterator_reset, _gAsyncMode, _gAsyncModeDisableOverride, \n                       _gAsyncModeSetupDone, _gCurrentRemoteAssertionIsCoalesced, \n                       _gIOCFPlugInInterfaceID, _gIOHIDDebugConfig, _gIOKitLibSerializeOptions, \n                       _gIOKitLibServerVersion, _gIOPMUserIsActive, _getEffectivePageSize, \n                       _getGenericPrefsPath, _getHostPrefsPath, _getMonotonicTime, \n                       _getPMQueue, _getUserActiveValidDict, _handleAssertionLevel, \n                       _handleAssertionTimeout, _handleAsyncAssertionDisableOverride, \n                       _hid_dispatch_pthread_root_queue_create, _hid_dispatch_queue_create, \n                       _hid_dispatch_queue_create_with_context_destructor, _hid_dispatch_queue_release, \n                       _hid_pthread_attr_init, _hid_workloop_create, _initialSetup, \n                       _insertIntoTimedList, _io_hideventsystem_clear_service_cache, \n                       _io_hideventsystem_copy_event_for_service, _io_hideventsystem_copy_matching_event_for_service, \n                       _io_hideventsystem_copy_matching_services, _io_hideventsystem_copy_properties_for_service, \n                       _io_hideventsystem_copy_property, _io_hideventsystem_copy_property_for_service, \n                       _io_hideventsystem_create_virtual_service, _io_hideventsystem_dispatch_event, \n                       _io_hideventsystem_dispatch_event_for_virtual_service, _io_hideventsystem_do_client_refresh, \n                       _io_hideventsystem_open, _io_hideventsystem_queue_create, \n                       _io_hideventsystem_queue_start, _io_hideventsystem_queue_stop, \n                       _io_hideventsystem_register_event_filter, _io_hideventsystem_register_property_changed_notification, \n                       _io_hideventsystem_register_record_client_changed_notification, \n                       _io_hideventsystem_register_record_service_changed_notification, \n                       _io_hideventsystem_release_notification, _io_hideventsystem_remove_virtual_service, \n                       _io_hideventsystem_service_conforms_to, _io_hideventsystem_set_element_value_for_service, \n                       _io_hideventsystem_set_properties, _io_hideventsystem_set_properties_for_service, \n                       _io_hideventsystem_unregister_event_filter, _io_hideventsystem_unregister_property_changed_notification, \n                       _io_hideventsystem_unregister_record_client_changed_notification, \n                       _io_hideventsystem_unregister_record_service_changed_notification, \n                       _io_pm_assertion_activity_aggregate, _io_pm_assertion_activity_log, \n                       _io_pm_assertion_copy_details, _io_pm_assertion_create, _io_pm_assertion_notify, \n                       _io_pm_assertion_retain_release, _io_pm_assertion_set_properties, \n                       _io_pm_cancel_repeat_events, _io_pm_change_sa_assertion_behavior, \n                       _io_pm_connection_acknowledge_event, _io_pm_connection_create, \n                       _io_pm_connection_release, _io_pm_connection_schedule_notification, \n                       _io_pm_ctl_assertion_type, _io_pm_declare_network_client_active, \n                       _io_pm_declare_system_active, _io_pm_declare_user_active, \n                       _io_pm_force_active_settings, _io_pm_get_capability_bits, \n                       _io_pm_get_uuid, _io_pm_get_value_int, _io_pm_hid_event_copy_history, \n                       _io_pm_hid_event_report_activity, _io_pm_last_wake_time, _io_pm_schedule_power_event, \n                       _io_pm_schedule_repeat_event, _io_pm_set_bt_wake_interval, \n                       _io_pm_set_debug_flags, _io_pm_set_dw_linger_interval, _io_pm_set_exception_limits, \n                       _io_pm_set_sleepservice_wake_time_cap, _io_pm_set_value_int, \n                       _io_ps_copy_powersources_info, _io_ps_new_pspowersource, _io_ps_release_pspowersource, \n                       _io_ps_update_pspowersource, _iohideventsystem_client_dispatch_client_records_changed, \n                       _iohideventsystem_client_dispatch_event_filter, _iohideventsystem_client_dispatch_notification_results, \n                       _iohideventsystem_client_dispatch_properties_changed, _iohideventsystem_client_dispatch_service_records_changed, \n                       _iohideventsystem_client_dispatch_service_removal, _iohideventsystem_client_dispatch_virtual_service_copy_property, \n                       _iohideventsystem_client_dispatch_virtual_service_notification, \n                       _iohideventsystem_client_dispatch_virtual_service_set_property, \n                       _iohideventsystem_client_refresh, _iohideventsystem_client_server, \n                       _iohideventsystem_client_server_routine, _iohideventsystem_copy_event_from_virtual_service, \n                       _iohideventsystem_copy_matching_event_from_virtual_service, \n                       _iohideventsystem_output_event_to_virtual_service, _iohideventsystem_server, \n                       _iohideventsystem_server_routine, _iokit_user_client_trap, \n                       _isA_GenericPref, _isCrossLinking, _kIOAVCPCapabilitiesAll, \n                       _kIOAVCPCapabilitiesNone, _kIOAVCPConfigDefault, _kIOAVContentProtectionHDCP1, \n                       _kIOAVContentProtectionHDCP2, _kIOAVContentProtectionNone, \n                       _kIOAVDSCCapabilitiesNone, _kIOAVDSCHintsNone, _kIOAVDSCParametersNone, \n                       _kIOEthernetHardwareAddress, _kIOHIDEventAttachmentSender, \n                       _kIOHIDEventSystemConnectionDispatchFilterWaitTimeoutMS, _kIOHIDFilterPluginArrayCallBacks, \n                       _kIOHIDServerConnectionRootQueue, _kIOHIDServiceCapsLockLEDKey, \n                       _kIOHIDServiceCapsLockLEDKey_Auto, _kIOHIDServiceCapsLockLEDKey_Inhibit, \n                       _kIOHIDServiceCapsLockLEDKey_Off, _kIOHIDServiceCapsLockLEDKey_On, \n                       _kIOHIDServiceCapsLockLEDOnKey, _kIOHIDServiceHiddenKey, _kIOHIDServiceInterruptWorkloop, \n                       _kIOMainPortDefault, _kIOMasterPortDefault, _kIOUserEthernetInterfaceMergeProperties, \n                       _kIOUserEthernetInterfaceRole, _kOSKextDependencyCircularReference, \n                       _kOSKextDependencyCompatibleVersionUndeclared, _kOSKextDependencyInauthentic, \n                       _kOSKextDependencyIndirectDependencyUnresolvable, _kOSKextDependencyIneligibleInSafeBoot, \n                       _kOSKextDependencyInvalid, _kOSKextDependencyLoadedCompatibleVersionUndeclared, \n                       _kOSKextDependencyLoadedIsIncompatible, _kOSKextDependencyMultipleVersionsDetected, \n                       _kOSKextDependencyNoCompatibleVersion, _kOSKextDependencyRawAndComponentKernel, \n                       _kOSKextDependencyUnavailable, _kOSKextDiagnosticBadPropertyListXMLKey, \n                       _kOSKextDiagnosticBadSystemPropertyKey, _kOSKextDiagnosticBundleIdentifierMismatchKey, \n                       _kOSKextDiagnosticBundleVersionMismatchKey, _kOSKextDiagnosticCodelessWithLibrariesKey, \n                       _kOSKextDiagnosticCompatibleVersionLaterThanVersionKey, _kOSKextDiagnosticDeclaresBothKernelAndKPIDependenciesKey, \n                       _kOSKextDiagnosticDeclaresNoKPIsWarningKey, _kOSKextDiagnosticDeclaresNonKPIDependenciesKey, \n                       _kOSKextDiagnosticDeprecatedPropertyKey, _kOSKextDiagnosticExecutableArchNotFoundKey, \n                       _kOSKextDiagnosticExecutableBadKey, _kOSKextDiagnosticExecutableMissingKey, \n                       _kOSKextDiagnosticFileAccessKey, _kOSKextDiagnosticFileNotFoundKey, \n                       _kOSKextDiagnosticIdentifierOrVersionTooLongKey, _kOSKextDiagnosticIneligibleInSafeBoot, \n                       _kOSKextDiagnosticInfoKeyIneligibleForDriverKit, _kOSKextDiagnosticInvalidSymlinkKey, \n                       _kOSKextDiagnosticKernelComponentNotInterfaceKey, _kOSKextDiagnosticKextIneligibleForDriverKit, \n                       _kOSKextDiagnosticMissingDesignatedKernelClass, _kOSKextDiagnosticMissingPropertyKey, \n                       _kOSKextDiagnosticNoExplicitKernelDependencyKey, _kOSKextDiagnosticNoFileKey, \n                       _kOSKextDiagnosticNonAppleKextDeclaresPrivateKPIDependencyKey, \n                       _kOSKextDiagnosticNonuniqueIOResourcesMatchKey, _kOSKextDiagnosticNotABundleKey, \n                       _kOSKextDiagnosticNotSignedKey, _kOSKextDiagnosticOSBundleRequiredValueIneligibleForDriverKit, \n                       _kOSKextDiagnosticOwnerPermissionKey, _kOSKextDiagnosticPersonalityHasDifferentBundleIdentifierKey, \n                       _kOSKextDiagnosticPersonalityHasNoBundleIdentifierKey, _kOSKextDiagnosticPersonalityNamesKextWithNoExecutableKey, \n                       _kOSKextDiagnosticPersonalityNamesNonloadableKextKey, _kOSKextDiagnosticPersonalityNamesUnknownKextKey, \n                       _kOSKextDiagnosticPropertyIsIllegalTypeKey, _kOSKextDiagnosticPropertyIsIllegalValueKey, \n                       _kOSKextDiagnosticRawKernelDependency, _kOSKextDiagnosticSharedExecutableAndExecutableKey, \n                       _kOSKextDiagnosticSharedExecutableKextMissingKey, _kOSKextDiagnosticStatFailureKey, \n                       _kOSKextDiagnosticSymlinkKey, _kOSKextDiagnosticThirdPartiesIneligibleForDriverKitOSBundleRequired, \n                       _kOSKextDiagnosticTypeWarningKey, _kOSKextDiagnosticURLConversionKey, \n                       _kOSKextDiagnosticUserExecutableAndExecutableKey, _kOSKextDiagnosticsAuthenticationKey, \n                       _kOSKextDiagnosticsBootLevelKey, _kOSKextDiagnosticsDependenciesKey, \n                       _kOSKextDiagnosticsDependencyNotOSBundleRequired, _kOSKextDiagnosticsInterfaceDependencyCount, \n                       _kOSKextDiagnosticsValidationKey, _kOSKextDiagnosticsWarningsKey, \n                       _kOSKextLoadNotification, _kOSKextUnloadNotification, _logAsyncAssertionActivity, \n                       _macho_find_dysymtab, _macho_find_section_numbered, _macho_find_source_version, \n                       _macho_find_symbol, _macho_find_symtab, _macho_find_uuid, \n                       _macho_get_section_by_name, _macho_get_section_by_name_64, \n                       _macho_get_segment_by_name, _macho_get_segment_by_name_64, \n                       _macho_remove_linkedit, _macho_scan_load_commands, _macho_swap, \n                       _macho_trim_linkedit, _macho_unswap, _multipleActiveAssertionsExist, \n                       _offloadAssertions, _previouslySerialized, _printPList_new, \n                       _processAssertionTimeout, _processAssertionUpdateActivity, \n                       _processCheckAssertionsMsg, _processCurrentActiveAssertions, \n                       _processRemoteMsg, _processUserActivityMsg, _recordObjectInIDRefDictionary, \n                       _releaseAsyncAssertion, _removeFromTimedList, _roundPageCrossSafe, \n                       _roundPageCrossSafeFixedWidth, _sendAsyncAssertionMsg, _sendAsyncReleaseMsg, \n                       _sendUserActivityMsg, _setAsyncAssertionProperties, _setCrossLinkPageSize, \n                       _setDispatchQueue, _setPreferencesForSrc, _setupLogging, _showPList_new ]\n    objc-classes:    [ HIDConnection, HIDDevice, HIDElement, HIDEvent, HIDEventService, \n                       HIDServiceClient, HIDSession ]\n    objc-ivars:      [ HIDConnection._connection, HIDDevice._device, HIDElement._element, \n                       HIDEvent._event, HIDEventService._service, HIDServiceClient._client, \n                       HIDSession._session ]\n...\n"
  },
  {
    "path": "Loader/Supporting Files/Loader-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n#import  \"Macros.h\"\n#include \"LSApplicationWorkspace.h\"\n#include \"MobileGestalt.h\"\n#include \"posixspawn.h\"\n\n#include \"jailbreakd.h\"\n#include \"nvram.h\"\n\nuint32_t dyld_get_active_platform(void);\n"
  },
  {
    "path": "Loader/Supporting Files/loader.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>com.apple.CommCenter.fine-grained</key>\n\t<array>\n\t\t<string>spi</string>\n\t</array>\n\t<key>com.apple.private.persona-mgmt</key>\n\t<true/>\n\t<key>platform-application</key>\n\t<true/>\n\t<key>com.apple.private.security.no-container</key>\n\t<true/>\n\t<key>com.apple.private.security.system-application</key>\n\t<true/>\n\t<key>com.apple.security.iokit-user-client-class</key>\n\t<array>\n\t\t<string>IOUserClient</string>\n\t</array>\n\t<key>com.apple.private.iokit.system-nvram-allow</key>\n\t<true/>\n\t<key>com.apple.private.iokit.system-nvram-internal-allow</key>\n\t<true/>\n\t<key>in.palera.pinfo.kernel-info</key>\n\t<true/>\n\t<key>in.palera.loader.bootstrapper</key>\n\t<true/>\n\t<key>in.palera.loader.allow-obliterate-jailbreak</key>\n\t<true/>\n\t<key>in.palera.private.launchd-commands.client</key>\n\t<true/>\n\t<key>com.apple.security.exception.files.absolute-path.read-write</key>\n\t<array>\n\t\t<string>/</string>\n\t</array>\n\t<key>get-task-allow</key>\n\t<true/>\n\t<key>com.apple.AutoWake-write-access</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Loader/Utilities/Bootstrap/LRBootstrapper+download.swift",
    "content": "//\n//  LRBootstrapper+download.swift\n//  Loader\n//\n//  Created by samara on 18.03.2025.\n//\n\nimport Foundation\n\n// MARK: - Class extension: download\nextension LRBootstrapper: URLSessionDownloadDelegate {\n\tfunc download(_ urls: [URL], completion: @escaping ([String: Error?]) -> Void) {\n\t\tlet sessionConfig = URLSessionConfiguration.default\n\t\tlet session = URLSession(configuration: sessionConfig, delegate: self, delegateQueue: nil)\n\t\t\n\t\tvar results: [String: Error?] = [:]\n\t\tlet group = DispatchGroup()\n\t\t\n\t\tfor url in urls {\n\t\t\tgroup.enter()\n\t\t\t\n\t\t\tlet tmp = URL(fileURLWithPath: .tmp())\n\t\t\tlet destination = tmp.appendingPathComponent(url.lastPathComponent)\n\t\t\t\n\t\t\tif url.lastPathComponent.contains(\"tar\") || url.lastPathComponent.contains(\"zst\") {\n\t\t\t\tbootstrapFilePath = destination.relativePath\n\t\t\t} else {\n\t\t\t\tpackageFilePaths.append(destination.relativePath)\n\t\t\t}\n\t\t\t\n\t\t\tlet downloadTask = session.downloadTask(with: url)\n\t\t\t\n\t\t\tdownloadCompletionHandlers[downloadTask] = { (path, error) in\n\t\t\t\tresults[url.absoluteString] = error\n\t\t\t\tgroup.leave()\n\t\t\t}\n\t\t\t\n\t\t\tdownloadTaskToDestinationMap[downloadTask] = destination\n\t\t\t\n\t\t\tdownloadTask.resume()\n\t\t}\n\t\t\n\t\tgroup.notify(queue: .main) {\n\t\t\tcompletion(results)\n\t\t}\n\t}\n\t\n\tfunc urlSession(\n\t\t_ session: URLSession,\n\t\tdownloadTask: URLSessionDownloadTask,\n\t\tdidFinishDownloadingTo location: URL\n\t) {\n\t\tguard let destinationURL = downloadTaskToDestinationMap[downloadTask] else {\n\t\t\tdownloadCompletionHandlers[downloadTask]?(nil, NSError(domain: \"Download\", code: -1, userInfo: [NSLocalizedDescriptionKey: \"Could not find destination for task\"]))\n\t\t\treturn\n\t\t}\n\t\t\n\t\tlet tmp = URL(fileURLWithPath: .tmp())\n\t\tlet destination = tmp.appendingPathComponent(destinationURL.lastPathComponent)\n\t\t\n\t\tlet fileManager = FileManager.default\n\t\t\n\t\tdo {\n\t\t\tif fileManager.fileExists(atPath: destination.path) {\n\t\t\t\ttry fileManager.removeItem(at: destination)\n\t\t\t}\n\t\t\tprint(\"downloaded to \\(location)\")\n\t\t\ttry fileManager.moveItem(at: location, to: destination)\n\t\t\tprint(\"moved to \\(destination)\")\n\t\t\tdownloadCompletionHandlers[downloadTask]?(destinationURL.path, nil)\n\t\t} catch {\n\t\t\tdownloadCompletionHandlers[downloadTask]?(nil, error)\n\t\t}\n\t\t\n\t}\n\t\n\tfunc urlSession(\n\t\t_ session: URLSession,\n\t\tdownloadTask: URLSessionDownloadTask,\n\t\tdidWriteData bytesWritten: Int64,\n\t\ttotalBytesWritten: Int64,\n\t\ttotalBytesExpectedToWrite: Int64\n\t) {\n\t\t//\n\t}\n}\n"
  },
  {
    "path": "Loader/Utilities/Bootstrap/LRBootstrapper+status.swift",
    "content": "//\n//  LRBootstrapper+status.swift\n//  Loader\n//\n//  Created by samara on 18.03.2025.\n//\n\nimport NimbleViewControllers\n\n// MARK: - Class extension: status\nextension LRBootstrapper {\n\tfunc setItemStatus(_ section: String, item: String, with status: StepStatus) {\n\t\tDispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {\n\t\t\tself.callback?.updateStepItemStatus(section, item: item, with: status)\n\t\t}\n\t}\n\t\n\t\n\tfunc setLastItemStatusAndNew(_ section: String, item: String) {\n\t\tif let last = lastStatusItem {\n\t\t\tsetItemStatus(last.section, item: last.item, with: .completed)\n\t\t}\n\t\t\n\t\tself.lastStatusItem = (section, item)\n\t\tself.setItemStatus(section, item: item, with: .inProgress)\n\t}\n\t\n\tfunc setGroupFocus(for section: Int) {\n\t\tDispatchQueue.main.asyncAfter(deadline: .now() + 0.4) {\n\t\t\tself.callback?.updateStepGroupFocus(for: section)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Loader/Utilities/Bootstrap/LRBootstrapper.swift",
    "content": "//\n//  LRBootstrapper.swift\n//  Loader\n//\n//  Created by samara on 13.03.2025.\n//\n\nimport UIKit\nimport NimbleViewControllers\n\n// MARK: - Protocal\nprotocol LRBootstrapperDelegate {\n\tfunc updateStepItemStatus(_ section: String, item: String, with status: StepStatus)\n\tfunc updateStepItemStatusForName(named item: String, with status: StepStatus)\n\tfunc updateStepGroupFocus(for section: Int)\n\tfunc bootstrapFinish()\n}\n\n// MARK: - Class\nclass LRBootstrapper: NSObject {\n\tlet callback: LRBootstrapperDelegate?\n\tprivate var _shouldBootstrap: Bool\n\tprivate let _config: LRConfig?\n\tprivate let _password: String\n\tprivate let _manager: LRManager?\n\t\n\tenum LRBootstrapperError: Error, LocalizedError  {\n\t\tcase downloadFailed(Error)\n\t\tcase bootstrapFailed(String)\n\t\tcase dpkgFailed\n\t}\n\t\n\tvar downloadCompletionHandlers: [URLSessionDownloadTask: (String?, Error?) -> Void] = [:]\n\tvar downloadTaskToDestinationMap: [URLSessionDownloadTask: URL] = [:]\n\tvar lastStatusItem: (section: String, item: String)? = nil\n\tvar bootstrapFilePath: String? = nil\n\tvar packageFilePaths: [String] = []\n\t\n\tinit(\n\t\tcallback: LRBootstrapperDelegate? = nil,\n\t\tconfig: LRConfig? = nil,\n\t\tmanager: LRManager? = nil,\n\t\tsudo_password: String,\n\t\tshouldBootstrap: Bool = true\n\t) {\n\t\tself.callback = callback\n\t\tself._config = config\n\t\tself._manager = manager\n\t\tself._password = sudo_password\n\t\tself._shouldBootstrap = shouldBootstrap\n\t\tsuper.init()\n\t}\n\t\n\t// MARK: Download\n\t\n\tfunc prepareFiles() async throws {\n\t\treturn try await withCheckedThrowingContinuation { continuation in\n\t\t\tlet dispatchGroup = DispatchGroup()\n\t\t\t\n\t\t\tlet errorLock = NSLock()\n\t\t\tvar firstError: Error?\n\t\t\t\n\t\t\tfunc downloadResource(urls: [URL], itemLabel: String) {\n\t\t\t\tdispatchGroup.enter()\n\t\t\t\t\n\t\t\t\tself.setItemStatus(\n\t\t\t\t\t.localized(\"Download\"),\n\t\t\t\t\titem: itemLabel,\n\t\t\t\t\twith: .inProgress\n\t\t\t\t)\n\t\t\t\t\n\t\t\t\tdownload(urls) { results in\n\t\t\t\t\tif let (_, error) = results.first(where: { _, error in error != nil }) {\n\t\t\t\t\t\terrorLock.lock()\n\t\t\t\t\t\tif firstError == nil, let downloadError = error {\n\t\t\t\t\t\t\tfirstError = LRBootstrapperError.downloadFailed(downloadError)\n\t\t\t\t\t\t\tself.setItemStatus(\n\t\t\t\t\t\t\t\t.localized(\"Download\"),\n\t\t\t\t\t\t\t\titem: itemLabel,\n\t\t\t\t\t\t\t\twith: .failed\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\terrorLock.unlock()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.setItemStatus(\n\t\t\t\t\t\t\t.localized(\"Download\"),\n\t\t\t\t\t\t\titem: itemLabel,\n\t\t\t\t\t\t\twith: .completed\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tdispatchGroup.leave()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif _shouldBootstrap, let url = _config?.content()?.bootstrap()?.uri {\n\t\t\t\tdownloadResource(urls: [url], itemLabel: .localized(\"Downloading Base Bootstrap\"))\n\t\t\t}\n\t\t\t\n\t\t\tif _shouldBootstrap, let urls = _config?.content()?.bootstrap()?.bootstrap_deb_uris {\n\t\t\t\tdownloadResource(urls: urls, itemLabel: .localized(\"Downloading Required Packages\"))\n\t\t\t}\n\t\t\t\n\t\t\tif let url = _manager?.uri {\n\t\t\t\tdownloadResource(urls: [url], itemLabel: .localized(\"Downloading Package Managers\"))\n\t\t\t}\n\t\t\t\n\t\t\t// wait for all downloads to complete\n\t\t\tdispatchGroup.notify(queue: .global()) { [weak self] in\n\t\t\t\tguard let self = self else {\n\t\t\t\t\tcontinuation.resume(throwing: LRBootstrapperError.bootstrapFailed(\"Self was deallocated\"))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif let error = firstError {\n\t\t\t\t\tcontinuation.resume(throwing: error)\n\t\t\t\t} else {\n\t\t\t\t\tself.setGroupFocus(for: 1)\n\t\t\t\t\tcontinuation.resume(returning: ())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t// MARK: Bootstrap\n\t\n\tfunc bootstrap() async throws {\n\t\tself.setLastItemStatusAndNew(\n\t\t\t.localized(\"Bootstrap\"),\n\t\t\titem: .localized(\"Preparing Environment\")\n\t\t)\n\t\t\n\t\t#if !targetEnvironment(simulator) && !DEBUG\n\t\t// jailbreak utilities like Filza will create /var/jb if opened before bootstrapping\n\t\t// so we will forcefully remove it if we are rootless\n\t\tif await UIDevice.current.palera1n.palerain_option_rootless {\n\t\t\t_ = LREnvironment.execute(.binpack(\"/bin/rm\"), [\"-rf\", \"/var/jb\"])\n\t\t}\n\t\t#endif\n\t\t\n\t\tself.setLastItemStatusAndNew(\n\t\t\t.localized(\"Bootstrap\"),\n\t\t\titem: .localized(\"Installing Base Bootstrap\")\n\t\t)\n\t\t\t\t\n\t\tlet (ret, resultDescription) = LREnvironment.jbd.deployBootstrap(\n\t\t\twith: bootstrapFilePath!,\n\t\t\tpassword: _password\n\t\t)\n\t\tif ret != 0 {\n\t\t\tself.setItemStatus(\n\t\t\t\t.localized(\"Bootstrap\"),\n\t\t\t\titem: .localized(\"Installing Base Bootstrap\"),\n\t\t\t\twith: .failed\n\t\t\t)\n\t\t\tthrow LRBootstrapperError.bootstrapFailed(resultDescription)\n\t\t}\n\t\t\n\t\tself.setLastItemStatusAndNew(\n\t\t\t.localized(\"Bootstrap\"),\n\t\t\titem: .localized(\"Preparing Repositories\")\n\t\t)\n\t\t\n\t\tif let repos = _config?.content()?.repositories {\n\t\t\tlet data = repos.map {\n\t\t\t\t$0.data\n\t\t\t}.joined(separator: \"\\n\")\n\t\t\t\n\t\t\t// highly unlikely chance that writing into a file will fail\n\t\t\t// if someone with a custom config fucks it up, thats not on us\n\t\t\tlet (ret, resultDescription) = LREnvironment.jbd.overwriteFile(\n\t\t\t\twith: data,\n\t\t\t\tto: .jb_prefix(\"/etc/apt/sources.list.d/palera1n.sources\")\n\t\t\t)\n\t\t\tif ret != 0 {\n\t\t\t\tself.setItemStatus(\n\t\t\t\t\t.localized(\"Bootstrap\"),\n\t\t\t\t\titem: .localized(\"Preparing Repositories\"),\n\t\t\t\t\twith: .failed\n\t\t\t\t)\n\t\t\t\tthrow LRBootstrapperError.bootstrapFailed(resultDescription)\n\t\t\t}\n\t\t}\n\t\t\n\t\tLREnvironment.jbd.reloadLaunchdJailbreakEnvironment()\n\t\tself.setGroupFocus(for: 2)\n\t}\n\t\n\t// MARK: Post bootstrap - packages\n\t\n\tfunc installPackages() async throws {\n\t\tself.setLastItemStatusAndNew(\n\t\t\t.localized(\"Install\"),\n\t\t\titem: .localized(\"Installing Packages\")\n\t\t)\n\t\t\n\t\tif !packageFilePaths.isEmpty {\n\t\t\tlet ret = LREnvironment.execute(.jb_prefix(\"/usr/bin/dpkg\"), [\"-i\"] + packageFilePaths,\n\t\t\t\tenvironmentPath: [\"/usr/bin\"]\n\t\t\t)\n\t\t\tif ret != 0 {\n\t\t\t\tself.setItemStatus(\n\t\t\t\t\t.localized(\"Install\"),\n\t\t\t\t\titem: .localized(\"Installing Packages\"),\n\t\t\t\t\twith: .failed\n\t\t\t\t)\n\t\t\t\tthrow LRBootstrapperError.dpkgFailed\n\t\t\t}\n\t\t\t\n\t\t\tLREnvironment.execute(.binpack(\"/usr/bin/uicache\"), [\"-a\"])\n\t\t}\n\t\t\n\t\ttry? await Task.sleep(nanoseconds: 1_000_000)\n\t\tself.callback?.bootstrapFinish()\n\t}\n}\n"
  },
  {
    "path": "Loader/Utilities/Config/Models/LRConfig.swift",
    "content": "//\n//  Fetch.swift\n//  loader-rewrite\n//\n//  Created by samara on 1/29/24.\n//\n\nimport UIKit.UIDevice\n\n// MARK: - Fetch config\nstruct LRConfig: Codable {\n\t/// Minimum loader version that the configuration supports\n\t///\n\t/// If the app version is lower than minimum required then\n\t/// it will tell you to update to the latest palera1n version\n\t/// with an alert\n\tlet min_loader_version: String\n\t/// The minimum loader version the latest version of\n\t/// palera1n supports\n\t///\n\t/// As of the versions after beta 9, only 2.0+ is supported\n\tlet palera1n_version_with_min_loader: String\n\tlet min_bridge_bootstrapper_version: String\n\t/// Message displayed in a section footer\n\t///\n\t/// Usually used as a means of telling users emergency or\n\t/// important messages related to palera1n/jailbreaking in\n\t/// general\n\tlet footer_notice: String?\n\tprivate let contents: [LRConfigContent]\n\t\n\tprivate func findCompatibleContents() -> LRConfigContent? {\n\t\tcontents.filter { content in\n\t\t\tcontent.platform == Int(dyld_get_active_platform())\n\t\t}.first\n\t}\n\t\n\t/// Strap contents\n\tfunc content() -> LRConfigContentDetails? {\n\t\tfindCompatibleContents()?.type()\n\t}\n}\n\nprivate struct LRConfigContent: Codable {\n\tfileprivate let platform: Int\n\tprivate let rootful: LRConfigContentDetails?\n\tprivate let rootless: LRConfigContentDetails?\n\t\n\tfileprivate func type() -> LRConfigContentDetails? {\n\t\tUIDevice.current.palera1n.palerain_option_rootless\n\t\t? rootless\n\t\t: rootful\n\t}\n}\n\n// MARK: - Strap data\nstruct LRConfigContentDetails: Codable {\n\tprivate let dotfile: String\n\tprivate let bootstraps: [LRBootstrap]\n\t/// Available package managers\n\tlet managers: [LRManager]\n\t/// Repositories that will be added\n\tlet repositories: [LRRepository]?\n\t\n\tprivate func _findCompatibleBootstraps() -> LRBootstrap? {\n\t\tlet currentCFVersion = UIDevice.current.cfVersion.rounded\n\t\tlet availableVersions = bootstraps.map { $0.cfver }\n\n\t\t// If current version is lower than all available bootstraps\n\t\tif let minAvailableVersion = availableVersions.min(), Int(currentCFVersion)! < minAvailableVersion {\n\t\t\treturn nil\n\t\t}\n\t\t\n\t\t// If exact match exists\n\t\tif let exactMatch = bootstraps.filter({ $0.cfver == Int(currentCFVersion) }).first {\n\t\t\treturn exactMatch\n\t\t}\n\t\t\n\t\t// If current version is higher than available bootstraps\n\t\tif let highestVersion = availableVersions.max(), Int(currentCFVersion)! > highestVersion {\n\t\t\treturn bootstraps.filter { $0.cfver == highestVersion }.first\n\t\t}\n\t\t\n\t\t// Get the closest version for the first character in a string 2600 -> 2\n\t\tif #available(iOS 17, *) {\n\t\t\tif let digit = currentCFVersion.first {\n\t\t\t\tlet matching = availableVersions.filter { String($0).first == digit }\n\t\t\t\t\n\t\t\t\tif let closestVersion = matching.min(by: { abs($0 - Int(currentCFVersion)!) < abs($1 - Int(currentCFVersion)!) }) {\n\t\t\t\t\treturn bootstraps.filter { $0.cfver == closestVersion }.first\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn nil\n\t}\n\t\n\t/// Returns the first compatible bootstrap or nil if none matches\n\t/// If nil, its expected to immediately backout of the bootstrapping process\n\tfunc bootstrap() -> LRBootstrap? {\n\t\t_findCompatibleBootstraps()\n\t}\n}\n\nstruct LRBootstrap: Codable {\n\tfileprivate let cfver: Int\n\t/// Bootstrap tar.zst uri\n\tlet uri: URL\n\t/// Bootstrap post strap debs\n\tlet bootstrap_deb_uris: [URL]\n\n\tenum CodingKeys: String, CodingKey {\n\t\tcase cfver, uri\n\t\tcase bootstrap_deb_uris = \"bootstrap-debs\"\n\t}\n}\n\nstruct LRManager: Codable {\n\t/// Package manager name\n\tlet name: String\n\t/// Package manager deb uri\n\tlet uri: URL\n\t/// Package manager image representation uri\n\tlet icon: URL\n\t/// Package manager install path\n\tlet filePath: URL\n\t\n\t/// Asynchronously load the icon image\n\tfunc loadIconImage(completion: @escaping (UIImage) -> Void) {\n\t\tURLSession.shared.dataTask(with: icon) { data, response, error in\n\t\t\tif \n\t\t\t\tlet data = data,\n\t\t\t\tlet image = UIImage(data: data)\n\t\t\t{\n\t\t\t\tDispatchQueue.main.async {\n\t\t\t\t\tcompletion(image)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tDispatchQueue.main.async {\n\t\t\t\t\tcompletion(UIImage(named: \"unknown\")!)\n\t\t\t\t}\n\t\t\t}\n\t\t}.resume()\n\t}\n}\n\nstruct LRRepository: Codable {\n\tprivate let Types: String\n\tprivate let URIs: String\n\tprivate let Suites: String\n\tprivate let Components: String\n\t\n\t/// APT repository data in string format\n\tvar data: String {\n\t\t\"Types: \\(Types)\\nURIs: \\(URIs)\\nSuites: \\(Suites)\\nComponents: \\(Components)\\n\"\n\t}\n}\n"
  },
  {
    "path": "Loader/Utilities/Environment/LREnvironment+prefixes.swift",
    "content": "//\n//  LREnvironment+prefixes.swift\n//  Loader\n//\n//  Created by samara on 18.03.2025.\n//\n\nimport UIKit.UIDevice\n\n// MARK: - Class extension: prefixes\nextension LREnvironment {\n\tfunc jb_prefix(_ path: String) -> String {\n\t\t#if !targetEnvironment(simulator)\n\t\tif UIDevice.current.palera1n.palerain_option_rootless {\n\t\t\treturn \"/var/jb\" + path\n\t\t}\n\t\t#endif\n\t\t\n\t\treturn path\n\t}\n\t\n\tstatic func binpack(_ path: String) -> String {\n\t\t\"/cores/binpack\" + path\n\t}\n\t\n\tstatic func tmp(_ path: String = \"\") -> String {\n\t\t\"/tmp/palera1n\" + path\n\t}\n}\n"
  },
  {
    "path": "Loader/Utilities/Environment/LREnvironment+reset.swift",
    "content": "//\n//  LREnvironment+reset.swift\n//  Loader\n//\n//  Created by samara on 18.03.2025.\n//\n\nimport UIKit.UIDevice\n\n// MARK: - Class extension: reset\nextension LREnvironment {\n\t/// Change sudo password\n\t/// - Parameter password: The sudo password you want to use\n\tfunc resetSudoPassword(with password: String) {\n\t\tlet dashCommand = \"printf \\\"%s\\\\n\\\" \\\"\\(password)\\\" | \\(self.jb_prefix(\"/usr/sbin/pw\")) usermod 501 -h 0\"\n\t\tSelf.execute(.jb_prefix(\"/usr/bin/dash\"), [\"-c\", dashCommand])\n\t}\n\t/// Removes bootstrap\n\tfunc removeBootstrap() {\n\t\tif\n\t\t\t#available(iOS 18, *),\n\t\t\tUIDevice.current.palera1n.palerain_option_rootless\n\t\t{\n\t\t\tlet apps = try? FileManager.default.contentsOfDirectory(atPath: .jb_prefix(\"/Applications\"))\n\t\t\t\n\t\t\tif let apps { for app in apps {\n\t\t\t\tSelf.execute(.binpack(\"/usr/bin/uicache\"), [\"-u\", app])\n\t\t\t}}\n\t\t}\n\t\t\n\t\tguard\n\t\t\tjbd.obliterateJailbreak(cleanFakeFS: UIDevice.current.palera1n.shouldCleanFakefs) == 0\n\t\telse {\n\t\t\treturn\n\t\t}\n\t\t\n\t\tjbd.reloadLaunchdJailbreakEnvironment()\n\t\t\n\t\t#if !DEBUG\n\t\treboot()\n\t\t#else\n\t\texit(0)\n\t\t#endif\n\t}\n\t/// Reboots device\n\tfunc reboot() {\n\t\tSelf.execute(.binpack(\"/bin/launchctl\"), [\"reboot\"])\n\t}\n\t/// Reboots userspace\n\tfunc rebootUserspace() {\n\t\tSelf.execute(.binpack(\"/bin/launchctl\"), [\"reboot\", \"userspace\"])\n\t}\n\t/// UICache\n\tfunc uicacheAll() {\n\t\tSelf.execute(.binpack(\"/usr/bin/uicache\"), [\"-a\"])\n\t}\n\t/// Restart springboard\n\tfunc respring() {\n\t\tSelf.execute(.binpack(\"/bin/launchctl\"), [\"kickstart\", \"-k\", \"system/com.apple.backboardd\"])\n\t}\n\t/// Enter device into recovery, then reboot\n\tfunc enterRecovery() {\n\t\t_ = Self.nvram(\"auto-boot\", \"false\")\n\t\treboot()\n\t}\n}\n"
  },
  {
    "path": "Loader/Utilities/Environment/LREnvironment+spawn.swift",
    "content": "//\n//  LREnvironment+spawn.swift\n//  Loader\n//\n//  Created by samara on 13.03.2025.\n//\n\nimport Foundation\nimport Darwin.POSIX\n\n// MARK: - Class extension: spawn\nextension LREnvironment {\n\t/// Executes a posix spawn command with a given environment path\n\t/// - Parameters:\n\t///   - command: Program path\n\t///   - args: Program arguments\n\t///   - environmentPath: Enviroment paths, such as `/usr/bin`\n\t/// - Returns: An exit status of the given command\n\t@discardableResult\n\tstatic func execute(\n\t\t_ command: String,\n\t\t_ args: [String] = [],\n\t\tenvironmentPath: [String]\n\t) -> Int {\n\t\tvar path: String = \"PATH=\"\n\t\t\n\t\t// Using the jailbreaks root prefix, we will prepend your paths with it\n\t\t// when specifying, you will need to only include the paths that will\n\t\t// be present on a standard filesystem such as /usr/bin, and NOT /var/jb/usr/bin\n\t\tlet env = environmentPath.map {\n\t\t\t.jb_prefix($0)\n\t\t}.joined(separator: \":\")\n\t\tpath.append(env)\n\t\t\n\t\treturn execute(command, args, environment: [path])\n\t}\n\t\n\t/// Executes a posix spawn command\n\t/// - Parameters:\n\t///   - command: Program path\n\t///   - args: Program arguments\n\t///   - environment: Environment variables, i.e. `VEE=1`\n\t/// - Returns: An exit status of the given command\n\t@discardableResult\n\tstatic func execute(\n\t\t_ command: String,\n\t\t_ args: [String] = [],\n\t\tenvironment: [String] = []\n\t) -> Int {\n\t\t#if targetEnvironment(simulator)\n\t\treturn 0\n\t\t#else\n\t\t\n\t\tlet cArgs = ([command] + args).map { strdup($0) } + [nil]\n\t\t\n\t\tdefer {\n\t\t\tfor arg in cArgs where arg != nil {\n\t\t\t\tfree(arg)\n\t\t\t}\n\t\t}\n\t\t\n\t\t// we don't need a preset environment\n\t\tvar env: [String] = []\n\t\t\n\t\tif !environment.isEmpty {\n\t\t\tfor variable in environment {\n\t\t\t\tenv.append(variable)\n\t\t\t}\n\t\t}\n\t\t\n\t\tlet cEnv = env.map { strdup($0) } + [nil]\n\t\t\n\t\tdefer {\n\t\t\tfor e in cEnv where e != nil {\n\t\t\t\tfree(e)\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar attr: posix_spawnattr_t?\n\t\tposix_spawnattr_init(&attr)\n\t\t\n\t\tposix_spawnattr_set_persona_np(&attr, 99, UInt32(POSIX_SPAWN_PERSONA_FLAGS_OVERRIDE))\n\t\tposix_spawnattr_set_persona_uid_np(&attr, 0)\n\t\tposix_spawnattr_set_persona_gid_np(&attr, 0)\n\t\t\n\t\tvar pid: pid_t = 0\n\t\t\n\t\tlet status = posix_spawnp(&pid, command, nil, &attr, cArgs, cEnv)\n\t\t\n\t\tposix_spawnattr_destroy(&attr)\n\t\t\n\t\tif status != 0 {\n\t\t\treturn Int(status)\n\t\t}\n\t\t\n\t\tvar exitStatus: Int32 = 0\n\t\twaitpid(pid, &exitStatus, 0)\n\t\t\n\t\t// where the FUCK is WEXITSTATUS\n\t\tlet exitCode = (exitStatus & 0xff00) >> 8\n\t\t// fucking xcode always makes this return 0??, I won't do anything about it, but be aware\n\t\treturn Int(exitCode)\n\t\t#endif\n\t}\n}\n\n// MARK: - Class extension: nvram\nextension LREnvironment {\n\tstatic func nvram(\n\t\t_ key: String, \n\t\t_ value: String\n\t) -> UInt32 {\n\t\tguard \n\t\t\tlet keyPtr = strdup(key), \n\t\t\t\tlet valuePtr = strdup(value) \n\t\telse {\n\t\t\treturn 0\n\t\t}\n\t\tdefer {\n\t\t\tfree(keyPtr)\n\t\t\tfree(valuePtr)\n\t\t}\n\t\treturn nvram_set(keyPtr, valuePtr)\n\t}\n}\n"
  },
  {
    "path": "Loader/Utilities/Environment/LREnvironment.swift",
    "content": "//\n//  LREnvironment.swift\n//  Loader\n//\n//  Created by samara on 13.03.2025.\n//\n\nimport UIKit.UIDevice\n\n// MARK: - Class\nclass LREnvironment {\n\ttypealias jbd = JailbreakD\n\tstatic let shared = LREnvironment()\n\t\n\t// MARK: Boostrap status\n\t\n\tenum LRBootstrapStatus {\n\t\tcase bootstrapped\n\t\tcase partial_bootstrapped_rootless\n\t\tcase not_bootstrapped\n\t\t\n\t\tvar stringValue: String {\n\t\t\tswitch self {\n\t\t\tcase .bootstrapped:\t\t\t\t\t\t\"✓\"\n\t\t\tcase .partial_bootstrapped_rootless:\t\"!\"\n\t\t\tcase .not_bootstrapped:\t\t\t\t\t\"✗\"\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/// Devices bootstrap status\n\tvar isBootstrapped: LRBootstrapStatus {\n\t\t#if !targetEnvironment(simulator)\n\t\tlet fileManager = FileManager.default\n\t\tlet dotfile = dotfilePath()\n\t\t\n\t\tif fileManager.fileExists(atPath: .jb_prefix(dotfile)) {\n\t\t\treturn .bootstrapped\n\t\t}\n\t\t\n\t\tif UIDevice.current.palera1n.palerain_option_rootless {\n\t\t\tif let preboot_path = jbd.getPrebootPath() {\n\t\t\t\tif fileManager.fileExists(atPath: preboot_path + dotfile) {\n\t\t\t\t\treturn .partial_bootstrapped_rootless\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t#endif\n\t\treturn .not_bootstrapped\n\t}\n\t\n\tstatic func default_config_url() -> String {\n\t\t\"https://\\(loaderConfigURL())\"\n\t}\n\t\n\tstatic func config_url() -> String {\n\t\tlet userDefaults = UserDefaults.standard\n\t\tlet defaultValue = self.default_config_url()\n\t\tlet installPath = userDefaults.string(forKey: \"defaultInstallPath\") ?? defaultValue\n\t\treturn installPath\n\t}\n}\n"
  },
  {
    "path": "Loader/Utilities/Nvram/nvram.c",
    "content": "//\n//  nvram.c\n//  Loader\n//\n//  Created by samsam on 9/25/25.\n//\n\n#include \"nvram.h\"\n#include <stdio.h>\n\nuint32_t nvram_set(char* key, char* value) {\n\tCFStringRef cfKey = CFStringCreateWithCString(kCFAllocatorDefault, key, kCFStringEncodingUTF8);\n\tCFStringRef cfValue = CFStringCreateWithCString(kCFAllocatorDefault, value, kCFStringEncodingUTF8);\n\tio_registry_entry_t nvram = IORegistryEntryFromPath(kIOMasterPortDefault, kIODeviceTreePlane \":/options\");\n\tkern_return_t ret = IORegistryEntrySetCFProperty(nvram, cfKey, cfValue);\n\tprintf(\"Set nvram %s=%s ret: %d\\n\", key, value, ret);\n\tret = IORegistryEntrySetCFProperty(nvram, CFSTR(\"IONVRAM-FORCESYNCNOW-PROPERTY\"), cfKey);\n\tprintf(\"sync nvram ret: %d\\n\", ret);\n\tIOObjectRelease(nvram);\n\tif (cfValue) CFRelease(cfValue);\n\tCFRelease(cfKey);\n\treturn ret;\n}\n"
  },
  {
    "path": "Loader/Utilities/Nvram/nvram.h",
    "content": "//\n//  nvram.h\n//  Loader\n//\n//  Created by samsam on 9/25/25.\n//\n\n#ifndef nvram_h\n#define nvram_h\n\n#include <IOKit/IOKitLib.h>\n\nuint32_t nvram_set(char* key, char* value);\n\n#endif\n"
  },
  {
    "path": "Loader/Utilities/XPC/JailbreakD.swift",
    "content": "//\n//  Wrapper.swift\n//  palera1nLoader\n//\n//  Created by Nick Chan on 28/1/2024.\n//\n\nimport Foundation\n\nenum JailbreakD {\n\tstatic func getFlags() -> UInt64 {\n\t\t#if targetEnvironment(simulator)\n//\t\t0xc0002 // rootless\n\t\t0xc0081 // rootful\n\t\t//return 0x1000000002c00082\n\t\t//return 0x2000000\n\t\t#else\n\t\tGetPinfoFlags_impl()\n\t\t#endif\n\t}\n\t\n\tstatic func getPrebootPath() -> String? {\n\t\t#if targetEnvironment(simulator)\n\t\tnil\n\t\t#else\n\t\tlet cStr = GetPrebootPath_impl()\n\t\tif (cStr != nil) {\n\t\t\tlet str = String(cString: cStr!)\n\t\t\tcStr?.deallocate()\n\t\t\treturn str\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t\t#endif\n\t}\n\t\n\tstatic func deployBootstrap(with path: String, password: String) -> (Int, String) {\n\t\t#if targetEnvironment(simulator)\n\t\treturn (0, \"\")\n\t\t#else\n\t\tvar resultDescription: UnsafeMutablePointer<CChar>!;\n\t\t\n\t\tlet retval = DeployBootstrap_impl(\n\t\t\tpath, false,\n\t\t\tpassword,\n\t\t\tBundle.appExecutable,\n\t\t\t\"\\(Bundle.appVersionShort) (\\(Bundle.bundleVersion)\",\n\t\t\t&resultDescription\n\t\t)\n\t\t\n\t\tlet result: String;\n\t\tif (resultDescription != nil) {\n\t\t\tresult = String(cString: resultDescription);\n\t\t\tresultDescription.deallocate();\n\t\t} else {\n\t\t\tresult = \"\"\n\t\t}\n\t\t\n\t\treturn (Int(retval), result);\n\t\t#endif\n\t}\n\t\n\t\n\tstatic func overwriteFile(with data: String, to destination: String) -> (Int, String) {\n\t\t#if targetEnvironment(simulator)\n\t\treturn (0, \"\")\n\t\t#else\n\t\tvar resultDescription: UnsafeMutablePointer<CChar>!\n\t\t\n\t\tlet retval = OverwriteFile_impl(\n\t\t\tdestination,\n\t\t\tdata,\n\t\t\t&resultDescription\n\t\t)\n\t\t\n\t\tlet result: String\n\t\tif resultDescription != nil {\n\t\t\tresult = String(cString: resultDescription)\n\t\t} else {\n\t\t\tresult = \"\"\n\t\t}\n\t\t\n\t\tresultDescription?.deallocate()\n\t\treturn (Int(retval), result)\n\t\t#endif\n\t}\n\t\n\t@discardableResult\n\tstatic func obliterateJailbreak(cleanFakeFS: Bool) -> Int {\n\t\t#if targetEnvironment(simulator)\n\t\t0\n\t\t#else\n\t\tInt(ObliterateJailbreak_impl(cleanFakeFS));\n\t\t#endif\n\t}\n\t\n\t@discardableResult\n\tstatic func reloadLaunchdJailbreakEnvironment() -> Int {\n\t\t#if targetEnvironment(simulator)\n\t\t0\n\t\t#else\n\t\tInt(ReloadLaunchdJailbreakEnvironment_impl());\n\t\t#endif\n\t}\n\t\n\t@discardableResult\n\tstatic func exitFailureSafeMode() -> Int {\n\t\t#if targetEnvironment(simulator)\n\t\t0\n\t\t#else\n\t\tInt(ExitFailureSafeMode_impl());\n\t\t#endif\n\t}\n}\n"
  },
  {
    "path": "Loader/Utilities/XPC/jailbreakd.c",
    "content": "//\n//  jailbreakd.c\n//  palera1nLoader\n//\n//  Created by Nick Chan on 28/1/2024.\n//\n\n#include \"jailbreakd.h\"\n\n#if !TARGET_OS_SIMULATOR\n\nenum {\n    JBD_CMD_GET_PINFO_FLAGS = 1,\n    JBD_CMD_GET_PREBOOTPATH,\n    JBD_CMD_GET_PINFO_KERNEL_INFO,\n    JBD_CMD_GET_PINFO_ROOTDEV,\n    JBD_CMD_DEPLOY_BOOTSTRAP,\n    JBD_CMD_OBLITERATE_JAILBREAK,\n    JBD_CMD_PERFORM_REBOOT3,\n    JBD_CMD_OVERWRITE_FILE_WITH_CONTENT,\n    JBD_CMD_INTERCEPT_USERSPACE_PANIC,\n    JBD_CMD_EXIT_SAFE_MODE\n};\n\nenum {\n    LAUNCHD_CMD_RELOAD_JB_ENV = 1,\n    LAUNCHD_CMD_SET_TWEAKLOADER_PATH,\n};\n\nconst char* xpc_strerror(int error);\n\nstatic xpc_object_t jailbreak_send_jailbreakd_message_with_reply_sync(xpc_object_t xdict) {\n    xpc_connection_t connection = xpc_connection_create_mach_service(\"in.palera.palera1nd.systemwide\", NULL, 0);\n    if (xpc_get_type(connection) == XPC_TYPE_ERROR) {\n        return connection;\n    }\n    xpc_connection_set_event_handler(connection, ^(xpc_object_t _) {});\n    xpc_connection_activate(connection);\n    xpc_object_t xreply = xpc_connection_send_message_with_reply_sync(connection, xdict);\n    xpc_connection_cancel(connection);\n    xpc_release(connection);\n    return xreply;\n}\n\nstatic xpc_object_t jailbreak_send_jailbreakd_command_with_reply_sync(uint64_t cmd) {\n    xpc_object_t xdict = xpc_dictionary_create(NULL, NULL, 0);\n    xpc_dictionary_set_uint64(xdict, \"cmd\", cmd);\n    xpc_object_t xreply = jailbreak_send_jailbreakd_message_with_reply_sync(xdict);\n    xpc_release(xdict);\n    return xreply;\n}\n\nstatic char* jailbreak_copy_jailbreakd_reply_description(xpc_object_t xreply) {\n    const char* _Nullable errorDescription = xpc_dictionary_get_string(xreply, \"errorDescription\");\n    const char* _Nullable message = xpc_dictionary_get_string(xreply, \"message\");\n    int error = (int)xpc_dictionary_get_int64(xreply, \"error\");\n    char* description = NULL;\n    \n    if (error || errorDescription) {\n        if (error && !errorDescription) {\n            asprintf(&description, \"Error: %d (%s)\", error, xpc_strerror(error));\n        } else if (!error && errorDescription) {\n            asprintf(&description, \"Error: %s\", errorDescription);\n        } else if (error && errorDescription) {\n            asprintf(&description, \"Error: %s: %d (%s)\", errorDescription, error, xpc_strerror(error));\n        }\n    } else if (message) {\n        asprintf(&description, \"%s\", message);\n    } else {\n        asprintf(&description, \"\");\n    }\n    return description;\n}\n\nstatic int jailbreak_send_launchd_message(xpc_object_t xdict, xpc_object_t *xreply) {\n    int ret = 0;\n    xpc_dictionary_set_bool(xdict, \"jailbreak\", true);\n    xpc_object_t bootstrap_pipe = ((struct xpc_global_data *)_os_alloc_once_table[OS_ALLOC_ONCE_KEY_LIBXPC].ptr)->xpc_bootstrap_pipe;\n    if (__builtin_available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0, *)) {\n        ret = _xpc_pipe_interface_routine(bootstrap_pipe, 0, xdict, xreply, 0);\n    } else {\n        ret = xpc_pipe_routine(bootstrap_pipe, xdict, xreply);\n    }\n    //ret = xpc_pipe_routine(bootstrap_pipe, xdict, xreply);\n    if (ret == 0 && (ret = (int)xpc_dictionary_get_int64(*xreply, \"error\")) == 0)\n        return 0;\n\n    return ret;\n}\n\nuint64_t GetPinfoFlags_impl(void) {\n    xpc_object_t xreply = jailbreak_send_jailbreakd_command_with_reply_sync(JBD_CMD_GET_PINFO_FLAGS);\n    if (xpc_get_type(xreply) == XPC_TYPE_ERROR) return 0;\n    uint64_t pinfo = xpc_dictionary_get_uint64(xreply, \"flags\");\n    xpc_release(xreply);\n    return pinfo;\n}\n\nchar * _Nullable GetPrebootPath_impl(void) {\n    xpc_object_t xreply = jailbreak_send_jailbreakd_command_with_reply_sync(JBD_CMD_GET_PREBOOTPATH);\n    if (xpc_get_type(xreply) == XPC_TYPE_ERROR) return 0;\n    const char* path = xpc_dictionary_get_string(xreply, \"path\");\n    char* retval;\n    asprintf(&retval, \"%s\", path);\n    xpc_release(xreply);\n    return retval;\n}\n\nint DeployBootstrap_impl(\n                                 const char bootstrap[],\n                                 bool no_password,\n                                 const char password[],\n                                 const char bootstrapper_name[],\n                                 const char bootstrapper_version[],\n                                 char** result_description\n                                 ) {\n    xpc_object_t xdict = xpc_dictionary_create(NULL, NULL, 0);\n    xpc_dictionary_set_string(xdict, \"path\", bootstrap);\n    xpc_dictionary_set_uint64(xdict, \"cmd\", JBD_CMD_DEPLOY_BOOTSTRAP);\n    xpc_dictionary_set_string(xdict, \"bootstrapper-name\", bootstrapper_name);\n    xpc_dictionary_set_string(xdict, \"bootstrapper-version\", bootstrapper_version);\n    xpc_dictionary_set_bool(xdict, \"no-password\", no_password);\n    if (!no_password) xpc_dictionary_set_string(xdict, \"password\", password);\n    xpc_object_t xreply = jailbreak_send_jailbreakd_message_with_reply_sync(xdict);\n    xpc_release(xdict);\n    \n    int retval = 0;\n    \n    if (xpc_get_type(xreply) == XPC_TYPE_ERROR) {\n        retval = -1;\n    } else {\n        const char* errorDescription = xpc_dictionary_get_string(xreply, \"errorDescription\");\n        int error = (int)xpc_dictionary_get_int64(xreply, \"error\");\n        if (error) retval = error;\n        else if (errorDescription) retval = -1;\n        if (result_description) {\n            char* description = jailbreak_copy_jailbreakd_reply_description(xreply);\n            *result_description = description;\n        }\n        xpc_release(xreply);\n    }\n    return retval;\n}\n\nint OverwriteFile_impl(\n                       const char* distinationPath,\n                       const char* repositoriesContent,\n                       char** result_description\n                       ) {\n\n    xpc_object_t xdict = xpc_dictionary_create(NULL, NULL, 0);\n    xpc_dictionary_set_uint64(xdict, \"cmd\", JBD_CMD_OVERWRITE_FILE_WITH_CONTENT);\n    xpc_dictionary_set_string(xdict, \"path\", distinationPath);\n\n    size_t data_size = strlen(repositoriesContent);\n    xpc_object_t data_object = xpc_data_create(repositoriesContent, data_size);\n    xpc_dictionary_set_data(xdict, \"data\", xpc_data_get_bytes_ptr(data_object), xpc_data_get_length(data_object));\n\n    xpc_object_t xreply = jailbreak_send_jailbreakd_message_with_reply_sync(xdict);\n    xpc_release(xdict);\n    xpc_release(data_object);\n\n    int retval = 0;\n\n    if (xpc_get_type(xreply) == XPC_TYPE_ERROR) {\n        retval = -1;\n    } else {\n        const char* errorDescription = xpc_dictionary_get_string(xreply, \"errorDescription\");\n        int error = (int)xpc_dictionary_get_int64(xreply, \"error\");\n        if (error) retval = error;\n        else if (errorDescription) retval = -1;\n        if (result_description) {\n            char* description = jailbreak_copy_jailbreakd_reply_description(xreply);\n            *result_description = description;\n        }\n        xpc_release(xreply);\n    }\n\n    return retval;\n}\n\nint ObliterateJailbreak_impl(bool isCleanFakeFS) {\n    xpc_object_t xdict = xpc_dictionary_create(NULL, NULL, 0);\n    xpc_dictionary_set_uint64(xdict, \"cmd\", JBD_CMD_OBLITERATE_JAILBREAK);\n    xpc_dictionary_set_bool(xdict, \"keep-fakefs\", isCleanFakeFS);\n    xpc_object_t xreply = jailbreak_send_jailbreakd_message_with_reply_sync(xdict);\n    xpc_release(xdict);\n    if (xpc_get_type(xreply) == XPC_TYPE_ERROR) return -1;\n    int error = (int)xpc_dictionary_get_int64(xreply, \"error\");\n    xpc_release(xreply);\n    if (error) return error;\n    else return 0;\n}\n\nint ReloadLaunchdJailbreakEnvironment_impl(void) {\n    xpc_object_t launchd_dict = xpc_dictionary_create(NULL, NULL, 0);\n    xpc_object_t launchd_reply;\n    xpc_dictionary_set_uint64(launchd_dict, \"cmd\", LAUNCHD_CMD_RELOAD_JB_ENV);\n    int ret = jailbreak_send_launchd_message(launchd_dict, &launchd_reply);\n    xpc_release(launchd_dict);\n    xpc_release(launchd_reply);\n    return ret;\n}\n\nint ExitFailureSafeMode_impl(void) {\n    xpc_object_t xreply = jailbreak_send_jailbreakd_command_with_reply_sync(JBD_CMD_EXIT_SAFE_MODE);\n    if (xpc_get_type(xreply) == XPC_TYPE_ERROR) return -1;\n    int error = (int)xpc_dictionary_get_int64(xreply, \"error\");\n    xpc_release(xreply);\n    if (error) return error;\n    else return 0;\n}\n\n#endif\n"
  },
  {
    "path": "Loader/Utilities/XPC/jailbreakd.h",
    "content": "//\n//  jailbreakd.h\n//  palera1nLoader\n//\n//  Created by Nick Chan on 28/1/2024.\n//\n\n#ifndef jailbreakd_h\n#define jailbreakd_h\n\n#include <TargetConditionals.h>\n#if !TARGET_OS_SIMULATOR\n#include <stdio.h>\n#include <xpc/xpc.h>\n#include <bsm/audit.h>\n#include <xpc/connection.h>\n#include <stdarg.h>\n\n#include <CoreFoundation/CoreFoundation.h>\n#include <assert.h>\n#ifndef __OBJC__\nvoid NSLog(CFStringRef _Nonnull, ...);\nvoid NSLogv(CFStringRef _Nonnull, va_list va);\n#define LOG(x, ...) NSLog(CFSTR(x), ##__VA_ARGS__)\n#endif\n\ntypedef xpc_object_t xpc_pipe_t;\n\n__OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0)\nXPC_EXPORT XPC_NONNULL1 XPC_NONNULL2\nkern_return_t\nxpc_pipe_routine(xpc_pipe_t pipe, xpc_object_t request, xpc_object_t XPC_GIVES_REFERENCE *reply);\n\nAPI_AVAILABLE(macos(12.0), ios(15.0), tvos(15.0), watchos(8.0))\nXPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1 XPC_NONNULL3 XPC_NONNULL4\nint\n_xpc_pipe_interface_routine(xpc_pipe_t pipe, uint64_t routine,\n    xpc_object_t message, xpc_object_t XPC_GIVES_REFERENCE *reply,\n    uint64_t flags);\n\nstruct _os_alloc_once_s {\n    long once;\n    void *ptr;\n};\n\nstruct xpc_global_data {\n    uint64_t    a;\n    uint64_t    xpc_flags;\n    mach_port_t    task_bootstrap_port;  /* 0x10 */\n#ifndef _64\n    uint32_t    padding;\n#endif\n    xpc_object_t    xpc_bootstrap_pipe;   /* 0x18 */\n    // and there's more, but you'll have to wait for MOXiI 2 for those...\n    // ...\n};\n\nextern struct _os_alloc_once_s _os_alloc_once_table[];\n\n#define OS_ALLOC_ONCE_KEY_LIBXPC                    1\n\n\n\nuint64_t GetPinfoFlags_impl(void);\nchar * _Nullable GetPrebootPath_impl(void);\nint DeployBootstrap_impl(\n                                 const char* _Nonnull bootstrap,\n                                 bool no_password,\n                                 const char* _Nullable password,\n                                 const char* _Nonnull bootstrapper_name,\n                                 const char* _Nonnull bootstrapper_version,\n                                 char* _Null_unspecified * _Nonnull result_description\n                         );\n\nint OverwriteFile_impl(\n                       const char* _Nonnull distinationPath,\n                       const char* _Nonnull repositoriesContent,\n                       char* _Null_unspecified * _Nonnull result_description\n                       );\n\nint ObliterateJailbreak_impl(bool isCleanFakeFS);\nint GetPinfoKernelInfo_impl(uint64_t* kbase, uint64_t* kslide);\nint ReloadLaunchdJailbreakEnvironment_impl(void);\nint ExitFailureSafeMode_impl(void);\n#endif\n\n#endif /* jailbreakd_h */\n"
  },
  {
    "path": "Loader/Views/Bootstrap/LRStagedViewController+UpdateItem.swift",
    "content": "//\n//  LRStagedViewController+UpdateItem.swift\n//  Loader\n//\n//  Created by samara on 18.03.2025.\n//\n\nimport Foundation\nimport UIKit\n\n\n// MARK: - Class extension: bootstrapperdelegate\nextension LRStagedViewController: LRBootstrapperDelegate {\n\tfunc updateStepGroupFocus(for section: Int) {\n\t\tselectCollectionViewCell(for: section)\n\t}\n\t\n\tfunc bootstrapFinish() {\n\t\tThread.mainBlock {\n\t\t\tUIApplication.shared.suspend()\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Loader/Views/Bootstrap/LRStagedViewController.swift",
    "content": "//\n//  LRStagedViewController.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit\nimport NimbleViewControllers\n\n// MARK: - Class\nclass LRStagedViewController: LRBaseStagedViewController {\n\tprivate var _shouldBootstrap: Bool\n\tprivate let _config: LRConfig\n\tprivate let _manager: LRManager?\n\t\n\tinit(title: String, config: LRConfig, manager: LRManager? = nil, shouldBootstrap: Bool = true) {\n\t\tself._config = config\n\t\tself._manager = manager\n\t\tself._shouldBootstrap = shouldBootstrap\n\t\tsuper.init()\n\t\tself.title = title\n\t}\n\t\n\trequired init?(coder: NSCoder) {\n\t\tfatalError(\"init(coder:) has not been implemented\")\n\t}\n\t\n\toverride func setupView() {\n\t\tfooterString = \"Do not exit the app during this process, it may lead to unforeseen issues.\"\n\t\tsteps = [\n\t\t\tStepGroup(\n\t\t\t\tname: .localized(\"Download\"),\n\t\t\t\titems: [\n\t\t\t\t\tStepGroupItem(name: .localized(\"Downloading Package Managers\")),\n\t\t\t\t]\n\t\t\t),\n\t\t\tStepGroup(\n\t\t\t\tname: .localized(\"Install\"),\n\t\t\t\titems: [\n\t\t\t\t\tStepGroupItem(name: .localized(\"Installing Packages\")),\n\t\t\t\t]\n\t\t\t),\n\t\t]\n\t\t\n\t\tif _shouldBootstrap {\n\t\t\tsteps[0].items.insert(StepGroupItem(name: .localized(\"Downloading Base Bootstrap\")), at: 0)\n\t\t\tsteps[0].items.insert(StepGroupItem(name: .localized(\"Downloading Required Packages\")), at: 1)\n\t\t\t\n\t\t\tsteps.insert(\n\t\t\t\tStepGroup(\n\t\t\t\t\tname: .localized(\"Bootstrap\"),\n\t\t\t\t\titems: [\n\t\t\t\t\t\tStepGroupItem(name: .localized(\"Preparing Environment\")),\n\t\t\t\t\t\tStepGroupItem(name: .localized(\"Installing Base Bootstrap\")),\n\t\t\t\t\t\tStepGroupItem(name: .localized(\"Preparing Repositories\")),\n\t\t\t\t\t]\n\t\t\t\t),\n\t\t\tat: 1)\n\t\t}\n\t}\n\t\n\toverride func start() {\n\t\tif _shouldBootstrap {\n\t\t\tUIAlertController.showAlertForPassword(\n\t\t\t\tself,\n\t\t\t\ttitle: .localized(\"Set Password\"),\n\t\t\t\tmessage: .localized(\"Password Explanation\")\n\t\t\t) { password in\n\t\t\t\tself._proceedInstallation(password: password)\n\t\t\t}\n\t\t} else {\n\t\t\tself._proceedInstallation()\n\t\t}\n\t}\n\t\n\tprivate func _proceedInstallation(password: String = \"alpine\") {\n\t\tTask.detached {\n\t\t\ttry? await Task.sleep(nanoseconds: 1_000_000)\n\t\t\t\n\t\t\tawait MainActor.run {\n\t\t\t\tself.selectCollectionViewCell(for: 0)\n\t\t\t}\n\t\t\t\n\t\t\tlet bootstrapper = await LRBootstrapper(\n\t\t\t\tcallback: self,\n\t\t\t\tconfig: self._config,\n\t\t\t\tmanager: self._manager,\n\t\t\t\tsudo_password: password,\n\t\t\t\tshouldBootstrap: self._shouldBootstrap\n\t\t\t)\n\t\t\t\n\t\t\tdo {\n\t\t\t\ttry await bootstrapper.prepareFiles()\n\t\t\t\tif await self._shouldBootstrap { try await bootstrapper.bootstrap() }\n\t\t\t\ttry await bootstrapper.installPackages()\n\t\t\t} catch {\n\t\t\t\tawait MainActor.run {\n\t\t\t\t\t#if !targetEnvironment(simulator)\n\t\t\t\t\tUIAlertController.showAlert(\n\t\t\t\t\t\tself,\n\t\t\t\t\t\ttitle: \"\",\n\t\t\t\t\t\tmessage: \"\\(error)\",\n\t\t\t\t\t\tactions: []\n\t\t\t\t\t)\n\t\t\t\t\t#else\n\t\t\t\t\tprint(\"\\(error)\")\n\t\t\t\t\t#endif\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n}\n"
  },
  {
    "path": "Loader/Views/LRTabbarController.swift",
    "content": "//\n//  TabbarController.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit\nimport SwiftUI\n\nclass LRTabbarController: UITabBarController {\n\toverride func viewDidLoad() {\n\t\tsuper.viewDidLoad()\n\t\tself._setupTabs()\n\t}\n\t\n\tprivate func _setupTabs() {\n\t\tlet sources = self._createNavigation(\n\t\t\twith: \"palera1n\",\n\t\t\tusing: UIImage(systemName: \"wand.and.stars\"),\n\t\t\tcontroller: LRBootstrapViewController()\n\t\t)\n\t\t\n\t\tlet apps = self._createNavigation(\n\t\t\twith: .localized(\"Settings\"),\n\t\t\tusing: UIImage(systemName: \"gear\"),\n\t\t\tcontroller: LRSettingsViewController()\n\t\t)\n\t\t\n\t\tself.setViewControllers([\n\t\t\tsources,\n\t\t\tapps,\n\t\t], animated: false)\n\t}\n\t\n\tprivate func _createNavigation(\n\t\twith title: String,\n\t\tusing image: UIImage?,\n\t\tcontroller: UIViewController\n\t) -> UINavigationController {\n\t\tlet nav = UINavigationController(rootViewController: controller)\n\t\tnav.tabBarItem.title = title\n\t\tnav.tabBarItem.image = image\n\t\tnav.viewControllers.first?.navigationItem.title = title\n\t\treturn nav\n\t}\n}\n"
  },
  {
    "path": "Loader/Views/Selection/LRBootstrapViewController+transition.swift",
    "content": "//\n//  LRBootstrapViewController+Transition.swift\n//  Loader\n//\n//  Created by samara on 22.03.2025.\n//\n\nimport UIKit\nimport NimbleAnimations\n\n// MARK: - Class extension: animations\nextension LRBootstrapViewController: UIViewControllerTransitioningDelegate {\n\tfunc animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {\n\t\tSlideWithPresentationAnimator(presenting: true)\n\t}\n\t\n\tfunc animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {\n\t\tSlideWithPresentationAnimator(presenting: false)\n\t}\n}\n"
  },
  {
    "path": "Loader/Views/Selection/LRBootstrapViewController.swift",
    "content": "//\n//  LRBootstrapViewController.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit\nimport NimbleJSON\nimport NimbleViewControllers\n\n// MARK: - Class\nclass LRBootstrapViewController: LRBaseTableViewController {\n\ttypealias LRConfigHandler = Result<LRConfig, Error>\n\t\n\tprivate let _activityIndicator = UIActivityIndicatorView(style: .medium)\n\tprivate var _data: LRConfig? = nil\n\tprivate let _dataService = FetchService()\n\tprivate let _dataURL = URL(string: LREnvironment.config_url())!\n\tprivate var _refreshButton: UIBarButtonItem!\n\n\toverride func viewDidLoad() {\n\t\tsuper.viewDidLoad()\n\t\t_notifyUserIfCertainFlags()\n\t\t_load()\n\t\t_setupNavigation()\n\t}\n\t\n\tprivate func _setupNavigation() {\n\t\t_refreshButton = UIBarButtonItem(\n\t\t\tbarButtonSystemItem: .refresh,\n\t\t\ttarget: self,\n\t\t\taction: #selector(self._load)\n\t\t)\n\t\t\n\t\t_activityIndicator.hidesWhenStopped = true\n\t\tnavigationItem.rightBarButtonItem = _refreshButton\n\t}\n\t\n\tprivate func _beginRefreshing() {\n\t\t_activityIndicator.startAnimating()\n\t\tnavigationItem.rightBarButtonItem = UIBarButtonItem(customView: _activityIndicator)\n\t}\n\n\tprivate func _endRefreshing() {\n\t\t_activityIndicator.stopAnimating()\n\t\tnavigationItem.rightBarButtonItem = _refreshButton\n\t}\n\t\n\t@objc private func _load() {\n\t\t_beginRefreshing()\n\t\t\n\t\t_dataService.fetch<LRConfig>(from: _dataURL) { [weak self] (result: LRConfigHandler) in\n\t\t\tguard let self = self else { return }\n\n\t\t\tDispatchQueue.main.async {\n\t\t\t\tself._endRefreshing()\n\t\t\t\t\n\t\t\t\tswitch result {\n\t\t\t\tcase .success(let data):\n\t\t\t\t\tself._data = data\n\t\t\t\t\tself.tableView.reloadDataWithTransition(with: .transitionCrossDissolve, duration: 0.4)\n\t\t\t\t\t\n\t\t\t\t\tif data.content() == nil {\n\t\t\t\t\t\tUIAlertController.showAlert(\n\t\t\t\t\t\t\tself, \n\t\t\t\t\t\t\ttitle: \"\", \n\t\t\t\t\t\t\tmessage: .localized(\n\t\t\t\t\t\t\t\t\"Bootstrap, managers, and configuration is not available for current jailbreak type\", \n\t\t\t\t\t\t\t\targuments: UIDevice.current.palera1n.palerain_option_rootless ? \"rootless\" : \"rootful\"\n\t\t\t\t\t\t\t), \n\t\t\t\t\t\t\tactions: [UIAlertAction(title: \"OK\", style: .cancel)]\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\tcase .failure(let error):\n\t\t\t\t\tself._showError(error.localizedDescription)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tprivate func _notifyUserIfCertainFlags() {\n\t\tvar alertConfig: (title: String, message: String, buttonTitle: String, action: (() -> Void)?)?\n\t\t\n\t\tswitch true {\n\t\tcase UIDevice.current.palera1n.palerain_option_force_revert:\n\t\t\talertConfig = (\n\t\t\t\ttitle: .localized(\"You've removed the jailbreak!\"),\n\t\t\t\tmessage: .localized(\"Is Force Reverted\", arguments: UIDevice.current.marketingModel),\n\t\t\t\tbuttonTitle: .localized(\"Reboot\"),\n\t\t\t\taction: {\n\t\t\t\t\tself.blackOutController {\n\t\t\t\t\t\tLREnvironment.shared.reboot()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\tcase UIDevice.current.palera1n.palerain_option_failure || UIDevice.current.palera1n.palerain_option_safemode:\n\t\t\talertConfig = (\n\t\t\t\ttitle: \"\",\n\t\t\t\tmessage: .localized(\"You've entered safemode by either manually or palera1n saved you from it.\"),\n\t\t\t\tbuttonTitle: .localized(\"Exit\"),\n\t\t\t\taction: {\n\t\t\t\t\tself.blackOutController {\n\t\t\t\t\t\tLREnvironment.jbd.exitFailureSafeMode()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\tcase LREnvironment.shared.isBootstrapped == .partial_bootstrapped_rootless:\n\t\t\talertConfig = (\n\t\t\t\ttitle: \"\",\n\t\t\t\tmessage: .localized(\"Detected partial rootless installation. Please re-jailbreak and try again.\"),\n\t\t\t\tbuttonTitle: .localized(\"Reboot\"),\n\t\t\t\taction: {\n\t\t\t\t\tself.blackOutController {\n\t\t\t\t\t\tLREnvironment.shared.reboot()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\tdefault:\n\t\t\treturn\n\t\t}\n\t\t\n\t\tif let config = alertConfig {\n\t\t\tlet action = UIAlertAction(title: config.buttonTitle, style: .default) { _ in\n\t\t\t\tconfig.action?()\n\t\t\t}\n\t\t\t\n\t\t\tUIAlertController.showAlertWithCancel(\n\t\t\t\tself,\n\t\t\t\ttitle: config.title,\n\t\t\t\tmessage: config.message,\n\t\t\t\tactions: [action]\n\t\t\t)\n\t\t}\n\t}\n\t\n\tprivate func _showError(_ message: String) {\n\t\tlet retry = UIAlertAction(title: .localized(\"Retry\"), style: .default) { [weak self] _ in\n\t\t\tself?._load()\n\t\t}\n\t\t\n\t\tUIAlertController.showAlertWithCancel(\n\t\t\tself,\n\t\t\tmessage: message,\n\t\t\tactions: [retry]\n\t\t)\n\t}\n}\n\n// MARK: - Class extension: tableview\nextension LRBootstrapViewController {\n\toverride func numberOfSections(in tableView: UITableView) -> Int {\n\t\t1\n\t}\n\t\n\toverride func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n\t\t_data?.content()?.managers.count ?? 0\n\t}\n\t\n\toverride func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n\t\tlet cell = tableView.dequeueReusableCell(withIdentifier: \"Cell\")!\n\t\tlet manager = _data?.content()?.managers[indexPath.row]\n\t\t\n\t\tcell.accessoryType = .disclosureIndicator\n\t\t\n\t\tvar content = cell.defaultContentConfiguration()\n\t\tcontent.text = manager?.name\n\t\tcontent = content.applyingSectionImage(UIImage(named: \"unknown\")!)\n\t\tcell.contentConfiguration = content\n\t\t\n\t\tmanager?.loadIconImage { image in\n\t\t\tDispatchQueue.main.async {\n\t\t\t\tvar updatedContent = cell.defaultContentConfiguration()\n\t\t\t\tupdatedContent.text = manager?.name\n\t\t\t\tupdatedContent = updatedContent.applyingSectionImage(image)\n\t\t\t\tcell.contentConfiguration = updatedContent\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn cell\n\t}\n\t\n\toverride func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n\t\tlet manager = _data?.content()?.managers[indexPath.row]\n\t\tguard let data = _data, let manager = manager else { return }\n\n\t\t_showManagerPopup(\n\t\t\twith: data,\n\t\t\tusing: manager,\n\t\t\tpopoverUIView: tableView.cellForRow(at: indexPath)!\n\t\t)\n\t\t\n\t\ttableView.deselectRow(at: indexPath, animated: true)\n\t}\n\t\n\toverride func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {\n\t\t_data?.footer_notice ?? nil\n\t}\n}\n\n// MARK: - Class extension: actions\nextension LRBootstrapViewController {\n\tprivate func _showManagerPopup(\n\t\twith config: LRConfig,\n\t\tusing manager: LRManager,\n\t\tpopoverUIView: UIView? = nil\n\t) {\n\t\tlet managerInstalled = FileManager.default.fileExists(atPath: manager.filePath.relativePath)\n\t\t\n\t\tlet alertTitle: String? = managerInstalled\n\t\t? .localized(\"%@ is already installed.\", arguments: manager.name)\n\t\t: nil\n\t\t\n\t\tlet installActionTitle: String = managerInstalled\n\t\t? .localized(\"Reinstall %@\", arguments: manager.name)\n\t\t: .localized(\"Install %@\", arguments: manager.name)\n\t\t\n\t\tvar actions: [UIAlertAction] = []\n\t\t\n\t\tif managerInstalled {\n\t\t\tactions.append(UIAlertAction(title: .localized(\"Open %@\", arguments: manager.name), style: .default) { _ in\n\t\t\t\tUIApplication.shared.openApplication(using: manager.filePath.relativePath)\n\t\t\t})\n\t\t}\n\t\t\n\t\tactions.append(UIAlertAction(title: installActionTitle, style: .default) { _ in\n\t\t\tself._showStagedViewController(with: config, using: manager)\n\t\t})\n\t\t\n\t\tUIAlertController.showAlertWithCancel(\n\t\t\tself,\n\t\t\tpopoverUIView,\n\t\t\ttitle: alertTitle,\n\t\t\tmessage: nil,\n\t\t\tstyle: .actionSheet,\n\t\t\tactions: actions\n\t\t)\n\t}\n\t\n\tprivate func _showStagedViewController(with config: LRConfig, using manager: LRManager) {\n\t\tlet controller = LRStagedViewController(\n\t\t\ttitle: \"Installing\",\n\t\t\tconfig: config,\n\t\t\tmanager: manager,\n\t\t\tshouldBootstrap: LREnvironment.shared.isBootstrapped == .not_bootstrapped\n\t\t)\n\t\t\n\t\tlet nav = UINavigationController(rootViewController: controller)\n\t\tnav.modalPresentationStyle = .custom\n\t\tnav.transitioningDelegate = self\n\t\tpresent(nav, animated: true)\n\t}\n}\n"
  },
  {
    "path": "Loader/Views/Settings/About/Flags/LRSettingsFlagsViewController.swift",
    "content": "//\n//  LRSettingsFlagsViewController.swift\n//  Loader\n//\n//  Created by samara on 13.03.2025.\n//\n\nimport UIKit\nimport NimbleViewControllers\n\n// MARK: - Class\nclass LRSettingsFlagsViewController: LRBaseStructuredTableViewController {\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\t\ttitle = \"Flags\"\n    }\n\t\n\toverride func setupSections() {\n\t\tsections = [\n\t\t\t(\n\t\t\t\ttitle: \"\",\n\t\t\t\titems: [\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: UIDevice.current.palera1n.flagsList\n\t\t\t\t\t),\n\t\t\t\t]\n\t\t\t),\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "Loader/Views/Settings/About/LRSettingsAboutViewController.swift",
    "content": "//\n//  LRSettingsAboutViewController.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit\nimport NimbleViewControllers\n\n// MARK: - Class\nclass LRSettingsAboutViewController: LRBaseStructuredTableViewController {\n\tlet device = UIDevice.current\n\t\n\toverride func viewDidLoad() {\n\t\tsuper.viewDidLoad()\n\t\ttitle = .localized(\"Device Info\")\n\t}\n\t\n\toverride func setupSections() {\n\t\tsections = [\n\t\t\t(\n\t\t\t\ttitle: \"palera1n\",\n\t\t\t\titems: [\n//\t\t\t\t\tSectionItem(\n//\t\t\t\t\t\ttitle: \"Version\",\n//\t\t\t\t\t\tsubtitle: Bundle.appVersionShort\n//\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: .localized(\"Type\"),\n\t\t\t\t\t\tsubtitle: device.palera1n.palerain_option_rootless ? \"Rootless\" : \"Rootful\"\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"Flags\",\n\t\t\t\t\t\tsubtitle: device.palera1n.flags,\n\t\t\t\t\t\tnavigationDestination: LRSettingsFlagsViewController()\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"Bootstrapped\",\n\t\t\t\t\t\tsubtitle: \"\\(LREnvironment.shared.isBootstrapped.stringValue)\"\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t),\n\t\t\t(\n\t\t\t\ttitle: device.marketingModel,\n\t\t\t\titems: [\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: .localized(\"Version\"),\n\t\t\t\t\t\tsubtitle: device.systemVersion\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"Model\",\n\t\t\t\t\t\tsubtitle: device.marketingModel\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"Architecture\",\n\t\t\t\t\t\tsubtitle: device.architecture\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t),\n\t\t\t(\n\t\t\t\ttitle: \"System\",\n\t\t\t\titems: [\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"CF\",\n\t\t\t\t\t\tsubtitle: device.cfVersion.standard\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"Kernel\",\n\t\t\t\t\t\tsubtitle: device.kernelVersion\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t),\n\t\t\t(\n\t\t\t\ttitle: \"\",\n\t\t\t\titems: [\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"boot-manifest-hash\",\n\t\t\t\t\t\tsubtitle: device.bootmanifestHash ?? \"\"\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"boot-args\",\n\t\t\t\t\t\tsubtitle: device.bootArgs\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t)\n\t\t]\n\t}\n}\n\n"
  },
  {
    "path": "Loader/Views/Settings/Credits/LRSettingsCreditsViewController.swift",
    "content": "//\n//  LRSettingsCreditsViewController.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit\nimport NimbleExtensions\nimport NimbleJSON\nimport NimbleViewControllers\n\n// MARK: - Class extension: model\nextension LRSettingsCreditsViewController {\n\tstruct CreditSection: Decodable {\n\t\tlet name: String\n\t\tlet data: [CreditPerson]\n\t\t\n\t\tstruct CreditPerson: Decodable {\n\t\t\tlet name: String\n\t\t\tlet github: String\n\t\t\tlet intent: String?\n\t\t\tlet desc: String?\n\t\t}\n\t}\n\t\n\tstruct CreditsData: Decodable {\n\t\tlet sections: [CreditSection]\n\t}\n}\n\n// MARK: - Class\nclass LRSettingsCreditsViewController: LRBaseTableViewController {\n\ttypealias CreditsDataHandler = Result<CreditsData, Error>\n\t\n\tprivate let _activityIndicator = UIActivityIndicatorView(style: .medium)\n\tprivate var _data: [CreditSection] = []\n\tprivate let _dataService = FetchService()\n\tprivate let _dataURL = URL(string: \"https://palera.in/credits.json\")!\n\t\n\toverride func viewDidLoad() {\n\t\tsuper.viewDidLoad()\n\t\t_setupNavigation()\n\t\t_load()\n\t}\n\t\n\tprivate func _setupNavigation() {\n\t\ttitle = .localized(\"Credits\")\n\t\t_activityIndicator.hidesWhenStopped = true\n\t\tlet activityBarButtonItem = UIBarButtonItem(customView: _activityIndicator)\n\t\tnavigationItem.rightBarButtonItem = activityBarButtonItem\n\t}\n\t\n\tprivate func _load() {\n\t\t_activityIndicator.startAnimating()\n\t\t\n\t\t_dataService.fetch<CreditsData>(from: _dataURL) { [weak self] (result: CreditsDataHandler) in\n\t\t\tguard let self = self else { return }\n\t\t\t\n\t\t\tDispatchQueue.main.async {\n\t\t\t\tself._activityIndicator.stopAnimating()\n\t\t\t\t\n\t\t\t\tswitch result {\n\t\t\t\tcase .success(let data):\n\t\t\t\t\tself._data = data.sections\n\t\t\t\t\tself.tableView.reloadDataWithTransition(with: .transitionCrossDissolve)\n\t\t\t\tcase .failure(let error):\n\t\t\t\t\tself._showError(error.localizedDescription)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tprivate func _showError(_ message: String) {\n\t\tlet ok = UIAlertAction(title: \"OK\", style: .cancel) { [weak self] _ in\n\t\t\tself?.navigationController?.popViewController(animated: true)\n\t\t}\n\t\t\n\t\tlet retry = UIAlertAction(title: .localized(\"Retry\"), style: .default) { [weak self] _ in\n\t\t\tself?._load()\n\t\t}\n\t\t\n\t\tUIAlertController.showAlert(\n\t\t\tself,\n\t\t\ttitle: \"\",\n\t\t\tmessage: message,\n\t\t\tactions: [ok, retry]\n\t\t)\n\t}\n}\n\n// MARK: - Class extension: tableview\nextension LRSettingsCreditsViewController {\n\toverride func numberOfSections(in tableView: UITableView) -> Int {\n\t\t_data.count\n\t}\n\t\n\toverride func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n\t\t_data[section].data.count\n\t}\n\t\n\toverride func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n\t\t_data[section].name\n\t}\n\t\n\toverride func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n\t\tlet cell = tableView.dequeueReusableCell(withIdentifier: \"Cell\")!\n\t\tlet person = _data[indexPath.section].data[indexPath.row]\n\t\t\n\t\tcell.accessoryType = .disclosureIndicator\n\t\t\n\t\tvar content = cell.defaultContentConfiguration()\n\t\tcontent.text = person.name\n\t\tcontent.secondaryText = \"@\\(person.github)\"\n\t\tcontent.secondaryTextProperties.color = .secondaryLabel\n\t\t\n\t\tif let description = person.desc {\n\t\t\tcontent.secondaryText = cell.detailTextLabel?.text.map {\n\t\t\t\t\"\\($0) • \\(description)\"\n\t\t\t} ?? description\n\t\t}\n\t\t\n\t\tcell.contentConfiguration = content\n\t\treturn cell\n\t}\n\t\n\toverride func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n\t\tlet person = _data[indexPath.section].data[indexPath.row]\n\t\tself._openProfileURL(for: person)\n\t\ttableView.deselectRow(at: indexPath, animated: true)\n\t}\n}\n\n// MARK: - Class extension: Open\nextension LRSettingsCreditsViewController {\n\tprivate func _openProfileURL(for person: CreditSection.CreditPerson) {\n\t\tif\n\t\t\tlet intent = person.intent,\n\t\t\tlet intentUrl = URL(string: \"https://twitter.com/intent/follow?screen_name=\\(intent)\"),\n\t\t\tUIApplication.shared.canOpenURL(intentUrl) \n\t\t{\n\t\t\tUIApplication.shared.open(intentUrl)\n\t\t} else if let githubUrl = URL(string: \"https://github.com/\\(person.github)\") {\n\t\t\tUIApplication.shared.open(githubUrl)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Loader/Views/Settings/LRSettingsViewController.swift",
    "content": "//\n//  SettingsViewController.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit\nimport NimbleViewControllers\n\n// MARK: - Class\nclass LRSettingsViewController: LRBaseStructuredTableViewController {\n\toverride func setupSections() {\n\t\tsections = [\n\t\t\t(\n\t\t\t\ttitle: \"\",\n\t\t\t\titems: [\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"UICache\",\n\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\tLREnvironment.shared.uicacheAll()\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"Restart Springboard\",\n\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\tself.blackOutController {\n\t\t\t\t\t\t\t\tLREnvironment.shared.respring()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"Restart Userspace\",\n\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\tself.blackOutController {\n\t\t\t\t\t\t\t\tLREnvironment.shared.rebootUserspace()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"Enter Recovery\",\n\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\tself.blackOutController {\n\t\t\t\t\t\t\t\tLREnvironment.shared.enterRecovery()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: \"Reload Environment\",\n\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\tLREnvironment.jbd.reloadLaunchdJailbreakEnvironment()\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t),\n\t\t\t(\n\t\t\t\ttitle: .localized(\"Other\"),\n\t\t\t\titems: [\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: .localized(\"Device Info\"),\n\t\t\t\t\t\tnavigationDestination: LRSettingsAboutViewController()\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: .localized(\"Credits\"),\n\t\t\t\t\t\tnavigationDestination: LRSettingsCreditsViewController()\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t)\n\t\t]\n\t\t\n\t\taddUserDefaultsStringSection(\n\t\t\tkey: \"defaultInstallPath\",\n\t\t\tdefaultValue: LREnvironment.default_config_url(),\n\t\t\tsectionTitle: .localized(\"Download\"),\n\t\t\tchangeTitle: .localized(\"Change Download URL\"),\n\t\t\tkeyboardType: .URL\n\t\t)\n\t\t\n\t\tif LREnvironment.shared.isBootstrapped == .bootstrapped {\n\t\t\tsections.append((\n\t\t\t\ttitle: .localized(\"Reset\"),\n\t\t\t\titems: [\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: .localized(\"Change Sudo Password\"),\n\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\tUIAlertController.showAlertForPasswordWithAuthentication(\n\t\t\t\t\t\t\t\tself,\n\t\t\t\t\t\t\t\t.localized(\"Authentication is required to change your sudo password.\"),\n\t\t\t\t\t\t\t\talertTitle: .localized(\"Set Password\"),\n\t\t\t\t\t\t\t\talertMessage: .localized(\"Password Explanation\")\n\t\t\t\t\t\t\t) { password in\n\t\t\t\t\t\t\t\tLREnvironment.shared.resetSudoPassword(with: password)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\tSectionItem(\n\t\t\t\t\t\ttitle: UIDevice.current.palera1n.shouldCleanFakefs\n\t\t\t\t\t\t? .localized(\"Clean FakeFS\")\n\t\t\t\t\t\t: .localized(\"Restore System\"),\n\t\t\t\t\t\ttint: .systemRed,\n\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\tlet action = UIAlertAction(\n\t\t\t\t\t\t\t\ttitle: UIDevice.current.palera1n.shouldCleanFakefs\n\t\t\t\t\t\t\t\t? .localized(\"Clean FakeFS\")\n\t\t\t\t\t\t\t\t: .localized(\"Restore System\"),\n\t\t\t\t\t\t\t\tstyle: .destructive\n\t\t\t\t\t\t\t) { _ in\n\t\t\t\t\t\t\t\tself.blackOutController {\n\t\t\t\t\t\t\t\t\tLREnvironment.shared.removeBootstrap()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlet style: UIAlertController.Style = UIDevice.current.userInterfaceIdiom == .pad\n\t\t\t\t\t\t\t? .alert\n\t\t\t\t\t\t\t: .actionSheet\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tUIAlertController.showAlertWithCancel(\n\t\t\t\t\t\t\t\tself,\n\t\t\t\t\t\t\t\ttitle: UIDevice.current.palera1n.shouldCleanFakefs\n\t\t\t\t\t\t\t\t? .localized(\"Clean FakeFS Explanation\", arguments: UIDevice.current.marketingModel)\n\t\t\t\t\t\t\t\t: .localized(\"Restore System Explanation\", arguments: UIDevice.current.marketingModel),\n\t\t\t\t\t\t\t\tmessage: nil,\n\t\t\t\t\t\t\t\tstyle: style,\n\t\t\t\t\t\t\t\tactions: [action]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t))\n\t\t}\n\t\t\n\t}\n}\nextension LRBaseStructuredTableViewController {\n\t@discardableResult\n\tfunc addUserDefaultsStringSection(\n\t\tkey: String,\n\t\tdefaultValue: String,\n\t\tsectionTitle: String,\n\t\tchangeTitle: String = \"\",\n\t\tsectionIndex: Int? = nil,\n\t\tkeyboardType: UIKeyboardType = .default\n\t) -> String {\n\t\tlet userDefaults = UserDefaults.standard\n\t\tlet currentValue = userDefaults.string(forKey: key) ?? defaultValue\n\t\tlet isModified = currentValue != defaultValue\n\t\t\n\t\tvar sectionItems: [SectionItem] = []\n\t\t\n\t\tif isModified {\n\t\t\tsectionItems = [\n\t\t\t\tSectionItem(\n\t\t\t\t\ttitle: currentValue,\n\t\t\t\t\ttint: .secondaryLabel,\n\t\t\t\t\taction: { [weak self] in\n\t\t\t\t\t\tUIAlertController.showAlertForStringChange(\n\t\t\t\t\t\t\tself!,\n\t\t\t\t\t\t\ttitle: changeTitle,\n\t\t\t\t\t\t\tcurrentValue: currentValue,\n\t\t\t\t\t\t\tkeyboardType: keyboardType,\n\t\t\t\t\t\t\tcompletion: { newValue in\n\t\t\t\t\t\t\t\tuserDefaults.set(newValue, forKey: key)\n\t\t\t\t\t\t\t\tself?.setupSections()\n\t\t\t\t\t\t\t\tself?.tableView.reloadData()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tSectionItem(\n\t\t\t\t\ttitle: .localized(\"Reset Configuration\"),\n\t\t\t\t\ttint: .systemRed,\n\t\t\t\t\taction: { [weak self] in\n\t\t\t\t\t\tuserDefaults.removeObject(forKey: key)\n\t\t\t\t\t\tself?.setupSections()\n\t\t\t\t\t\tself?.tableView.reloadData()\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t]\n\t\t} else {\n\t\t\tsectionItems = [\n\t\t\t\tSectionItem(\n\t\t\t\t\ttitle: changeTitle,\n\t\t\t\t\ttint: .tintColor,\n\t\t\t\t\taction: { [weak self] in\n\t\t\t\t\t\tUIAlertController.showAlertForStringChange(\n\t\t\t\t\t\t\tself!, title: changeTitle,\n\t\t\t\t\t\t\tcurrentValue: currentValue,\n\t\t\t\t\t\t\tkeyboardType: keyboardType,\n\t\t\t\t\t\t\tcompletion: { newValue in\n\t\t\t\t\t\t\t\tuserDefaults.set(newValue, forKey: key)\n\t\t\t\t\t\t\t\tself?.setupSections()\n\t\t\t\t\t\t\t\tself?.tableView.reloadData()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t]\n\t\t}\n\t\t\n\t\tlet newSection = (title: sectionTitle, items: sectionItems)\n\t\t\n\t\tif \n\t\t\tlet index = sectionIndex,\n\t\t\tsections.count > index\n\t\t{\n\t\t\tsections.insert(newSection, at: index)\n\t\t} else {\n\t\t\tsections.append(newSection)\n\t\t}\n\t\t\n\t\treturn currentValue\n\t}\n}\n"
  },
  {
    "path": "Loader.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 60;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t331D48B92DA858B1006A37B2 /* UITableView+image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331D48B82DA858B1006A37B2 /* UITableView+image.swift */; };\n\t\t3331318D2D8EAB50001B35CE /* LRBootstrapViewController+transition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3331318C2D8EAB50001B35CE /* LRBootstrapViewController+transition.swift */; };\n\t\t336FA5982D8C381500E28B8F /* NimbleAnimations in Frameworks */ = {isa = PBXBuildFile; productRef = 336FA5972D8C381500E28B8F /* NimbleAnimations */; };\n\t\t336FA59A2D8C381500E28B8F /* NimbleExtensions in Frameworks */ = {isa = PBXBuildFile; productRef = 336FA5992D8C381500E28B8F /* NimbleExtensions */; };\n\t\t336FA59C2D8C381500E28B8F /* NimbleJSON in Frameworks */ = {isa = PBXBuildFile; productRef = 336FA59B2D8C381500E28B8F /* NimbleJSON */; };\n\t\t339714652D94E1EB0060E08F /* NimbleViewControllers in Frameworks */ = {isa = PBXBuildFile; productRef = 339714642D94E1EB0060E08F /* NimbleViewControllers */; };\n\t\t33DB517E2D7D9E800060EAC4 /* libMobileGestalt.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 33DB517D2D7D9E750060EAC4 /* libMobileGestalt.tbd */; };\n\t\t33DB51892D7DA06B0060EAC4 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33DB51882D7DA06B0060EAC4 /* IOKit.framework */; platformFilter = ios; };\n\t\t33DB518B2D7DA0740060EAC4 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33DB518A2D7DA0740060EAC4 /* CoreServices.framework */; };\n\t\t57A520D52E8574870090644E /* nvram.c in Sources */ = {isa = PBXBuildFile; fileRef = 57A520D42E8574830090644E /* nvram.c */; };\n\t\tAF966AAA2D8C6840001BA405 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AF966A6F2D8C6840001BA405 /* Assets.xcassets */; };\n\t\tAF966AAB2D8C6840001BA405 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = AF966A702D8C6840001BA405 /* Localizable.xcstrings */; };\n\t\tAF966AAD2D8C6840001BA405 /* IOKit.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = AF966A762D8C6840001BA405 /* IOKit.tbd */; platformFilters = (tvos, ); };\n\t\tAF966AAE2D8C6840001BA405 /* UIApplication+open.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A672D8C6840001BA405 /* UIApplication+open.swift */; };\n\t\tAF966AAF2D8C6840001BA405 /* UIDevice+Info.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A692D8C6840001BA405 /* UIDevice+Info.swift */; };\n\t\tAF966AB02D8C6840001BA405 /* UIDevice+Jailbreak.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A6A2D8C6840001BA405 /* UIDevice+Jailbreak.swift */; };\n\t\tAF966AB12D8C6840001BA405 /* String+prefix.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A6C2D8C6840001BA405 /* String+prefix.swift */; };\n\t\tAF966AB22D8C6840001BA405 /* UIAlertController+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A6D2D8C6840001BA405 /* UIAlertController+Alerts.swift */; };\n\t\tAF966AB32D8C6840001BA405 /* LRBootstrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A7A2D8C6840001BA405 /* LRBootstrapper.swift */; };\n\t\tAF966AB42D8C6840001BA405 /* LRBootstrapper+download.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A7B2D8C6840001BA405 /* LRBootstrapper+download.swift */; };\n\t\tAF966AB52D8C6840001BA405 /* LRBootstrapper+status.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A7C2D8C6840001BA405 /* LRBootstrapper+status.swift */; };\n\t\tAF966AB62D8C6840001BA405 /* LRConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A7E2D8C6840001BA405 /* LRConfig.swift */; };\n\t\tAF966AB72D8C6840001BA405 /* LREnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A812D8C6840001BA405 /* LREnvironment.swift */; };\n\t\tAF966AB82D8C6840001BA405 /* LREnvironment+prefixes.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A822D8C6840001BA405 /* LREnvironment+prefixes.swift */; };\n\t\tAF966AB92D8C6840001BA405 /* LREnvironment+reset.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A832D8C6840001BA405 /* LREnvironment+reset.swift */; };\n\t\tAF966ABA2D8C6840001BA405 /* LREnvironment+spawn.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A842D8C6840001BA405 /* LREnvironment+spawn.swift */; };\n\t\tAF966ABB2D8C6840001BA405 /* jailbreakd.c in Sources */ = {isa = PBXBuildFile; fileRef = AF966A872D8C6840001BA405 /* jailbreakd.c */; };\n\t\tAF966ABC2D8C6840001BA405 /* JailbreakD.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A882D8C6840001BA405 /* JailbreakD.swift */; };\n\t\tAF966ABF2D8C6840001BA405 /* LRStagedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A8F2D8C6840001BA405 /* LRStagedViewController.swift */; };\n\t\tAF966AC02D8C6840001BA405 /* LRStagedViewController+UpdateItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A902D8C6840001BA405 /* LRStagedViewController+UpdateItem.swift */; };\n\t\tAF966AC62D8C6840001BA405 /* LRBootstrapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A982D8C6840001BA405 /* LRBootstrapViewController.swift */; };\n\t\tAF966AC72D8C6840001BA405 /* LRSettingsFlagsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A9A2D8C6840001BA405 /* LRSettingsFlagsViewController.swift */; };\n\t\tAF966AC82D8C6840001BA405 /* LRSettingsAboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A9C2D8C6840001BA405 /* LRSettingsAboutViewController.swift */; };\n\t\tAF966ACA2D8C6840001BA405 /* LRSettingsCreditsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966AA02D8C6840001BA405 /* LRSettingsCreditsViewController.swift */; };\n\t\tAF966ACB2D8C6840001BA405 /* LRSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966AA22D8C6840001BA405 /* LRSettingsViewController.swift */; };\n\t\tAF966ACC2D8C6840001BA405 /* LRTabbarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966AA42D8C6840001BA405 /* LRTabbarController.swift */; };\n\t\tAF966ACD2D8C6840001BA405 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966AA62D8C6840001BA405 /* AppDelegate.swift */; };\n\t\tAF966ACE2D8C6840001BA405 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966AA82D8C6840001BA405 /* SceneDelegate.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t331D48B82DA858B1006A37B2 /* UITableView+image.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UITableView+image.swift\"; sourceTree = \"<group>\"; };\n\t\t3331318C2D8EAB50001B35CE /* LRBootstrapViewController+transition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"LRBootstrapViewController+transition.swift\"; sourceTree = \"<group>\"; };\n\t\t336FA59D2D8C385900E28B8F /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.2.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; };\n\t\t3388438F2D7D8A26002D07FD /* Loader.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Loader.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t33DB517D2D7D9E750060EAC4 /* libMobileGestalt.tbd */ = {isa = PBXFileReference; lastKnownFileType = \"sourcecode.text-based-dylib-definition\"; name = libMobileGestalt.tbd; path = usr/lib/libMobileGestalt.tbd; sourceTree = SDKROOT; };\n\t\t33DB51882D7DA06B0060EAC4 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };\n\t\t33DB518A2D7DA0740060EAC4 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; };\n\t\t33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Loader.xcconfig; sourceTree = \"<group>\"; };\n\t\t33E658082D93C58400BEDFA5 /* Macros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Macros.h; sourceTree = \"<group>\"; };\n\t\t57A520D42E8574830090644E /* nvram.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = nvram.c; sourceTree = \"<group>\"; };\n\t\t57A520D62E85748A0090644E /* nvram.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = nvram.h; sourceTree = \"<group>\"; };\n\t\tAF966A672D8C6840001BA405 /* UIApplication+open.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UIApplication+open.swift\"; sourceTree = \"<group>\"; };\n\t\tAF966A692D8C6840001BA405 /* UIDevice+Info.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UIDevice+Info.swift\"; sourceTree = \"<group>\"; };\n\t\tAF966A6A2D8C6840001BA405 /* UIDevice+Jailbreak.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UIDevice+Jailbreak.swift\"; sourceTree = \"<group>\"; };\n\t\tAF966A6C2D8C6840001BA405 /* String+prefix.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"String+prefix.swift\"; sourceTree = \"<group>\"; };\n\t\tAF966A6D2D8C6840001BA405 /* UIAlertController+Alerts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UIAlertController+Alerts.swift\"; sourceTree = \"<group>\"; };\n\t\tAF966A6F2D8C6840001BA405 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tAF966A702D8C6840001BA405 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = \"<group>\"; };\n\t\tAF966A722D8C6840001BA405 /* LSApplicationWorkspace.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LSApplicationWorkspace.h; sourceTree = \"<group>\"; };\n\t\tAF966A732D8C6840001BA405 /* MobileGestalt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MobileGestalt.h; sourceTree = \"<group>\"; };\n\t\tAF966A742D8C6840001BA405 /* posixspawn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = posixspawn.h; sourceTree = \"<group>\"; };\n\t\tAF966A762D8C6840001BA405 /* IOKit.tbd */ = {isa = PBXFileReference; lastKnownFileType = \"sourcecode.text-based-dylib-definition\"; path = IOKit.tbd; sourceTree = \"<group>\"; };\n\t\tAF966A772D8C6840001BA405 /* loader.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = loader.entitlements; sourceTree = \"<group>\"; };\n\t\tAF966A782D8C6840001BA405 /* Loader-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Loader-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\tAF966A7A2D8C6840001BA405 /* LRBootstrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRBootstrapper.swift; sourceTree = \"<group>\"; };\n\t\tAF966A7B2D8C6840001BA405 /* LRBootstrapper+download.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"LRBootstrapper+download.swift\"; sourceTree = \"<group>\"; };\n\t\tAF966A7C2D8C6840001BA405 /* LRBootstrapper+status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"LRBootstrapper+status.swift\"; sourceTree = \"<group>\"; };\n\t\tAF966A7E2D8C6840001BA405 /* LRConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRConfig.swift; sourceTree = \"<group>\"; };\n\t\tAF966A812D8C6840001BA405 /* LREnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LREnvironment.swift; sourceTree = \"<group>\"; };\n\t\tAF966A822D8C6840001BA405 /* LREnvironment+prefixes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"LREnvironment+prefixes.swift\"; sourceTree = \"<group>\"; };\n\t\tAF966A832D8C6840001BA405 /* LREnvironment+reset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"LREnvironment+reset.swift\"; sourceTree = \"<group>\"; };\n\t\tAF966A842D8C6840001BA405 /* LREnvironment+spawn.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"LREnvironment+spawn.swift\"; sourceTree = \"<group>\"; };\n\t\tAF966A862D8C6840001BA405 /* jailbreakd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jailbreakd.h; sourceTree = \"<group>\"; };\n\t\tAF966A872D8C6840001BA405 /* jailbreakd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jailbreakd.c; sourceTree = \"<group>\"; };\n\t\tAF966A882D8C6840001BA405 /* JailbreakD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JailbreakD.swift; sourceTree = \"<group>\"; };\n\t\tAF966A8F2D8C6840001BA405 /* LRStagedViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRStagedViewController.swift; sourceTree = \"<group>\"; };\n\t\tAF966A902D8C6840001BA405 /* LRStagedViewController+UpdateItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"LRStagedViewController+UpdateItem.swift\"; sourceTree = \"<group>\"; };\n\t\tAF966A982D8C6840001BA405 /* LRBootstrapViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRBootstrapViewController.swift; sourceTree = \"<group>\"; };\n\t\tAF966A9A2D8C6840001BA405 /* LRSettingsFlagsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRSettingsFlagsViewController.swift; sourceTree = \"<group>\"; };\n\t\tAF966A9C2D8C6840001BA405 /* LRSettingsAboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRSettingsAboutViewController.swift; sourceTree = \"<group>\"; };\n\t\tAF966AA02D8C6840001BA405 /* LRSettingsCreditsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRSettingsCreditsViewController.swift; sourceTree = \"<group>\"; };\n\t\tAF966AA22D8C6840001BA405 /* LRSettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRSettingsViewController.swift; sourceTree = \"<group>\"; };\n\t\tAF966AA42D8C6840001BA405 /* LRTabbarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRTabbarController.swift; sourceTree = \"<group>\"; };\n\t\tAF966AA62D8C6840001BA405 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tAF966AA72D8C6840001BA405 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tAF966AA82D8C6840001BA405 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t3388438C2D7D8A26002D07FD /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t33DB517E2D7D9E800060EAC4 /* libMobileGestalt.tbd in Frameworks */,\n\t\t\t\t33DB518B2D7DA0740060EAC4 /* CoreServices.framework in Frameworks */,\n\t\t\t\t336FA5982D8C381500E28B8F /* NimbleAnimations in Frameworks */,\n\t\t\t\t336FA59C2D8C381500E28B8F /* NimbleJSON in Frameworks */,\n\t\t\t\t33DB51892D7DA06B0060EAC4 /* IOKit.framework in Frameworks */,\n\t\t\t\t336FA59A2D8C381500E28B8F /* NimbleExtensions in Frameworks */,\n\t\t\t\t339714652D94E1EB0060E08F /* NimbleViewControllers in Frameworks */,\n\t\t\t\tAF966AAD2D8C6840001BA405 /* IOKit.tbd 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\t338843862D7D8A26002D07FD = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966AA92D8C6840001BA405 /* Loader */,\n\t\t\t\t33DB518C2D7DA15D0060EAC4 /* Configuration */,\n\t\t\t\t33DB517C2D7D9E740060EAC4 /* Frameworks */,\n\t\t\t\t338843902D7D8A26002D07FD /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t338843902D7D8A26002D07FD /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3388438F2D7D8A26002D07FD /* Loader.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t33DB517C2D7D9E740060EAC4 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t336FA59D2D8C385900E28B8F /* CoreFoundation.framework */,\n\t\t\t\t33DB518A2D7DA0740060EAC4 /* CoreServices.framework */,\n\t\t\t\t33DB51882D7DA06B0060EAC4 /* IOKit.framework */,\n\t\t\t\t33DB517D2D7D9E750060EAC4 /* libMobileGestalt.tbd */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t33DB518C2D7DA15D0060EAC4 /* Configuration */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */,\n\t\t\t);\n\t\t\tpath = Configuration;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t57A520D32E8574730090644E /* Nvram */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t57A520D62E85748A0090644E /* nvram.h */,\n\t\t\t\t57A520D42E8574830090644E /* nvram.c */,\n\t\t\t);\n\t\t\tpath = Nvram;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A682D8C6840001BA405 /* UIApplication */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A672D8C6840001BA405 /* UIApplication+open.swift */,\n\t\t\t);\n\t\t\tpath = UIApplication;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A6B2D8C6840001BA405 /* UIDevice */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A692D8C6840001BA405 /* UIDevice+Info.swift */,\n\t\t\t\tAF966A6A2D8C6840001BA405 /* UIDevice+Jailbreak.swift */,\n\t\t\t);\n\t\t\tpath = UIDevice;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A6E2D8C6840001BA405 /* Extensions */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t331D48B82DA858B1006A37B2 /* UITableView+image.swift */,\n\t\t\t\tAF966A682D8C6840001BA405 /* UIApplication */,\n\t\t\t\tAF966A6B2D8C6840001BA405 /* UIDevice */,\n\t\t\t\tAF966A6C2D8C6840001BA405 /* String+prefix.swift */,\n\t\t\t\tAF966A6D2D8C6840001BA405 /* UIAlertController+Alerts.swift */,\n\t\t\t);\n\t\t\tpath = Extensions;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A712D8C6840001BA405 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A6F2D8C6840001BA405 /* Assets.xcassets */,\n\t\t\t\tAF966A702D8C6840001BA405 /* Localizable.xcstrings */,\n\t\t\t\tAF966AA72D8C6840001BA405 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A752D8C6840001BA405 /* Headers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t33E658082D93C58400BEDFA5 /* Macros.h */,\n\t\t\t\tAF966A722D8C6840001BA405 /* LSApplicationWorkspace.h */,\n\t\t\t\tAF966A732D8C6840001BA405 /* MobileGestalt.h */,\n\t\t\t\tAF966A742D8C6840001BA405 /* posixspawn.h */,\n\t\t\t);\n\t\t\tpath = Headers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A792D8C6840001BA405 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A752D8C6840001BA405 /* Headers */,\n\t\t\t\tAF966A762D8C6840001BA405 /* IOKit.tbd */,\n\t\t\t\tAF966A772D8C6840001BA405 /* loader.entitlements */,\n\t\t\t\tAF966A782D8C6840001BA405 /* Loader-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A7D2D8C6840001BA405 /* Bootstrap */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A7A2D8C6840001BA405 /* LRBootstrapper.swift */,\n\t\t\t\tAF966A7B2D8C6840001BA405 /* LRBootstrapper+download.swift */,\n\t\t\t\tAF966A7C2D8C6840001BA405 /* LRBootstrapper+status.swift */,\n\t\t\t);\n\t\t\tpath = Bootstrap;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A7F2D8C6840001BA405 /* Models */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A7E2D8C6840001BA405 /* LRConfig.swift */,\n\t\t\t);\n\t\t\tpath = Models;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A802D8C6840001BA405 /* Config */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A7F2D8C6840001BA405 /* Models */,\n\t\t\t);\n\t\t\tpath = Config;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A852D8C6840001BA405 /* Environment */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A812D8C6840001BA405 /* LREnvironment.swift */,\n\t\t\t\tAF966A822D8C6840001BA405 /* LREnvironment+prefixes.swift */,\n\t\t\t\tAF966A832D8C6840001BA405 /* LREnvironment+reset.swift */,\n\t\t\t\tAF966A842D8C6840001BA405 /* LREnvironment+spawn.swift */,\n\t\t\t);\n\t\t\tpath = Environment;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A892D8C6840001BA405 /* XPC */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A862D8C6840001BA405 /* jailbreakd.h */,\n\t\t\t\tAF966A872D8C6840001BA405 /* jailbreakd.c */,\n\t\t\t\tAF966A882D8C6840001BA405 /* JailbreakD.swift */,\n\t\t\t);\n\t\t\tpath = XPC;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A8A2D8C6840001BA405 /* Utilities */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A7D2D8C6840001BA405 /* Bootstrap */,\n\t\t\t\tAF966A802D8C6840001BA405 /* Config */,\n\t\t\t\tAF966A852D8C6840001BA405 /* Environment */,\n\t\t\t\tAF966A892D8C6840001BA405 /* XPC */,\n\t\t\t\t57A520D32E8574730090644E /* Nvram */,\n\t\t\t);\n\t\t\tpath = Utilities;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A932D8C6840001BA405 /* Bootstrap */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A8F2D8C6840001BA405 /* LRStagedViewController.swift */,\n\t\t\t\tAF966A902D8C6840001BA405 /* LRStagedViewController+UpdateItem.swift */,\n\t\t\t);\n\t\t\tpath = Bootstrap;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A992D8C6840001BA405 /* Selection */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A982D8C6840001BA405 /* LRBootstrapViewController.swift */,\n\t\t\t\t3331318C2D8EAB50001B35CE /* LRBootstrapViewController+transition.swift */,\n\t\t\t);\n\t\t\tpath = Selection;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A9B2D8C6840001BA405 /* Flags */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A9A2D8C6840001BA405 /* LRSettingsFlagsViewController.swift */,\n\t\t\t);\n\t\t\tpath = Flags;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966A9D2D8C6840001BA405 /* About */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A9B2D8C6840001BA405 /* Flags */,\n\t\t\t\tAF966A9C2D8C6840001BA405 /* LRSettingsAboutViewController.swift */,\n\t\t\t);\n\t\t\tpath = About;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966AA12D8C6840001BA405 /* Credits */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966AA02D8C6840001BA405 /* LRSettingsCreditsViewController.swift */,\n\t\t\t);\n\t\t\tpath = Credits;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966AA32D8C6840001BA405 /* Settings */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A9D2D8C6840001BA405 /* About */,\n\t\t\t\tAF966AA12D8C6840001BA405 /* Credits */,\n\t\t\t\tAF966AA22D8C6840001BA405 /* LRSettingsViewController.swift */,\n\t\t\t);\n\t\t\tpath = Settings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966AA52D8C6840001BA405 /* Views */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A932D8C6840001BA405 /* Bootstrap */,\n\t\t\t\tAF966A992D8C6840001BA405 /* Selection */,\n\t\t\t\tAF966AA32D8C6840001BA405 /* Settings */,\n\t\t\t\tAF966AA42D8C6840001BA405 /* LRTabbarController.swift */,\n\t\t\t);\n\t\t\tpath = Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAF966AA92D8C6840001BA405 /* Loader */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAF966A6E2D8C6840001BA405 /* Extensions */,\n\t\t\t\tAF966A712D8C6840001BA405 /* Resources */,\n\t\t\t\tAF966A792D8C6840001BA405 /* Supporting Files */,\n\t\t\t\tAF966A8A2D8C6840001BA405 /* Utilities */,\n\t\t\t\tAF966AA52D8C6840001BA405 /* Views */,\n\t\t\t\tAF966AA62D8C6840001BA405 /* AppDelegate.swift */,\n\t\t\t\tAF966AA82D8C6840001BA405 /* SceneDelegate.swift */,\n\t\t\t);\n\t\t\tpath = Loader;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t3388438E2D7D8A26002D07FD /* Loader */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 338843A22D7D8A28002D07FD /* Build configuration list for PBXNativeTarget \"Loader\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t3388438B2D7D8A26002D07FD /* Sources */,\n\t\t\t\t3388438C2D7D8A26002D07FD /* Frameworks */,\n\t\t\t\t3388438D2D7D8A26002D07FD /* 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 = Loader;\n\t\t\tpackageProductDependencies = (\n\t\t\t\t336FA5972D8C381500E28B8F /* NimbleAnimations */,\n\t\t\t\t336FA5992D8C381500E28B8F /* NimbleExtensions */,\n\t\t\t\t336FA59B2D8C381500E28B8F /* NimbleJSON */,\n\t\t\t\t339714642D94E1EB0060E08F /* NimbleViewControllers */,\n\t\t\t);\n\t\t\tproductName = Loader;\n\t\t\tproductReference = 3388438F2D7D8A26002D07FD /* Loader.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t338843872D7D8A26002D07FD /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = 1;\n\t\t\t\tLastSwiftUpdateCheck = 1620;\n\t\t\t\tLastUpgradeCheck = 1620;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t3388438E2D7D8A26002D07FD = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 16.2;\n\t\t\t\t\t\tLastSwiftMigration = 1620;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 3388438A2D7D8A26002D07FD /* Build configuration list for PBXProject \"Loader\" */;\n\t\t\tcompatibilityVersion = \"Xcode 15.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 = 338843862D7D8A26002D07FD;\n\t\t\tpackageReferences = (\n\t\t\t\t336FA5962D8C381400E28B8F /* XCLocalSwiftPackageReference \"NimbleKit\" */,\n\t\t\t);\n\t\t\tproductRefGroup = 338843902D7D8A26002D07FD /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t3388438E2D7D8A26002D07FD /* Loader */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t3388438D2D7D8A26002D07FD /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tAF966AAA2D8C6840001BA405 /* Assets.xcassets in Resources */,\n\t\t\t\tAF966AAB2D8C6840001BA405 /* Localizable.xcstrings 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\t3388438B2D7D8A26002D07FD /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tAF966AAE2D8C6840001BA405 /* UIApplication+open.swift in Sources */,\n\t\t\t\tAF966AAF2D8C6840001BA405 /* UIDevice+Info.swift in Sources */,\n\t\t\t\tAF966AB02D8C6840001BA405 /* UIDevice+Jailbreak.swift in Sources */,\n\t\t\t\tAF966AB12D8C6840001BA405 /* String+prefix.swift in Sources */,\n\t\t\t\tAF966AB22D8C6840001BA405 /* UIAlertController+Alerts.swift in Sources */,\n\t\t\t\tAF966AB32D8C6840001BA405 /* LRBootstrapper.swift in Sources */,\n\t\t\t\tAF966AB42D8C6840001BA405 /* LRBootstrapper+download.swift in Sources */,\n\t\t\t\tAF966AB52D8C6840001BA405 /* LRBootstrapper+status.swift in Sources */,\n\t\t\t\tAF966AB62D8C6840001BA405 /* LRConfig.swift in Sources */,\n\t\t\t\t331D48B92DA858B1006A37B2 /* UITableView+image.swift in Sources */,\n\t\t\t\tAF966AB72D8C6840001BA405 /* LREnvironment.swift in Sources */,\n\t\t\t\t3331318D2D8EAB50001B35CE /* LRBootstrapViewController+transition.swift in Sources */,\n\t\t\t\tAF966AB82D8C6840001BA405 /* LREnvironment+prefixes.swift in Sources */,\n\t\t\t\tAF966AB92D8C6840001BA405 /* LREnvironment+reset.swift in Sources */,\n\t\t\t\tAF966ABA2D8C6840001BA405 /* LREnvironment+spawn.swift in Sources */,\n\t\t\t\tAF966ABB2D8C6840001BA405 /* jailbreakd.c in Sources */,\n\t\t\t\tAF966ABC2D8C6840001BA405 /* JailbreakD.swift in Sources */,\n\t\t\t\tAF966ABF2D8C6840001BA405 /* LRStagedViewController.swift in Sources */,\n\t\t\t\tAF966AC02D8C6840001BA405 /* LRStagedViewController+UpdateItem.swift in Sources */,\n\t\t\t\tAF966AC62D8C6840001BA405 /* LRBootstrapViewController.swift in Sources */,\n\t\t\t\t57A520D52E8574870090644E /* nvram.c in Sources */,\n\t\t\t\tAF966AC72D8C6840001BA405 /* LRSettingsFlagsViewController.swift in Sources */,\n\t\t\t\tAF966AC82D8C6840001BA405 /* LRSettingsAboutViewController.swift in Sources */,\n\t\t\t\tAF966ACA2D8C6840001BA405 /* LRSettingsCreditsViewController.swift in Sources */,\n\t\t\t\tAF966ACB2D8C6840001BA405 /* LRSettingsViewController.swift in Sources */,\n\t\t\t\tAF966ACC2D8C6840001BA405 /* LRTabbarController.swift in Sources */,\n\t\t\t\tAF966ACD2D8C6840001BA405 /* AppDelegate.swift in Sources */,\n\t\t\t\tAF966ACE2D8C6840001BA405 /* SceneDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t338843A32D7D8A28002D07FD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\t\"ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletv*]\" = \"AppIcon - tvOS\";\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Loader/Supporting Files/loader.entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEAD_CODE_STRIPPING = NO;\n\t\t\t\tDEPLOYMENT_POSTPROCESSING = NO;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = Loader/Resources/Info.plist;\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = palera1n;\n\t\t\t\tINFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;\n\t\t\t\tINFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations = \"UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = \"UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Loader/Supporting\\\\\\\\\\\\ Files\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Loader/Supporting\\\\\\\\\\\\ Files\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Loader/Supporting\\\\\\\\\\\\ Files\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Loader/Supporting\\\\\\\\\\\\ Files\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Loader/Supporting\\\\\\\\\\\\ Files\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 3.1;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = in.palera.loader;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSTRIP_INSTALLED_PRODUCT = NO;\n\t\t\t\tSUPPORTED_PLATFORMS = \"appletvos appletvsimulator iphoneos iphonesimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Loader/Supporting Files/Loader-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 15.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t338843A42D7D8A28002D07FD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\t\"ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletv*]\" = \"AppIcon - tvOS\";\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Loader/Supporting Files/loader.entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEPLOYMENT_POSTPROCESSING = YES;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = Loader/Resources/Info.plist;\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = palera1n;\n\t\t\t\tINFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;\n\t\t\t\tINFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations = \"UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = \"UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Loader/Supporting\\\\\\\\\\\\ Files\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Loader/Supporting\\\\\\\\\\\\ Files\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Loader/Supporting\\\\\\\\\\\\ Files\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Loader/Supporting\\\\\\\\\\\\ Files\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Loader/Supporting\\\\\\\\\\\\ Files\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 3.1;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = in.palera.loader;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSTRIPFLAGS = \"-rSTx\";\n\t\t\t\tSUPPORTED_PLATFORMS = \"appletvos appletvsimulator iphoneos iphonesimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Loader/Supporting Files/Loader-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 15.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t338843A52D7D8A28002D07FD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\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++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = 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_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_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_IMPLICIT_RETAIN_SELF = 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\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\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\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu17;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 18.2;\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"DEBUG $(inherited)\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t338843A62D7D8A28002D07FD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\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++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = 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_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_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_IMPLICIT_RETAIN_SELF = 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\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\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\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu17;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 18.2;\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t3388438A2D7D8A26002D07FD /* Build configuration list for PBXProject \"Loader\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t338843A52D7D8A28002D07FD /* Debug */,\n\t\t\t\t338843A62D7D8A28002D07FD /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t338843A22D7D8A28002D07FD /* Build configuration list for PBXNativeTarget \"Loader\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t338843A32D7D8A28002D07FD /* Debug */,\n\t\t\t\t338843A42D7D8A28002D07FD /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\n/* Begin XCLocalSwiftPackageReference section */\n\t\t336FA5962D8C381400E28B8F /* XCLocalSwiftPackageReference \"NimbleKit\" */ = {\n\t\t\tisa = XCLocalSwiftPackageReference;\n\t\t\trelativePath = NimbleKit;\n\t\t};\n/* End XCLocalSwiftPackageReference section */\n\n/* Begin XCSwiftPackageProductDependency section */\n\t\t336FA5972D8C381500E28B8F /* NimbleAnimations */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = NimbleAnimations;\n\t\t};\n\t\t336FA5992D8C381500E28B8F /* NimbleExtensions */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = NimbleExtensions;\n\t\t};\n\t\t336FA59B2D8C381500E28B8F /* NimbleJSON */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = NimbleJSON;\n\t\t};\n\t\t339714642D94E1EB0060E08F /* NimbleViewControllers */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = NimbleViewControllers;\n\t\t};\n/* End XCSwiftPackageProductDependency section */\n\t};\n\trootObject = 338843872D7D8A26002D07FD /* Project object */;\n}\n"
  },
  {
    "path": "Loader.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Loader.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.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>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Loader.xcodeproj/xcshareddata/xcschemes/Loader.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1620\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\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 = \"3388438E2D7D8A26002D07FD\"\n               BuildableName = \"Loader.app\"\n               BlueprintName = \"Loader\"\n               ReferencedContainer = \"container:Loader.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"3388438E2D7D8A26002D07FD\"\n            BuildableName = \"Loader.app\"\n            BlueprintName = \"Loader\"\n            ReferencedContainer = \"container:Loader.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\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 = \"3388438E2D7D8A26002D07FD\"\n            BuildableName = \"Loader.app\"\n            BlueprintName = \"Loader\"\n            ReferencedContainer = \"container:Loader.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": "Loader.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:.github\">\n   </FileRef>\n   <FileRef\n      location = \"group:.gitignore\">\n   </FileRef>\n   <FileRef\n      location = \"group:README.md\">\n   </FileRef>\n   <FileRef\n      location = \"group:LICENSE\">\n   </FileRef>\n   <FileRef\n      location = \"group:Makefile\">\n   </FileRef>\n   <FileRef\n      location = \"container:Loader.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:NimbleKit\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Loader.xcworkspace/xcshareddata/IDEWorkspaceChecks.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>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Makefile",
    "content": "TARGET_CODESIGN = $(shell which ldid)\n# gmake PLATFORM=appletvos PACKAGE_NAME=palera1nLoaderTV\nPLATFORM ?= iphoneos\nSCHEME ?= Loader\nNAME = Loader\nPACKAGE_NAME ?= palera1nLoader\nRELEASE = Release-$(PLATFORM)\nCONFIGURATION = Release\nCUSTOM_INCLUDE_PATH = apple-include-$(PLATFORM)\n\nMACOSX_SYSROOT = $(shell xcrun -sdk macosx --show-sdk-path)\nTARGET_SYSROOT = $(shell xcrun -sdk $(PLATFORM) --show-sdk-path)\n\nP1_TMP         = $(TMPDIR)/$(SCHEME)\nP1_STAGE_DIR   = $(P1_TMP)/stage\nP1_APP_DIR \t   = $(P1_TMP)/Build/Products/$(RELEASE)/$(SCHEME).app\n\nall: package\n\napple-include:\n\tmkdir -p $(CUSTOM_INCLUDE_PATH)/{bsm,objc,os/internal,sys,firehose,CoreFoundation,FSEvents,IOSurface,IOKit/kext,libkern,kern,arm,{mach/,}machine,CommonCrypto,Security,CoreSymbolication,Kernel/{kern,IOKit,libkern},rpc,rpcsvc,xpc/private,ktrace,mach-o,dispatch}\n\tcp -af $(MACOSX_SYSROOT)/usr/include/{arpa,bsm,hfs,net,xpc,netinet,servers,timeconv.h,launch.h} $(CUSTOM_INCLUDE_PATH)\n\tcp -af $(MACOSX_SYSROOT)/usr/include/objc/objc-runtime.h $(CUSTOM_INCLUDE_PATH)/objc\n\tcp -af $(MACOSX_SYSROOT)/usr/include/libkern/{OSDebug.h,OSKextLib.h,OSReturn.h,OSThermalNotification.h,OSTypes.h,machine} $(CUSTOM_INCLUDE_PATH)/libkern\n\tcp -af $(MACOSX_SYSROOT)/usr/include/kern $(CUSTOM_INCLUDE_PATH)\n\tcp -af $(MACOSX_SYSROOT)/usr/include/sys/{tty*,ptrace,kern*,random,reboot,user,vnode,disk,vmmeter,conf}.h $(CUSTOM_INCLUDE_PATH)/sys\n\tcp -af $(MACOSX_SYSROOT)/System/Library/Frameworks/Kernel.framework/Versions/Current/Headers/sys/disklabel.h $(CUSTOM_INCLUDE_PATH)/sys\n\tcp -af $(MACOSX_SYSROOT)/System/Library/Frameworks/IOKit.framework/Headers/{AppleConvergedIPCKeys.h,IOBSD.h,IOCFBundle.h,IOCFPlugIn.h,IOCFURLAccess.h,IOKitServer.h,IORPC.h,IOSharedLock.h,IOUserServer.h,audio,avc,firewire,graphics,hid,hidsystem,i2c,iokitmig.h,kext,ndrvsupport,network,ps,pwr_mgt,sbp2,scsi,serial,storage,stream,usb,video} $(CUSTOM_INCLUDE_PATH)/IOKit\n\tcp -af $(MACOSX_SYSROOT)/System/Library/Frameworks/Security.framework/Headers/{mds_schema,oidsalg,SecKeychainSearch,certextensions,Authorization,eisl,SecDigestTransform,SecKeychainItem,oidscrl,cssmcspi,CSCommon,cssmaci,SecCode,CMSDecoder,oidscert,SecRequirement,AuthSession,SecReadTransform,oids,cssmconfig,cssmkrapi,SecPolicySearch,SecAccess,cssmtpi,SecACL,SecEncryptTransform,cssmapi,cssmcli,mds,x509defs,oidsbase,SecSignVerifyTransform,cssmspi,cssmkrspi,SecTask,cssmdli,SecAsn1Coder,cssm,SecTrustedApplication,SecCodeHost,SecCustomTransform,oidsattr,SecIdentitySearch,cssmtype,SecAsn1Types,emmtype,SecTransform,SecTrustSettings,SecStaticCode,emmspi,SecTransformReadTransform,SecKeychain,SecDecodeTransform,CodeSigning,AuthorizationPlugin,cssmerr,AuthorizationTags,CMSEncoder,SecEncodeTransform,SecureDownload,SecAsn1Templates,AuthorizationDB,SecCertificateOIDs,cssmapple}.h $(CUSTOM_INCLUDE_PATH)/Security\n\tcp -af $(MACOSX_SYSROOT)/usr/include/{ar,bootstrap,launch,libc,libcharset,localcharset,nlist,NSSystemDirectories,tzfile,vproc}.h $(CUSTOM_INCLUDE_PATH)\n\tcp -af $(MACOSX_SYSROOT)/usr/include/mach/{*.defs,{mach_vm,shared_region}.h} $(CUSTOM_INCLUDE_PATH)/mach\n\tcp -af $(MACOSX_SYSROOT)/usr/include/mach/machine/*.defs $(CUSTOM_INCLUDE_PATH)/mach/machine\n\tcp -af $(MACOSX_SYSROOT)/usr/include/rpc/pmap_clnt.h $(CUSTOM_INCLUDE_PATH)/rpc\n\tcp -af $(MACOSX_SYSROOT)/usr/include/rpcsvc/yp{_prot,clnt}.h $(CUSTOM_INCLUDE_PATH)/rpcsvc\n\tcp -af $(TARGET_SYSROOT)/usr/include/mach/machine/thread_state.h $(CUSTOM_INCLUDE_PATH)/mach/machine\n\tcp -af $(TARGET_SYSROOT)/usr/include/mach/arm $(CUSTOM_INCLUDE_PATH)/mach\n\tcp -af $(MACOSX_SYSROOT)/System/Library/Frameworks/IOKit.framework/Headers/* $(CUSTOM_INCLUDE_PATH)/IOKit\n\tgsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/stdlib.h > $(CUSTOM_INCLUDE_PATH)/stdlib.h\n\tgsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/time.h > $(CUSTOM_INCLUDE_PATH)/time.h\n\tgsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/unistd.h > $(CUSTOM_INCLUDE_PATH)/unistd.h\n\tgsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/mach/task.h > $(CUSTOM_INCLUDE_PATH)/mach/task.h\n\tgsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/mach/mach_host.h > $(CUSTOM_INCLUDE_PATH)/mach/mach_host.h\n\tgsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/ucontext.h > $(CUSTOM_INCLUDE_PATH)/ucontext.h\n#\tgsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/signal.h > $(CUSTOM_INCLUDE_PATH)/signal.h\n\tgsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/spawn.h > $(CUSTOM_INCLUDE_PATH)/spawn.h\n\tgsed -E /'__API_UNAVAILABLE'/d < $(TARGET_SYSROOT)/usr/include/pthread.h > $(CUSTOM_INCLUDE_PATH)/pthread.h\n\tgsed -i -E s/'__API_UNAVAILABLE\\(.*\\)'// $(CUSTOM_INCLUDE_PATH)/IOKit/IOKitLib.h\n\tgsed -i -E s/'__API_UNAVAILABLE\\(.*\\)'// $(CUSTOM_INCLUDE_PATH)/spawn.h\n\tgsed -i -E s/'API_UNAVAILABLE\\(.*\\)'// $(CUSTOM_INCLUDE_PATH)/xpc/*.h\n\tgsed -i 's|// __XPC_INDIRECT__|\\n#include \"$(TARGET_SYSROOT)/usr/include/bsm/audit.h\"\\n|' $(CUSTOM_INCLUDE_PATH)/xpc/connection.h\n\npackage: apple-include\n\t@rm -rf $(P1_TMP)\n\t@set -o pipefail; \\\n\t\txcodebuild -jobs $(shell sysctl -n hw.ncpu) -project '$(NAME).xcodeproj' -scheme $(SCHEME) -configuration $(CONFIGURATION) -arch arm64 -sdk $(PLATFORM) -derivedDataPath $(P1_TMP) \\\n\t\tCODE_SIGNING_ALLOWED=NO DSTROOT=$(P1_TMP)/install ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO\n\t@rm -rf Payload\n\t@rm -rf $(P1_STAGE_DIR)/\n\t@mkdir -p $(P1_STAGE_DIR)/Payload\nifeq ($(PLATFORM),appletvos)\n\tplutil -insert itemId -integer 995367539 $(P1_APP_DIR)/Info.plist\nendif\n\t@mv $(P1_APP_DIR) $(P1_STAGE_DIR)/Payload/$(PACKAGE_NAME).app\n\t@echo $(P1_TMP)\n\t@echo $(P1_STAGE_DIR)\n\n\t@$(TARGET_CODESIGN) -S$(SCHEME)/Supporting\\ Files/loader.entitlements $(P1_STAGE_DIR)/Payload/$(PACKAGE_NAME).app/\n\n\t@rm -rf $(P1_STAGE_DIR)/Payload/$(PACKAGE_NAME).app/_CodeSignature\n\t@ln -sf $(P1_STAGE_DIR)/Payload Payload\n\t@rm -rf packages/$(PACKAGE_NAME)\n\t@mkdir -p packages\n\n\t@zip -r9 packages/$(PACKAGE_NAME).ipa Payload\nclean:\n\t@rm -rf $(P1_STAGE_DIR)\n\t@rm -rf packages\n\t@rm -rf out.dmg\n\t@rm -rf Payload\n\t@rm -rf $(CUSTOM_INCLUDE_PATH)\n\t@rm -rf $(P1_TMP)\n\n.PHONY: $(CUSTOM_INCLUDE_PATH)\n\n"
  },
  {
    "path": "NimbleKit/.gitignore",
    "content": ".DS_Store\n/.build\n/Packages\nxcuserdata/\nDerivedData/\n.swiftpm/configuration/registries.json\n.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata\n.netrc\n"
  },
  {
    "path": "NimbleKit/Package.swift",
    "content": "// swift-tools-version: 5.6\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n\tname: \"NimbleKit\",\n\tplatforms: [\n\t\t.iOS(.v15),\n\t\t.tvOS(.v15)\n\t],\n\tproducts: [\n\t\t.library(name: \"NimbleAnimations\", targets: [\"NimbleAnimations\"]),\n\t\t.library(name: \"NimbleExtensions\", targets: [\"NimbleExtensions\"]),\n\t\t.library(name: \"NimbleJSON\", targets: [\"NimbleJSON\"]),\n\t\t.library(name: \"NimbleViewControllers\", targets: [\"NimbleViewControllers\"]),\n\t],\n\ttargets: [\n\t\t.target(name: \"NimbleAnimations\",\n\t\t\tdependencies: [\"NimbleExtensions\"]\n\t\t),\n\t\t.target(name: \"NimbleViewControllers\",\n\t\t\tdependencies: [\"NimbleExtensions\"]\n\t\t),\n\t\t.target(name: \"NimbleExtensions\",\n\t\t\tdependencies: []\n\t\t),\n\t\t.target(name: \"NimbleJSON\",\n\t\t\tdependencies: []\n\t\t)\n\t]\n)\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleAnimations/SlideWithPresentationAnimator.swift",
    "content": "//\n//  SlideWithPresentationAnimator.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit\nimport NimbleExtensions\n\npublic class SlideWithPresentationAnimator: NSObject, UIViewControllerAnimatedTransitioning {\n\tprivate let _presenting: Bool\n\t\n\tpublic init(presenting: Bool) {\n\t\tself._presenting = presenting\n\t\tsuper.init()\n\t}\n\t\n\tpublic func transitionDuration(using transitionContext: (any UIViewControllerContextTransitioning)?) -> TimeInterval {\n\t\t0.7\n\t}\n\t\n\tpublic func animateTransition(using transitionContext: any UIViewControllerContextTransitioning) {\n\t\tlet containerView = transitionContext.containerView\n\t\t\n\t\tguard\n\t\t\tlet toVC = transitionContext.viewController(forKey: .to),\n\t\t\tlet fromVC = transitionContext.viewController(forKey: .from),\n\t\t\tlet toView = transitionContext.view(forKey: .to) ?? toVC.view,\n\t\t\tlet fromView = transitionContext.view(forKey: .from) ?? fromVC.view\n\t\telse {\n\t\t\ttransitionContext.completeTransition(false)\n\t\t\treturn\n\t\t}\n\t\t\n\t\tlet finalFrame = transitionContext.finalFrame(for: toVC)\n\t\t\n\t\tlet displayCornerRadius = UIScreen.main.screenCornerRadius\n\t\t\n\t\tlet startingCornerRadius: CGFloat = 20.0\n\t\t\n\t\t#if os(iOS)\n\t\tlet generator = UIImpactFeedbackGenerator(style: .soft)\n\t\tgenerator.prepare()\n\t\t#endif\n\t\t\n\t\tlet fromViewLayer = fromView.layer\n\t\tlet toViewLayer = toView.layer\n\t\t\n\t\tfromViewLayer.masksToBounds = true\n\t\ttoViewLayer.masksToBounds = true\n\t\t\n\t\tif _presenting {\n\t\t\tcontainerView.addSubview(toView)\n\t\t\t\n\t\t\ttoView.frame = finalFrame\n\t\t\ttoView.transform = CGAffineTransform(scaleX: 0.85, y: 0.85)\n\t\t\ttoView.center = CGPoint(\n\t\t\t\tx: containerView.center.x,\n\t\t\t\ty: containerView.bounds.height + finalFrame.height/2\n\t\t\t)\n\t\t\t\n\t\t\tfromViewLayer.cornerRadius = displayCornerRadius\n\t\t\ttoViewLayer.cornerRadius = startingCornerRadius\n\t\t\t\n\t\t\tfromViewLayer.cornerCurve = .continuous\n\t\t\ttoViewLayer.cornerCurve = .continuous\n\t\t\t\n\t\t\tlet fromCornerAnimation = CABasicAnimation(keyPath: \"cornerRadius\")\n\t\t\tfromCornerAnimation.fromValue = displayCornerRadius\n\t\t\tfromCornerAnimation.toValue = startingCornerRadius\n\t\t\tfromCornerAnimation.duration = transitionDuration(using: transitionContext) * 0.5\n\t\t\tfromCornerAnimation.timingFunction = CAMediaTimingFunction(name: .easeOut)\n\t\t\tfromViewLayer.add(fromCornerAnimation, forKey: \"cornerRadius\")\n\t\t\tfromViewLayer.cornerRadius = startingCornerRadius\n\t\t\t\n\t\t\tlet animator = UIViewPropertyAnimator(\n\t\t\t\tduration: transitionDuration(using: transitionContext),\n\t\t\t\tdampingRatio: 0.85\n\t\t\t) {\n\t\t\t\tfromView.transform = CGAffineTransform(scaleX: 0.85, y: 0.85)\n\t\t\t\tfromView.alpha = 0.5\n\t\t\t\t\n\t\t\t\tfromView.center = CGPoint(\n\t\t\t\t\tx: containerView.center.x,\n\t\t\t\t\ty: -finalFrame.height/2\n\t\t\t\t)\n\t\t\t\t\n\t\t\t\ttoView.center = containerView.center\n\t\t\t\ttoView.transform = .identity\n\t\t\t\ttoView.alpha = 1.0\n\t\t\t\ttoViewLayer.cornerRadius = displayCornerRadius\n\t\t\t\t#if os(iOS)\n\t\t\t\tgenerator.impactOccurred()\n\t\t\t\t#endif\n\t\t\t}\n\t\t\t\n\t\t\tanimator.addCompletion { position in\n\t\t\t\tif position == .end {\n\t\t\t\t\ttransitionContext.completeTransition(!transitionContext.transitionWasCancelled)\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tanimator.startAnimation()\n\t\t} else {\n\t\t\tif toView.superview == nil {\n\t\t\t\tcontainerView.insertSubview(toView, belowSubview: fromView)\n\t\t\t\ttoView.frame = finalFrame\n\t\t\t\ttoView.transform = CGAffineTransform(scaleX: 0.85, y: 0.85)\n\t\t\t\ttoView.alpha = 0.5\n\t\t\t\t\n\t\t\t\ttoView.center = CGPoint(\n\t\t\t\t\tx: containerView.center.x,\n\t\t\t\t\ty: -finalFrame.height/2\n\t\t\t\t)\n\t\t\t}\n\t\t\t\n\t\t\tfromViewLayer.cornerRadius = displayCornerRadius\n\t\t\ttoViewLayer.cornerRadius = startingCornerRadius\n\t\t\t\n\t\t\tfromViewLayer.cornerCurve = .continuous\n\t\t\ttoViewLayer.cornerCurve = .continuous\n\t\t\t\n\t\t\tlet fromCornerAnimation = CABasicAnimation(keyPath: \"cornerRadius\")\n\t\t\tfromCornerAnimation.fromValue = displayCornerRadius\n\t\t\tfromCornerAnimation.toValue = startingCornerRadius\n\t\t\tfromCornerAnimation.duration = transitionDuration(using: transitionContext) * 0.5\n\t\t\tfromCornerAnimation.timingFunction = CAMediaTimingFunction(name: .easeOut)\n\t\t\tfromViewLayer.add(fromCornerAnimation, forKey: \"cornerRadius\")\n\t\t\tfromViewLayer.cornerRadius = startingCornerRadius\n\t\t\t\n\t\t\tlet animator = UIViewPropertyAnimator(\n\t\t\t\tduration: transitionDuration(using: transitionContext),\n\t\t\t\tdampingRatio: 0.85\n\t\t\t) {\n\t\t\t\tfromView.transform = CGAffineTransform(scaleX: 0.85, y: 0.85)\n\t\t\t\tfromView.alpha = 0.5\n\t\t\t\t\n\t\t\t\tfromView.center = CGPoint(\n\t\t\t\t\tx: containerView.center.x,\n\t\t\t\t\ty: containerView.bounds.height + finalFrame.height/2\n\t\t\t\t)\n\t\t\t\t\n\t\t\t\ttoView.center = containerView.center\n\t\t\t\ttoView.transform = .identity\n\t\t\t\ttoView.alpha = 1.0\n\t\t\t\ttoViewLayer.cornerRadius = displayCornerRadius\n\t\t\t\t#if os(iOS)\n\t\t\t\tgenerator.impactOccurred()\n\t\t\t\t#endif\n\t\t\t}\n\t\t\t\n\t\t\tanimator.addCompletion { position in\n\t\t\t\tif position == .end {\n\t\t\t\t\ttransitionContext.completeTransition(!transitionContext.transitionWasCancelled)\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tanimator.startAnimation()\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleExtensions/Bundle/Bundle+keys.swift",
    "content": "//\n//  Bundle+versions.swift\n//  Loader\n//\n//  Created by samara on 18.03.2025.\n//\n\nimport Foundation.NSBundle\n\nextension Bundle {\n\tstatic public var appExecutable: String {\n\t\tguard let str = main.object(forInfoDictionaryKey: \"CFBundleExecutable\") as? String else { return \"\" }\n\t\treturn str\n\t}\n\t\n\tstatic public var appVersionShort: String {\n\t\tguard let str = main.object(forInfoDictionaryKey: \"CFBundleShortVersionString\") as? String else { return \"\" }\n\t\treturn str\n\t}\n\t\n\tstatic public var bundleVersion: String {\n\t\tguard let str = main.object(forInfoDictionaryKey: \"CFBundleVersion\") as? String else { return \"\" }\n\t\treturn str\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleExtensions/NSThread/Thread+mainBlock.swift",
    "content": "//\n//  Thread.swift\n//  Loader\n//\n//  Created by samara on 15.03.2025.\n//\n\nimport Foundation.NSThread\n\nextension Thread {\n\t/// Block to always execute code on the main thread\n\t/// from: https://github.com/elihwyma/Evander/blob/main/Sources/Evander/Extensions/Thread%2BExtensions.swift#L20-L27\n\t/// thank you!~\n\t/// - Parameter block: Code\n\tpublic class func mainBlock(_ block: @escaping () -> Void) {\n\t\tif Thread.isMainThread {\n\t\t\tblock()\n\t\t} else {\n\t\t\tDispatchQueue.main.async {\n\t\t\t\tblock()\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleExtensions/String/String+localized.swift",
    "content": "//\n//  String+localized.swift\n//  NimbleKit\n//\n//  Created by samara on 20.03.2025.\n//\n\n\nimport Foundation\n\nextension String {\n\t// from: https://github.com/NSAntoine/Antoine/blob/main/Antoine/Backend/Extensions/Foundation.swift#L43-L55\n\t// was given permission to use any code from antoine as I like - thank you Serena!~\n\t\n\tstatic public func localized(_ name: String) -> String {\n\t\tNSLocalizedString(name, comment: \"\")\n\t}\n\t\n\tstatic public func localized(_ name: String, arguments: CVarArg...) -> String {\n\t\tString(format: NSLocalizedString(name, comment: \"\"), arguments: arguments)\n\t}\n\t/// Localizes the current string using the main bundle.\n\t///\n\t/// - Returns: The localized string.\n\tpublic func localized() -> String {\n\t\tString.localized(self)\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleExtensions/UIApplication/UIApplication+suspend.swift",
    "content": "//\n//  UIApplication+exitAndSuspend.swift\n//  Loader\n//\n//  Created by samara on 13.03.2025.\n//\n\nimport UIKit.UIApplication\n\nextension UIApplication {\n\t/// Exit the application after an operation is complete\n\tpublic func suspend() {\n\t\tCFPreferencesAppSynchronize(kCFPreferencesCurrentApplication)\n\t\tself.perform(#selector(NSXPCConnection.suspend))\n\t\tDispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {\n\t\t\texit(0)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleExtensions/UIApplication/UIApplication+topController.swift",
    "content": "//\n//  UIApplication+topController.swift\n//  Loader\n//\n//  Created by samara on 18.03.2025.\n//\n\nimport UIKit.UIApplication\n\nextension UIApplication {\n\t/// This belongs to https://stackoverflow.com/a/30858591\n\tpublic class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {\n\t\tif let navigationController = controller as? UINavigationController {\n\t\t\treturn topViewController(controller: navigationController.visibleViewController)\n\t\t}\n\t\tif let tabController = controller as? UITabBarController {\n\t\t\tif let selected = tabController.selectedViewController {\n\t\t\t\treturn topViewController(controller: selected)\n\t\t\t}\n\t\t}\n\t\tif let presented = controller?.presentedViewController {\n\t\t\treturn topViewController(controller: presented)\n\t\t}\n\t\treturn controller\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleExtensions/UICollectionViewDiffableDataSource/UICollectionViewDiffableDataSource+refresh.swift",
    "content": "//\n//  UICollectionViewDiffableDataSource+refresh.swift\n//\n//\n//  Created by samara on 22.03.2025.\n//\n\nimport UIKit\n\nextension UICollectionViewDiffableDataSource {\n\tpublic func refresh(completion: (() -> Void)? = nil) {\n\t\tself.apply(self.snapshot(), animatingDifferences: true, completion: completion)\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleExtensions/UIScreen/UIScreen+displayCornerRadius.swift",
    "content": "//\n//  UIScreen+displayCornerRadius.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit.UIScreen\n\nextension UIScreen {\n\t/// Physical screen corner radius\n\tpublic var screenCornerRadius: CGFloat {\n\t\tguard\n\t\t\tlet data = Data(base64Encoded: \"X2Rpc3BsYXlDb3JuZXJSYWRpdXM=\"),\n\t\t\tlet propertyString = String(data: data, encoding: .utf8)\n\t\telse {\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\treturn UIScreen.main.value(forKey: propertyString) as? CGFloat ?? 0\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleExtensions/UITableView/UITableView+transition.swift",
    "content": "//\n//  UITableView+transition.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit.UITableView\nimport UIKit.UIView\n\nextension UITableView {\n\tpublic func reloadDataWithTransition(\n\t\twith animation: UIView.AnimationOptions = [],\n\t\tduration: TimeInterval = 0.3\n\t) {\n\t\tUIView.transition(\n\t\t\twith: self,\n\t\t\tduration: duration,\n\t\t\toptions: animation,\n\t\t\tanimations: { [weak self] in\n\t\t\tself?.reloadData()\n\t\t}, completion: nil)\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleJSON/FetchService.swift",
    "content": "//\n//  FetchService.swift\n//  Loader\n//\n//  Created by samara on 14.03.2025.\n//\n\nimport Foundation\n\n// MARK: - Class\npublic class FetchService {\n\tpublic enum FetchServiceError: Error, LocalizedError {\n\t\tcase invalidURL\n\t\tcase networkError(Error)\n\t\tcase noData\n\t\tcase parsingError(Error)\n\t\t\n\t\tpublic var errorDescription: String? {\n\t\t\tswitch self {\n\t\t\tcase .invalidURL: \t\t\t\t\"The URL is invalid.\"\n\t\t\tcase .networkError(let error): \t\"Network error: \\(error.localizedDescription)\"\n\t\t\tcase .noData: \t\t\t\t\t\"No data received.\"\n\t\t\tcase .parsingError(let error): \t\"Failed to parse data: \\(error.localizedDescription)\"\n\t\t\t}\n\t\t}\n\t}\n\t\n\tpublic init() {}\n}\n\n// MARK: - Class extension: fetch\nextension FetchService {\n\tpublic func fetch<T: Decodable>(from urlString: String, completion: @escaping (Result<T, Error>) -> Void) {\n\t\tguard let url = URL(string: urlString) else {\n\t\t\tcompletion(.failure(FetchServiceError.invalidURL))\n\t\t\treturn\n\t\t}\n\t\t\n\t\tfetch(from: url, completion: completion)\n\t}\n\t\n\tpublic func fetch<T: Decodable>(from url: URL, completion: @escaping (Result<T, Error>) -> Void) {\n\t\tDispatchQueue.global(qos: .userInitiated).async {\n\t\t\tlet task = URLSession.shared.dataTask(with: url) { data, response, error in\n\t\t\t\tif let error = error {\n\t\t\t\t\tcompletion(.failure(FetchServiceError.networkError(error)))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tguard let data = data else {\n\t\t\t\t\tcompletion(.failure(FetchServiceError.noData))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tdo {\n\t\t\t\t\tlet decoder = JSONDecoder()\n\t\t\t\t\tlet decodedData = try decoder.decode(T.self, from: data)\n\t\t\t\t\tcompletion(.success(decodedData))\n\t\t\t\t} catch {\n\t\t\t\t\tcompletion(.failure(FetchServiceError.parsingError(error)))\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\ttask.resume()\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleViewControllers/LRBaseStructuredTableViewController.swift",
    "content": "//\n//  LRBaseStructuredTableViewController.swift\n//  Loader\n//\n//  Created by samara on 13.03.2025.\n//\n\nimport UIKit\n\n// MARK: - Class\nopen class LRBaseStructuredTableViewController: LRBaseTableViewController {\n\t/// An item to a section\n\tpublic struct SectionItem {\n\t\t/// Cell title\n\t\tpublic let title: String\n\t\t/// Cell subtitle\n\t\tpublic var subtitle: String = \"\"\n\t\t/// Cell tint\n\t\tpublic var tint: UIColor?\n\t\t/// Navigation link, may conflict with `action`\n\t\tpublic var navigationDestination: UIViewController? = nil\n\t\t/// Present new navigation controller\n\t\tpublic var presentNavigationDestination: (() -> UINavigationController)? = nil\n\t\t/// Cell action without a navigation destination, may conflict with `navigationDestination`\n\t\tpublic var action: (() -> Void)? = nil\n\t\t\n\t\t/// Public initializer\n\t\tpublic init(\n\t\t\ttitle: String,\n\t\t\tsubtitle: String = \"\",\n\t\t\ttint: UIColor? = nil,\n\t\t\tnavigationDestination: UIViewController? = nil,\n\t\t\tpresentNavigationDestination: (() -> UINavigationController)? = nil,\n\t\t\taction: (() -> Void)? = nil\n\t\t) {\n\t\t\tself.title = title\n\t\t\tself.subtitle = subtitle\n\t\t\tself.tint = tint\n\t\t\tself.navigationDestination = navigationDestination\n\t\t\tself.presentNavigationDestination = presentNavigationDestination\n\t\t\tself.action = action\n\t\t}\n\t}\n\t\n\t/// The tableview will use data from here\n\tpublic var sections: [(title: String, items: [SectionItem])] = []\n\t\n\topen override func viewDidLoad() {\n\t\tsuper.viewDidLoad()\n\t\tsetupSections()\n\t}\n\t\n\topen func setupSections() {}\n}\n\n// MARK: - Class extension: tableview\nextension LRBaseStructuredTableViewController {\n\topen override func numberOfSections(in tableView: UITableView) -> Int {\n\t\tsections.count\n\t}\n\t\n\topen override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n\t\tsections[section].items.count\n\t}\n\t\n\topen override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n\t\tsections[section].title\n\t}\n\t\n\topen override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n\t\tlet cell = tableView.dequeueReusableCell(withIdentifier: \"Cell\")!\n\t\tlet section = sections[indexPath.section]\n\t\tlet item = section.items[indexPath.row]\n\t\t\n\t\tvar content = UIListContentConfiguration.valueCell()\n\t\tcontent.text = item.title\n\t\tcontent.textProperties.color = .label\n\t\tcontent.secondaryText = item.subtitle\n\t\tcontent.secondaryTextProperties.color = .secondaryLabel\n\t\t\n\t\tif (item.navigationDestination != nil) ||\n\t\t\t(item.presentNavigationDestination != nil) {\n\t\t\tcell.accessoryType = .disclosureIndicator\n\t\t\tcell.selectionStyle = .default\n\t\t} else if (item.action != nil) {\n\t\t\t#if os(iOS)\n\t\t\tcontent.textProperties.color = item.tint ?? .tintColor\n\t\t\t#else\n\t\t\tcontent.textProperties.color = item.tint ?? .systemBlue\n\t\t\t#endif\n\t\t\tcell.accessoryType = .none\n\t\t\tcell.selectionStyle = .default\n\t\t} else {\n\t\t\tcell.accessoryType = .none\n\t\t\tcell.selectionStyle = .none\n\t\t}\n\t\t\n\t\tcell.contentConfiguration = content\n\t\treturn cell\n\t}\n\t\n\topen override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n\t\tlet section = sections[indexPath.section]\n\t\tlet item = section.items[indexPath.row]\n\t\t\n\t\tif let destinationVC = item.navigationDestination {\n\t\t\tnavigationController?.pushViewController(destinationVC, animated: true)\n\t\t} else if let destinationVC = item.presentNavigationDestination {\n\t\t\tpresent(destinationVC(), animated: true)\n\t\t} else if let action = item.action {\n\t\t\taction()\n\t\t}\n\t\t\n\t\ttableView.deselectRow(at: indexPath, animated: true)\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleViewControllers/LRBaseTableViewController.swift",
    "content": "//\n//  BaseTableViewController.swift\n//  Loader\n//\n//  Created by samara on 9.03.2025.\n//\n\nimport UIKit\nimport NimbleExtensions\n\n// MARK: - Class\nopen class LRBaseTableViewController: UITableViewController {\n\tprivate var _didControllerFade = false\n\t#if os(iOS)\n\tprivate var _hideStatusBar = false\n\t#endif\n\t\n\tpublic init() {\n\t\t#if os(iOS)\n\t\tsuper.init(style: .insetGrouped)\n\t\t#else\n\t\tsuper.init(style: .grouped)\n\t\t#endif\n\t}\n\t\n\trequired public init?(coder: NSCoder) {\n\t\t#if os(iOS)\n\t\tsuper.init(style: .insetGrouped)\n\t\t#else\n\t\tsuper.init(style: .grouped)\n\t\t#endif\n\t}\n\t\n\t#if os(iOS)\n\topen override var prefersStatusBarHidden: Bool {\n\t\tself._hideStatusBar\n\t}\n\t#endif\n\t\n\topen override func viewDidLoad() {\n\t\tsuper.viewDidLoad()\n\t\t#if os(iOS)\n\t\tself._configureTitleDisplayMode()\n\t\t#endif\n\t\ttableView.register(UITableViewCell.self, forCellReuseIdentifier: \"Cell\")\n\t}\n\t\n\t#if os(iOS)\n\tprivate func _configureTitleDisplayMode() {\n\t\tif isRootViewController() {\n\t\t\tnavigationItem.largeTitleDisplayMode = .always\n\t\t\tnavigationController?.navigationBar.prefersLargeTitles = true\n\t\t} else {\n\t\t\tnavigationItem.largeTitleDisplayMode = .never\n\t\t}\n\t}\n\t\n\tprivate func isRootViewController() -> Bool {\n\t\tnavigationController?.viewControllers.first === self\n\t}\n\t#endif\n\t\n\t@objc public func dismissController() {\n\t\tdismiss(animated: true)\n\t}\n\t\n\t@objc public func popController() {\n\t\tnavigationController?.popViewController(animated: true)\n\t}\n\t\n\t@objc public func blackOutController(completion: @escaping () -> (Void)) {\n\t\tif _didControllerFade {\n\t\t\tcompletion()\n\t\t\treturn\n\t\t}\n\t\t\n\t\tself._didControllerFade = true\n\t\t\n\t\tguard let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow }) else {\n\t\t\tcompletion()\n\t\t\treturn\n\t\t}\n\t\t\n\t\tguard let snapshotView = window.snapshotView(afterScreenUpdates: true) else {\n\t\t\tcompletion()\n\t\t\treturn\n\t\t}\n\t\t\n\t\twindow.addSubview(snapshotView)\n\t\tsnapshotView.frame = window.bounds\n\t\t\n\t\tsnapshotView.layer.cornerRadius = UIScreen.main.screenCornerRadius\n\t\tsnapshotView.layer.cornerCurve = .continuous\n\t\tsnapshotView.layer.masksToBounds = true\n\t\t\n\t\tfor subview in window.subviews where subview != snapshotView {\n\t\t\tsubview.alpha = 0\n\t\t}\n\t\t\n\t\t#if os(iOS)\n\t\tself._setHideStatusBar(true)\n\t\t#endif\n\t\t\n\t\tlet animator = UIViewPropertyAnimator(\n\t\t\tduration: 0.45,\n\t\t\tdampingRatio: 0.9\n\t\t) {\n\t\t\tsnapshotView.transform = CGAffineTransform(scaleX: 0.85, y: 0.85)\n\t\t\tsnapshotView.alpha = 0.0\n\t\t}\n\t\t\n\t\tanimator.addCompletion { position in\n\t\t\tif position == .end {\n\t\t\t\tsnapshotView.removeFromSuperview()\n\t\t\t\tcompletion()\n\t\t\t}\n\t\t}\n\t\t\n\t\tanimator.startAnimation()\n\t}\n\t\n\t#if os(iOS)\n\tprivate func _setHideStatusBar(_ bool: Bool) {\n\t\tself._hideStatusBar = bool\n\t\tself.setNeedsStatusBarAppearanceUpdate()\n\t}\n\t#endif\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleViewControllers/StagedViewController/LRBaseStagedViewController.swift",
    "content": "//\n//  LRBaseStagedViewController.swift\n//  Loader\n//\n//  Created by samara on 19.03.2025.\n//\n\nimport UIKit\n\n// MARK: - Class\nopen class LRBaseStagedViewController: UIViewController {\n\ttypealias StepDataSourceSection = Int\n\ttypealias StepDataSource = UICollectionViewDiffableDataSource<StepDataSourceSection, StepGroup>\n\ttypealias StepDataSourceSnapshot = NSDiffableDataSourceSnapshot<StepDataSourceSection, StepGroup>\n\t\n\tprivate var _dataSource: StepDataSource?\n\t\n\tlazy var collectionView = UICollectionView(\n\t\tframe: .zero,\n\t\tcollectionViewLayout: _createLayout()\n\t)\n\t\n\tprivate let _footerLabel: UILabel = {\n\t\tlet label = UILabel()\n\t\tlabel.font = .preferredFont(forTextStyle: .subheadline)\n\t\tlabel.textColor = .secondaryLabel\n\t\tlabel.adjustsFontForContentSizeCategory = true\n\t\tlabel.numberOfLines = 0\n\t\tlabel.textAlignment = .center\n\t\treturn label\n\t}()\n\t\n\tpublic var steps: [StepGroup] = []\n\tpublic var footerString: String = \"\"\n\t\n\tpublic init() {\n\t\tsuper.init(nibName: nil, bundle: nil)\n\t}\n\t\n\trequired public init?(coder: NSCoder) {\n\t\tfatalError(\"init(coder:) has not been implemented\")\n\t}\n\t\n\topen override func viewDidLoad() {\n        super.viewDidLoad()\n\t\tself.setupView()\n\t\t_setupCollectionView()\n\t\t_setupDataSource()\n\t\tcollectionView.delegate = self\n\t\tself.start()\n    }\n\t\n\topen func setupView() {}\n\topen func start() {}\n\t\n\tprivate func _createLayout() -> UICollectionViewLayout {\n\t\tlet itemSize = NSCollectionLayoutSize(\n\t\t\twidthDimension: .fractionalWidth(1.0),\n\t\t\theightDimension: .estimated(50)\n\t\t)\n\t\t\n\t\tlet item = NSCollectionLayoutItem(layoutSize: itemSize)\n\t\tlet group = NSCollectionLayoutGroup.horizontal(\n\t\t\tlayoutSize: itemSize,\n\t\t\tsubitems: [item]\n\t\t)\n\t\t\n\t\tlet padding: CGFloat = 12\n\t\t\n\t\tlet section = NSCollectionLayoutSection(group: group)\n\t\tsection.interGroupSpacing = padding\n\t\tsection.contentInsets = .init(top: padding, leading: padding, bottom: padding, trailing: padding)\n\t\t\n\t\treturn UICollectionViewCompositionalLayout(section: section)\n\t}\n\t\n\tprivate func _setupCollectionView() {\n\t\t#if os(iOS)\n\t\tcollectionView.backgroundColor = .systemBackground\n\t\t#endif\n\t\tcollectionView.register(\n\t\t\tLRStageGroupCell.self,\n\t\t\tforCellWithReuseIdentifier: String(describing: LRStageGroupCell.self)\n\t\t)\n\t\t\n\t\tview.addSubview(collectionView)\n\t\tcollectionView.translatesAutoresizingMaskIntoConstraints = false\n\t\t\n\t\tcollectionView.addSubview(_footerLabel)\n\t\t_footerLabel.translatesAutoresizingMaskIntoConstraints = false\n\t\t_footerLabel.text = footerString\n\t\t\n\t\tNSLayoutConstraint.activate([\n\t\t\tcollectionView.topAnchor.constraint(equalTo: view.topAnchor),\n\t\t\tcollectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor),\n\t\t\tcollectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor),\n\t\t\tcollectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor),\n\t\t\t\n\t\t\t_footerLabel.centerXAnchor.constraint(equalTo: collectionView.centerXAnchor),\n\t\t\t_footerLabel.bottomAnchor.constraint(equalTo: collectionView.safeAreaLayoutGuide.bottomAnchor, constant: -32),\n\t\t\t_footerLabel.widthAnchor.constraint(equalTo: collectionView.widthAnchor, multiplier: 0.7)\n\t\t])\n\t}\n\t\n\tprivate func _setupDataSource() {\n\t\t_dataSource = StepDataSource(\n\t\t\tcollectionView: collectionView\n\t\t) { (collectionView, indexPath, step) -> UICollectionViewCell? in\n\t\t\tguard let cell = collectionView.dequeueReusableCell(\n\t\t\t\twithReuseIdentifier: String(describing: LRStageGroupCell.self),\n\t\t\t\tfor: indexPath\n\t\t\t) as? LRStageGroupCell else {\n\t\t\t\tfatalError(\"Could not cast cell as \\(LRStageGroupCell.self)\")\n\t\t\t}\n\t\t\tcell.step = step\n\t\t\treturn cell\n\t\t}\n\t\tcollectionView.dataSource = _dataSource\n\t\t\n\t\tvar snapshot = StepDataSourceSnapshot()\n\t\tsnapshot.appendSections([0])\n\t\tsnapshot.appendItems(steps)\n\t\t_dataSource?.apply(snapshot)\n\t}\n\t\n\tpublic func updateStepItemStatus(_ section: String, item: String, with status: StepStatus) {\n\t\tguard\n\t\t\tlet stepIndex = steps.firstIndex(where: { $0.name == section }),\n\t\t\tlet itemIndex = steps[stepIndex].items.firstIndex(where: { $0.name == item })\n\t\telse {\n\t\t\tprint(\"Couldn't find step with name '\\(section)' or item with name '\\(item)'\")\n\t\t\treturn\n\t\t}\n\t\t\n\t\tlet itemId = steps[stepIndex].items[itemIndex].id\n\t\t\n\t\tsteps[stepIndex].items[itemIndex].status = status\n\t\t\n\t\tlet indexPath = IndexPath(item: stepIndex, section: 0)\n\t\tguard let cell = collectionView.cellForItem(at: indexPath) as? LRStageGroupCell else {\n\t\t\tprint(\"Cell not visible for step '\\(section)'\")\n\t\t\treturn\n\t\t}\n\t\t\n\t\tcell.updateItemStatus(withId: itemId, to: status)\n\t}\n\t\n\tpublic func updateStepItemStatusForName(named item: String, with status: StepStatus) {\n\t\tfor (stepIndex, step) in steps.enumerated() {\n\t\t\tif let itemIndex = step.items.firstIndex(where: { $0.name == item }) {\n\t\t\t\tsteps[stepIndex].items[itemIndex].status = status\n\t\t\t\t\n\t\t\t\tlet indexPath = IndexPath(item: stepIndex, section: 0)\n\t\t\t\tguard let cell = collectionView.cellForItem(at: indexPath) as? LRStageGroupCell else {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.updateItemStatus(withName: item, to: status)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\t\n\t\tprint(\"Couldn't find any step item with name '\\(item)'\")\n\t}\n}\n\n// MARK: - Class extension: collectionview\nextension LRBaseStagedViewController: UICollectionViewDelegate {\n\tpublic func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {\n\t\tselectCollectionViewCell(for: indexPath.row)\n\t\treturn false\n\t}\n\t\n\tpublic func selectCollectionViewCell(for row: Int) {\n\t\tguard let dataSource = _dataSource else { return }\n\t\t\n\t\tlet section = IndexPath(row: row, section: 0)\n\t\t\n\t\tif collectionView.indexPathsForSelectedItems?.contains(section) ?? false {\n\t\t\tcollectionView.deselectItem(at: section, animated: true)\n\t\t} else {\n\t\t\tcollectionView.selectItem(at: section, animated: true, scrollPosition: [])\n\t\t}\n\t\t\n\t\tUIView.animate(withDuration: 0.6,\n\t\t\t\t\t   delay: 0,\n\t\t\t\t\t   usingSpringWithDamping: 0.65,\n\t\t\t\t\t   initialSpringVelocity: 0.5,\n\t\t\t\t\t   options: [.curveEaseOut],\n\t\t\t\t\t   animations: {\n\t\t\tdataSource.refresh()\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleViewControllers/StagedViewController/LRStageGroupCell.swift",
    "content": "//\n//  LRStageGroupCell.swift\n//  Loader\n//\n//  Created by samara on 18.03.2025.\n//\n\nimport UIKit\n\nclass LRStageGroupCell: UICollectionViewCell {\n\tvar step: StepGroup? {\n\t\tdidSet {\n\t\t\t_updateContent()\n\t\t}\n\t}\n\n\tprivate var _items: [LRStageGroupItemView] = []\n\t\n\tprivate var _closedConstraint: NSLayoutConstraint?\n\tprivate var _openConstraint: NSLayoutConstraint?\n\tprivate var _bottomMostLabel: UIView?\n\t\n\t#if os(iOS)\n\tprivate let _padding: CGFloat = 14\n\t#else\n\tprivate let _padding: CGFloat = 30\n\t#endif\n\tprivate let _cornerRadius: CGFloat = 14\n\n\tprivate let _nameLabel: UILabel = {\n\t\tlet nameLabel = UILabel()\n\t\tnameLabel.font = .systemFont(\n\t\t\tofSize: UIFont.preferredFont(forTextStyle: .title3).pointSize,\n\t\t\tweight: .semibold\n\t\t)\n\t\treturn nameLabel\n\t}()\n\t\n\tprivate let _disclosureIndicator: UIImageView = {\n\t\tlet disclosureIndicator = UIImageView()\n\t\tdisclosureIndicator.image = UIImage(systemName: \"chevron.down\")\n\t\tdisclosureIndicator.contentMode = .scaleAspectFit\n\t\t#if os(tvOS)\n\t\tdisclosureIndicator.tintColor = .clear\n\t\t#endif\n\t\tdisclosureIndicator.preferredSymbolConfiguration = .init(textStyle: .headline, scale: .medium)\n\t\treturn disclosureIndicator\n\t}()\n\t\n\tprivate lazy var _labelStack: UIStackView = {\n\t\tlet labelStack = UIStackView(arrangedSubviews: [_nameLabel])\n\t\tlabelStack.axis = .vertical\n\t\tlabelStack.spacing = _padding\n\t\treturn labelStack\n\t}()\n\t\t\n\toverride init(frame: CGRect) {\n\t\tsuper.init(frame: frame)\n\t\tsetup()\n\t}\n\t\n\toverride var isSelected: Bool {\n\t\tdidSet {\n\t\t\t_updateAppearance()\n\t\t}\n\t}\n\t\n\trequired init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\t\t\n\tprivate func setup() {\n\t\t#if os(iOS)\n\t\tbackgroundColor = .systemGray5\n\t\t#else\n\t\tbackgroundColor = .systemGray.withAlphaComponent(0.1)\n\t\t#endif\n\t\tclipsToBounds = true\n\t\t\n\t\tlayer.cornerRadius = _cornerRadius\n\t\tlayer.cornerCurve = .continuous\n\t\t\n\t\tcontentView.translatesAutoresizingMaskIntoConstraints = false\n\t\t\n\t\tcontentView.addSubview(_labelStack)\n\t\t_labelStack.translatesAutoresizingMaskIntoConstraints = false\n\t\t\n\t\tcontentView.addSubview(_disclosureIndicator)\n\t\t_disclosureIndicator.translatesAutoresizingMaskIntoConstraints = false\n\t\t\n\t\tNSLayoutConstraint.activate([\n\t\t\tcontentView.topAnchor.constraint(equalTo: topAnchor),\n\t\t\tcontentView.leadingAnchor.constraint(equalTo: leadingAnchor),\n\t\t\tcontentView.trailingAnchor.constraint(equalTo: trailingAnchor),\n\t\t\tcontentView.bottomAnchor.constraint(equalTo: bottomAnchor),\n\t\t\t\n\t\t\t_labelStack.topAnchor.constraint(equalTo: contentView.topAnchor, constant: _padding),\n\t\t\t_labelStack.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: _padding),\n\t\t\t_labelStack.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),\n\t\t\t\n\t\t\t_disclosureIndicator.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -_padding),\n\t\t\t_disclosureIndicator.topAnchor.constraint(equalTo: contentView.topAnchor, constant: _padding),\n\t\t\t\n\t\t])\n\t\t\n\t\t_closedConstraint = _nameLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -_padding)\n\t\t_closedConstraint?.priority = .defaultLow\n\t\t\n\t\t_openConstraint = _nameLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -_padding)\n\t\t_openConstraint?.priority = .defaultLow\n\t\t\n\t\t_updateAppearance()\n\t}\n\t\n\tprivate func _updateContent() {\n\t\tguard let step = step else { return }\n\t\t\n\t\tfor view in _labelStack.arrangedSubviews where view != _nameLabel {\n\t\t\t_labelStack.removeArrangedSubview(view)\n\t\t\tview.removeFromSuperview()\n\t\t}\n\t\t\n\t\t_items.removeAll()\n\t\t\n\t\t_nameLabel.text = step.name\n\t\t\t\t\n\t\tfor item in step.items {\n\t\t\tlet view = LRStageGroupItemView(item.name, padding: _padding, status: item.status)\n\n\t\t\t_items.append(view)\n\t\t\t_labelStack.addArrangedSubview(view)\n\t\t}\n\t\t\n\t\tlet lastLabel = _items.last ?? _nameLabel\n\t\t_bottomMostLabel = lastLabel\n\t\t_openConstraint = lastLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -_padding)\n\t\t_openConstraint?.priority = .defaultLow\n\t\t\n\t\t_updateAppearance()\n\t}\n\t\n\t/// Updates the views to reflect changes in selection\n\tprivate func _updateAppearance() {\n\t\t_closedConstraint?.isActive = !isSelected\n\t\t_openConstraint?.isActive = isSelected\n\t\t\n\t\tUIView.animate(withDuration: 0.3) {\n\t\t\tlet upsideDown = CGAffineTransform(rotationAngle: .pi * 0.999)\n\t\t\tself._disclosureIndicator.transform = self.isSelected ? upsideDown : .identity\n\t\t}\n\t}\n}\n\n// MARK: - Item Updates\nextension LRStageGroupCell {\n    /// Updates a specific item view's status without rebuilding the entire cell\n    /// - Parameters:\n    ///   - id: The UUID of the item to update\n    ///   - newStatus: The new status to apply\n    func updateItemStatus(withId id: UUID, to newStatus: StepStatus) {\n        // 1. Update the data model\n        guard var step = step else { return }\n\t\t\n\t\t#if os(iOS)\n\t\tlet generator = UIImpactFeedbackGenerator(style: .soft)\n\t\tgenerator.prepare()\n\t\t#endif\n        \n        // Find the item and update it\n        for i in 0..<step.items.count {\n            if step.items[i].id == id {\n\t\t\t\tstep.items[i].status = newStatus\n                \n                // 2. If the corresponding view exists, update it\n                if i < _items.count {\n                    UIView.transition(with: _items[i], duration: 0.2, options: .transitionCrossDissolve, animations: {\n                        self._items[i].status = newStatus\n\t\t\t\t\t}, completion: { _ in\n\t\t\t\t\t\t#if os(iOS)\n\t\t\t\t\t\tif newStatus == .completed {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tgenerator.impactOccurred()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t})\n\t\t\t\t\t\n                }\n                break\n            }\n        }\n    }\n    \n    /// Updates a specific item view's status by name without rebuilding the entire cell\n    /// - Parameters:\n    ///   - name: The name of the item to update\n    ///   - newStatus: The new status to apply\n    func updateItemStatus(withName name: String, to newStatus: StepStatus) {\n        // 1. Update the data model\n        guard var step = step else { return }\n\t\t#if os(iOS)\n\t\tlet generator = UIImpactFeedbackGenerator(style: .soft)\n\t\tgenerator.prepare()\n\t\t#endif\n        \n        // Find the item by name and update it\n        for i in 0..<step.items.count {\n            if step.items[i].name == name {\n\t\t\t\tstep.items[i].status = newStatus\n                \n                // 2. If the corresponding view exists, update it\n                if i < _items.count {\n                    UIView.transition(with: _items[i], duration: 0.2, options: .transitionCrossDissolve, animations: {\n                        self._items[i].status = newStatus\n\t\t\t\t\t}, completion: { _ in\n\t\t\t\t\t\t#if os(iOS)\n\t\t\t\t\t\tif newStatus == .completed {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tgenerator.impactOccurred()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t})\n                }\n                break\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleViewControllers/StagedViewController/LRStageGroupItemView.swift",
    "content": "//\n//  LRStageGroupltemView.swift\n//  Loader\n//\n//  Created by samara on 18.03.2025.\n//\n\nimport UIKit\n\nclass LRStageGroupItemView: UIView {\n    var status: StepStatus {\n        didSet {\n            updateIndicatorImage()\n        }\n    }\n\t\n\tprivate let _timerManager = TimerManager()\n    \n    private let _name: String\n    private let _padding: CGFloat\n\t#if os(iOS)\n\tprivate let _indicatorSize: CGFloat = 20\n\t#else\n\tprivate let _indicatorSize: CGFloat = 50\n\t#endif\n    \n    private let _indicator = UIView()\n\tprivate let _animatedIndicator = LRStagedLoadingIndicator()\n    \n    private lazy var _separator: UIView = {\n        let separator = UIView()\n\t\t#if os(iOS)\n        separator.backgroundColor = .systemGray4\n\t\t#else\n\t\tseparator.backgroundColor = .separator\n\t\t#endif\n        return separator\n    }()\n        \n    private let _statusImageView: UIImageView = {\n        let imageView = UIImageView()\n        imageView.contentMode = .scaleAspectFit\n        return imageView\n    }()\n    \n    private let _label: UILabel = {\n        let nameLabel = UILabel()\n        nameLabel.font = .preferredFont(forTextStyle: .headline)\n        nameLabel.adjustsFontForContentSizeCategory = true\n        return nameLabel\n    }()\n\t\n\tprivate let _timeLabel: UILabel = {\n\t\tlet nameLabel = UILabel()\n\t\tnameLabel.font = .preferredFont(forTextStyle: .subheadline)\n\t\tnameLabel.textColor = .secondaryLabel\n\t\tnameLabel.adjustsFontForContentSizeCategory = true\n\t\treturn nameLabel\n\t}()\n    \n    init(_ name: String, padding: CGFloat, status: StepStatus) {\n        self._name = name\n        self._padding = padding\n        self.status = status\n        super.init(frame: .zero)\n        \n        _setup()\n        updateIndicatorImage()\n    }\n\n\trequired init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    private func _setup() {\n        addSubview(_separator)\n        _separator.translatesAutoresizingMaskIntoConstraints = false\n        \n        addSubview(_indicator)\n        _indicator.translatesAutoresizingMaskIntoConstraints = false\n        \n        _indicator.addSubview(_statusImageView)\n        _statusImageView.translatesAutoresizingMaskIntoConstraints = false\n\t\t\n\t\t_indicator.addSubview(_animatedIndicator)\n\t\t_animatedIndicator.translatesAutoresizingMaskIntoConstraints = false\n\t\t_animatedIndicator.layer.opacity = 0\n        \n        addSubview(_label)\n        _label.translatesAutoresizingMaskIntoConstraints = false\n        _label.text = _name\n\t\t\n\t\taddSubview(_timeLabel)\n\t\t_timeLabel.translatesAutoresizingMaskIntoConstraints = false\n        \n        NSLayoutConstraint.activate([\n            _separator.topAnchor.constraint(equalTo: self.topAnchor),\n            _separator.leadingAnchor.constraint(equalTo: self.leadingAnchor),\n            _separator.trailingAnchor.constraint(equalTo: self.trailingAnchor),\n            _separator.heightAnchor.constraint(equalToConstant: 1),\n            \n            _indicator.heightAnchor.constraint(equalToConstant: _indicatorSize),\n            _indicator.widthAnchor.constraint(equalToConstant: _indicatorSize),\n            \n            _indicator.leadingAnchor.constraint(equalTo: self.leadingAnchor),\n            _indicator.topAnchor.constraint(equalTo: self.topAnchor, constant: _padding),\n            _indicator.bottomAnchor.constraint(equalTo: self.bottomAnchor),\n            \n            _statusImageView.topAnchor.constraint(equalTo: _indicator.topAnchor),\n            _statusImageView.leadingAnchor.constraint(equalTo: _indicator.leadingAnchor),\n            _statusImageView.trailingAnchor.constraint(equalTo: _indicator.trailingAnchor),\n            _statusImageView.bottomAnchor.constraint(equalTo: _indicator.bottomAnchor),\n\t\t\t\n\t\t\t_animatedIndicator.topAnchor.constraint(equalTo: _indicator.topAnchor, constant: 2),\n\t\t\t_animatedIndicator.leadingAnchor.constraint(equalTo: _indicator.leadingAnchor, constant: 2),\n\t\t\t_animatedIndicator.trailingAnchor.constraint(equalTo: _indicator.trailingAnchor, constant: -2),\n\t\t\t_animatedIndicator.bottomAnchor.constraint(equalTo: _indicator.bottomAnchor, constant: -2),\n            \n            _label.leadingAnchor.constraint(equalTo: _indicator.trailingAnchor, constant: _padding),\n            _label.centerYAnchor.constraint(equalTo: _indicator.centerYAnchor),\n\t\t\t\n\t\t\t_timeLabel.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -_padding),\n\t\t\t_timeLabel.centerYAnchor.constraint(equalTo: _label.centerYAnchor)\n        ])\n    }\n    \n    private func updateIndicatorImage() {\n        let isInitialSetup = _statusImageView.image == nil\n        \n        switch status {\n        case .inProgress:\n            _handleInProgressState()\n        case .completed, .failed, .pending:\n            _handleStandardState()\n        }\n        \n        if !isInitialSetup {\n            _animateStatusChange()\n        }\n    }\n\n    private func _handleInProgressState() {\n\t\t _timerManager.startTimer(timeInterval: 2.0)\n\t\t\n        UIView.animate(withDuration: 0.2) {\n            self._statusImageView.alpha = 0\n            self._animatedIndicator.alpha = 1\n        }\n    }\n\n    private func _handleStandardState() {\n        _statusImageView.image = UIImage(systemName: status.systemImageName)\n        _statusImageView.tintColor = status.tintColor\n\t\t\n\t\tif let elapsed = _timerManager.invalidateTimerWithReturningSeconds() {\n\t\t\t_timeLabel.text = elapsed\n\t\t}\n        \n        UIView.animate(withDuration: 0.4,\n                      delay: 0,\n                      usingSpringWithDamping: 0.7,\n                      initialSpringVelocity: 0.5,\n                      options: [.curveEaseInOut],\n                      animations: {\n            self._statusImageView.alpha = 1\n            self._animatedIndicator.alpha = 0\n        })\n    }\n\n    private func _animateStatusChange() {\n        if status != .inProgress {\n            let duration = 0.5\n            \n            UIView.animate(withDuration: duration * 0.6,\n                         delay: 0,\n                         usingSpringWithDamping: 0.6,\n                         initialSpringVelocity: 0.8,\n                         options: [.curveEaseOut],\n                         animations: {\n                self._statusImageView.transform = CGAffineTransform(scaleX: 1.4, y: 1.4)\n            }, completion: { _ in\n                UIView.animate(withDuration: duration * 0.7,\n                             delay: 0,\n                             usingSpringWithDamping: 0.7, \n                             initialSpringVelocity: 0.2,\n                             options: [.curveEaseOut],\n                             animations: {\n                    self._statusImageView.transform = .identity\n                })\n            })\n            \n            let rotationAnimation = CAKeyframeAnimation(keyPath: \"transform.rotation.z\")\n            rotationAnimation.values = [-0.05, 0.05, -0.025, 0.025, 0]\n            rotationAnimation.duration = duration\n            rotationAnimation.isAdditive = true\n            _statusImageView.layer.add(rotationAnimation, forKey: \"subtleRotation\")\n        }\n    }\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleViewControllers/StagedViewController/LRStagedLoadingIndicator.swift",
    "content": "//\n//  LoadingIndicator.swift\n//  Loader\n//\n//  Created by samara on 16.03.2025.\n//\n\nimport UIKit\n\nclass LRStagedLoadingIndicator: UIView {\n    init() {\n        super.init(frame: .zero)\n\t\t_setup()\n    }\n\t\n\tprivate func _setup() {\n\t\tlet image = UIImage(named: \"Loading\")\n\t\t\n\t\tlet imageView = UIImageView(image: image)\n\t\timageView.translatesAutoresizingMaskIntoConstraints = false\n\t\t\n\t\tself.addSubview(imageView)\n\t\t\n\t\tNSLayoutConstraint.activate([\n\t\t\timageView.leadingAnchor.constraint(equalTo: self.leadingAnchor),\n\t\t\timageView.trailingAnchor.constraint(equalTo: self.trailingAnchor),\n\t\t\timageView.topAnchor.constraint(equalTo: self.topAnchor),\n\t\t\timageView.bottomAnchor.constraint(equalTo: self.bottomAnchor)\n\t\t])\n\t\t\n\t\tlet animation: CABasicAnimation = CABasicAnimation.init(keyPath: \"transform.rotation.z\")\n\t\tanimation.fromValue = 0.0\n\t\tanimation.toValue = 2 * Double.pi\n\t\tanimation.duration = 1.0\n\t\tanimation.repeatCount = .infinity\n\t\t\n\t\timageView.layer.add(animation, forKey: \"rotationAnimation\")\n\t}\n    \n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleViewControllers/StagedViewController/Models/StepGroup.swift",
    "content": "//\n//  Step.swift\n//  Loader\n//\n//  Created by samara on 18.03.2025.\n//\n\nimport Foundation\nimport UIKit\n\npublic struct StepGroup: Hashable, Identifiable {\n\tpublic let id: UUID\n\tpublic let name: String\n\tpublic var items: [StepGroupItem]\n\t\n\tpublic init(id: UUID = UUID(), name: String, items: [StepGroupItem]) {\n\t\tself.id = id\n\t\tself.name = name\n\t\tself.items = items\n\t}\n\t\n\tpublic func item(named name: String) -> StepGroupItem? {\n\t\treturn items.first { $0.name == name }\n\t}\n}\n\npublic struct StepGroupItem: Hashable, Identifiable {\n\tpublic let id: UUID\n\tpublic let name: String\n\tpublic var status: StepStatus\n\t\n\tpublic init(id: UUID = UUID(), name: String, status: StepStatus = .pending) {\n\t\tself.id = id\n\t\tself.name = name\n\t\tself.status = status\n\t}\n}\n\npublic enum StepStatus: String, CaseIterable {\n\tcase pending\n\tcase inProgress\n\tcase completed\n\tcase failed\n\t\n\tvar systemImageName: String {\n\t\tswitch self {\n\t\tcase .pending:\t\t\"circle.dotted\"\n\t\tcase .inProgress:\t\"circle.dashed\"\n\t\tcase .completed:\t\"checkmark.circle.fill\"\n\t\tcase .failed: \t\t\"xmark.circle.fill\"\n\t\t}\n\t}\n\t\n\tvar tintColor: UIColor {\n\t\tswitch self {\n\t\tcase .pending:\t\t.systemGray.withAlphaComponent(0.4)\n\t\tcase .inProgress:\t.systemBlue\n\t\tcase .completed:\t.systemGreen\n\t\tcase .failed: \t\t.systemRed\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "NimbleKit/Sources/NimbleViewControllers/StagedViewController/Timer/TimerManager.swift",
    "content": "//\n//  TimerManager.swift\n//  Loader\n//\n//  Created by samara on 22.03.2025.\n//\n\nimport Foundation\n\nclass TimerManager {\n\tprivate var timer: Timer?\n\tprivate var startTime: Date?\n\t\n\tfunc startTimer(timeInterval: TimeInterval, repeats: Bool = true) {\n\t\tDispatchQueue.global(qos: .utility).async {\n\t\t\tself.startTime = Date()\n\t\t\t\n\t\t\tself.timer = Timer.scheduledTimer(\n\t\t\t\twithTimeInterval: timeInterval,\n\t\t\t\trepeats: repeats,\n\t\t\t\tblock: { _ in }\n\t\t\t)\n\t\t\t\n\t\t\tif let timer = self.timer {\n\t\t\t\tRunLoop.current.add(timer, forMode: .common)\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunc invalidateTimerWithReturningSeconds() -> String? {\n\t\tguard let timer = timer, startTime != nil else {\n\t\t\treturn nil\n\t\t}\n\t\t\n\t\ttimer.invalidate()\n\t\tself.timer = nil\n\t\t\n\t\tlet elapsed = Date().timeIntervalSince(startTime!)\n\t\tstartTime = nil\n\t\t\n\t\treturn String(format: \"%.1fs\", elapsed)\n\t}\n}\n"
  },
  {
    "path": "README.md",
    "content": "# Loader\n\nLoader application used in palera1n, this has a purpose of bootstrapping your phone after jailbreaking.\n\n## Building\n\n#### Minimum Requirements\n\n- Xcode 15\n- iOS 15\n- palera1n 2.1\n\nIts recommended to use [AppSync Unified](https://github.com/akemin-dayo/AppSync/releases/tag/116.0) along with [palera1n](https://github.com/palera1n/palera1n) for testing and debugging.\n"
  }
]